But isn't NULL and 0 a NULL? So wouldn't it need to evaluate X to determine if 
it was null, and thus discover it wasn't a valid column name and return an 
error?

David

--------------------------------------------
On Thu, 12/19/13, Richard Hipp <d...@sqlite.org> wrote:

 Subject: Re: [sqlite] Does not detect invalid column name when subexpression 
optimized away
 To: "R Smith" <rsm...@rsweb.co.za>, "General Discussion of SQLite Database" 
<sqlite-users@sqlite.org>
 Cc: amb...@math.bme.hu
 Date: Thursday, December 19, 2013, 9:27 PM
 
 On Thu, Dec 19, 2013 at
 6:36 PM, RSmith <rsm...@rsweb.co.za>
 wrote:
 
 >  my guess is
 the optimiser pounces directly on the fact that (X and 0)
 > will always be 0
 >
 
 Correct.  The code is at
 
     http://www.sqlite.org/src/artifact/962c2988?ln=556-559
 
 sqlite3ExprAnd() gets called
 to build the AND operator directly from the
 parser, long before any name resolution has
 occurred, and indeed before the
 expression
 has been fully parsed.  As long as one side or the other of
 the
 AND operator does not have an egregious
 syntax error, if the other side
 evaluates to
 FALSE then the whole expression is coded as a FALSE
 literal.
 
 That code was
 added here:
 
     http://www.sqlite.org/src/info/f9a7e179cbbeeab5
 
 
 -- 
 D. Richard Hipp
 d...@sqlite.org
 _______________________________________________
 sqlite-users mailing list
 sqlite-users@sqlite.org
 http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
 
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to