diff options
Diffstat (limited to 'sqlglot/dialects/dialect.py')
-rw-r--r-- | sqlglot/dialects/dialect.py | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/sqlglot/dialects/dialect.py b/sqlglot/dialects/dialect.py index 739e8d7..21e7889 100644 --- a/sqlglot/dialects/dialect.py +++ b/sqlglot/dialects/dialect.py @@ -315,11 +315,14 @@ class Dialect(metaclass=_Dialect): ) -> t.List[t.Optional[exp.Expression]]: return self.parser(**opts).parse_into(expression_type, self.tokenize(sql), sql) - def generate(self, expression: t.Optional[exp.Expression], **opts) -> str: - return self.generator(**opts).generate(expression) + def generate(self, expression: exp.Expression, copy: bool = True, **opts) -> str: + return self.generator(**opts).generate(expression, copy=copy) def transpile(self, sql: str, **opts) -> t.List[str]: - return [self.generate(expression, **opts) for expression in self.parse(sql)] + return [ + self.generate(expression, copy=False, **opts) if expression else "" + for expression in self.parse(sql) + ] def tokenize(self, sql: str) -> t.List[Token]: return self.tokenizer.tokenize(sql) @@ -380,9 +383,7 @@ def inline_array_sql(self: Generator, expression: exp.Array) -> str: def no_ilike_sql(self: Generator, expression: exp.ILike) -> str: return self.like_sql( - exp.Like( - this=exp.Lower(this=expression.this.copy()), expression=expression.expression.copy() - ) + exp.Like(this=exp.Lower(this=expression.this), expression=expression.expression) ) @@ -518,7 +519,6 @@ def create_with_partitions_sql(self: Generator, expression: exp.Create) -> str: is_partitionable = expression.args.get("kind") in ("TABLE", "VIEW") if has_schema and is_partitionable: - expression = expression.copy() prop = expression.find(exp.PartitionedByProperty) if prop and prop.this and not isinstance(prop.this, exp.Schema): schema = expression.this @@ -583,7 +583,7 @@ def date_add_interval_sql( this = self.sql(expression, "this") unit = expression.args.get("unit") unit = exp.var(unit.name.upper() if unit else "DAY") - interval = exp.Interval(this=expression.expression.copy(), unit=unit) + interval = exp.Interval(this=expression.expression, unit=unit) return f"{data_type}_{kind}({this}, {self.sql(interval)})" return func @@ -621,7 +621,6 @@ def strposition_to_locate_sql(self: Generator, expression: exp.StrPosition) -> s def left_to_substring_sql(self: Generator, expression: exp.Left) -> str: - expression = expression.copy() return self.sql( exp.Substring( this=expression.this, start=exp.Literal.number(1), length=expression.expression @@ -630,7 +629,6 @@ def left_to_substring_sql(self: Generator, expression: exp.Left) -> str: def right_to_substring_sql(self: Generator, expression: exp.Left) -> str: - expression = expression.copy() return self.sql( exp.Substring( this=expression.this, @@ -675,7 +673,7 @@ def count_if_to_sum(self: Generator, expression: exp.CountIf) -> str: cond = expression.this.expressions[0] self.unsupported("DISTINCT is not supported when converting COUNT_IF to SUM") - return self.func("sum", exp.func("if", cond.copy(), 1, 0)) + return self.func("sum", exp.func("if", cond, 1, 0)) def trim_sql(self: Generator, expression: exp.Trim) -> str: @@ -716,12 +714,10 @@ def ts_or_ds_to_date_sql(dialect: str) -> t.Callable: def concat_to_dpipe_sql(self: Generator, expression: exp.Concat | exp.SafeConcat) -> str: - expression = expression.copy() return self.sql(reduce(lambda x, y: exp.DPipe(this=x, expression=y), expression.expressions)) def concat_ws_to_dpipe_sql(self: Generator, expression: exp.ConcatWs) -> str: - expression = expression.copy() delim, *rest_args = expression.expressions return self.sql( reduce( @@ -809,13 +805,6 @@ def isnull_to_is_null(args: t.List) -> exp.Expression: return exp.Paren(this=exp.Is(this=seq_get(args, 0), expression=exp.null())) -def move_insert_cte_sql(self: Generator, expression: exp.Insert) -> str: - if expression.expression.args.get("with"): - expression = expression.copy() - expression.set("with", expression.expression.args["with"].pop()) - return self.insert_sql(expression) - - def generatedasidentitycolumnconstraint_sql( self: Generator, expression: exp.GeneratedAsIdentityColumnConstraint ) -> str: |