aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/test/regress/expected/type_sanity.out49
-rw-r--r--src/test/regress/sql/type_sanity.sql32
2 files changed, 81 insertions, 0 deletions
diff --git a/src/test/regress/expected/type_sanity.out b/src/test/regress/expected/type_sanity.out
index 3616c8dbd09..e2a7a418a8a 100644
--- a/src/test/regress/expected/type_sanity.out
+++ b/src/test/regress/expected/type_sanity.out
@@ -155,6 +155,14 @@ ORDER BY 1;
30 | oidvector | 54 | oidvectorin
(2 rows)
+-- typinput routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typinput = p2.oid AND p2.provolatile NOT IN ('i', 's');
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
-- Composites, domains, enums, ranges should all use the same input routines
SELECT DISTINCT typtype, typinput
FROM pg_type AS p1
@@ -192,6 +200,14 @@ WHERE p1.typoutput = p2.oid AND NOT
-----+---------+-----+---------
(0 rows)
+-- typoutput routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typoutput = p2.oid AND p2.provolatile NOT IN ('i', 's');
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
-- Composites, enums, ranges should all use the same output routines
SELECT DISTINCT typtype, typoutput
FROM pg_type AS p1
@@ -262,6 +278,14 @@ WHERE p1.typinput = p2.oid AND p1.typreceive = p3.oid AND
-----+---------+-----+---------+-----+---------
(0 rows)
+-- typreceive routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typreceive = p2.oid AND p2.provolatile NOT IN ('i', 's');
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
-- Composites, domains, enums, ranges should all use the same receive routines
SELECT DISTINCT typtype, typreceive
FROM pg_type AS p1
@@ -299,6 +323,14 @@ WHERE p1.typsend = p2.oid AND NOT
-----+---------+-----+---------
(0 rows)
+-- typsend routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typsend = p2.oid AND p2.provolatile NOT IN ('i', 's');
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
-- Composites, enums, ranges should all use the same send routines
SELECT DISTINCT typtype, typsend
FROM pg_type AS p1
@@ -330,6 +362,14 @@ WHERE p1.typmodin = p2.oid AND NOT
-----+---------+-----+---------
(0 rows)
+-- typmodin routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typmodin = p2.oid AND p2.provolatile NOT IN ('i', 's');
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
-- Check for bogus typmodout routines
SELECT p1.oid, p1.typname, p2.oid, p2.proname
FROM pg_type AS p1, pg_proc AS p2
@@ -341,6 +381,14 @@ WHERE p1.typmodout = p2.oid AND NOT
-----+---------+-----+---------
(0 rows)
+-- typmodout routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typmodout = p2.oid AND p2.provolatile NOT IN ('i', 's');
+ oid | typname | oid | proname
+-----+---------+-----+---------
+(0 rows)
+
-- Array types should have same typmodin/out as their element types
SELECT p1.oid, p1.typname, p2.oid, p2.typname
FROM pg_type AS p1, pg_type AS p2
@@ -379,6 +427,7 @@ WHERE p1.typanalyze = p2.oid AND NOT
-----+---------+-----+---------
(0 rows)
+-- there does not seem to be a reason to care about volatility of typanalyze
-- domains inherit their base type's typanalyze
SELECT d.oid, d.typname, d.typanalyze, t.oid, t.typname, t.typanalyze
FROM pg_type d JOIN pg_type t ON d.typbasetype = t.oid
diff --git a/src/test/regress/sql/type_sanity.sql b/src/test/regress/sql/type_sanity.sql
index 14cb5408b79..574ef9c6e2c 100644
--- a/src/test/regress/sql/type_sanity.sql
+++ b/src/test/regress/sql/type_sanity.sql
@@ -122,6 +122,11 @@ WHERE p1.typinput = p2.oid AND
(p2.oid = 'array_in'::regproc)
ORDER BY 1;
+-- typinput routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typinput = p2.oid AND p2.provolatile NOT IN ('i', 's');
+
-- Composites, domains, enums, ranges should all use the same input routines
SELECT DISTINCT typtype, typinput
FROM pg_type AS p1
@@ -146,6 +151,11 @@ FROM pg_type AS p1, pg_proc AS p2
WHERE p1.typoutput = p2.oid AND NOT
(p2.prorettype = 'cstring'::regtype AND NOT p2.proretset);
+-- typoutput routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typoutput = p2.oid AND p2.provolatile NOT IN ('i', 's');
+
-- Composites, enums, ranges should all use the same output routines
SELECT DISTINCT typtype, typoutput
FROM pg_type AS p1
@@ -193,6 +203,11 @@ FROM pg_type AS p1, pg_proc AS p2, pg_proc AS p3
WHERE p1.typinput = p2.oid AND p1.typreceive = p3.oid AND
p2.pronargs != p3.pronargs;
+-- typreceive routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typreceive = p2.oid AND p2.provolatile NOT IN ('i', 's');
+
-- Composites, domains, enums, ranges should all use the same receive routines
SELECT DISTINCT typtype, typreceive
FROM pg_type AS p1
@@ -217,6 +232,11 @@ FROM pg_type AS p1, pg_proc AS p2
WHERE p1.typsend = p2.oid AND NOT
(p2.prorettype = 'bytea'::regtype AND NOT p2.proretset);
+-- typsend routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typsend = p2.oid AND p2.provolatile NOT IN ('i', 's');
+
-- Composites, enums, ranges should all use the same send routines
SELECT DISTINCT typtype, typsend
FROM pg_type AS p1
@@ -237,6 +257,11 @@ WHERE p1.typmodin = p2.oid AND NOT
p2.proargtypes[0] = 'cstring[]'::regtype AND
p2.prorettype = 'int4'::regtype AND NOT p2.proretset);
+-- typmodin routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typmodin = p2.oid AND p2.provolatile NOT IN ('i', 's');
+
-- Check for bogus typmodout routines
SELECT p1.oid, p1.typname, p2.oid, p2.proname
@@ -246,6 +271,11 @@ WHERE p1.typmodout = p2.oid AND NOT
p2.proargtypes[0] = 'int4'::regtype AND
p2.prorettype = 'cstring'::regtype AND NOT p2.proretset);
+-- typmodout routines should not be volatile
+SELECT p1.oid, p1.typname, p2.oid, p2.proname
+FROM pg_type AS p1, pg_proc AS p2
+WHERE p1.typmodout = p2.oid AND p2.provolatile NOT IN ('i', 's');
+
-- Array types should have same typmodin/out as their element types
SELECT p1.oid, p1.typname, p2.oid, p2.typname
@@ -276,6 +306,8 @@ WHERE p1.typanalyze = p2.oid AND NOT
p2.proargtypes[0] = 'internal'::regtype AND
p2.prorettype = 'bool'::regtype AND NOT p2.proretset);
+-- there does not seem to be a reason to care about volatility of typanalyze
+
-- domains inherit their base type's typanalyze
SELECT d.oid, d.typname, d.typanalyze, t.oid, t.typname, t.typanalyze