1
0
Fork 0

Adding upstream version 26.0.1.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-13 21:59:02 +01:00
parent 522374f608
commit 09521056ff
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
65 changed files with 45416 additions and 44542 deletions

View file

@ -32,7 +32,7 @@ from sqlglot.helper import flatten, is_float, is_int, seq_get
from sqlglot.tokens import TokenType
if t.TYPE_CHECKING:
from sqlglot._typing import E
from sqlglot._typing import E, B
# from https://docs.snowflake.com/en/sql-reference/functions/to_timestamp.html
@ -107,11 +107,14 @@ def _build_date_time_add(expr_type: t.Type[E]) -> t.Callable[[t.List], E]:
return _builder
def _build_bitor(args: t.List) -> exp.BitwiseOr | exp.Anonymous:
if len(args) == 3:
return exp.Anonymous(this="BITOR", expressions=args)
def _build_bitwise(expr_type: t.Type[B], name: str) -> t.Callable[[t.List], B | exp.Anonymous]:
def _builder(args: t.List) -> B | exp.Anonymous:
if len(args) == 3:
return exp.Anonymous(this=name, expressions=args)
return binary_from_function(exp.BitwiseOr)(args)
return binary_from_function(expr_type)(args)
return _builder
# https://docs.snowflake.com/en/sql-reference/functions/div0
@ -398,11 +401,15 @@ class Snowflake(Dialect):
end=exp.Sub(this=seq_get(args, 1), expression=exp.Literal.number(1)),
step=seq_get(args, 2),
),
"BITXOR": binary_from_function(exp.BitwiseXor),
"BIT_XOR": binary_from_function(exp.BitwiseXor),
"BITOR": _build_bitor,
"BIT_OR": _build_bitor,
"BOOLXOR": binary_from_function(exp.Xor),
"BITXOR": _build_bitwise(exp.BitwiseXor, "BITXOR"),
"BIT_XOR": _build_bitwise(exp.BitwiseXor, "BITXOR"),
"BITOR": _build_bitwise(exp.BitwiseOr, "BITOR"),
"BIT_OR": _build_bitwise(exp.BitwiseOr, "BITOR"),
"BITSHIFTLEFT": _build_bitwise(exp.BitwiseLeftShift, "BITSHIFTLEFT"),
"BIT_SHIFTLEFT": _build_bitwise(exp.BitwiseLeftShift, "BIT_SHIFTLEFT"),
"BITSHIFTRIGHT": _build_bitwise(exp.BitwiseRightShift, "BITSHIFTRIGHT"),
"BIT_SHIFTRIGHT": _build_bitwise(exp.BitwiseRightShift, "BIT_SHIFTRIGHT"),
"BOOLXOR": _build_bitwise(exp.Xor, "BOOLXOR"),
"DATE": _build_datetime("DATE", exp.DataType.Type.DATE),
"DATE_TRUNC": _date_trunc_to_time,
"DATEADD": _build_date_time_add(exp.DateAdd),
@ -885,8 +892,10 @@ class Snowflake(Dialect):
exp.AtTimeZone: lambda self, e: self.func(
"CONVERT_TIMEZONE", e.args.get("zone"), e.this
),
exp.BitwiseXor: rename_func("BITXOR"),
exp.BitwiseOr: rename_func("BITOR"),
exp.BitwiseXor: rename_func("BITXOR"),
exp.BitwiseLeftShift: rename_func("BITSHIFTLEFT"),
exp.BitwiseRightShift: rename_func("BITSHIFTRIGHT"),
exp.Create: transforms.preprocess([_flatten_structured_types_unless_iceberg]),
exp.DateAdd: date_delta_sql("DATEADD"),
exp.DateDiff: date_delta_sql("DATEDIFF"),
@ -1088,7 +1097,11 @@ class Snowflake(Dialect):
else:
unnest_alias = exp.TableAlias(this="_u", columns=columns)
explode = f"TABLE(FLATTEN(INPUT => {self.sql(expression.expressions[0])}))"
table_input = self.sql(expression.expressions[0])
if not table_input.startswith("INPUT =>"):
table_input = f"INPUT => {table_input}"
explode = f"TABLE(FLATTEN({table_input}))"
alias = self.sql(unnest_alias)
alias = f" AS {alias}" if alias else ""
return f"{explode}{alias}"
@ -1202,3 +1215,12 @@ class Snowflake(Dialect):
this = exp.cast(this, exp.DataType.Type.TIMESTAMP)
return self.func("TO_CHAR", this, self.format_time(expression))
def datesub_sql(self, expression: exp.DateSub) -> str:
value = expression.expression
if value:
value.replace(value * (-1))
else:
self.unsupported("DateSub cannot be transpiled if the subtracted count is unknown")
return date_delta_sql("DATEADD")(self, expression)