On 01/16/2014 01:02 PM, David Rowley wrote:
sum(bigint) became a bit weird as it uses numeric types internally, so I
had to keep the do_numeric_discard() function to support it.

It's pretty weird that we have implemented sum(bigint) that way. I understand that the result is a numeric so that it won't overflow, but implementing it by converting every value to numeric is naive.

I propose that we reimplement sum(bigint) in a more efficient way: For the internal state, let's use an int8 and a numeric overflow field. The transition function adds to the int8 variable, and checks for overflow. On overflow, increment the numeric field by one. In the final function, multiply the numeric by 2^64, and add the residual int8 value.

- Heikki


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to