mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Add geometry/range functions to support BRIN inclusion
This commit adds the following functions: box(point) -> box bound_box(box, box) -> box inet_same_family(inet, inet) -> bool inet_merge(inet, inet) -> cidr range_merge(anyrange, anyrange) -> anyrange The first of these is also used to implement a new assignment cast from point to box. These functions are the first part of a base to implement an "inclusion" operator class for BRIN, for multidimensional data types. Author: Emre Hasegeli Reviewed by: Andreas Karlsson
This commit is contained in:
@ -8295,6 +8295,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
|
||||
<entry>circle to box</entry>
|
||||
<entry><literal>box(circle '((0,0),2.0)')</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal><function>box(<type>point</type>)</function></literal></entry>
|
||||
<entry><type>box</type></entry>
|
||||
<entry>point to empty box</entry>
|
||||
<entry><literal>box(point '(0,0)')</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal><function>box(<type>point</type>, <type>point</type>)</function></literal></entry>
|
||||
<entry><type>box</type></entry>
|
||||
@ -8307,6 +8313,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
|
||||
<entry>polygon to box</entry>
|
||||
<entry><literal>box(polygon '((0,0),(1,1),(2,0))')</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal><function>bound_box(<type>box</type>, <type>box</type>)</function></literal></entry>
|
||||
<entry><type>box</type></entry>
|
||||
<entry>boxes to bounding box</entry>
|
||||
<entry><literal>bound_box(box '((0,0),(1,1))', box '((3,3),(4,4))')</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
<indexterm>
|
||||
@ -8734,6 +8746,30 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
|
||||
<entry><literal>text(inet '192.168.1.5')</literal></entry>
|
||||
<entry><literal>192.168.1.5/32</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
<indexterm>
|
||||
<primary>inet_same_family</primary>
|
||||
</indexterm>
|
||||
<literal><function>inet_same_family(<type>inet</type>, <type>inet</type>)</function></literal>
|
||||
</entry>
|
||||
<entry><type>boolean</type></entry>
|
||||
<entry>are the addresses from the same family?</entry>
|
||||
<entry><literal>inet_same_family('192.168.1.5/24', '::1')</literal></entry>
|
||||
<entry><literal>false</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
<indexterm>
|
||||
<primary>inet_merge</primary>
|
||||
</indexterm>
|
||||
<literal><function>inet_merge(<type>inet</type>, <type>inet</type>)</function></literal>
|
||||
</entry>
|
||||
<entry><type>cidr</type></entry>
|
||||
<entry>the smallest network which includes both of the given networks</entry>
|
||||
<entry><literal>inet_merge('192.168.1.5/24', '192.168.2.5/24')</literal></entry>
|
||||
<entry><literal>192.168.0.0/22</literal></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
@ -12090,6 +12126,17 @@ NULL baz</literallayout>(3 rows)</entry>
|
||||
<entry><literal>upper_inf('(,)'::daterange)</literal></entry>
|
||||
<entry><literal>true</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
<literal>
|
||||
<function>range_merge</function>(<type>anyrange</type>, <type>anyrange</type>)
|
||||
</literal>
|
||||
</entry>
|
||||
<entry><type>anyrange</type></entry>
|
||||
<entry>the smallest range which includes both of the given ranges</entry>
|
||||
<entry><literal>range_merge('[1,2)'::int4range, '[3,4)'::int4range)</literal></entry>
|
||||
<entry><literal>[1,4)</literal></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
Reference in New Issue
Block a user