Skip to content

Commit

Permalink
fix(mysql): Parse REPLACE statement as Command (#3425)
Browse files Browse the repository at this point in the history
  • Loading branch information
VaggelisD committed May 8, 2024
1 parent 5d4f148 commit e8014e2
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 7 deletions.
2 changes: 1 addition & 1 deletion sqlglot/dialects/mysql.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ class Tokenizer(tokens.Tokenizer):
"@@": TokenType.SESSION_PARAMETER,
}

COMMANDS = tokens.Tokenizer.COMMANDS - {TokenType.SHOW}
COMMANDS = {*tokens.Tokenizer.COMMANDS, TokenType.REPLACE} - {TokenType.SHOW}

class Parser(parser.Parser):
FUNC_TOKENS = {
Expand Down
7 changes: 2 additions & 5 deletions sqlglot/dialects/tsql.py
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,8 @@ class Tokenizer(tokens.Tokenizer):
"OPTION": TokenType.OPTION,
}

COMMANDS = {*tokens.Tokenizer.COMMANDS, TokenType.END}

class Parser(parser.Parser):
SET_REQUIRES_ASSIGNMENT_DELIMITER = False
LOG_DEFAULTS_TO_LN = True
Expand Down Expand Up @@ -524,11 +526,6 @@ class Parser(parser.Parser):
*parser.Parser.TYPE_TOKENS,
}

STATEMENT_PARSERS = {
**parser.Parser.STATEMENT_PARSERS,
TokenType.END: lambda self: self._parse_command(),
}

def _parse_options(self) -> t.Optional[t.List[exp.Expression]]:
if not self._match(TokenType.OPTION):
return None
Expand Down
2 changes: 1 addition & 1 deletion sqlglot/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -1471,7 +1471,7 @@ def _parse_statement(self) -> t.Optional[exp.Expression]:
if self._match_set(self.STATEMENT_PARSERS):
return self.STATEMENT_PARSERS[self._prev.token_type](self)

if self._match_set(Tokenizer.COMMANDS):
if self._match_set(self.dialect.tokenizer.COMMANDS):
return self._parse_command()

expression = self._parse_expression()
Expand Down
3 changes: 3 additions & 0 deletions tests/dialects/test_mysql.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ def test_identity(self):
self.validate_identity(
"SELECT * FROM t1, t2, t3 FOR SHARE OF t1 NOWAIT FOR UPDATE OF t2, t3 SKIP LOCKED"
)
self.validate_identity(
"REPLACE INTO table SELECT id FROM table2 WHERE cnt > 100", check_command_warning=True
)
self.validate_identity(
"""SELECT * FROM foo WHERE 3 MEMBER OF(info->'$.value')""",
"""SELECT * FROM foo WHERE 3 MEMBER OF(JSON_EXTRACT(info, '$.value'))""",
Expand Down

0 comments on commit e8014e2

Please sign in to comment.