sqlglot 27.25.2__py3-none-any.whl → 27.26.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of sqlglot might be problematic. Click here for more details.

sqlglot/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '27.25.2'
32
- __version_tuple__ = version_tuple = (27, 25, 2)
31
+ __version__ = version = '27.26.0'
32
+ __version_tuple__ = version_tuple = (27, 26, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -769,7 +769,9 @@ class ClickHouse(Dialect):
769
769
  ) -> t.Optional[exp.Join]:
770
770
  join = super()._parse_join(skip_join_token=skip_join_token, parse_bracket=True)
771
771
  if join:
772
- join.set("global", join.args.pop("method", None))
772
+ method = join.args.get("method")
773
+ join.set("method", None)
774
+ join.set("global", method)
773
775
 
774
776
  # tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table`
775
777
  # https://clickhouse.com/docs/en/sql-reference/statements/select/array-join
@@ -721,6 +721,7 @@ class Dialect(metaclass=_Dialect):
721
721
  exp.Exp,
722
722
  exp.Ln,
723
723
  exp.Log,
724
+ exp.Pi,
724
725
  exp.Pow,
725
726
  exp.Quantile,
726
727
  exp.Round,
@@ -1195,7 +1196,7 @@ def no_paren_current_date_sql(self: Generator, expression: exp.CurrentDate) -> s
1195
1196
  def no_recursive_cte_sql(self: Generator, expression: exp.With) -> str:
1196
1197
  if expression.args.get("recursive"):
1197
1198
  self.unsupported("Recursive CTEs are unsupported")
1198
- expression.args["recursive"] = False
1199
+ expression.set("recursive", False)
1199
1200
  return self.with_sql(expression)
1200
1201
 
1201
1202
 
@@ -706,7 +706,6 @@ class DuckDB(Dialect):
706
706
  exp.GenerateDateArray: _generate_datetime_array_sql,
707
707
  exp.GenerateTimestampArray: _generate_datetime_array_sql,
708
708
  exp.GroupConcat: lambda self, e: groupconcat_sql(self, e, within_group=False),
709
- exp.HexString: lambda self, e: self.hexstring_sql(e, binary_function_repr="FROM_HEX"),
710
709
  exp.Explode: rename_func("UNNEST"),
711
710
  exp.IntDiv: lambda self, e: self.binary(e, "//"),
712
711
  exp.IsInf: rename_func("ISINF"),
@@ -1039,8 +1038,8 @@ class DuckDB(Dialect):
1039
1038
  if isinstance(expression.this, exp.Unnest):
1040
1039
  return super().join_sql(expression.on(exp.true()))
1041
1040
 
1042
- expression.args.pop("side", None)
1043
- expression.args.pop("kind", None)
1041
+ expression.set("side", None)
1042
+ expression.set("kind", None)
1044
1043
 
1045
1044
  return super().join_sql(expression)
1046
1045
 
@@ -1301,3 +1300,17 @@ class DuckDB(Dialect):
1301
1300
  return self.func("FORMAT", "'{}'", expression.expressions[0])
1302
1301
 
1303
1302
  return self.function_fallback_sql(expression)
