mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
[sqllab] Fix limit parsing bug when using limit-offset comma notation (#7912)
* Fix limit parsing bug when using limit-offset comma notation * Use native sqlparse semantics to find limit * black
This commit is contained in:
@@ -182,7 +182,10 @@ class ParsedQuery(object):
|
||||
_, token = statement.token_next(idx=idx)
|
||||
if token:
|
||||
if isinstance(token, IdentifierList):
|
||||
_, token = token.token_next(idx=-1)
|
||||
# In case of "LIMIT <offset>, <limit>", find comma and extract
|
||||
# first succeeding non-whitespace token
|
||||
idx, _ = token.token_next_by(m=(sqlparse.tokens.Punctuation, ","))
|
||||
_, token = token.token_next(idx=idx)
|
||||
if token and token.ttype == sqlparse.tokens.Literal.Number.Integer:
|
||||
return int(token.value)
|
||||
|
||||
|
||||
@@ -175,12 +175,12 @@ class DbEngineSpecsTestCase(SupersetTestCase):
|
||||
q2 = "select * from (select * from my_subquery limit 10) where col=1 limit 20"
|
||||
q3 = "select * from (select * from my_subquery limit 10);"
|
||||
q4 = "select * from (select * from my_subquery limit 10) where col=1 limit 20;"
|
||||
q5 = "select * from mytable limit 10, 20"
|
||||
q5 = "select * from mytable limit 20, 10"
|
||||
q6 = "select * from mytable limit 10 offset 20"
|
||||
q7 = "select * from mytable limit"
|
||||
q8 = "select * from mytable limit 10.0"
|
||||
q9 = "select * from mytable limit x"
|
||||
q10 = "select * from mytable limit x, 20"
|
||||
q10 = "select * from mytable limit 20, x"
|
||||
q11 = "select * from mytable limit x offset 20"
|
||||
|
||||
self.assertEqual(engine_spec_class.get_limit_from_sql(q0), None)
|
||||
|
||||
Reference in New Issue
Block a user