From 709aca59608395eef9ceb7dcb79fd9d03a0709ef Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu, 17 Nov 2011 18:56:33 -0500
Subject: [PATCH] Declare range inclusion operators as taking anyelement not
 anynonarray.

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         |  2 +-
 src/include/catalog/pg_amop.h            |  4 ++--
 src/include/catalog/pg_operator.h        |  8 ++++----
 src/include/catalog/pg_proc.h            |  4 ++--
 src/test/regress/expected/rangetypes.out | 12 ++++++++++++
 src/test/regress/sql/rangetypes.sql      |  3 +++
 6 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 8739fabe3bf..6ed527b23e6 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -53,6 +53,6 @@
  */
 
 /*							yyyymmddN */
-#define CATALOG_VERSION_NO	201111161
+#define CATALOG_VERSION_NO	201111171
 
 #endif
diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h
index ede0c2ddf64..108ed89c20a 100644
--- a/src/include/catalog/pg_amop.h
+++ b/src/include/catalog/pg_amop.h
@@ -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 ));
diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h
index 050239725e5..2d1a2800a48 100644
--- a/src/include/catalog/pg_operator.h
+++ b/src/include/catalog/pg_operator.h
@@ -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");
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index eb5df3c2317..137cb8c7876 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -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");
diff --git a/src/test/regress/expected/rangetypes.out b/src/test/regress/expected/rangetypes.out
index ff3d3141aef..dec748406f9 100644
--- a/src/test/regress/expected/rangetypes.out
+++ b/src/test/regress/expected/rangetypes.out
@@ -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
 --
diff --git a/src/test/regress/sql/rangetypes.sql b/src/test/regress/sql/rangetypes.sql
index dc5dea5241d..bdd40cf5a9d 100644
--- a/src/test/regress/sql/rangetypes.sql
+++ b/src/test/regress/sql/rangetypes.sql
@@ -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
 --
-- 
GitLab