summaryrefslogtreecommitdiffstats
path: root/sqlglot/dialects
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-10-10 08:53:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-10-10 08:53:14 +0000
commitcd37a3bcaced9283c20baa52837c96b524baec54 (patch)
tree101b1c1487aa832a982dd635cd3b00d4d2ea3ae9 /sqlglot/dialects
parentReleasing progress-linux version 18.11.2-1. (diff)
downloadsqlglot-cd37a3bcaced9283c20baa52837c96b524baec54.tar.xz
sqlglot-cd37a3bcaced9283c20baa52837c96b524baec54.zip
Merging upstream version 18.11.6.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/dialects')
-rw-r--r--sqlglot/dialects/bigquery.py7
-rw-r--r--sqlglot/dialects/postgres.py4
-rw-r--r--sqlglot/dialects/redshift.py19
-rw-r--r--sqlglot/dialects/spark2.py4
-rw-r--r--sqlglot/dialects/tsql.py1
5 files changed, 31 insertions, 4 deletions
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",