diff options
Diffstat (limited to 'src/test/regress/sql/opr_sanity.sql')
| -rw-r--r-- | src/test/regress/sql/opr_sanity.sql | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql index 9d08dbd5bb3..d9be98a5fd3 100644 --- a/src/test/regress/sql/opr_sanity.sql +++ b/src/test/regress/sql/opr_sanity.sql @@ -18,17 +18,24 @@ -- **************** pg_proc **************** -- Look for illegal values in pg_proc fields. --- NOTE: currently there are a few pg_proc entries that have prorettype = 0. --- Someday that ought to be cleaned up. +-- NOTE: in reality pronargs could be more than 10, but I'm too lazy to put +-- a larger number of proargtypes check clauses in here. If we ever have +-- more-than-10-arg functions in the standard catalogs, extend this query. SELECT p1.oid, p1.proname FROM pg_proc as p1 -WHERE (p1.prolang = 0 OR p1.prorettype = 0 OR - p1.pronargs < 0 OR p1.pronargs > 16) - AND p1.proname !~ '^pl[^_]+_call_handler$' - AND p1.proname !~ '^RI_FKey_' - AND p1.proname !~ 'costestimate$' - AND p1.proname != 'update_pg_pwd_and_pg_group'; +WHERE p1.prolang = 0 OR p1.prorettype = 0 OR + p1.pronargs < 0 OR p1.pronargs > 10 OR + (p1.proargtypes[0] = 0 AND p1.pronargs > 0) OR + (p1.proargtypes[1] = 0 AND p1.pronargs > 1) OR + (p1.proargtypes[2] = 0 AND p1.pronargs > 2) OR + (p1.proargtypes[3] = 0 AND p1.pronargs > 3) OR + (p1.proargtypes[4] = 0 AND p1.pronargs > 4) OR + (p1.proargtypes[5] = 0 AND p1.pronargs > 5) OR + (p1.proargtypes[6] = 0 AND p1.pronargs > 6) OR + (p1.proargtypes[7] = 0 AND p1.pronargs > 7) OR + (p1.proargtypes[8] = 0 AND p1.pronargs > 8) OR + (p1.proargtypes[9] = 0 AND p1.pronargs > 9); -- Look for conflicting proc definitions (same names and input datatypes). -- (This test should be dead code now that we have the unique index @@ -174,7 +181,7 @@ WHERE c.castfunc = 0 AND NOT c.castimplicit; SELECT * FROM pg_cast c WHERE c.castfunc = 0 AND - NOT EXISTS (SELECT * FROM pg_cast k + NOT EXISTS (SELECT 1 FROM pg_cast k WHERE k.castfunc = 0 AND k.castsource = c.casttarget AND k.casttarget = c.castsource); @@ -279,7 +286,7 @@ WHERE p1.oprlsortop != 0 AND SELECT p1.oid, p1.oprname FROM pg_operator AS p1 WHERE p1.oprlsortop != 0 AND NOT - EXISTS(SELECT * FROM pg_operator AS p2 WHERE + EXISTS(SELECT 1 FROM pg_operator AS p2 WHERE p2.oprname = '<' AND p2.oprleft = p1.oprleft AND p2.oprright = p1.oprright AND @@ -287,7 +294,7 @@ WHERE p1.oprlsortop != 0 AND NOT SELECT p1.oid, p1.oprname FROM pg_operator AS p1 WHERE p1.oprlsortop != 0 AND NOT - EXISTS(SELECT * FROM pg_operator AS p2 WHERE + EXISTS(SELECT 1 FROM pg_operator AS p2 WHERE p2.oprname = '>' AND p2.oprleft = p1.oprleft AND p2.oprright = p1.oprright AND @@ -386,7 +393,7 @@ WHERE p1.oprcode = p2.oid AND -- If oprrest is set, the operator must return boolean, -- and it must link to a proc with the right signature -- to be a restriction selectivity estimator. --- The proc signature we want is: float8 proc(opaque, oid, opaque, int4) +-- The proc signature we want is: float8 proc(internal, oid, internal, int4) SELECT p1.oid, p1.oprname, p2.oid, p2.proname FROM pg_operator AS p1, pg_proc AS p2 @@ -394,13 +401,15 @@ WHERE p1.oprrest = p2.oid AND (p1.oprresult != 'bool'::regtype OR p2.prorettype != 'float8'::regtype OR p2.proretset OR p2.pronargs != 4 OR - p2.proargtypes[0] != 0 OR p2.proargtypes[1] != 'oid'::regtype OR - p2.proargtypes[2] != 0 OR p2.proargtypes[3] != 'int4'::regtype); + p2.proargtypes[0] != 'internal'::regtype OR + p2.proargtypes[1] != 'oid'::regtype OR + p2.proargtypes[2] != 'internal'::regtype OR + p2.proargtypes[3] != 'int4'::regtype); -- If oprjoin is set, the operator must be a binary boolean op, -- and it must link to a proc with the right signature -- to be a join selectivity estimator. --- The proc signature we want is: float8 proc(opaque, oid, opaque) +-- The proc signature we want is: float8 proc(internal, oid, internal) SELECT p1.oid, p1.oprname, p2.oid, p2.proname FROM pg_operator AS p1, pg_proc AS p2 @@ -408,8 +417,9 @@ WHERE p1.oprjoin = p2.oid AND (p1.oprkind != 'b' OR p1.oprresult != 'bool'::regtype OR p2.prorettype != 'float8'::regtype OR p2.proretset OR p2.pronargs != 3 OR - p2.proargtypes[0] != 0 OR p2.proargtypes[1] != 'oid'::regtype OR - p2.proargtypes[2] != 0); + p2.proargtypes[0] != 'internal'::regtype OR + p2.proargtypes[1] != 'oid'::regtype OR + p2.proargtypes[2] != 'internal'::regtype); -- **************** pg_aggregate **************** @@ -454,7 +464,7 @@ WHERE a.aggfnoid = p.oid AND a.aggtranstype != p2.prorettype OR a.aggtranstype != p2.proargtypes[0] OR NOT ((p2.pronargs = 2 AND p.proargtypes[0] = p2.proargtypes[1]) OR - (p2.pronargs = 1 AND p.proargtypes[0] = 0))); + (p2.pronargs = 1 AND p.proargtypes[0] = '"any"'::regtype))); -- Cross-check finalfn (if present) against its entry in pg_proc. -- FIXME: what about binary-compatible types? |
