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