mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-03 08:00:21 +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)
|
(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 ****************
|
-- **************** pg_opclass ****************
|
||||||
-- There should not be multiple entries in pg_opclass with the same
|
-- There should not be multiple entries in pg_opclass with the same
|
||||||
-- nonzero opcdeftype value, because there can be only one default opclass
|
-- 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
|
p2.pronargs != 1 OR
|
||||||
p1.aggtranstype != p2.proargtypes[0]);
|
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 ****************
|
-- **************** pg_opclass ****************
|
||||||
|
|
||||||
-- There should not be multiple entries in pg_opclass with the same
|
-- There should not be multiple entries in pg_opclass with the same
|
||||||
|
Loading…
Reference in New Issue
Block a user