From cd37a3bcaced9283c20baa52837c96b524baec54 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Tue, 10 Oct 2023 10:53:14 +0200 Subject: Merging upstream version 18.11.6. Signed-off-by: Daniel Baumann --- sqlglot/dialects/bigquery.py | 7 ++++--- sqlglot/dialects/postgres.py | 4 +++- sqlglot/dialects/redshift.py | 19 +++++++++++++++++++ sqlglot/dialects/spark2.py | 4 ++++ sqlglot/dialects/tsql.py | 1 + 5 files changed, 31 insertions(+), 4 deletions(-) (limited to 'sqlglot/dialects') diff --git a/sqlglot/dialects/bigquery.py b/sqlglot/dialects/bigquery.py index 0d741b5..7f69dd9 100644 --- a/sqlglot/dialects/bigquery.py +++ b/sqlglot/dialects/bigquery.py @@ -260,15 +260,16 @@ class BigQuery(Dialect): "ANY TYPE": TokenType.VARIANT, "BEGIN": TokenType.COMMAND, "BEGIN TRANSACTION": TokenType.BEGIN, - "CURRENT_DATETIME": TokenType.CURRENT_DATETIME, "BYTES": TokenType.BINARY, + "CURRENT_DATETIME": TokenType.CURRENT_DATETIME, "DECLARE": TokenType.COMMAND, "FLOAT64": TokenType.DOUBLE, + "FOR SYSTEM_TIME": TokenType.TIMESTAMP_SNAPSHOT, "INT64": TokenType.BIGINT, + "MODEL": TokenType.MODEL, + "NOT DETERMINISTIC": TokenType.VOLATILE, "RECORD": TokenType.STRUCT, "TIMESTAMP": TokenType.TIMESTAMPTZ, - "NOT DETERMINISTIC": TokenType.VOLATILE, - "FOR SYSTEM_TIME": TokenType.TIMESTAMP_SNAPSHOT, } KEYWORDS.pop("DIV") diff --git a/sqlglot/dialects/postgres.py b/sqlglot/dialects/postgres.py index 008727c..c435309 100644 --- a/sqlglot/dialects/postgres.py +++ b/sqlglot/dialects/postgres.py @@ -205,7 +205,7 @@ def _remove_target_from_merge(expression: exp.Expression) -> exp.Expression: for when in expression.expressions: when.transform( - lambda node: exp.column(node.name) + lambda node: exp.column(node.this) if isinstance(node, exp.Column) and normalize(node.args.get("table")) in targets else node, copy=False, @@ -439,6 +439,8 @@ class Postgres(Dialect): exp.TryCast: no_trycast_sql, exp.TsOrDsToDate: ts_or_ds_to_date_sql("postgres"), exp.UnixToTime: lambda self, e: f"TO_TIMESTAMP({self.sql(e, 'this')})", + exp.VariancePop: rename_func("VAR_POP"), + exp.Variance: rename_func("VAR_SAMP"), exp.Xor: bool_xor_sql, } diff --git a/sqlglot/dialects/redshift.py b/sqlglot/dialects/redshift.py index 88e4448..b70a8a1 100644 --- a/sqlglot/dialects/redshift.py +++ b/sqlglot/dialects/redshift.py @@ -31,6 +31,7 @@ class Redshift(Postgres): RESOLVES_IDENTIFIERS_AS_UPPERCASE = None SUPPORTS_USER_DEFINED_TYPES = False + INDEX_OFFSET = 0 TIME_FORMAT = "'YYYY-MM-DD HH:MI:SS'" TIME_MAPPING = { @@ -57,6 +58,24 @@ class Redshift(Postgres): "STRTOL": exp.FromBase.from_arg_list, } + def _parse_table( + self, + schema: bool = False, + joins: bool = False, + alias_tokens: t.Optional[t.Collection[TokenType]] = None, + parse_bracket: bool = False, + ) -> t.Optional[exp.Expression]: + # Redshift supports UNPIVOTing SUPER objects, e.g. `UNPIVOT foo.obj[0] AS val AT attr` + unpivot = self._match(TokenType.UNPIVOT) + table = super()._parse_table( + schema=schema, + joins=joins, + alias_tokens=alias_tokens, + parse_bracket=parse_bracket, + ) + + return self.expression(exp.Pivot, this=table, unpivot=True) if unpivot else table + def _parse_types( self, check_func: bool = False, schema: bool = False, allow_identifiers: bool = True ) -> t.Optional[exp.Expression]: diff --git a/sqlglot/dialects/spark2.py b/sqlglot/dialects/spark2.py index 4130375..2fd4f4e 100644 --- a/sqlglot/dialects/spark2.py +++ b/sqlglot/dialects/spark2.py @@ -117,6 +117,10 @@ class Spark2(Hive): "DAYOFYEAR": lambda args: exp.DayOfYear(this=exp.TsOrDsToDate(this=seq_get(args, 0))), "DOUBLE": _parse_as_cast("double"), "FLOAT": _parse_as_cast("float"), + "FROM_UTC_TIMESTAMP": lambda args: exp.AtTimeZone( + this=exp.Cast(this=seq_get(args, 0), to=exp.DataType.build("timestamp")), + zone=seq_get(args, 1), + ), "IIF": exp.If.from_arg_list, "INT": _parse_as_cast("int"), "MAP_FROM_ARRAYS": exp.Map.from_arg_list, diff --git a/sqlglot/dialects/tsql.py b/sqlglot/dialects/tsql.py index 6aa49e4..d8bea6d 100644 --- a/sqlglot/dialects/tsql.py +++ b/sqlglot/dialects/tsql.py @@ -598,6 +598,7 @@ class TSQL(Dialect): exp.DataType.Type.BOOLEAN: "BIT", exp.DataType.Type.DECIMAL: "NUMERIC", exp.DataType.Type.DATETIME: "DATETIME2", + exp.DataType.Type.DOUBLE: "FLOAT", exp.DataType.Type.INT: "INTEGER", exp.DataType.Type.TIMESTAMP: "DATETIME2", exp.DataType.Type.TIMESTAMPTZ: "DATETIMEOFFSET", -- cgit v1.2.3