I tracked down a perplexing issue to the following behavior:
sqlite> CREATE TABLE tab (col);
sqlite> SELECT nope FROM tab; -- fails; good
Error: no such column: nope
sqlite> SELECT "nope" FROM tab; -- works?
sqlite> INSERT INTO tab (col) VALUES (77);
sqlite> SELECT col FROM tab WHERE nope IS NOT NULL; -- fails; good
Error: no such column: nope
sqlite> SELECT col FROM tab WHERE "nope" IS NOT NULL; -- works?
77
It seems that "nope" is being interpreted as a string literal here,
while quoted names of valid columns are not:
sqlite> SELECT "nope", "col" FROM tab;
nope|77
I see that this is discussed briefly in the documentation, though the
exception as written only applies to quoted keywords, which "nope" is
not: <https://www.sqlite.org/lang_keywords.html>
But it seems especially surprising that the parse tree should depend on
the actual identifier values and table schemata, making the grammar not
context-free.
Is this working as intended? Are there plans to make SQLite reject such
examples as malformed queries instead of implicitly coercing?
My `sqlite3 --version`:
3.11.0 2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users