diff options
Diffstat (limited to 'sqlglot/dialects/redshift.py')
-rw-r--r-- | sqlglot/dialects/redshift.py | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/sqlglot/dialects/redshift.py b/sqlglot/dialects/redshift.py index f687ba7..cdb8d0d 100644 --- a/sqlglot/dialects/redshift.py +++ b/sqlglot/dialects/redshift.py @@ -3,7 +3,11 @@ from __future__ import annotations import typing as t from sqlglot import exp, transforms -from sqlglot.dialects.dialect import concat_to_dpipe_sql, rename_func +from sqlglot.dialects.dialect import ( + concat_to_dpipe_sql, + rename_func, + ts_or_ds_to_date_sql, +) from sqlglot.dialects.postgres import Postgres from sqlglot.helper import seq_get from sqlglot.tokens import TokenType @@ -13,6 +17,14 @@ def _json_sql(self: Postgres.Generator, expression: exp.JSONExtract | exp.JSONEx return f'{self.sql(expression, "this")}."{expression.expression.name}"' +def _parse_date_add(args: t.List) -> exp.DateAdd: + return exp.DateAdd( + this=exp.TsOrDsToDate(this=seq_get(args, 2)), + expression=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 @@ -32,11 +44,8 @@ class Redshift(Postgres): expression=seq_get(args, 1), unit=exp.var("month"), ), - "DATEADD": lambda args: exp.DateAdd( - this=exp.TsOrDsToDate(this=seq_get(args, 2)), - expression=seq_get(args, 1), - unit=seq_get(args, 0), - ), + "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)), @@ -123,7 +132,7 @@ class Redshift(Postgres): exp.SafeConcat: concat_to_dpipe_sql, exp.Select: transforms.preprocess([transforms.eliminate_distinct_on]), exp.SortKeyProperty: lambda self, e: f"{'COMPOUND ' if e.args['compound'] else ''}SORTKEY({self.format_args(*e.this)})", - exp.TsOrDsToDate: lambda self, e: self.sql(e.this), + exp.TsOrDsToDate: ts_or_ds_to_date_sql("redshift"), } # Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots |