diff options
Diffstat (limited to 'sqlglot/generator.py')
-rw-r--r-- | sqlglot/generator.py | 22 |
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 |