Hi,
I'm doing some tests on django-firebird (firebird backend for django) [1] and I
see that inserting smallint data just on limit of the range fails
In Firebird technical specifications [2] the smallint range is -2^15 to 2^15-1
(-32768 to 32767).
but insert fails if I try to insert a record with a value -32768
Example:
CREATE TABLE MODEL_FIELDS_SMALLINTEGERMODEL
(
ID INTEGER NOT NULL,
"VALUE" SMALLINT NOT NULL,
CONSTRAINT INTEG_38 PRIMARY KEY (ID)
);
>>> conn = fdb.connect(dsn=....
>>> cur = conn.cursor()
>>> cur.execute('INSERT INTO "MODEL_FIELDS_SMALLINTEGERMODEL" ("VALUE") VALUES
>>> (?)', (-32768,))
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/fdb/fbcore.py", line 3574, in
execute
self._ps._execute(parameters)
File "/usr/local/lib/python2.7/dist-packages/fdb/fbcore.py", line 3258, in
_execute
self.__Tuple2XSQLDA(self._in_sqlda, parameters)
File "/usr/local/lib/python2.7/dist-packages/fdb/fbcore.py", line 3044, in
__Tuple2XSQLDA
sqlvar.sqlscale)
File "/usr/local/lib/python2.7/dist-packages/fdb/fbcore.py", line 2538, in
_check_integer_range
raise ProgrammingError(msg, -802)
ProgrammingError: ('numeric overflow: value -32768\n (SMALLINT scaled for 0
decimal places) is of\n too great a magnitude to fit into its internal storage
type SQL_SHORT,\n which has range [-32767,32767].', -802)
Why in fdb.ibase.py smaillint min range is defined as SHRT_MIN = -32767 ?
Is it just a mistake or is there another limitation?
Regards.
--
Maxi
[1] https://github.com/maxirobaina/django-firebird
[2] http://www.firebirdsql.org/en/firebird-technical-specifications/