summaryrefslogtreecommitdiffstats
path: root/sqlglot/dialects/snowflake.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlglot/dialects/snowflake.py')
-rw-r--r--sqlglot/dialects/snowflake.py31
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"