macbre / sql-metadata

Uses tokenized query returned by python-sqlparse and generates query metadata

Home Page:https://pypi.python.org/pypi/sql-metadata

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

commented

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']