easyest query fail
Darkstrouk opened this issue · comments
Parser("SELECT Location FROM cinema WHERE capacity > 300 GROUP BY LOCATION HAVING count(*) > 1").columns
['capacity']
Parser('SELECT Location FROM cinema').columns
[]
guys - shame on u. how can u pass this lammer's code if it literally can't catch basic usage of columns after select?
this is a sqlite dialect - that u supposed to support....В
ohh what a circus.................
Parser('SELECT LOCATION FROM CIMEMA').columns
[]
Parser('SELECT LOCATION FROM CIMEMA WHERE D > 0').columns
['D']
I honestly don't have any idea how u looted 703 stars on github
This is not on sql-metadata
.
Sql metadata depends on sqlparse
, sqlparse has 'location' defined as keyword
https://github.com/andialbrecht/sqlparse/blob/7e8c7ecd6a077f902020707d1c9cfd9967b7b338/sqlparse/keywords.py#L353
That's why Parser.columns
filters it out
>>> import sqlparse
>>> sqlparse.parse("SELECT location FROM foo")[0].tokens
[<DML 'SELECT' at 0x7C16CFF199C0>, <Keyword 'locati...' at 0x7C16CFF19D80>, ...
^^^^^^^^^^^^^^^
Should raise this issue in the appropriate repo. A way to quickly circumvent this is to eliminate it from being a keyword
>>> from sql_metadata import Parser
>>> from sqlparse.keywords import KEYWORDS
>>> KEYWORDS.pop('LOCATION')
>>> Parser("SELECT location FROM foo").columns
['location']