summaryrefslogtreecommitdiffstats
path: root/sqlglot/generator.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlglot/generator.py')
-rw-r--r--sqlglot/generator.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/sqlglot/generator.py b/sqlglot/generator.py
index 81e0ac3..5d8a4ca 100644
--- a/sqlglot/generator.py
+++ b/sqlglot/generator.py
@@ -188,6 +188,7 @@ class Generator:
exp.CollateProperty: exp.Properties.Location.POST_SCHEMA,
exp.CopyGrantsProperty: exp.Properties.Location.POST_SCHEMA,
exp.Cluster: exp.Properties.Location.POST_SCHEMA,
+ exp.ClusteredByProperty: exp.Properties.Location.POST_SCHEMA,
exp.DataBlocksizeProperty: exp.Properties.Location.POST_NAME,
exp.DefinerProperty: exp.Properties.Location.POST_CREATE,
exp.DictRange: exp.Properties.Location.POST_SCHEMA,
@@ -1408,7 +1409,8 @@ class Generator:
expressions = (
f" {self.expressions(expression, flat=True)}" if expression.expressions else ""
)
- return f"SET{expressions}"
+ tag = " TAG" if expression.args.get("tag") else ""
+ return f"{'UNSET' if expression.args.get('unset') else 'SET'}{tag}{expressions}"
def pragma_sql(self, expression: exp.Pragma) -> str:
return f"PRAGMA {self.sql(expression, 'this')}"
@@ -1749,6 +1751,9 @@ class Generator:
return f"{self.sql(expression, 'this')}[{expressions_sql}]"
+ def safebracket_sql(self, expression: exp.SafeBracket) -> str:
+ return self.bracket_sql(expression)
+
def all_sql(self, expression: exp.All) -> str:
return f"ALL {self.wrap(expression)}"
@@ -2000,8 +2005,10 @@ class Generator:
def bitwisexor_sql(self, expression: exp.BitwiseXor) -> str:
return self.binary(expression, "^")
- def cast_sql(self, expression: exp.Cast) -> str:
- return f"CAST({self.sql(expression, 'this')} AS {self.sql(expression, 'to')})"
+ def cast_sql(self, expression: exp.Cast, safe_prefix: t.Optional[str] = None) -> str:
+ format_sql = self.sql(expression, "format")
+ format_sql = f" FORMAT {format_sql}" if format_sql else ""
+ return f"{safe_prefix or ''}CAST({self.sql(expression, 'this')} AS {self.sql(expression, 'to')}{format_sql})"
def currentdate_sql(self, expression: exp.CurrentDate) -> str:
zone = self.sql(expression, "this")
@@ -2227,7 +2234,7 @@ class Generator:
return self.binary(expression, "-")
def trycast_sql(self, expression: exp.TryCast) -> str:
- return f"TRY_CAST({self.sql(expression, 'this')} AS {self.sql(expression, 'to')})"
+ return self.cast_sql(expression, safe_prefix="TRY_")
def use_sql(self, expression: exp.Use) -> str:
kind = self.sql(expression, "kind")
@@ -2409,6 +2416,13 @@ class Generator:
def oncluster_sql(self, expression: exp.OnCluster) -> str:
return ""
+ def clusteredbyproperty_sql(self, expression: exp.ClusteredByProperty) -> str:
+ expressions = self.expressions(expression, key="expressions", flat=True)
+ sorted_by = self.expressions(expression, key="sorted_by", flat=True)
+ sorted_by = f" SORTED BY ({sorted_by})" if sorted_by else ""
+ buckets = self.sql(expression, "buckets")
+ return f"CLUSTERED BY ({expressions}){sorted_by} INTO {buckets} BUCKETS"
+
def cached_generator(
cache: t.Optional[t.Dict[int, str]] = None