mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-11-27 07:21:09 +08:00
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...
This commit is contained in:
parent
8b1b34f6c0
commit
ba930a016c
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user