Skip to content
Snippets Groups Projects
Commit ba930a01 authored by Tom Lane's avatar Tom Lane
Browse files

Add an opr_sanity check for misdefined aggregates that have transition

type different from input type but are expecting ExecAgg to insert the
first non-null input as the starting transition value.  This has always
been verboten, but wasn't checked for until now...
parent 8b1b34f6
No related branches found
No related tags found
No related merge requests found
......@@ -479,6 +479,17 @@ WHERE p1.aggfinalfn = p2.oid AND
-----+---------+-----+---------
(0 rows)
-- If transfn is strict then either initval should be non-NULL, or
-- basetype should equal transtype so that the first non-null input
-- can be assigned as the state value.
SELECT p1.oid, p1.aggname, p2.oid, p2.proname
FROM pg_aggregate AS p1, pg_proc AS p2
WHERE p1.aggtransfn = p2.oid AND p2.proisstrict AND
p1.agginitval IS NULL AND p1.aggbasetype != p1.aggtranstype;
oid | aggname | oid | proname
-----+---------+-----+---------
(0 rows)
-- **************** pg_opclass ****************
-- There should not be multiple entries in pg_opclass with the same
-- nonzero opcdeftype value, because there can be only one default opclass
......
......@@ -400,6 +400,15 @@ WHERE p1.aggfinalfn = p2.oid AND
p2.pronargs != 1 OR
p1.aggtranstype != p2.proargtypes[0]);
-- If transfn is strict then either initval should be non-NULL, or
-- basetype should equal transtype so that the first non-null input
-- can be assigned as the state value.
SELECT p1.oid, p1.aggname, p2.oid, p2.proname
FROM pg_aggregate AS p1, pg_proc AS p2
WHERE p1.aggtransfn = p2.oid AND p2.proisstrict AND
p1.agginitval IS NULL AND p1.aggbasetype != p1.aggtranstype;
-- **************** pg_opclass ****************
-- There should not be multiple entries in pg_opclass with the same
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment