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

2008-01-29 Thread Tom Lane
Caleb Welton [EMAIL PROTECTED] 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

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


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

2008-01-29 Thread 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 [EMAIL PROTECTED] wrote:

 Caleb Welton [EMAIL PROTECTED] 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


---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


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

2008-01-28 Thread 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 | f
 sum | int4_sum | f
 sum | 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| f
 sum | int4_sum| f
 sum | int2_sum| f
 sum | float4pl| t
 sum | float8pl| t
 sum | cash_pl | t
 sum | interval_pl | t
 sum | numeric_add | t
(8 rows)

Thanks,
  Caleb


---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


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

2008-01-28 Thread Tom Lane
Caleb Welton [EMAIL PROTECTED] 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

---(end of broadcast)---
TIP 5: don't forget to increase your free space map settings