Обсуждение: Transition functions for SUM(::int2), SUM(::int4, SUM(::int8])

Поиск
Список
Период
Сортировка

Transition functions for SUM(::int2), SUM(::int4, SUM(::int8])

От
Caleb Welton
Дата:
Is there any reason that int2_sum, int4_sum, and int8_sum are not marked as
being strict?  All the other transition functions for sum, and every other
built in aggregation function is marked as strict, as demonstrated with:

select x.proname, t.proname, t.proisstrict
from ((pg_aggregate a left join      pg_proc x on (a.aggfnoid = x.oid)) left join      pg_proc t on (a.aggtransfn =
t.oid))
where not t.proisstrict;
proname | proname  | proisstrict
---------+----------+-------------sum     | int2_sum | fsum     | int4_sum | fsum     | int8_sum | f


select x.proname, t.proname, t.proisstrict
from ((pg_aggregate a left join      pg_proc x on (a.aggfnoid = x.oid)) left join      pg_proc t on (a.aggtransfn =
t.oid))
where x.proname = 'sum';
proname |   proname   | proisstrict
---------+-------------+-------------sum     | int8_sum    | fsum     | int4_sum    | fsum     | int2_sum    | fsum
|float4pl    | tsum     | float8pl    | tsum     | cash_pl     | tsum     | interval_pl | tsum     | numeric_add | t
 
(8 rows)

Thanks, Caleb



Re: Transition functions for SUM(::int2), SUM(::int4, SUM(::int8])

От
Tom Lane
Дата:
Caleb Welton <cwelton@greenplum.com> writes:
> Is there any reason that int2_sum, int4_sum, and int8_sum are not marked as
> being strict?

They wouldn't work otherwise, because the transition datatypes aren't
the same as the inputs.
        regards, tom lane


Re: Transition functions for SUM(::int2), SUM(::int4, SUM(::int8])

От
Tom Lane
Дата:
Caleb Welton <cwelton@greenplum.com> writes:
> Forgive me if I'm being dense, but could you explain why

> int4_sum(bigint,int) must not be strict, but
> int4_avg_accum(bytea, int) can be strict?

The former is used with a NULL initial value, the latter isn't.
Read the fine print in the CREATE AGGREGATE man page about behavior
with strict transition functions.
        regards, tom lane


Re: Transition functions for SUM(::int2), SUM(::int4, SUM(::int8])

От
Caleb Welton
Дата:
Thanks Tom, 
Forgive me if I'm being dense, but could you explain why

int4_sum(bigint,int) must not be strict, but
int4_avg_accum(bytea, int) can be strict?

It seems that both of them have transition datatypes that are different from
the input.

-Caleb

On 1/28/08 7:31 PM, "Tom Lane" <tgl@sss.pgh.pa.us> wrote:

> Caleb Welton <cwelton@greenplum.com> writes:
>> Is there any reason that int2_sum, int4_sum, and int8_sum are not marked as
>> being strict?
> 
> They wouldn't work otherwise, because the transition datatypes aren't
> the same as the inputs.
> 
> regards, tom lane