Hello there sqlite-users,
I have a quick question regarding selection and deletion of large unsigned
integers.

I create my table as following:
[1]   CREATE TABLE t1 (instnum BIG UNSIGNED INTEGER PRIMARY KEY,  ...)

I then insert some row:
[2]   INSERT INTO t1 (instnum, ...) VALUES (CAST (?1 AS BIG UNSIGNED
INTEGER), ...)

This is just a test for 64bit unsigned, so I have the following rows:
   1
   2
   18446744073709551615 (0xFFFFFFFFFFFFFFFF)
   9223372036854775808   (0x8000000000000000)
   0
   3
   1234
   23456
   654321

When I try to DELETE using:
[3]   DELETE FROM t1 WHERE instnum <= CAST (?1 AS BIG UNSIGNED INTEGER);

I don't always get what I would expect, to me it looks like large numbers
(64bit with the MSB set to 1) are treated as negative.

For example if ?1 in query [3] is set to 654321, all rows are being deleted
(while 18446744073709551615 and 9223372036854775808 should not be deleted)

If ?1 is set to 18446744073709551615, the rows 18446744073709551615 and
9223372036854775808 are deleted, but the other ones are not.
(while all of them should be gone)

(I was previously using [2] and [3] without explicit cast, but the result is
the same).

How can I solve this issue?

Thank you,
Marco
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to