1
0
Fork 0

Merging upstream version 23.10.0.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-13 21:31:23 +01:00
parent 6cbc5d6f97
commit 49aa147013
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
91 changed files with 52881 additions and 50396 deletions

View file

@ -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: