diff options
Diffstat (limited to 'sqlglot/dialects/snowflake.py')
-rw-r--r-- | sqlglot/dialects/snowflake.py | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/sqlglot/dialects/snowflake.py b/sqlglot/dialects/snowflake.py index 1f620df..a2dbfd9 100644 --- a/sqlglot/dialects/snowflake.py +++ b/sqlglot/dialects/snowflake.py @@ -258,14 +258,29 @@ class Snowflake(Dialect): ALTER_PARSERS = { **parser.Parser.ALTER_PARSERS, - "UNSET": lambda self: self._parse_alter_table_set_tag(unset=True), - "SET": lambda self: self._parse_alter_table_set_tag(), + "SET": lambda self: self._parse_set(tag=self._match_text_seq("TAG")), + "UNSET": lambda self: self.expression( + exp.Set, + tag=self._match_text_seq("TAG"), + expressions=self._parse_csv(self._parse_id_var), + unset=True, + ), } - def _parse_alter_table_set_tag(self, unset: bool = False) -> exp.Expression: - self._match_text_seq("TAG") - parser = t.cast(t.Callable, self._parse_id_var if unset else self._parse_conjunction) - return self.expression(exp.SetTag, expressions=self._parse_csv(parser), unset=unset) + def _parse_id_var( + self, + any_token: bool = True, + tokens: t.Optional[t.Collection[TokenType]] = None, + ) -> t.Optional[exp.Expression]: + if self._match_text_seq("IDENTIFIER", "("): + identifier = ( + super()._parse_id_var(any_token=any_token, tokens=tokens) + or self._parse_string() + ) + self._match_r_paren() + return self.expression(exp.Anonymous, this="IDENTIFIER", expressions=[identifier]) + + return super()._parse_id_var(any_token=any_token, tokens=tokens) class Tokenizer(tokens.Tokenizer): QUOTES = ["'", "$$"] @@ -380,10 +395,6 @@ class Snowflake(Dialect): self.unsupported("INTERSECT with All is not supported in Snowflake") return super().intersect_op(expression) - def settag_sql(self, expression: exp.SetTag) -> str: - action = "UNSET" if expression.args.get("unset") else "SET" - return f"{action} TAG {self.expressions(expression)}" - def describe_sql(self, expression: exp.Describe) -> str: # Default to table if kind is unknown kind_value = expression.args.get("kind") or "TABLE" |