]> granicus.if.org Git - postgresql/commitdiff
Declare range inclusion operators as taking anyelement not anynonarray.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 17 Nov 2011 23:56:33 +0000 (18:56 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 17 Nov 2011 23:56:33 +0000 (18:56 -0500)
Use of anynonarray was a crude hack to get around ambiguity versus the
array inclusion operators of the same names.  My previous patch to extend
the parser's type resolution heuristics makes that unnecessary, so use
the more general declaration instead.  This eliminates a wart that these
operators couldn't be used with ranges over arrays, which are otherwise
supported just fine.

Also, mark range_before and range_after as commutator operators,
per discussion with Jeff Davis.

src/include/catalog/catversion.h
src/include/catalog/pg_amop.h
src/include/catalog/pg_operator.h
src/include/catalog/pg_proc.h
src/test/regress/expected/rangetypes.out
src/test/regress/sql/rangetypes.sql

index 8739fabe3bf9c8a2d54d3ad6405cfcaed1eec93e..6ed527b23e666390e454edeb2c40e229d9bff8f5 100644 (file)
@@ -53,6 +53,6 @@
  */
 
 /*                                                     yyyymmddN */
-#define CATALOG_VERSION_NO     201111161
+#define CATALOG_VERSION_NO     201111171
 
 #endif
index ede0c2ddf64d14783d04cd81a501661bc647955c..108ed89c20a3a81ee91efc994aa3194479d448ae 100644 (file)
@@ -729,8 +729,8 @@ DATA(insert (       3903   3831 3831 1 s    3882 405 0 ));
 DATA(insert (  3919   3831 3831 1 s    3882 783 0 ));
 DATA(insert (  3919   3831 3831 2 s    3883 783 0 ));
 DATA(insert (  3919   3831 3831 3 s    3888 783 0 ));
-DATA(insert (  3919   3831 2776 4 s    3889 783 0 ));
-DATA(insert (  3919   2776 3831 5 s    3891 783 0 ));
+DATA(insert (  3919   3831 2283 4 s    3889 783 0 ));
+DATA(insert (  3919   2283 3831 5 s    3891 783 0 ));
 DATA(insert (  3919   3831 3831 6 s    3890 783 0 ));
 DATA(insert (  3919   3831 3831 7 s    3892 783 0 ));
 DATA(insert (  3919   3831 3831 8 s    3893 783 0 ));
index 050239725e5c5830f737425baee34cfff6e6eedf..2d1a2800a488a51737977089316eddaf21eda499 100644 (file)
@@ -1676,17 +1676,17 @@ DATA(insert OID = 3887 (  ">"      PGNSP PGUID b f f 3831 3831 16 3884 3885 range_
 DESCR("greater than");
 DATA(insert OID = 3888 (  "&&"    PGNSP PGUID b f f 3831 3831 16 3888 0 range_overlaps - - ));
 DESCR("overlaps");
-DATA(insert OID = 3889 (  "@>"    PGNSP PGUID b f f 3831 2776 16 3891 0 range_contains_elem - - ));
+DATA(insert OID = 3889 (  "@>"    PGNSP PGUID b f f 3831 2283 16 3891 0 range_contains_elem - - ));
 DESCR("contains");
 DATA(insert OID = 3890 (  "@>"    PGNSP PGUID b f f 3831 3831 16 3892 0 range_contains - - ));
 DESCR("contains");
-DATA(insert OID = 3891 (  "<@"    PGNSP PGUID b f f 2776 3831 16 3889 0 elem_contained_by_range - - ));
+DATA(insert OID = 3891 (  "<@"    PGNSP PGUID b f f 2283 3831 16 3889 0 elem_contained_by_range - - ));
 DESCR("is contained by");
 DATA(insert OID = 3892 (  "<@"    PGNSP PGUID b f f 3831 3831 16 3890 0 range_contained_by - - ));
 DESCR("is contained by");
-DATA(insert OID = 3893 (  "<<"    PGNSP PGUID b f f 3831 3831 16 0 0 range_before scalarltsel scalarltjoinsel ));
+DATA(insert OID = 3893 (  "<<"    PGNSP PGUID b f f 3831 3831 16 3894 0 range_before scalarltsel scalarltjoinsel ));
 DESCR("is left of");
-DATA(insert OID = 3894 (  ">>"    PGNSP PGUID b f f 3831 3831 16 0 0 range_after scalargtsel scalargtjoinsel ));
+DATA(insert OID = 3894 (  ">>"    PGNSP PGUID b f f 3831 3831 16 3893 0 range_after scalargtsel scalargtjoinsel ));
 DESCR("is right of");
 DATA(insert OID = 3895 (  "&<"    PGNSP PGUID b f f 3831 3831 16 0 0 range_overleft scalarltsel scalarltjoinsel ));
 DESCR("overlaps or is left of");
index eb5df3c2317953f1b938496edbf2f88af73501af..137cb8c787604f6fd70eb3d77a997b81a0e527d9 100644 (file)
@@ -4367,11 +4367,11 @@ DATA(insert OID = 3856 (  range_ne      PGNSP PGUID 12 1 0 0 0 f f f t f i 2 0 16 "38
 DESCR("implementation of <> operator");
 DATA(insert OID = 3857 (  range_overlaps               PGNSP PGUID 12 1 0 0 0 f f f t f i 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ range_overlaps _null_ _null_ _null_ ));
 DESCR("implementation of && operator");
-DATA(insert OID = 3858 (  range_contains_elem  PGNSP PGUID 12 1 0 0 0 f f f t f i 2 0 16 "3831 2776" _null_ _null_ _null_ _null_ range_contains_elem _null_ _null_ _null_ ));
+DATA(insert OID = 3858 (  range_contains_elem  PGNSP PGUID 12 1 0 0 0 f f f t f i 2 0 16 "3831 2283" _null_ _null_ _null_ _null_ range_contains_elem _null_ _null_ _null_ ));
 DESCR("implementation of @> operator");
 DATA(insert OID = 3859 (  range_contains               PGNSP PGUID 12 1 0 0 0 f f f t f i 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ range_contains _null_ _null_ _null_ ));
 DESCR("implementation of @> operator");
-DATA(insert OID = 3860 (  elem_contained_by_range      PGNSP PGUID 12 1 0 0 0 f f f t f i 2 0 16 "2776 3831" _null_ _null_ _null_ _null_ elem_contained_by_range _null_ _null_ _null_ ));
+DATA(insert OID = 3860 (  elem_contained_by_range      PGNSP PGUID 12 1 0 0 0 f f f t f i 2 0 16 "2283 3831" _null_ _null_ _null_ _null_ elem_contained_by_range _null_ _null_ _null_ ));
 DESCR("implementation of <@ operator");
 DATA(insert OID = 3861 (  range_contained_by   PGNSP PGUID 12 1 0 0 0 f f f t f i 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ range_contained_by _null_ _null_ _null_ ));
 DESCR("implementation of <@ operator");
index ff3d3141aef1ca5d86bc13a4d0a175d7d481308c..dec748406f9bcb2279adbc55248ac901977401c7 100644 (file)
@@ -964,6 +964,18 @@ select arrayrange(ARRAY[1,2], ARRAY[2,1]);
  ["{1,2}","{2,1}")
 (1 row)
 
+select array[1,1] <@ arrayrange(array[1,2], array[2,1]);
+ ?column? 
+----------
+ f
+(1 row)
+
+select array[1,3] <@ arrayrange(array[1,2], array[2,1]);
+ ?column? 
+----------
+ t
+(1 row)
+
 --
 -- OUT/INOUT/TABLE functions
 --
index dc5dea5241d52e4e3b6eebb01926333692dd85cf..bdd40cf5a9dc78cb53a2c04a7729c8243eadcd43 100644 (file)
@@ -346,6 +346,9 @@ create type arrayrange as range (subtype=int4[]);
 
 select arrayrange(ARRAY[1,2], ARRAY[2,1]);
 
+select array[1,1] <@ arrayrange(array[1,2], array[2,1]);
+select array[1,3] <@ arrayrange(array[1,2], array[2,1]);
+
 --
 -- OUT/INOUT/TABLE functions
 --