Maybe the perl interface always binds variables as strings. This
won't work - just like the second "SELECT count(*)" query below
didn't work as one might expect.


SQLite version 3.3.0
Enter ".help" for instructions
sqlite> create table ab(a,b);
sqlite> insert into ab values(1, 2);
sqlite> select count(*) from ab group by a having count(*) > 0;
1
sqlite> select count(*) from ab group by a having count(*) > '0';
sqlite>

One workaround would be to cast your bound variable:

sqlite> select count(*) from ab group by a having count(*) > CAST ('0' AS 
INTEGER);
1

Although - now that I've said all that - does the dbd interface 
actually use sqlite3, or just version 2? And does it use sqlite
variables, or something else layered on top?




--- Dennis Cote <[EMAIL PROTECTED]> wrote:

> Clark Christensen wrote:
> 
> >What's not clear is whether the limitation is with SQLite, DBI, or 
> >DBD-SQLite, or whether later
> revisions of any has enabled placeholders at that level.
> >
> >Does sqlite3_prepare/step work with placeholders in the HAVING expression?
> >
> Clark,
> 
> The syntax description for the SELECT statement (at 
> http://www.sqlite.org/lang_select.html) says that the HAVING clause 
> takes an expression. This is the same thing used for a WHERE clause. 
> Furthermore, it looks like the parser handles both in the same way. So 
> it would be unlikely that SQLite would treat it differently.
> 
> The following explain output shows that SQLite does accept a variable in 
> the HAVING clause.
> 
> SQLite version 3.3.2
> Enter ".help" for instructions
> sqlite> create table t(a,b);
> sqlite> .explain on
> sqlite> explain select a from t group by b having count(*) > ?;
> addr  opcode          p1          p2          p3
> ----  --------------  ----------  ----------  
> ---------------------------------
> 0     OpenVirtual     1           3           keyinfo(1,BINARY)
> 1     MemInt          0           3
> 2     MemInt          0           2
> 3     Goto            0           18
> 4     MemInt          1           3
> 5     Return          0           0
> 6     IfMemPos        2           8
> 7     Return          0           0
> 8     AggFinal        1           0           count(0)
> 9     MemLoad         1           0
> 10    Variable        1           0
> 11    Le              354         7
> 12    MemLoad         0           0
> 13    Callback        1           0
> 14    Return          0           0
> 15    MemNull         0           0
> 16    MemNull         1           0
> 17    Return          0           0
> 18    Gosub           0           15
> 19    Goto            0           47
> 20    Integer         0           0
> 21    OpenRead        0           2
> 22    SetNumColumns   0           2
> 23    Rewind          0           30
> 24    Column          0           1
> 25    Sequence        1           0
> 26    Column          0           0
> 27    MakeRecord      3           0
> 28    IdxInsert       1           0
> 29    Next            0           24
> 30    Close           0           0
> 31    Sort            1           46
> 32    Column          1           0
> 33    MemStore        5           0
> 34    MemLoad         4           0
> 35    Eq              512         40          collseq(BINARY)
> 36    MemMove         4           5
> 37    Gosub           0           6
> 38    IfMemPos        3           46
> 39    Gosub           0           15
> 40    AggStep         1           0           count(0)
> 41    Column          1           2
> 42    MemStore        0           1
> 43    MemInt          1           2
> 44    Next            1           32
> 45    Gosub           0           6
> 46    Halt            0           0
> 47    Transaction     0           0
> 48    VerifyCookie    0           1
> 49    Goto            0           20
> 50    Noop            0           0
> sqlite>
> 
> Line 10 is where it load the variable to check the count before making a 
> callback to return a result row.
> 
> Look like the problem is in the Perl wrapper.
> 
> HTH
> Dennis Cote
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to