From 7ff5bab54e3298dd89132706f6adee17f5164f6d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 5 Nov 2022 19:41:12 +0100 Subject: Merging upstream version 9.0.6. Signed-off-by: Daniel Baumann --- sqlglot/generator.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'sqlglot/generator.py') diff --git a/sqlglot/generator.py b/sqlglot/generator.py index 1784287..ca14425 100644 --- a/sqlglot/generator.py +++ b/sqlglot/generator.py @@ -65,6 +65,9 @@ class Generator: exp.VolatilityProperty: lambda self, e: self.sql(e.name), } + # whether 'CREATE ... TRANSIENT ... TABLE' is allowed + # can override in dialects + CREATE_TRANSIENT = False # whether or not null ordering is supported in order by NULL_ORDERING_SUPPORTED = True # always do union distinct or union all @@ -368,15 +371,14 @@ class Generator: expression_sql = self.sql(expression, "expression") expression_sql = f"AS{self.sep()}{expression_sql}" if expression_sql else "" temporary = " TEMPORARY" if expression.args.get("temporary") else "" + transient = " TRANSIENT" if self.CREATE_TRANSIENT and expression.args.get("transient") else "" replace = " OR REPLACE" if expression.args.get("replace") else "" exists_sql = " IF NOT EXISTS" if expression.args.get("exists") else "" unique = " UNIQUE" if expression.args.get("unique") else "" materialized = " MATERIALIZED" if expression.args.get("materialized") else "" properties = self.sql(expression, "properties") - expression_sql = ( - f"CREATE{replace}{temporary}{unique}{materialized} {kind}{exists_sql} {this}{properties} {expression_sql}" - ) + expression_sql = f"CREATE{replace}{temporary}{transient}{unique}{materialized} {kind}{exists_sql} {this}{properties} {expression_sql}" return self.prepend_ctes(expression, expression_sql) def describe_sql(self, expression): @@ -716,15 +718,21 @@ class Generator: def lateral_sql(self, expression): this = self.sql(expression, "this") + if isinstance(expression.this, exp.Subquery): - return f"LATERAL{self.sep()}{this}" - op_sql = self.seg(f"LATERAL VIEW{' OUTER' if expression.args.get('outer') else ''}") + return f"LATERAL {this}" + alias = expression.args["alias"] table = alias.name table = f" {table}" if table else table columns = self.expressions(alias, key="columns", flat=True) columns = f" AS {columns}" if columns else "" - return f"{op_sql}{self.sep()}{this}{table}{columns}" + + if expression.args.get("view"): + op_sql = self.seg(f"LATERAL VIEW{' OUTER' if expression.args.get('outer') else ''}") + return f"{op_sql}{self.sep()}{this}{table}{columns}" + + return f"LATERAL {this}{table}{columns}" def limit_sql(self, expression): this = self.sql(expression, "this") -- cgit v1.2.3