diff options
| author | Tom Lane | 2005-07-10 21:14:00 +0000 |
|---|---|---|
| committer | Tom Lane | 2005-07-10 21:14:00 +0000 |
| commit | d78397d301172cccce14d5d789f296c47dd47c5e (patch) | |
| tree | 4104dc887976aee14286c0c0a7be03f84af43b7d /src/test | |
| parent | 2e330699fae72c40f5237ce0f4fc210c483d2816 (diff) | |
Change typreceive function API so that receive functions get the same
optional arguments as text input functions, ie, typioparam OID and
atttypmod. Make all the datatypes that use typmod enforce it the same
way in typreceive as they do in typinput. This fixes a problem with
failure to enforce length restrictions during COPY FROM BINARY.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/type_sanity.out | 21 | ||||
| -rw-r--r-- | src/test/regress/sql/type_sanity.sql | 18 |
2 files changed, 25 insertions, 14 deletions
diff --git a/src/test/regress/expected/type_sanity.out b/src/test/regress/expected/type_sanity.out index 0eb6bb8e961..73d51925c2f 100644 --- a/src/test/regress/expected/type_sanity.out +++ b/src/test/regress/expected/type_sanity.out @@ -69,11 +69,10 @@ WHERE p1.typtype in ('b') AND p1.typname NOT LIKE E'\\_%' AND NOT EXISTS 705 | unknown (2 rows) --- Conversion routines must be provided except in 'c' entries. +-- Text conversion routines must be provided. SELECT p1.oid, p1.typname FROM pg_type as p1 -WHERE p1.typtype != 'c' AND - (p1.typinput = 0 OR p1.typoutput = 0); +WHERE (p1.typinput = 0 OR p1.typoutput = 0); oid | typname -----+--------- (0 rows) @@ -83,8 +82,6 @@ SELECT p1.oid, p1.typname, p2.oid, p2.proname FROM pg_type AS p1, pg_proc AS p2 WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT ((p2.pronargs = 1 AND p2.proargtypes[0] = 'cstring'::regtype) OR - (p2.pronargs = 2 AND p2.proargtypes[0] = 'cstring'::regtype AND - p2.proargtypes[1] = 'oid'::regtype) OR (p2.pronargs = 3 AND p2.proargtypes[0] = 'cstring'::regtype AND p2.proargtypes[1] = 'oid'::regtype AND p2.proargtypes[2] = 'int4'::regtype)); @@ -148,8 +145,9 @@ 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) OR - (p2.pronargs = 2 AND p2.proargtypes[0] = 'internal'::regtype AND - p2.proargtypes[1] = 'oid'::regtype)); + (p2.pronargs = 3 AND p2.proargtypes[0] = 'internal'::regtype AND + p2.proargtypes[1] = 'oid'::regtype AND + p2.proargtypes[2] = 'int4'::regtype)); oid | typname | oid | proname -----+---------+-----+--------- (0 rows) @@ -181,6 +179,15 @@ ORDER BY 1; 30 | oidvector | 2420 | oidvectorrecv (2 rows) +-- Suspicious if typreceive doesn't take same number of args as typinput +SELECT p1.oid, p1.typname, p2.oid, p2.proname, p3.oid, p3.proname +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; + oid | typname | oid | proname | oid | proname +-----+---------+-----+---------+-----+--------- +(0 rows) + -- Check for bogus typsend routines -- As of 7.4, this check finds refcursor, which is borrowing -- other types' I/O routines diff --git a/src/test/regress/sql/type_sanity.sql b/src/test/regress/sql/type_sanity.sql index 20f6a75ffae..3969b4cce2e 100644 --- a/src/test/regress/sql/type_sanity.sql +++ b/src/test/regress/sql/type_sanity.sql @@ -59,12 +59,11 @@ WHERE p1.typtype in ('b') AND p1.typname NOT LIKE E'\\_%' AND NOT EXISTS WHERE p2.typname = ('_' || p1.typname)::name AND p2.typelem = p1.oid); --- Conversion routines must be provided except in 'c' entries. +-- Text conversion routines must be provided. SELECT p1.oid, p1.typname FROM pg_type as p1 -WHERE p1.typtype != 'c' AND - (p1.typinput = 0 OR p1.typoutput = 0); +WHERE (p1.typinput = 0 OR p1.typoutput = 0); -- Check for bogus typinput routines @@ -72,8 +71,6 @@ SELECT p1.oid, p1.typname, p2.oid, p2.proname FROM pg_type AS p1, pg_proc AS p2 WHERE p1.typinput = p2.oid AND p1.typtype in ('b', 'p') AND NOT ((p2.pronargs = 1 AND p2.proargtypes[0] = 'cstring'::regtype) OR - (p2.pronargs = 2 AND p2.proargtypes[0] = 'cstring'::regtype AND - p2.proargtypes[1] = 'oid'::regtype) OR (p2.pronargs = 3 AND p2.proargtypes[0] = 'cstring'::regtype AND p2.proargtypes[1] = 'oid'::regtype AND p2.proargtypes[2] = 'int4'::regtype)); @@ -120,8 +117,9 @@ 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) OR - (p2.pronargs = 2 AND p2.proargtypes[0] = 'internal'::regtype AND - p2.proargtypes[1] = 'oid'::regtype)); + (p2.pronargs = 3 AND p2.proargtypes[0] = 'internal'::regtype AND + p2.proargtypes[1] = 'oid'::regtype AND + p2.proargtypes[2] = 'int4'::regtype)); -- As of 7.4, this check finds refcursor, which is borrowing -- other types' I/O routines @@ -141,6 +139,12 @@ WHERE p1.typreceive = p2.oid AND p1.typtype in ('b', 'p') AND (p2.oid = 'array_recv'::regproc) ORDER BY 1; +-- Suspicious if typreceive doesn't take same number of args as typinput +SELECT p1.oid, p1.typname, p2.oid, p2.proname, p3.oid, p3.proname +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; + -- Check for bogus typsend routines -- As of 7.4, this check finds refcursor, which is borrowing |
