summaryrefslogtreecommitdiffstats
path: root/sqlglot/generator.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlglot/generator.py')
-rw-r--r--sqlglot/generator.py50
1 files changed, 39 insertions, 11 deletions
diff --git a/sqlglot/generator.py b/sqlglot/generator.py
index 977185f..8e3ff9b 100644
--- a/sqlglot/generator.py
+++ b/sqlglot/generator.py
@@ -77,6 +77,7 @@ class Generator:
exp.ExecuteAsProperty: lambda self, e: self.naked_property(e),
exp.ExternalProperty: lambda self, e: "EXTERNAL",
exp.HeapProperty: lambda self, e: "HEAP",
+ exp.InheritsProperty: lambda self, e: f"INHERITS ({self.expressions(e, flat=True)})",
exp.InlineLengthColumnConstraint: lambda self, e: f"INLINE LENGTH {self.sql(e, 'this')}",
exp.InputModelProperty: lambda self, e: f"INPUT{self.sql(e, 'this')}",
exp.IntervalSpan: lambda self, e: f"{self.sql(e, 'this')} TO {self.sql(e, 'expression')}",
@@ -96,6 +97,7 @@ class Generator:
exp.ReturnsProperty: lambda self, e: self.naked_property(e),
exp.SampleProperty: lambda self, e: f"SAMPLE BY {self.sql(e, 'this')}",
exp.SetProperty: lambda self, e: f"{'MULTI' if e.args.get('multi') else ''}SET",
+ exp.SetConfigProperty: lambda self, e: self.sql(e, "this"),
exp.SettingsProperty: lambda self, e: f"SETTINGS{self.seg('')}{(self.expressions(e))}",
exp.SqlReadWriteProperty: lambda self, e: e.name,
exp.SqlSecurityProperty: lambda self, e: f"SQL SECURITY {'DEFINER' if e.args.get('definer') else 'INVOKER'}",
@@ -323,6 +325,7 @@ class Generator:
exp.FileFormatProperty: exp.Properties.Location.POST_WITH,
exp.FreespaceProperty: exp.Properties.Location.POST_NAME,
exp.HeapProperty: exp.Properties.Location.POST_WITH,
+ exp.InheritsProperty: exp.Properties.Location.POST_SCHEMA,
exp.InputModelProperty: exp.Properties.Location.POST_SCHEMA,
exp.IsolatedLoadingProperty: exp.Properties.Location.POST_NAME,
exp.JournalProperty: exp.Properties.Location.POST_NAME,
@@ -353,6 +356,7 @@ class Generator:
exp.Set: exp.Properties.Location.POST_SCHEMA,
exp.SettingsProperty: exp.Properties.Location.POST_SCHEMA,
exp.SetProperty: exp.Properties.Location.POST_CREATE,
+ exp.SetConfigProperty: exp.Properties.Location.POST_SCHEMA,
exp.SortKeyProperty: exp.Properties.Location.POST_SCHEMA,
exp.SqlReadWriteProperty: exp.Properties.Location.POST_SCHEMA,
exp.SqlSecurityProperty: exp.Properties.Location.POST_CREATE,
@@ -568,9 +572,11 @@ class Generator:
def wrap(self, expression: exp.Expression | str) -> str:
this_sql = self.indent(
- self.sql(expression)
- if isinstance(expression, (exp.Select, exp.Union))
- else self.sql(expression, "this"),
+ (
+ self.sql(expression)
+ if isinstance(expression, (exp.Select, exp.Union))
+ else self.sql(expression, "this")
+ ),
level=1,
pad=0,
)
@@ -605,9 +611,11 @@ class Generator:
lines = sql.split("\n")
return "\n".join(
- line
- if (skip_first and i == 0) or (skip_last and i == len(lines) - 1)
- else f"{' ' * (level * self._indent + pad)}{line}"
+ (
+ line
+ if (skip_first and i == 0) or (skip_last and i == len(lines) - 1)
+ else f"{' ' * (level * self._indent + pad)}{line}"
+ )
for i, line in enumerate(lines)
)
@@ -775,7 +783,7 @@ class Generator:
def generatedasrowcolumnconstraint_sql(
self, expression: exp.GeneratedAsRowColumnConstraint
) -> str:
- start = "START" if expression.args["start"] else "END"
+ start = "START" if expression.args.get("start") else "END"
hidden = " HIDDEN" if expression.args.get("hidden") else ""
return f"GENERATED ALWAYS AS ROW {start}{hidden}"
@@ -1111,7 +1119,10 @@ class Generator:
partition_by = self.expressions(expression, key="partition_by", flat=True)
partition_by = f" PARTITION BY {partition_by}" if partition_by else ""
where = self.sql(expression, "where")
- return f"{unique}{primary}{amp}{index}{name}{table}{using}{columns}{partition_by}{where}"
+ include = self.expressions(expression, key="include", flat=True)
+ if include:
+ include = f" INCLUDE ({include})"
+ return f"{unique}{primary}{amp}{index}{name}{table}{using}{columns}{include}{partition_by}{where}"
def identifier_sql(self, expression: exp.Identifier) -> str:
text = expression.name
@@ -2017,9 +2028,11 @@ class Generator:
def after_having_modifiers(self, expression: exp.Expression) -> t.List[str]:
return [
self.sql(expression, "qualify"),
- self.seg("WINDOW ") + self.expressions(expression, key="windows", flat=True)
- if expression.args.get("windows")
- else "",
+ (
+ self.seg("WINDOW ") + self.expressions(expression, key="windows", flat=True)
+ if expression.args.get("windows")
+ else ""
+ ),
self.sql(expression, "distribute"),
self.sql(expression, "sort"),
self.sql(expression, "cluster"),
@@ -2552,6 +2565,11 @@ class Generator:
zone = self.sql(expression, "zone")
return f"{this} AT TIME ZONE {zone}"
+ def fromtimezone_sql(self, expression: exp.FromTimeZone) -> str:
+ this = self.sql(expression, "this")
+ zone = self.sql(expression, "zone")
+ return f"{this} AT TIME ZONE {zone} AT TIME ZONE 'UTC'"
+
def add_sql(self, expression: exp.Add) -> str:
return self.binary(expression, "+")
@@ -2669,6 +2687,10 @@ class Generator:
if default:
return f"ALTER COLUMN {this} SET DEFAULT {default}"
+ comment = self.sql(expression, "comment")
+ if comment:
+ return f"ALTER COLUMN {this} COMMENT {comment}"
+
if not expression.args.get("drop"):
self.unsupported("Unsupported ALTER COLUMN syntax")
@@ -2683,6 +2705,12 @@ class Generator:
this = self.sql(expression, "this")
return f"RENAME TO {this}"
+ def renamecolumn_sql(self, expression: exp.RenameColumn) -> str:
+ exists = " IF EXISTS" if expression.args.get("exists") else ""
+ old_column = self.sql(expression, "this")
+ new_column = self.sql(expression, "to")
+ return f"RENAME COLUMN{exists} {old_column} TO {new_column}"
+
def altertable_sql(self, expression: exp.AlterTable) -> str:
actions = expression.args["actions"]