summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/rangetypes.out26
-rw-r--r--src/test/regress/expected/type_sanity.out50
-rw-r--r--src/test/regress/sql/rangetypes.sql12
-rw-r--r--src/test/regress/sql/type_sanity.sql41
4 files changed, 108 insertions, 21 deletions
diff --git a/src/test/regress/expected/rangetypes.out b/src/test/regress/expected/rangetypes.out
index b2258b9045..ba18272ff0 100644
--- a/src/test/regress/expected/rangetypes.out
+++ b/src/test/regress/expected/rangetypes.out
@@ -175,7 +175,7 @@ SELECT lower_inc(nr), lower(nr), upper(nr), upper_inc(nr) FROM numrange_test
t | 1.7 | 1.7 | t
(2 rows)
-SELECT * FROM numrange_test WHERE contains(nr, numrange(1.9,1.91));
+SELECT * FROM numrange_test WHERE range_contains(nr, numrange(1.9,1.91));
nr
-----------
(,)
@@ -189,7 +189,7 @@ SELECT * FROM numrange_test WHERE nr @> numrange(1.0,10000.1);
(,)
(1 row)
-SELECT * FROM numrange_test WHERE contained_by(numrange(-1e7,-10000.1), nr);
+SELECT * FROM numrange_test WHERE range_contained_by(numrange(-1e7,-10000.1), nr);
nr
------
(,)
@@ -229,9 +229,9 @@ select numrange(2.0, 3.0) -|- numrange(3.0, 4.0);
t
(1 row)
-select adjacent(numrange(2.0, 3.0), numrange(3.1, 4.0));
- adjacent
-----------
+select range_adjacent(numrange(2.0, 3.0), numrange(3.1, 4.0));
+ range_adjacent
+----------------
f
(1 row)
@@ -247,9 +247,9 @@ select numrange(1.0, 2.0) -|- numrange(2.0, 3.0,'[]');
t
(1 row)
-select adjacent(numrange(2.0, 3.0, '(]'), numrange(1.0, 2.0, '(]'));
- adjacent
-----------
+select range_adjacent(numrange(2.0, 3.0, '(]'), numrange(1.0, 2.0, '(]'));
+ range_adjacent
+----------------
t
(1 row)
@@ -283,15 +283,15 @@ select numrange(1.1, 2.2,'[]') - numrange(2.0, 3.0);
[1.1,2.0)
(1 row)
-select minus(numrange(10.1,12.2,'[]'), numrange(110.0,120.2,'(]'));
- minus
+select range_minus(numrange(10.1,12.2,'[]'), numrange(110.0,120.2,'(]'));
+ range_minus
-------------
[10.1,12.2]
(1 row)
-select minus(numrange(10.1,12.2,'[]'), numrange(0.0,120.2,'(]'));
- minus
--------
+select range_minus(numrange(10.1,12.2,'[]'), numrange(0.0,120.2,'(]'));
+ range_minus
+-------------
empty
(1 row)
diff --git a/src/test/regress/expected/type_sanity.out b/src/test/regress/expected/type_sanity.out
index a159ac718a..19d437ade5 100644
--- a/src/test/regress/expected/type_sanity.out
+++ b/src/test/regress/expected/type_sanity.out
@@ -1,7 +1,7 @@
--
-- TYPE_SANITY
-- Sanity checks for common errors in making type-related system tables:
--- pg_type, pg_class, pg_attribute.
+-- pg_type, pg_class, pg_attribute, pg_range.
--
-- None of the SELECTs here should ever find any matching entries,
-- so the expected output is easy to maintain ;-).
@@ -367,3 +367,51 @@ WHERE p1.atttypid = p2.oid AND
----------+---------+-----+---------
(0 rows)
+-- **************** pg_range ****************
+-- Look for illegal values in pg_range fields.
+SELECT p1.rngtypid, p1.rngsubtype
+FROM pg_range as p1
+WHERE p1.rngtypid = 0 OR p1.rngsubtype = 0 OR p1.rngsubopc = 0;
+ rngtypid | rngsubtype
+----------+------------
+(0 rows)
+
+-- rngcollation should be specified iff subtype is collatable
+SELECT p1.rngtypid, p1.rngsubtype, p1.rngcollation, t.typcollation
+FROM pg_range p1 JOIN pg_type t ON t.oid = p1.rngsubtype
+WHERE (rngcollation = 0) != (typcollation = 0);
+ rngtypid | rngsubtype | rngcollation | typcollation
+----------+------------+--------------+--------------
+(0 rows)
+
+-- opclass had better be a btree opclass accepting the subtype.
+-- We must allow anyarray matches, cf opr_sanity's binary_coercible()
+SELECT p1.rngtypid, p1.rngsubtype, o.opcmethod, o.opcname
+FROM pg_range p1 JOIN pg_opclass o ON o.oid = p1.rngsubopc
+WHERE o.opcmethod != 403 OR
+ ((o.opcintype != p1.rngsubtype) AND NOT
+ (o.opcintype = 'pg_catalog.anyarray'::regtype AND
+ EXISTS(select 1 from pg_catalog.pg_type where
+ oid = p1.rngsubtype and typelem != 0 and typlen = -1)));
+ rngtypid | rngsubtype | opcmethod | opcname
+----------+------------+-----------+---------
+(0 rows)
+
+-- canonical function, if any, had better match the range type
+SELECT p1.rngtypid, p1.rngsubtype, p.proname
+FROM pg_range p1 JOIN pg_proc p ON p.oid = p1.rngcanonical
+WHERE pronargs != 1 OR proargtypes[0] != rngtypid OR prorettype != rngtypid;
+ rngtypid | rngsubtype | proname
+----------+------------+---------
+(0 rows)
+
+-- subdiff function, if any, had better match the subtype
+SELECT p1.rngtypid, p1.rngsubtype, p.proname
+FROM pg_range p1 JOIN pg_proc p ON p.oid = p1.rngsubdiff
+WHERE pronargs != 2
+ OR proargtypes[0] != rngsubtype OR proargtypes[1] != rngsubtype
+ OR prorettype != 'pg_catalog.float8'::regtype;
+ rngtypid | rngsubtype | proname
+----------+------------+---------
+(0 rows)
+
diff --git a/src/test/regress/sql/rangetypes.sql b/src/test/regress/sql/rangetypes.sql
index 4b455f1d35..4e122a36cc 100644
--- a/src/test/regress/sql/rangetypes.sql
+++ b/src/test/regress/sql/rangetypes.sql
@@ -54,9 +54,9 @@ SELECT isempty(nr) FROM numrange_test;
SELECT lower_inc(nr), lower(nr), upper(nr), upper_inc(nr) FROM numrange_test
WHERE NOT isempty(nr) AND NOT lower_inf(nr) AND NOT upper_inf(nr);
-SELECT * FROM numrange_test WHERE contains(nr, numrange(1.9,1.91));
+SELECT * FROM numrange_test WHERE range_contains(nr, numrange(1.9,1.91));
SELECT * FROM numrange_test WHERE nr @> numrange(1.0,10000.1);
-SELECT * FROM numrange_test WHERE contained_by(numrange(-1e7,-10000.1), nr);
+SELECT * FROM numrange_test WHERE range_contained_by(numrange(-1e7,-10000.1), nr);
SELECT * FROM numrange_test WHERE 1.9 <@ nr;
SELECT * FROM numrange_test WHERE nr = 'empty';
SELECT * FROM numrange_test WHERE range_eq(nr, '(1.1, 2.2)');
@@ -65,10 +65,10 @@ SELECT * FROM numrange_test WHERE nr = '[1.1, 2.2)';
select numrange(2.0, 1.0);
select numrange(2.0, 3.0) -|- numrange(3.0, 4.0);
-select adjacent(numrange(2.0, 3.0), numrange(3.1, 4.0));
+select range_adjacent(numrange(2.0, 3.0), numrange(3.1, 4.0));
select numrange(2.0, 3.0, '[]') -|- numrange(3.0, 4.0, '()');
select numrange(1.0, 2.0) -|- numrange(2.0, 3.0,'[]');
-select adjacent(numrange(2.0, 3.0, '(]'), numrange(1.0, 2.0, '(]'));
+select range_adjacent(numrange(2.0, 3.0, '(]'), numrange(1.0, 2.0, '(]'));
select numrange(1.1, 3.3) <@ numrange(0.1,10.1);
select numrange(0.1, 10.1) <@ numrange(1.1,3.3);
@@ -76,8 +76,8 @@ select numrange(0.1, 10.1) <@ numrange(1.1,3.3);
select numrange(1.1, 2.2) - numrange(2.0, 3.0);
select numrange(1.1, 2.2) - numrange(2.2, 3.0);
select numrange(1.1, 2.2,'[]') - numrange(2.0, 3.0);
-select minus(numrange(10.1,12.2,'[]'), numrange(110.0,120.2,'(]'));
-select minus(numrange(10.1,12.2,'[]'), numrange(0.0,120.2,'(]'));
+select range_minus(numrange(10.1,12.2,'[]'), numrange(110.0,120.2,'(]'));
+select range_minus(numrange(10.1,12.2,'[]'), numrange(0.0,120.2,'(]'));
select numrange(4.5, 5.5, '[]') && numrange(5.5, 6.5);
select numrange(1.0, 2.0) << numrange(3.0, 4.0);
diff --git a/src/test/regress/sql/type_sanity.sql b/src/test/regress/sql/type_sanity.sql
index 2ed03f39bc..d7d9cea5dc 100644
--- a/src/test/regress/sql/type_sanity.sql
+++ b/src/test/regress/sql/type_sanity.sql
@@ -1,7 +1,7 @@
--
-- TYPE_SANITY
-- Sanity checks for common errors in making type-related system tables:
--- pg_type, pg_class, pg_attribute.
+-- pg_type, pg_class, pg_attribute, pg_range.
--
-- None of the SELECTs here should ever find any matching entries,
-- so the expected output is easy to maintain ;-).
@@ -285,3 +285,42 @@ WHERE p1.atttypid = p2.oid AND
p1.attalign != p2.typalign OR
p1.attbyval != p2.typbyval OR
(p1.attstorage != p2.typstorage AND p1.attstorage != 'p'));
+
+-- **************** pg_range ****************
+
+-- Look for illegal values in pg_range fields.
+
+SELECT p1.rngtypid, p1.rngsubtype
+FROM pg_range as p1
+WHERE p1.rngtypid = 0 OR p1.rngsubtype = 0 OR p1.rngsubopc = 0;
+
+-- rngcollation should be specified iff subtype is collatable
+
+SELECT p1.rngtypid, p1.rngsubtype, p1.rngcollation, t.typcollation
+FROM pg_range p1 JOIN pg_type t ON t.oid = p1.rngsubtype
+WHERE (rngcollation = 0) != (typcollation = 0);
+
+-- opclass had better be a btree opclass accepting the subtype.
+-- We must allow anyarray matches, cf opr_sanity's binary_coercible()
+
+SELECT p1.rngtypid, p1.rngsubtype, o.opcmethod, o.opcname
+FROM pg_range p1 JOIN pg_opclass o ON o.oid = p1.rngsubopc
+WHERE o.opcmethod != 403 OR
+ ((o.opcintype != p1.rngsubtype) AND NOT
+ (o.opcintype = 'pg_catalog.anyarray'::regtype AND
+ EXISTS(select 1 from pg_catalog.pg_type where
+ oid = p1.rngsubtype and typelem != 0 and typlen = -1)));
+
+-- canonical function, if any, had better match the range type
+
+SELECT p1.rngtypid, p1.rngsubtype, p.proname
+FROM pg_range p1 JOIN pg_proc p ON p.oid = p1.rngcanonical
+WHERE pronargs != 1 OR proargtypes[0] != rngtypid OR prorettype != rngtypid;
+
+-- subdiff function, if any, had better match the subtype
+
+SELECT p1.rngtypid, p1.rngsubtype, p.proname
+FROM pg_range p1 JOIN pg_proc p ON p.oid = p1.rngsubdiff
+WHERE pronargs != 2
+ OR proargtypes[0] != rngsubtype OR proargtypes[1] != rngsubtype
+ OR prorettype != 'pg_catalog.float8'::regtype;