mirror of
https://github.com/postgres/postgres.git
synced 2025-12-12 02:37:31 +03:00
Reinstate pg_type's typsend and typreceive columns. They don't do much
yet, but they're there. Also some editorial work on CREATE TYPE reference page.
This commit is contained in:
@@ -537,3 +537,19 @@ WHERE typoutput != 0 AND
|
||||
------+-----------
|
||||
(0 rows)
|
||||
|
||||
SELECT ctid, typreceive
|
||||
FROM pg_catalog.pg_type fk
|
||||
WHERE typreceive != 0 AND
|
||||
NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.typreceive);
|
||||
ctid | typreceive
|
||||
------+------------
|
||||
(0 rows)
|
||||
|
||||
SELECT ctid, typsend
|
||||
FROM pg_catalog.pg_type fk
|
||||
WHERE typsend != 0 AND
|
||||
NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.typsend);
|
||||
ctid | typsend
|
||||
------+---------
|
||||
(0 rows)
|
||||
|
||||
|
||||
@@ -139,6 +139,53 @@ WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
-----+---------+-----+---------
|
||||
(0 rows)
|
||||
|
||||
-- Check for bogus typreceive routines
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
(p2.pronargs = 1 AND p2.proargtypes[0] = 'internal'::regtype);
|
||||
oid | typname | oid | proname
|
||||
-----+---------+-----+---------
|
||||
(0 rows)
|
||||
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
(p1.typelem != 0 AND p1.typlen < 0) AND NOT
|
||||
(p2.prorettype = p1.oid AND NOT p2.proretset);
|
||||
oid | typname | oid | proname
|
||||
-----+---------+-----+---------
|
||||
(0 rows)
|
||||
|
||||
-- Varlena array types will point to array_recv
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND
|
||||
(p1.typelem != 0 AND p1.typlen < 0) AND NOT
|
||||
(p2.oid = 'array_recv'::regproc);
|
||||
oid | typname | oid | proname
|
||||
-----+---------+-----+---------
|
||||
(0 rows)
|
||||
|
||||
-- Check for bogus typsend routines
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
((p2.pronargs = 1 AND p2.proargtypes[0] = p1.oid) OR
|
||||
(p2.oid = 'array_send'::regproc AND
|
||||
p1.typelem != 0 AND p1.typlen = -1));
|
||||
oid | typname | oid | proname
|
||||
-----+---------+-----+---------
|
||||
(0 rows)
|
||||
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
(p2.prorettype = 'bytea'::regtype AND NOT p2.proretset);
|
||||
oid | typname | oid | proname
|
||||
-----+---------+-----+---------
|
||||
(0 rows)
|
||||
|
||||
-- **************** pg_class ****************
|
||||
-- Look for illegal values in pg_class fields
|
||||
SELECT p1.oid, p1.relname
|
||||
|
||||
@@ -269,3 +269,11 @@ SELECT ctid, typoutput
|
||||
FROM pg_catalog.pg_type fk
|
||||
WHERE typoutput != 0 AND
|
||||
NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.typoutput);
|
||||
SELECT ctid, typreceive
|
||||
FROM pg_catalog.pg_type fk
|
||||
WHERE typreceive != 0 AND
|
||||
NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.typreceive);
|
||||
SELECT ctid, typsend
|
||||
FROM pg_catalog.pg_type fk
|
||||
WHERE typsend != 0 AND
|
||||
NOT EXISTS(SELECT 1 FROM pg_catalog.pg_proc pk WHERE pk.oid = fk.typsend);
|
||||
|
||||
@@ -109,6 +109,40 @@ FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typoutput = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
(p2.prorettype = 'cstring'::regtype AND NOT p2.proretset);
|
||||
|
||||
-- Check for bogus typreceive routines
|
||||
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
(p2.pronargs = 1 AND p2.proargtypes[0] = 'internal'::regtype);
|
||||
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
(p1.typelem != 0 AND p1.typlen < 0) AND NOT
|
||||
(p2.prorettype = p1.oid AND NOT p2.proretset);
|
||||
|
||||
-- Varlena array types will point to array_recv
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND
|
||||
(p1.typelem != 0 AND p1.typlen < 0) AND NOT
|
||||
(p2.oid = 'array_recv'::regproc);
|
||||
|
||||
-- Check for bogus typsend routines
|
||||
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
((p2.pronargs = 1 AND p2.proargtypes[0] = p1.oid) OR
|
||||
(p2.oid = 'array_send'::regproc AND
|
||||
p1.typelem != 0 AND p1.typlen = -1));
|
||||
|
||||
SELECT p1.oid, p1.typname, p2.oid, p2.proname
|
||||
FROM pg_type AS p1, pg_proc AS p2
|
||||
WHERE p1.typsend = p2.oid AND p1.typtype in ('b', 'p') AND NOT
|
||||
(p2.prorettype = 'bytea'::regtype AND NOT p2.proretset);
|
||||
|
||||
-- **************** pg_class ****************
|
||||
|
||||
-- Look for illegal values in pg_class fields
|
||||
|
||||
Reference in New Issue
Block a user