diff options
Diffstat (limited to '')
-rw-r--r-- | sqlglot/dialects/dialect.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/sqlglot/dialects/dialect.py b/sqlglot/dialects/dialect.py index 1bfbfef..ff22547 100644 --- a/sqlglot/dialects/dialect.py +++ b/sqlglot/dialects/dialect.py @@ -2,6 +2,7 @@ from __future__ import annotations import typing as t from enum import Enum +from functools import reduce from sqlglot import exp from sqlglot._typing import E @@ -656,11 +657,18 @@ 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() - this, *rest_args = expression.expressions - for arg in rest_args: - this = exp.DPipe(this=this, expression=arg) + return self.sql(reduce(lambda x, y: exp.DPipe(this=x, expression=y), expression.expressions)) - return self.sql(this) + +def concat_ws_to_dpipe_sql(self: Generator, expression: exp.ConcatWs) -> str: + expression = expression.copy() + delim, *rest_args = expression.expressions + return self.sql( + reduce( + lambda x, y: exp.DPipe(this=x, expression=exp.DPipe(this=delim, expression=y)), + rest_args, + ) + ) def regexp_extract_sql(self: Generator, expression: exp.RegexpExtract) -> str: |