1303
+
1304
+ def hexstring_sql(
1305
+ self, expression: exp.HexString, binary_function_repr: t.Optional[str] = None
1306
+ ) -> str:
1307
+ from_hex = super().hexstring_sql(expression, binary_function_repr="FROM_HEX")
1308
+
1309
+ if expression.args.get("is_integer"):
1310
+ return from_hex
1311
+
1312
+ # `from_hex` has transpiled x'ABCD' (BINARY) to DuckDB's '\xAB\xCD' (BINARY)
1313
+ # `to_hex` & CASTing transforms it to "ABCD" (BINARY) to match representation
1314
+ to_hex = exp.cast(self.func("TO_HEX", from_hex), exp.DataType.Type.BLOB)
1315
+
1316
+ return self.sql(to_hex)
@@ -67,7 +67,7 @@ def _date_add_sql(kind: str) -> t.Callable[[Postgres.Generator, DATE_ADD_OR_SUB]
67
67
 
68
68
  e = self._simplify_unless_literal(expression.expression)
69
69
  if isinstance(e, exp.Literal):
70
- e.args["is_string"] = True
70
+ e.set("is_string", True)
71
71
  elif e.is_number:
72
72
  e = exp.Literal.string(e.to_py())
73
73
  else:
@@ -571,8 +571,13 @@ class Snowflake(Dialect):
571
571
  exp.Degrees,
572
572
  exp.Exp,
573
573
  exp.Sin,
574
+ exp.Sinh,
574
575
  exp.Tan,
576
+ exp.Tanh,
575
577
  exp.Asin,
578
+ exp.Asinh,
579
+ exp.Atan,
580
+ exp.Atan2,
576
581
  exp.Atanh,
577
582
  exp.Cbrt,
578
583
  },
@@ -671,6 +676,7 @@ class Snowflake(Dialect):
671
676
  exp.Stuff,
672
677
  exp.Substring,
673
678
  exp.Round,
679
+ exp.Ceil,
674
680
  )
675
681
  },
676
682
  **{
sqlglot/dialects/tsql.py CHANGED
@@ -1219,7 +1219,8 @@ class TSQL(Dialect):
1219
1219
 
1220
1220
  def create_sql(self, expression: exp.Create) -> str:
1221
1221
  kind = expression.kind
1222
- exists = expression.args.pop("exists", None)
1222
+ exists = expression.args.get("exists")
1223
+ expression.set("exists", None)
1223
1224
 
1224
1225
  like_property = expression.find(exp.LikeProperty)
1225
1226
  if like_property:
sqlglot/expressions.py CHANGED
@@ -1008,8 +1008,8 @@ class Expression(metaclass=_Expression):
1008
1008
 
1009
1009
  def div(self, other: ExpOrStr, typed: bool = False, safe: bool = False) -> Div:
1010
1010
  div = self._binop(Div, other)
1011
- div.args["typed"] = typed
1012
- div.args["safe"] = safe
1011
+ div.set("typed", typed)
1012
+ div.set("safe", safe)
1013
1013
  return div
1014
1014
 
1015
1015
  def asc(self, nulls_first: bool = True) -> Ordered:
@@ -1727,6 +1727,7 @@ class CTE(DerivedTable):
1727
1727
  "alias": True,
1728
1728
  "scalar": False,
1729
1729
  "materialized": False,
1730
+ "key_expressions": False,
1730
1731
  }
1731
1732
 
1732
1733
 
@@ -2386,6 +2387,7 @@ class Insert(DDL, DML):
2386
2387
  "partition": False,
2387
2388
  "settings": False,
2388
2389
  "source": False,
2390
+ "default": False,
2389
2391
  }
2390
2392
 
2391
2393
  def with_(
@@ -5560,6 +5562,10 @@ class Tan(Func):
5560
5562
  pass
5561
5563
 
5562
5564
 
5565
+ class Tanh(Func):
5566
+ pass
5567
+
5568
+
5563
5569
  class Degrees(Func):
5564
5570
  pass
5565
5571
 
@@ -7201,6 +7207,10 @@ class VectorSearch(Func):
7201
7207
  }
7202
7208
 
7203
7209
 
7210
+ class Pi(Func):
7211
+ arg_types = {}
7212
+
7213
+
7204
7214
  class Pow(Binary, Func):
7205
7215
  _sql_names = ["POWER", "POW"]
7206
7216
 
sqlglot/generator.py CHANGED
@@ -1332,7 +1332,10 @@ class Generator(metaclass=_Generator):
1332
1332
  elif materialized:
1333
1333
  materialized = "MATERIALIZED "
1334
1334
 
