]> granicus.if.org Git - postgresql/commitdiff
Add an opr_sanity check for misdefined aggregates that have transition
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 18 Jul 2000 05:02:19 +0000 (05:02 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 18 Jul 2000 05:02:19 +0000 (05:02 +0000)
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...

src/test/regress/expected/opr_sanity.out
src/test/regress/sql/opr_sanity.sql

index 70f0134693e39de6eaa842826cc18646ed409157..e784486f81db7c281de383dc4119fa794c4f3fc4 100644 (file)
@@ -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
index d655e02eb89c70cb656ba242fc32b3a2d9a090c3..fb43748a1cbd31cdaaf08d41178a59ed59db9894 100644 (file)
@@ -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