Hi,

Is there any limitation on the number of elements in IN clause ?

Thanks.

Felix Radensky
Embedded Solutions Ltd.


drh-2 wrote:
> 
> Jerry Krinock <[EMAIL PROTECTED]> wrote:
>> My query:
>> 
>> DELETE FROM `table1` WHERE (`id`=1 OR `id`=2 OR `id`=3 OR ... OR `id`=N)
>> 
>> using the C API.  When N exceeds 999, I get an error stating that the  
>> maximum depth of 1000 has been exceeded, and this is documented in
>> http://www.sqlite.org/limits.html 
>> , item 5.
>> 
>> Of course, I could fix this by doing multiple queries when N>999, but  
>> my code is very nicely encapsulated as is, and that change would make  
>> it all yucky.  So I'd like other alternatives.
> 
> The WHERE expression is parsed as follows:
> 
>    (...(((id=1 OR id=2) OR id=3) OR id=4) OR ...) OR id=N)
> 
> If you draw this as a tree, you find that, indeed, it is N
> levels deep.  But by explicit use of parentheses, you can
> force a balanced tree with a depth of only logN.
> 
>    (...((id=1 OR id=2) OR (id=3 OR id=4)) OR (...)...)
> 
> But instead of all that trouble, why not just say:
> 
>    id IN (1,2,3,4,5,...,N)
> 
> The latter is not only more efficient, but easier for human
> readers to understand as well.
> 
>> 
>> 1.  I would describe my query as "1000 clauses wide".  I'm not nesting  
>> anything "1000 levels deep".  Is there a way to rewrite my query and  
>> make it work?
>> 
>> 2.  Documentation implies that I can change the parameter  
>> SQLITE_MAX_EXPR_DEPTH from the default of 1000.  But I can't find  
>> SQLITE_MAX_EXPR_DEPTH in sqlite3.h.  Seems to be neither a compiler  
>> macro nor a global.  (Mac OS X 10.5, sqlite 3.4.0).  Where is it?
>> 
> 
> Look in sqliteLimit.h
> 
> --
> D. Richard Hipp <[EMAIL PROTECTED]>
> 
> 
> -----------------------------------------------------------------------------
> To unsubscribe, send email to [EMAIL PROTECTED]
> -----------------------------------------------------------------------------
> 
> 

-- 
View this message in context: 
http://www.nabble.com/SQLITE_MAX_EXPR_DEPTH-tp14966776p15065740.html
Sent from the SQLite mailing list archive at Nabble.com.


-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to