mirror of
https://github.com/postgres/postgres.git
synced 2025-09-03 15:22:11 +03:00
Add SP-GiST support for range types.
The implementation is a quad-tree, largely copied from the quad-tree implementation for points. The lower and upper bound of ranges are the 2d coordinates, with some extra code to handle empty ranges. I left out the support for adjacent operator, -|-, from the original patch. Not because there was necessarily anything wrong with it, but it was more complicated than the other operators, and I only have limited time for reviewing. That will follow as a separate patch. Alexander Korotkov, reviewed by Jeff Davis and me.
This commit is contained in:
@@ -53,6 +53,6 @@
|
||||
*/
|
||||
|
||||
/* yyyymmddN */
|
||||
#define CATALOG_VERSION_NO 201208071
|
||||
#define CATALOG_VERSION_NO 201208161
|
||||
|
||||
#endif
|
||||
|
@@ -767,4 +767,17 @@ DATA(insert ( 4017 25 25 12 s 665 4000 0 ));
|
||||
DATA(insert ( 4017 25 25 14 s 667 4000 0 ));
|
||||
DATA(insert ( 4017 25 25 15 s 666 4000 0 ));
|
||||
|
||||
/*
|
||||
* SP-GiST range_ops
|
||||
*/
|
||||
DATA(insert ( 3474 3831 3831 1 s 3893 4000 0 ));
|
||||
DATA(insert ( 3474 3831 3831 2 s 3895 4000 0 ));
|
||||
DATA(insert ( 3474 3831 3831 3 s 3888 4000 0 ));
|
||||
DATA(insert ( 3474 3831 3831 4 s 3896 4000 0 ));
|
||||
DATA(insert ( 3474 3831 3831 5 s 3894 4000 0 ));
|
||||
DATA(insert ( 3474 3831 3831 7 s 3890 4000 0 ));
|
||||
DATA(insert ( 3474 3831 3831 8 s 3892 4000 0 ));
|
||||
DATA(insert ( 3474 3831 2283 16 s 3889 4000 0 ));
|
||||
DATA(insert ( 3474 3831 3831 18 s 3882 4000 0 ));
|
||||
|
||||
#endif /* PG_AMOP_H */
|
||||
|
@@ -373,5 +373,10 @@ DATA(insert ( 4017 25 25 2 4028 ));
|
||||
DATA(insert ( 4017 25 25 3 4029 ));
|
||||
DATA(insert ( 4017 25 25 4 4030 ));
|
||||
DATA(insert ( 4017 25 25 5 4031 ));
|
||||
DATA(insert ( 3474 3831 3831 1 3469 ));
|
||||
DATA(insert ( 3474 3831 3831 2 3470 ));
|
||||
DATA(insert ( 3474 3831 3831 3 3471 ));
|
||||
DATA(insert ( 3474 3831 3831 4 3472 ));
|
||||
DATA(insert ( 3474 3831 3831 5 3473 ));
|
||||
|
||||
#endif /* PG_AMPROC_H */
|
||||
|
@@ -223,6 +223,7 @@ DATA(insert ( 783 tsquery_ops PGNSP PGUID 3702 3615 t 20 ));
|
||||
DATA(insert ( 403 range_ops PGNSP PGUID 3901 3831 t 0 ));
|
||||
DATA(insert ( 405 range_ops PGNSP PGUID 3903 3831 t 0 ));
|
||||
DATA(insert ( 783 range_ops PGNSP PGUID 3919 3831 t 0 ));
|
||||
DATA(insert ( 4000 range_ops PGNSP PGUID 3474 3831 t 0 ));
|
||||
DATA(insert ( 4000 quad_point_ops PGNSP PGUID 4015 600 t 0 ));
|
||||
DATA(insert ( 4000 kd_point_ops PGNSP PGUID 4016 600 f 0 ));
|
||||
DATA(insert ( 4000 text_ops PGNSP PGUID 4017 25 t 0 ));
|
||||
|
@@ -142,6 +142,7 @@ DATA(insert OID = 3702 ( 783 tsquery_ops PGNSP PGUID ));
|
||||
DATA(insert OID = 3901 ( 403 range_ops PGNSP PGUID ));
|
||||
DATA(insert OID = 3903 ( 405 range_ops PGNSP PGUID ));
|
||||
DATA(insert OID = 3919 ( 783 range_ops PGNSP PGUID ));
|
||||
DATA(insert OID = 3474 ( 4000 range_ops PGNSP PGUID ));
|
||||
DATA(insert OID = 4015 ( 4000 quad_point_ops PGNSP PGUID ));
|
||||
DATA(insert OID = 4016 ( 4000 kd_point_ops PGNSP PGUID ));
|
||||
DATA(insert OID = 4017 ( 4000 text_ops PGNSP PGUID ));
|
||||
|
@@ -4653,6 +4653,17 @@ DESCR("SP-GiST support for suffix tree over text");
|
||||
DATA(insert OID = 4031 ( spg_text_leaf_consistent PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 16 "2281 2281" _null_ _null_ _null_ _null_ spg_text_leaf_consistent _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for suffix tree over text");
|
||||
|
||||
DATA(insert OID = 3469 ( spg_range_quad_config PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ spg_range_quad_config _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for quad tree over range");
|
||||
DATA(insert OID = 3470 ( spg_range_quad_choose PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ spg_range_quad_choose _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for quad tree over range");
|
||||
DATA(insert OID = 3471 ( spg_range_quad_picksplit PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ spg_range_quad_picksplit _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for quad tree over range");
|
||||
DATA(insert OID = 3472 ( spg_range_quad_inner_consistent PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ spg_range_quad_inner_consistent _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for quad tree over range");
|
||||
DATA(insert OID = 3473 ( spg_range_quad_leaf_consistent PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 16 "2281 2281" _null_ _null_ _null_ _null_ spg_range_quad_leaf_consistent _null_ _null_ _null_ ));
|
||||
DESCR("SP-GiST support for quad tree over range");
|
||||
|
||||
|
||||
/*
|
||||
* Symbolic values for provolatile column: these indicate whether the result
|
||||
|
@@ -75,6 +75,19 @@ typedef struct
|
||||
#define PG_GETARG_RANGE_COPY(n) DatumGetRangeTypeCopy(PG_GETARG_DATUM(n))
|
||||
#define PG_RETURN_RANGE(x) return RangeTypeGetDatum(x)
|
||||
|
||||
/* Operator strategy numbers used in the GiST and SP-GiST range opclasses */
|
||||
/* Numbers are chosen to match up operator names with existing usages */
|
||||
#define RANGESTRAT_BEFORE 1
|
||||
#define RANGESTRAT_OVERLEFT 2
|
||||
#define RANGESTRAT_OVERLAPS 3
|
||||
#define RANGESTRAT_OVERRIGHT 4
|
||||
#define RANGESTRAT_AFTER 5
|
||||
#define RANGESTRAT_ADJACENT 6
|
||||
#define RANGESTRAT_CONTAINS 7
|
||||
#define RANGESTRAT_CONTAINED_BY 8
|
||||
#define RANGESTRAT_CONTAINS_ELEM 16
|
||||
#define RANGESTRAT_EQ 18
|
||||
|
||||
/*
|
||||
* prototypes for functions defined in rangetypes.c
|
||||
*/
|
||||
|
Reference in New Issue
Block a user