Hi,

I have a table with one of the columns storing negative integers in it.
There is one function that performs different query operations on this
table based on input range for those negative integers. When I try to
use a "select where" query with an inequality using negative number
semantics, the records fetched are wrong (the negative integers in the
where clause are bound using sqlite3_bind_int). However, if I ignore the
fact that the comparators in where clause are negative, I get proper
result.

 

Here is how it happens,

 

Assume that you have three records in table, with values -3, -4 and -5
in that negative-integer column (say column name is "num").

 

 

Now if you want to search all records between say -1 and -4 and say if
-1 and -4 were stored in integer identifiers limit1 and limit2; your
query will be:

 

char* pQuery= "select * from my_table where num <= :limit1 and num >=
:limit2;"  

                                    -----prepare statement here-
sqlite3_prepare(pDb, pQuery, -1, &pStmt, 0))-------

                                    sqlite3_bind_int(pStmt, 1 , -1);

                                    sqlite3_bind_int(pStmt, 2 , -4);

 

 Now executing this sqlite statement should give you records with -3 and
-4, but it won't (value -1 and -4 are bound using sqlite3_bind_int
function).

 

 

However, if you try 

"select * from my_table where num > :limit1 and number < :limit2;"

It will give you correct results (we are still binding the limit1 and
limit2 using sqlite3_bind_int function).

 

 

Why during bind call (sqlite3_bind_int), the negative number is not
bound to identifier instead it seems positive number got bound?

When I run the same queries from command line everything seems to work
fine and negative integers do need comparison semantics of negative
numbers.

 

Thanks,

 

Regards,

-shashikant

Reply via email to