]> granicus.if.org Git - postgresql/commit
Implement width_bucket() for the float8 data type.
authorNeil Conway <neilc@samurai.com>
Tue, 16 Jan 2007 21:41:14 +0000 (21:41 +0000)
committerNeil Conway <neilc@samurai.com>
Tue, 16 Jan 2007 21:41:14 +0000 (21:41 +0000)
commitcf57ef4e506cd87195baa76213326b1981644452
treed46388824c263a2c2737a2ac5283706f065f634c
parentda07c81fe3672fdc216b923f7abcde5d23ad0a6a
Implement width_bucket() for the float8 data type.

The implementation is somewhat ugly logic-wise, but I don't see an
easy way to make it more concise.

When writing this, I noticed that my previous implementation of
width_bucket() doesn't handle NaN correctly:

    postgres=# select width_bucket('NaN', 1, 5, 5);
     width_bucket
    --------------
                6
    (1 row)

AFAICS SQL:2003 does not define a NaN value, so it doesn't address how
width_bucket() should behave here. The patch changes width_bucket() so
that ereport(ERROR) is raised if NaN is specified for the operand or the
lower or upper bounds to width_bucket(). For float8, NaN is disallowed
for any of the floating-point inputs, and +/- infinity is disallowed
for the histogram bounds (but allowed for the operand).

Update docs and regression tests, bump the catversion.
doc/src/sgml/func.sgml
src/backend/utils/adt/float.c
src/backend/utils/adt/numeric.c
src/include/catalog/catversion.h
src/include/catalog/pg_proc.h
src/include/utils/builtins.h
src/test/regress/expected/numeric.out
src/test/regress/sql/numeric.sql