OSDN Git Service

Adjust the API for aggregate function calls so that a C-coded function
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Mar 2005 20:25:06 +0000 (20:25 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Mar 2005 20:25:06 +0000 (20:25 +0000)
commitfa5e44017a8cea141d1730e695c5cc2051158114
treedaafe69293544a73d64701bd38a629d32d0727fc
parentde004e44e2cb4c3def05ba3d9f1a6f23e802bea3
Adjust the API for aggregate function calls so that a C-coded function
can tell whether it is being used as an aggregate or not.  This allows
such a function to avoid re-pallocing a pass-by-reference transition
value; normally it would be unsafe for a function to scribble on an input,
but in the aggregate case it's safe to reuse the old transition value.
Make int8inc() do this.  This gets a useful improvement in the speed of
COUNT(*), at least on narrow tables (it seems to be swamped by I/O when
the table rows are wide).  Per a discussion in early December with
Neil Conway.  I also fixed int_aggregate.c to check this, thereby
turning it into something approaching a supportable technique instead
of being a crude hack.
contrib/intagg/int_aggregate.c
contrib/intagg/int_aggregate.sql.in
doc/src/sgml/xaggr.sgml
doc/src/sgml/xfunc.sgml
src/backend/executor/nodeAgg.c
src/backend/utils/adt/int8.c