提交 ba930a01 编写于 作者: T Tom Lane

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...
上级 8b1b34f6
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册