Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MySQL: SELECT FOR UPDATE query errors during parsing on all sqlglot versions >= 18.0.0 #2200

Closed
SoftwareGuy2020 opened this issue Sep 12, 2023 · 0 comments
Assignees

Comments

@SoftwareGuy2020
Copy link

Fully reproducible code snippet

from sqlglot import parse_one
query = 'SELECT name FROM temp WHERE name = ? FOR UPDATE'
parsed_sql = parse_one(query, dialect='mysql')

The stacktrace is:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "buildenv/lib/python3.8/site-packages/sqlglot/__init__.py", line 125, in parse_one
    result = dialect.parse(sql, **opts)
  File "buildenv/lib/python3.8/site-packages/sqlglot/dialects/dialect.py", line 288, in parse
    return self.parser(**opts).parse(self.tokenize(sql), sql)
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 921, in parse
    return self._parse(
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 987, in _parse
    expressions.append(parse_method(self))
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 1177, in _parse_statement
    expression = self._parse_set_operations(expression) if expression else self._parse_select()
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 2056, in _parse_select
    this = self._parse_query_modifiers(this)
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 2162, in _parse_query_modifiers
    key, expression = parser(self)
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 775, in <lambda>
    TokenType.WHERE: lambda self: ("where", self._parse_where()),
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 2765, in _parse_where
    exp.Where, comments=self._prev_comments, this=self._parse_conjunction()
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 3001, in _parse_conjunction
    return self._parse_tokens(self._parse_equality, self.CONJUNCTION)
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 4519, in _parse_tokens
    this = parse_method()
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 3004, in _parse_equality
    return self._parse_tokens(self._parse_comparison, self.EQUALITY)
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 4526, in _parse_tokens
    expression=parse_method(),
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 3007, in _parse_comparison
    return self._parse_tokens(self._parse_range, self.COMPARISON)
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 4519, in _parse_tokens
    this = parse_method()
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 3014, in _parse_range
    expression = self.RANGE_PARSERS[self._prev.token_type](self, this)
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 598, in <lambda>
    TokenType.FOR: lambda self, this: self._parse_comprehension(this),
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 4905, in _parse_comprehension
    return self.expression(
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 1051, in expression
    return self.validate_expression(instance)
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 1071, in validate_expression
    self.raise_error(error_message)
  File "buildenv/lib/python3.8/site-packages/sqlglot/parser.py", line 1031, in raise_error
    raise error
sqlglot.errors.ParseError: Required keyword: 'iterator' missing for <class 'sqlglot.expressions.Comprehension'>. Line 1, Col: 47.
  SELECT name FROM temp WHERE name = ? FOR UPDATE

This does not error on version 17.16.2 and below. Something happened in version 18.0.0 that caused this issue. I verified that the issue is present in all versions above 18.0.0 as well.

@tobymao tobymao self-assigned this Sep 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants