diff options
Diffstat (limited to 'sqlglot/dialects/redshift.py')
-rw-r--r-- | sqlglot/dialects/redshift.py | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sqlglot/dialects/redshift.py b/sqlglot/dialects/redshift.py index df70aa7..6c7ba35 100644 --- a/sqlglot/dialects/redshift.py +++ b/sqlglot/dialects/redshift.py @@ -27,6 +27,14 @@ def _parse_date_add(args: t.List) -> exp.DateAdd: ) +def _parse_datediff(args: t.List) -> exp.DateDiff: + return exp.DateDiff( + this=exp.TsOrDsToDate(this=seq_get(args, 2)), + expression=exp.TsOrDsToDate(this=seq_get(args, 1)), + unit=seq_get(args, 0), + ) + + class Redshift(Postgres): # https://docs.aws.amazon.com/redshift/latest/dg/r_names.html RESOLVES_IDENTIFIERS_AS_UPPERCASE = None @@ -51,11 +59,9 @@ class Redshift(Postgres): ), "DATEADD": _parse_date_add, "DATE_ADD": _parse_date_add, - "DATEDIFF": lambda args: exp.DateDiff( - this=exp.TsOrDsToDate(this=seq_get(args, 2)), - expression=exp.TsOrDsToDate(this=seq_get(args, 1)), - unit=seq_get(args, 0), - ), + "DATEDIFF": _parse_datediff, + "DATE_DIFF": _parse_datediff, + "LISTAGG": exp.GroupConcat.from_arg_list, "STRTOL": exp.FromBase.from_arg_list, } @@ -175,6 +181,7 @@ class Redshift(Postgres): exp.GeneratedAsIdentityColumnConstraint: generatedasidentitycolumnconstraint_sql, exp.JSONExtract: _json_sql, exp.JSONExtractScalar: _json_sql, + exp.GroupConcat: rename_func("LISTAGG"), exp.ParseJSON: rename_func("JSON_PARSE"), exp.SafeConcat: concat_to_dpipe_sql, exp.Select: transforms.preprocess( @@ -207,7 +214,6 @@ class Redshift(Postgres): `TEXT` to `VARCHAR`. """ if expression.is_type("text"): - expression = expression.copy() expression.set("this", exp.DataType.Type.VARCHAR) precision = expression.args.get("expressions") |