1335
- return f"{alias_sql} AS {materialized or ''}{self.wrap(expression)}"
1335
+ key_expressions = self.expressions(expression, key="key_expressions", flat=True)
1336
+ key_expressions = f" USING KEY ({key_expressions})" if key_expressions else ""
1337
+
1338
+ return f"{alias_sql}{key_expressions} AS {materialized or ''}{self.wrap(expression)}"
1336
1339
 
1337
1340
  def tablealias_sql(self, expression: exp.TableAlias) -> str:
1338
1341
  alias = self.sql(expression, "this")
@@ -1478,7 +1481,7 @@ class Generator(metaclass=_Generator):
1478
1481
  def delete_sql(self, expression: exp.Delete) -> str:
1479
1482
  this = self.sql(expression, "this")
1480
1483
  this = f" FROM {this}" if this else ""
1481
- using = self.sql(expression, "using")
1484
+ using = self.expressions(expression, key="using")
1482
1485
  using = f" USING {using}" if using else ""
1483
1486
  cluster = self.sql(expression, "cluster")
1484
1487
  cluster = f" {cluster}" if cluster else ""
@@ -1952,10 +1955,11 @@ class Generator(metaclass=_Generator):
1952
1955
  on_conflict = self.sql(expression, "conflict")
1953
1956
  on_conflict = f" {on_conflict}" if on_conflict else ""
1954
1957
  by_name = " BY NAME" if expression.args.get("by_name") else ""
1958
+ default_values = "DEFAULT VALUES" if expression.args.get("default") else ""
1955
1959
  returning = self.sql(expression, "returning")
1956
1960
 
1957
1961
  if self.RETURNING_END:
1958
- expression_sql = f"{expression_sql}{on_conflict}{returning}"
1962
+ expression_sql = f"{expression_sql}{on_conflict}{default_values}{returning}"
1959
1963
  else:
1960
1964
  expression_sql = f"{returning}{expression_sql}{on_conflict}"
1961
1965
 
@@ -162,7 +162,7 @@ def _pop_table_column_aliases(derived_tables: t.List[exp.CTE | exp.Subquery]) ->
162
162
  continue
163
163
  table_alias = derived_table.args.get("alias")
164
164
  if table_alias:
165
- table_alias.args.pop("columns", None)
165
+ table_alias.set("columns", None)
166
166
 
167
167
 
168
168
  def _expand_using(scope: Scope, resolver: Resolver) -> t.Dict[str, t.Any]:
@@ -239,7 +239,7 @@ def _expand_using(scope: Scope, resolver: Resolver) -> t.Dict[str, t.Any]:
239
239
  if join_table not in tables:
240
240
  tables[join_table] = None
241
241
 
242
- join.args.pop("using")
242
+ join.set("using", None)
243
243
  join.set("on", exp.and_(*conditions, copy=False))
244
244
 
245
245
  if column_tables:
