Commit 8b6b414a authored by Tom Lane's avatar Tom Lane

Update pltcl regress test to exercise return_null; also make use of

the fact that CREATE FUNCTION and CREATE AGGREGATE now allow array
types to be named like int4[] rather than _int4.
parent 179b8e57
...@@ -21,7 +21,7 @@ psql -q -n -e $DBNAME <test_queries.sql > test.out 2>&1 ...@@ -21,7 +21,7 @@ psql -q -n -e $DBNAME <test_queries.sql > test.out 2>&1
if diff test.expected test.out >/dev/null 2>&1 ; then if diff test.expected test.out >/dev/null 2>&1 ; then
echo " Tests passed O.K." echo " Tests passed O.K."
else else
echo " Tests faild - look at diffs between" echo " Tests failed - look at diffs between"
echo " test.expected and test.out" echo " test.expected and test.out"
fi fi
...@@ -133,7 +133,11 @@ select tcl_sum(key1) from T_pkey2; ...@@ -133,7 +133,11 @@ select tcl_sum(key1) from T_pkey2;
(1 row) (1 row)
select tcl_avg(key1) from T_pkey1 where key1 = 99; select tcl_avg(key1) from T_pkey1 where key1 = 99;
ERROR: pltcl: divide by zero tcl_avg
---------
(1 row)
select tcl_sum(key1) from T_pkey1 where key1 = 99; select tcl_sum(key1) from T_pkey1 where key1 = 99;
tcl_sum tcl_sum
--------- ---------
......
...@@ -389,22 +389,23 @@ create function tcl_int4add(int4,int4) returns int4 as ' ...@@ -389,22 +389,23 @@ create function tcl_int4add(int4,int4) returns int4 as '
-- We use split(n) as a quick-and-dirty way of parsing the input array -- We use split(n) as a quick-and-dirty way of parsing the input array
-- value, which comes in as a string like '{1,2}'. There are better ways... -- value, which comes in as a string like '{1,2}'. There are better ways...
create function tcl_int4_accum(_int4,int4) returns _int4 as ' create function tcl_int4_accum(int4[], int4) returns int4[] as '
set state [split $1 "{,}"] set state [split $1 "{,}"]
set newsum [expr {[lindex $state 1] + $2}] set newsum [expr {[lindex $state 1] + $2}]
set newcnt [expr {[lindex $state 2] + 1}] set newcnt [expr {[lindex $state 2] + 1}]
return "{$newsum,$newcnt}" return "{$newsum,$newcnt}"
' language 'pltcl'; ' language 'pltcl';
create function tcl_int4_avg(_int4) returns int4 as ' create function tcl_int4_avg(int4[]) returns int4 as '
set state [split $1 "{,}"] set state [split $1 "{,}"]
if {[lindex $state 2] == 0} { return_null }
return [expr {[lindex $state 1] / [lindex $state 2]}] return [expr {[lindex $state 1] / [lindex $state 2]}]
' language 'pltcl'; ' language 'pltcl';
create aggregate tcl_avg ( create aggregate tcl_avg (
sfunc = tcl_int4_accum, sfunc = tcl_int4_accum,
basetype = int4, basetype = int4,
stype = _int4, stype = int4[],
finalfunc = tcl_int4_avg, finalfunc = tcl_int4_avg,
initcond = '{0,0}' initcond = '{0,0}'
); );
...@@ -413,7 +414,7 @@ create aggregate tcl_sum ( ...@@ -413,7 +414,7 @@ create aggregate tcl_sum (
sfunc = tcl_int4add, sfunc = tcl_int4add,
basetype = int4, basetype = int4,
stype = int4, stype = int4,
initcond1 = '0' initcond1 = 0
); );
create function tcl_int4lt(int4,int4) returns bool as ' create function tcl_int4lt(int4,int4) returns bool as '
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment