I was looking in the int*in() functions and found some interesting limit
behaviours :
* Here, the most negative value is sometimes accepted, sometimes not :
test=> SELECT -2147483648::INTEGER;
ERREUR: entier en dehors des limites
test=> SELECT '-2147483648'::INTEGER; int4
------------- -2147483648
* Same for smallint :
test=> SELECT -32768::SMALLINT;
ERREUR: smallint en dehors des limites
test=> SELECT '-32768'::SMALLINT; int2
-------- -32768
(1 ligne)
* For BIGINT :
test=> SELECT -9223372036854775808::BIGINT;
ERREUR: bigint en dehors des limites
test=> SELECT '-9223372036854775808'::BIGINT; int8
---------------------- -9223372036854775808
(1 ligne)
Temps : 0,185 ms
test=> SELECT '-000000009223372036854775808'::BIGINT;
ERREUR: la valeur « -000000009223372036854775808 » est en dehors des
limites du type bigint
Interesting, isn't it ?
I guess it's good to reject -2147483648::INTEGER because this is ugly :
test=> CREATE TABLE foo AS (SELECT '-2147483648'::INTEGER AS x);
test=> SELECT -x FROM foo;
ERREUR: entier en dehors des limites
I can make a fix...