This script

#!/usr/bin/env tclsh

package require sqlite3

set x 1

sqlite3 db /tmp/foo

db eval {select (2 > :x) as foo} {
    puts "foo was $foo"
}

run on an up-to-date Arch Linux system produces

foo was 0

obviously incorrect. There seems to be an issue with variable
substitution here. Changing the line in question to

db eval {select (2 > 1) as foo} {

and re-running produces

foo was 1

obviously correct.

The sqlite documentation on the tcl api says that variable
substitution can occur "in any position where it is legal to put a
string or number literal". There is no information in the
documentation about how to control this, so the api has to be deciding
for itself whether a string or numeric literal is appropriate and I
think it is getting it wrong here.

db eval {select (2 > cast (:x as integer)) as foo} {

works correctly.

db eval {select (2 > '1') as foo} {

produces

foo was 0

Looks like a bug to me, but perhaps I'm missing something. Comments?

/Don Allen
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to