indigoviolet has asked for the wisdom of the Perl Monks concerning the following question:

What is the logic behind how placeholders interact with expressions? I'm using DBD::SQLite and DBIx::Simple. I have an integer column called 'position' in my database: While this
$db->query( 'SELECT * from thistable WHERE position <= ?', $position )->flat()
works correctly, this doesn't:
$db->query( 'SELECT * from thistable WHERE position - 1 <= ?', $position )->flat();
Could someone enlighten me, please?
Update: The data is just integers like
235
163
163
415
415
306
415
235
270
...
This returns 9 values of 'position':
$position = 500; $db->query( 'SELECT position from thistable WHERE position <= ?', $position )->flat()
This returns 71,828 values of 'position', ie all the rows in the table: Note that the answer should be the same, 9 matching rows.
$position = 500; $db->query( 'SELECT position from thistable WHERE (position-1+1) <= ?', $position )->flat()
Placeholders on the LHS This works, though:
$db->query( "SELECT position from thistable WHERE (position- ?) <= 500", 1 )->flat +()
And finally, I've tried DBI directly instead of DBIx::Simple, and still see this. (thanks to virtualsue for comments on making this more informative)

Replies are listed 'Best First'.
Re: DBI placeholders and expressions
by talexb (Chancellor) on Sep 24, 2006 at 15:43 UTC

    So now you have something you can send to all of the DBD::* folks as a new test and a documentation update, right? Right? :)

    Alex / talexb / Toronto

    "Groklaw is the open-source mentality applied to legal research" ~ Linus Torvalds

      I'm not yet sure where the supposed bug is: in DBI or DBD::SQLite..
A reply falls below the community's threshold of quality. You may see it by logging in.