@@ -72,7 +72,8 @@ def qualify_tables(
72
72
  if isinstance(derived_table, exp.Subquery):
73
73
  unnested = derived_table.unnest()
74
74
  if isinstance(unnested, exp.Table):
75
- joins = unnested.args.pop("joins", None)
75
+ joins = unnested.args.get("joins")
76
+ unnested.set("joins", None)
76
77
  derived_table.this.replace(exp.select("*").from_(unnested.copy(), copy=False))
77
78
  derived_table.this.set("joins", joins)
78
79
 
@@ -189,7 +189,7 @@ def decorrelate(select, parent_select, external_columns, next_alias_name):
189
189
  # exists queries should not have any selects as it only checks if there are any rows
190
190
  # all selects will be added by the optimizer and only used for join keys
191
191
  if isinstance(parent_predicate, exp.Exists):
192
- select.args["expressions"] = []
192
+ select.set("expressions", [])
193
193
 
194
194
  for key, alias in key_aliases.items():
195
195
  if key in group_by:
sqlglot/parser.py CHANGED
@@ -805,6 +805,7 @@ class Parser(metaclass=_Parser):
805
805
  EXPRESSION_PARSERS = {
806
806
  exp.Cluster: lambda self: self._parse_sort(exp.Cluster, TokenType.CLUSTER_BY),
807
807
  exp.Column: lambda self: self._parse_column(),
808
+ exp.ColumnDef: lambda self: self._parse_column_def(self._parse_column()),
808
809
  exp.Condition: lambda self: self._parse_assignment(),
809
810
  exp.DataType: lambda self: self._parse_types(allow_identifiers=False, schema=True),
810
811
  exp.Expression: lambda self: self._parse_expression(),
@@ -2962,6 +2963,7 @@ class Parser(metaclass=_Parser):
2962
2963
  where=self._match_pair(TokenType.REPLACE, TokenType.WHERE) and self._parse_assignment(),
2963
2964
  partition=self._match(TokenType.PARTITION_BY) and self._parse_partitioned_by(),
2964
2965
  settings=self._match_text_seq("SETTINGS") and self._parse_settings_property(),
2966
+ default=self._match_text_seq("DEFAULT", "VALUES"),
2965
2967
  expression=self._parse_derived_table_values() or self._parse_ddl_select(),
2966
2968
  conflict=self._parse_on_conflict(),
2967
2969
  returning=returning or self._parse_returning(),
@@ -3110,7 +3112,8 @@ class Parser(metaclass=_Parser):
3110
3112
  exp.Delete,
3111
3113
  tables=tables,
3112
3114
  this=self._match(TokenType.FROM) and self._parse_table(joins=True),
3113
- using=self._match(TokenType.USING) and self._parse_table(joins=True),
3115
+ using=self._match(TokenType.USING)
3116
+ and self._parse_csv(lambda: self._parse_table(joins=True)),
3114
3117
  cluster=self._match(TokenType.ON) and self._parse_on_property(),
3115
3118
  where=self._parse_where(),
3116
3119
  returning=returning or self._parse_returning(),
@@ -3434,6 +3437,10 @@ class Parser(metaclass=_Parser):
3434
3437
  if not alias or not alias.this:
3435
3438
  self.raise_error("Expected CTE to have alias")
3436
3439
 
3440
+ key_expressions = (
3441
+ self._parse_wrapped_id_vars() if self._match_text_seq("USING", "KEY") else None
3442
+ )
3443
+
3437
3444
  if not self._match(TokenType.ALIAS) and not self.OPTIONAL_ALIAS_TOKEN_CTE:
3438
3445
  self._retreat(index)
3439
3446
  return None
@@ -3452,6 +3459,7 @@ class Parser(metaclass=_Parser):
3452
3459
  this=self._parse_wrapped(self._parse_statement),
3453
3460
  alias=alias,
3454
3461
  materialized=materialized,
3462
+ key_expressions=key_expressions,
3455
3463
  comments=comments,
3456
3464
  )
3457
3465
 
@@ -3566,7 +3574,8 @@ class Parser(metaclass=_Parser):
3566
3574
 
3567
3575
  this.set(key, expression)
3568
3576
  if key == "limit":
3569
- offset = expression.args.pop("offset", None)
3577
+ offset = expression.args.get("offset")
3578
+ expression.set("offset", None)
3570
3579
 
3571
3580
  if offset:
3572
3581
  offset = exp.Offset(expression=offset)
@@ -5266,8 +5275,8 @@ class Parser(metaclass=_Parser):
5266
5275
  this = self.expression(klass, this=this, comments=comments, expression=expression)
5267
5276
 
5268
5277
  if isinstance(this, exp.Div):
5269
- this.args["typed"] = self.dialect.TYPED_DIVISION
5270
- this.args["safe"] = self.dialect.SAFE_DIVISION
5278
+ this.set("typed", self.dialect.TYPED_DIVISION)
5279
+ this.set("safe", self.dialect.SAFE_DIVISION)
5271
5280
 
5272
5281
  return this
5273
5282
 
sqlglot/transforms.py CHANGED
@@ -650,8 +650,8 @@ def eliminate_full_outer_join(expression: exp.Expression) -> exp.Expression:
650
650
  anti_join_clause = exp.select("1").from_(expression.args["from"]).where(join_conditions)
651
651
  expression_copy.args["joins"][index].set("side", "right")
652
652
  expression_copy = expression_copy.where(exp.Exists(this=anti_join_clause).not_())
653
- expression_copy.args.pop("with", None) # remove CTEs from RIGHT side
654
- expression.args.pop("order", None) # remove order by from LEFT side
653
+ expression_copy.set("with", None) # remove CTEs from RIGHT side
654
+ expression.set("order", None) # remove order by from LEFT side
655
655
 
656
656
  return exp.union(expression, expression_copy, copy=False, distinct=False)
657
657
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 27.25.2
3
+ Version: 27.26.0
4
4
  Summary: An easily customizable SQL parser and transpiler
5
5
  Author-email: Toby Mao <toby.mao@gmail.com>
6
6
  License-Expression: MIT
@@ -1,34 +1,34 @@
1
1
  sqlglot/__init__.py,sha256=za08rtdPh2v7dOpGdNomttlIVGgTrKja7rPd6sQwaTg,5391
2
2
  sqlglot/__main__.py,sha256=022c173KqxsiABWTEpUIq_tJUxuNiW7a7ABsxBXqvu8,2069
3
3
  sqlglot/_typing.py,sha256=-1HPyr3w5COlSJWqlgt8jhFk2dyMvBuvVBqIX1wyVCM,642
4
- sqlglot/_version.py,sha256=7g2qrGSGEBtyJVcg-96igH24Mai1XcjyWgac9I1gvX4,708
4
+ sqlglot/_version.py,sha256=9w8qen9RsOqqU3FjXfjcWwtbPARwSBnvN-eXjITyu3o,708
5
5
  sqlglot/diff.py,sha256=PtOllQMQa1Sw1-V2Y8eypmDqGujXYPaTOp_WLsWkAWk,17314
6
6
  sqlglot/errors.py,sha256=QNKMr-pzLUDR-tuMmn_GK6iMHUIVdb_YSJ_BhGEvuso,2126
7
- sqlglot/expressions.py,sha256=38-7dGJ9JyU_fsopq1_9nSKcbBSVw7b6wi6gOBVGOH8,261645
8
- sqlglot/generator.py,sha256=CmYKDYSuwgPjgRsDlf3e__PFeTdojkUCCplMu4xT4qc,226966
7
+ sqlglot/expressions.py,sha256=SdgLFv2UBT5CdWsPz1sohmQlJsYS6ejb3rModn0zzyE,261767
8
+ sqlglot/generator.py,sha256=aXMzVK4vDjlUQg8i55BtOEgIfGIIa2C4An7NAY-TVQ8,227272
9
9
  sqlglot/helper.py,sha256=OOt5_Mbmnl4Uy6WO6v7DR1iLPcb3v6ITybpq6usf3jw,14471
10
10
  sqlglot/jsonpath.py,sha256=SQgaxzaEYBN7At9dkTK4N1Spk6xHxvHL6QtCIP6iM30,7905
11
11
  sqlglot/lineage.py,sha256=Qj5ykuDNcATppb9vOjoIKBqRVLbu3OMPiZk9f3iyv40,15312
12
- sqlglot/parser.py,sha256=dyXSwRVqU7sXSqR1gFfntOdjq8scBcJkCMTSiYtHF1g,338216
12
+ sqlglot/parser.py,sha256=fiY6bFbbU8fR4fu4oXcQwZWptTvRD30unXmDCZzs7DE,338623
13
13
  sqlglot/planner.py,sha256=ql7Li-bWJRcyXzNaZy_n6bQ6B2ZfunEIB8Ztv2xaxq4,14634
14
14
  sqlglot/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  sqlglot/schema.py,sha256=13H2qKQs27EKdTpDLOvcNnSTDAUbYNKjWtJs4aQCSOA,20509
16
16
  sqlglot/serde.py,sha256=nWpBFUjwZh06Li4qBuNb0YRU_QyflzSVyWkFxujM0WM,3175
17
17
  sqlglot/time.py,sha256=Q62gv6kL40OiRBF6BMESxKJcMVn7ZLNw7sv8H34z5FI,18400
18
18
  sqlglot/tokens.py,sha256=46CMEmRhJOa3eNagIIK9ndm-_ZSwnaV-AqgZs-SHNro,49321
19
- sqlglot/transforms.py,sha256=Nx0AM6b2ApfPOcbTlz9_m6DiauWMKC4s4Xe0yuuBmYk,40175
19
+ sqlglot/transforms.py,sha256=14RbNbPBL3O4vOQPEbQlBTizK8L-Y85Lj47iguW8ucc,40165
20
20
  sqlglot/trie.py,sha256=v27uXMrHfqrXlJ6GmeTSMovsB_3o0ctnlKhdNt7W6fI,2245
21
21
  sqlglot/dialects/__init__.py,sha256=g3HRtyb32r3LooiHKTzuUNB0_rBO_RauuOegp42gB48,3811
22
22
  sqlglot/dialects/athena.py,sha256=ofArmayYLev4qZQ15GM8mevG04qqR5WGFb2ZcuYm6x4,10966
23
23
  sqlglot/dialects/bigquery.py,sha256=l_t70png3A83zEDWUBBsCbiM40HfKIP03Wuq3Zt9CUI,72889
24
- sqlglot/dialects/clickhouse.py,sha256=6kx1cm0YhtHbg5kvcY64Hau2KdeC7Y26SVlVHGLyPEA,58579
24
+ sqlglot/dialects/clickhouse.py,sha256=CTmBJRGVPm4EEy4mhz4nLUfPcqyQWvkyBjWn6pxAVfo,58646
25
25
  sqlglot/dialects/databricks.py,sha256=H4QTq7gg6tJylKc_YWsGp6049KydoI_wlQUHM7iCJtI,4753
26
- sqlglot/dialects/dialect.py,sha256=wUobB-jvOgd_JucRCyUYK6qRx2Hts8mQKmk8kgwWkdc,73979
26
+ sqlglot/dialects/dialect.py,sha256=cEYsrZCMpqV4zfozBLIb_tpX-JhmpEVlhtEoOhRR2Ds,73997
27
27
  sqlglot/dialects/doris.py,sha256=CFnF955Oav3IjZWA80ickOI8tPpCjxk7BN5R4Z6pA1U,25263
28
28
  sqlglot/dialects/dremio.py,sha256=nOMxu_4xVKSOmMGNSwdxXSPc243cNbbpb-xXzYdgdeg,8460
29
29
  sqlglot/dialects/drill.py,sha256=FOh7_KjPx_77pv0DiHKZog0CcmzqeF9_PEmGnJ1ESSM,5825
30
30
  sqlglot/dialects/druid.py,sha256=kh3snZtneehNOWqs3XcPjsrhNaRbkCQ8E4hHbWJ1fHM,690
31
- sqlglot/dialects/duckdb.py,sha256=xennAC2Gh3eImkpHo0-cf4BBzcAKx-HkexyZfQMiUCo,54655
31
+ sqlglot/dialects/duckdb.py,sha256=aOQ4gVhWIgC5mnoO-e-ibNvmpZfS3_S0_8FZye-j3aA,55157
32
32
  sqlglot/dialects/dune.py,sha256=gALut-fFfN2qMsr8LvZ1NQK3F3W9z2f4PwMvTMXVVVg,375
33
33
  sqlglot/dialects/exasol.py,sha256=ay3g_VyT5WvHTgNyJuCQu0nBt4bpllLZ9IdMBizEgYM,15761
34
34
  sqlglot/dialects/fabric.py,sha256=BdkvzM8s-m5DIdBwdjEYskp32ub7aHCAex_xlhQn92I,10222
@@ -36,13 +36,13 @@ sqlglot/dialects/hive.py,sha256=Uw-7Y1LnYOdcv71jCIZXhMvJAWwU5AVcFlIuM-YArnY,3453
36
36
  sqlglot/dialects/materialize.py,sha256=LD2q1kTRrCwkIu1BfoBvnjTGbupDtoQ8JQMDCIYAXHg,3533
37
37
  sqlglot/dialects/mysql.py,sha256=xxVAR-pXMljYCUioavP3nROtOqKmK4kfdp4WWXX7X9g,50049
38
38
  sqlglot/dialects/oracle.py,sha256=qB6Ga0Si2-TpVNqU_2COvWESIUYNL32rYk_BC9aiujE,15898
39
- sqlglot/dialects/postgres.py,sha256=_pXSu29684utgeuzPziSJ0Sw54WEIIunwLugJw7KFD8,34853
39
+ sqlglot/dialects/postgres.py,sha256=DBnVQKXs8ZEapDB_fcM9k73dZO01byOWmbcReAIPwAw,34851
40
40
  sqlglot/dialects/presto.py,sha256=5C6I_aDC-9CDrLfY97EFsUWymaS3B7aW_-h-mHleWIQ,33339
41
41
  sqlglot/dialects/prql.py,sha256=fwN-SPEGx-drwf1K0U2MByN-PkW3C_rOgQ3xeJeychg,7908
42
42
  sqlglot/dialects/redshift.py,sha256=FIwtP3yEg-way9pa32kxCJc6IaFkHVIvgYKZA-Ilmi0,15919
43
43
  sqlglot/dialects/risingwave.py,sha256=Wd-I_Hbwl-6Rgf_NM0I_axliInY418k2kaAWRCmaqyE,3791
44
44
  sqlglot/dialects/singlestore.py,sha256=0QqNYOucNklPQuyeGcsisLI97qPGx_RfWKOFarJz2qw,61711
45
- sqlglot/dialects/snowflake.py,sha256=xWXGFBSbNU3md1JEQVctG3VEtqsMb9bzzWhn9C7Bb_k,82139
45
+ sqlglot/dialects/snowflake.py,sha256=Ll13pf9n_P5b5ied2gDaci_g-dqoyoq9Po7T2hEKzZg,82277
46
46
  sqlglot/dialects/solr.py,sha256=pydnl4ml-3M1Fc4ALm6cMVO9h-5EtqZxPZH_91Nz1Ss,617
47
47
  sqlglot/dialects/spark.py,sha256=mt3Twh0_EJelYy_7HLinDEQ1Chj2EYMjeLCPLRzAJXY,10113
48
48
  sqlglot/dialects/spark2.py,sha256=s4RTOGunYT1_HJt4KbhBWK_eOgmtzlpBCQCl60KEPAQ,15621
@@ -51,7 +51,7 @@ sqlglot/dialects/starrocks.py,sha256=-NWQa2gJbiMMfLauX-Jy9ciJ5DUzUOk2QkPbhglz5W4
51
51
  sqlglot/dialects/tableau.py,sha256=oIawDzUITxGCWaEMB8OaNMPWhbC3U-2y09pYPm4eazc,2190
52
52
  sqlglot/dialects/teradata.py,sha256=7LxCcRwP0Idd_OnCzA57NCdheVjHcKC2aFAKG5N49IU,18202
53
53
  sqlglot/dialects/trino.py,sha256=Z7prRhCxIBh0KCxIQpWmVOIGHCJM9Xl5oRlqySxln4Y,4350
54
- sqlglot/dialects/tsql.py,sha256=w4wdIwYiA9JY4JvESYLEqp-KDvRR89MjE88rdTPK410,54783
54
+ sqlglot/dialects/tsql.py,sha256=mwMrNbcXB81kMT0OrZLYzW6C6aYPrk5uZl6EH052Wok,54820
55
55
  sqlglot/executor/__init__.py,sha256=FslewzYQtQdDNg_0Ju2UaiP4vo4IMUgkfkmFsYUhcN0,2958
56
56
  sqlglot/executor/context.py,sha256=WJHJdYQCOeVXwLw0uSSrWSc25eBMn5Ix108RCvdsKRQ,3386
57
57
  sqlglot/executor/env.py,sha256=tQhU5PpTBMcxgZIFddFqxWMNPtHN0vOOz72voncY3KY,8276
@@ -72,13 +72,13 @@ sqlglot/optimizer/optimizer.py,sha256=vXEXDWHvbO-vJmSI7UqJuydM2WrD1xko7rETq2EtVJ
72
72
  sqlglot/optimizer/pushdown_predicates.py,sha256=HGjs3Z4V3-X2d1VTfWhyByY3aL5SmKnVvt3aDXiiBM0,8414
73
73
  sqlglot/optimizer/pushdown_projections.py,sha256=7NoK5NAUVYVhs0YnYyo6WuXfaO-BShSwS6lA8Y-ATQ4,6668
74
74
  sqlglot/optimizer/qualify.py,sha256=oAPfwub7dEkrlCrsptcJWpLya4BgKhN6M5SwIs_86LY,4002
75
- sqlglot/optimizer/qualify_columns.py,sha256=7aabZhD-dKNiwIW_ZjOEr0RPbWfhSbuR-WI6NnVCZAA,45298
76
- sqlglot/optimizer/qualify_tables.py,sha256=dA4ZazL7ShQh2JgBwpHuG-4c5lBw1TNzCnuN7m0iVTA,6645
75
+ sqlglot/optimizer/qualify_columns.py,sha256=JPVASnK4X0HOGtr6fEhUsd-94yFiJdCSO-H6zx1n4UA,45294
76
+ sqlglot/optimizer/qualify_tables.py,sha256=asv18k_PXAett6xhCyjCBH4EycZk4WYSnNFLqoFfVQw,6687
77
77
  sqlglot/optimizer/scope.py,sha256=UOTrbwqcTc5iRQf0WStgYWXpE24w6riZy-tJYA18yTw,31229
78
78
  sqlglot/optimizer/simplify.py,sha256=27IYsqbz1kyMlURSfRkm_ADSQJg-4805AOMFOjKKytU,51049
79
- sqlglot/optimizer/unnest_subqueries.py,sha256=kzWUVDlxs8z9nmRx-8U-pHXPtVZhEIwkKqmKhr2QLvc,10908
80
- sqlglot-27.25.2.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
81
- sqlglot-27.25.2.dist-info/METADATA,sha256=hz5erKR0OeMhtXFRXYtoAMCrRbmQNxXxaLHehx5PMeg,20825
82
- sqlglot-27.25.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
83
- sqlglot-27.25.2.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
84
- sqlglot-27.25.2.dist-info/RECORD,,
79
+ sqlglot/optimizer/unnest_subqueries.py,sha256=zt5UFYGAfDBTDPbJCpzm4HbXDDia5GlyKZd3SdBXYEk,10906
80
+ sqlglot-27.26.0.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
81
+ sqlglot-27.26.0.dist-info/METADATA,sha256=985nt2ORhwJATcqMCVStzXtPQwQGppvo3T5-4KWpU1c,20825
82
+ sqlglot-27.26.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
83
+ sqlglot-27.26.0.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
84
+ sqlglot-27.26.0.dist-info/RECORD,,