diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:02:18 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:02:18 +0000 |
commit | 41f1f5740d2140bfd3b2a282ca1087a4b576679a (patch) | |
tree | 0b1eb5ba5c759d08b05d56e50675784b6170f955 /sqlglot/dialects/dialect.py | |
parent | Releasing debian version 23.7.0-1. (diff) | |
download | sqlglot-41f1f5740d2140bfd3b2a282ca1087a4b576679a.tar.xz sqlglot-41f1f5740d2140bfd3b2a282ca1087a4b576679a.zip |
Merging upstream version 23.10.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/dialects/dialect.py')
-rw-r--r-- | sqlglot/dialects/dialect.py | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/sqlglot/dialects/dialect.py b/sqlglot/dialects/dialect.py index 81057c2..5a47438 100644 --- a/sqlglot/dialects/dialect.py +++ b/sqlglot/dialects/dialect.py @@ -562,7 +562,7 @@ def if_sql( def arrow_json_extract_sql(self: Generator, expression: JSON_EXTRACT_TYPE) -> str: this = expression.this if self.JSON_TYPE_REQUIRED_FOR_EXTRACTION and isinstance(this, exp.Literal) and this.is_string: - this.replace(exp.cast(this, "json")) + this.replace(exp.cast(this, exp.DataType.Type.JSON)) return self.binary(expression, "->" if isinstance(expression, exp.JSONExtract) else "->>") @@ -571,6 +571,13 @@ def inline_array_sql(self: Generator, expression: exp.Array) -> str: return f"[{self.expressions(expression, flat=True)}]" +def inline_array_unless_query(self: Generator, expression: exp.Array) -> str: + elem = seq_get(expression.expressions, 0) + if isinstance(elem, exp.Expression) and elem.find(exp.Query): + return self.func("ARRAY", elem) + return inline_array_sql(self, expression) + + def no_ilike_sql(self: Generator, expression: exp.ILike) -> str: return self.like_sql( exp.Like(this=exp.Lower(this=expression.this), expression=expression.expression) @@ -765,11 +772,11 @@ def no_timestamp_sql(self: Generator, expression: exp.Timestamp) -> str: from sqlglot.optimizer.annotate_types import annotate_types target_type = annotate_types(expression).type or exp.DataType.Type.TIMESTAMP - return self.sql(exp.cast(expression.this, to=target_type)) + return self.sql(exp.cast(expression.this, target_type)) if expression.text("expression").lower() in TIMEZONES: return self.sql( exp.AtTimeZone( - this=exp.cast(expression.this, to=exp.DataType.Type.TIMESTAMP), + this=exp.cast(expression.this, exp.DataType.Type.TIMESTAMP), zone=expression.expression, ) ) @@ -806,11 +813,11 @@ def right_to_substring_sql(self: Generator, expression: exp.Left) -> str: def timestrtotime_sql(self: Generator, expression: exp.TimeStrToTime) -> str: - return self.sql(exp.cast(expression.this, "timestamp")) + return self.sql(exp.cast(expression.this, exp.DataType.Type.TIMESTAMP)) def datestrtodate_sql(self: Generator, expression: exp.DateStrToDate) -> str: - return self.sql(exp.cast(expression.this, "date")) + return self.sql(exp.cast(expression.this, exp.DataType.Type.DATE)) # Used for Presto and Duckdb which use functions that don't support charset, and assume utf-8 @@ -1023,7 +1030,7 @@ def no_last_day_sql(self: Generator, expression: exp.LastDay) -> str: plus_one_month = exp.func("date_add", trunc_curr_date, 1, "month") minus_one_day = exp.func("date_sub", plus_one_month, 1, "day") - return self.sql(exp.cast(minus_one_day, "date")) + return self.sql(exp.cast(minus_one_day, exp.DataType.Type.DATE)) def merge_without_target_sql(self: Generator, expression: exp.Merge) -> str: |