sqlglot 27.8.0__py3-none-any.whl → 27.9.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.
sqlglot/generator.py CHANGED
@@ -1137,14 +1137,14 @@ class Generator(metaclass=_Generator):
1137
1137
  if properties_locs.get(exp.Properties.Location.POST_SCHEMA) or properties_locs.get(
1138
1138
  exp.Properties.Location.POST_WITH
1139
1139
  ):
1140
- properties_sql = self.sql(
1141
- exp.Properties(
1142
- expressions=[
1143
- *properties_locs[exp.Properties.Location.POST_SCHEMA],
1144
- *properties_locs[exp.Properties.Location.POST_WITH],
1145
- ]
1146
- )
1140
+ props_ast = exp.Properties(
1141
+ expressions=[
1142
+ *properties_locs[exp.Properties.Location.POST_SCHEMA],
1143
+ *properties_locs[exp.Properties.Location.POST_WITH],
1144
+ ]
1147
1145
  )
1146
+ props_ast.parent = expression
1147
+ properties_sql = self.sql(props_ast)
1148
1148
 
1149
1149
  if properties_locs.get(exp.Properties.Location.POST_SCHEMA):
1150
1150
  properties_sql = self.sep() + properties_sql
@@ -1670,8 +1670,14 @@ class Generator(metaclass=_Generator):
1670
1670
  elif p_loc == exp.Properties.Location.POST_SCHEMA:
1671
1671
  root_properties.append(p)
1672
1672
 
1673
- root_props = self.root_properties(exp.Properties(expressions=root_properties))
1674
- with_props = self.with_properties(exp.Properties(expressions=with_properties))
1673
+ root_props_ast = exp.Properties(expressions=root_properties)
1674
+ root_props_ast.parent = expression.parent
1675
+
1676
+ with_props_ast = exp.Properties(expressions=with_properties)
1677
+ with_props_ast.parent = expression.parent
1678
+
1679
+ root_props = self.root_properties(root_props_ast)
1680
+ with_props = self.with_properties(with_props_ast)
1675
1681
 
1676
1682
  if root_props and with_props and not self.pretty:
1677
1683
  with_props = " " + with_props
@@ -2992,7 +2998,19 @@ class Generator(metaclass=_Generator):
2992
2998
  args = [exp.cast(e, exp.DataType.Type.TEXT) for e in args]
2993
2999
 
2994
3000
  if not self.dialect.CONCAT_COALESCE and expression.args.get("coalesce"):
2995
- args = [exp.func("coalesce", e, exp.Literal.string("")) for e in args]
3001
+
3002
+ def _wrap_with_coalesce(e: exp.Expression) -> exp.Expression:
3003
+ if not e.type:
3004
+ from sqlglot.optimizer.annotate_types import annotate_types
3005
+
3006
+ e = annotate_types(e, dialect=self.dialect)
3007
+
3008
+ if e.is_string or e.is_type(exp.DataType.Type.ARRAY):
3009
+ return e
3010
+
3011
+ return exp.func("coalesce", e, exp.Literal.string(""))
3012
+
3013
+ args = [_wrap_with_coalesce(e) for e in args]
2996
3014
 
2997
3015
  return args
2998
3016
 
@@ -3543,8 +3561,9 @@ class Generator(metaclass=_Generator):
3543
3561
  options = f", {options}" if options else ""
3544
3562
  kind = self.sql(expression, "kind")
3545
3563
  not_valid = " NOT VALID" if expression.args.get("not_valid") else ""
3564
+ check = " WITH CHECK" if expression.args.get("check") else ""
3546
3565
 
3547
- return f"ALTER {kind}{exists}{only} {self.sql(expression, 'this')}{on_cluster}{self.sep()}{actions_sql}{not_valid}{options}"
3566
+ return f"ALTER {kind}{exists}{only} {self.sql(expression, 'this')}{on_cluster}{check}{self.sep()}{actions_sql}{not_valid}{options}"
3548
3567
 
3549
3568
  def add_column_sql(self, expression: exp.Expression) -> str:
3550
3569
  sql = self.sql(expression)
@@ -4029,8 +4048,10 @@ class Generator(metaclass=_Generator):
4029
4048
  return f"DUPLICATE KEY ({self.expressions(expression, flat=True)})"
4030
4049
 
4031
4050
  # https://docs.starrocks.io/docs/sql-reference/sql-statements/table_bucket_part_index/CREATE_TABLE/
4032
- def uniquekeyproperty_sql(self, expression: exp.UniqueKeyProperty) -> str:
4033
- return f"UNIQUE KEY ({self.expressions(expression, flat=True)})"
4051
+ def uniquekeyproperty_sql(
4052
+ self, expression: exp.UniqueKeyProperty, prefix: str = "UNIQUE KEY"
4053
+ ) -> str:
4054
+ return f"{prefix} ({self.expressions(expression, flat=True)})"
4034
4055
 
4035
4056
  # https://docs.starrocks.io/docs/sql-reference/sql-statements/data-definition/CREATE_TABLE/#distribution_desc
4036
4057
  def distributedbyproperty_sql(self, expression: exp.DistributedByProperty) -> str:
@@ -4162,6 +4183,47 @@ class Generator(metaclass=_Generator):
4162
4183
  parameters = self.sql(expression, "params_struct")
4163
4184
  return self.func("PREDICT", model, table, parameters or None)
4164
4185
 
4186
+ def generateembedding_sql(self, expression: exp.GenerateEmbedding) -> str:
4187
+ model = self.sql(expression, "this")
4188
+ model = f"MODEL {model}"
4189
+ table = self.sql(expression, "expression")
4190
+ table = f"TABLE {table}" if not isinstance(expression.expression, exp.Subquery) else table
4191
+ parameters = self.sql(expression, "params_struct")
4192
+ return self.func("GENERATE_EMBEDDING", model, table, parameters or None)
4193
+
4194
+ def featuresattime_sql(self, expression: exp.FeaturesAtTime) -> str:
4195
+ this_sql = self.sql(expression, "this")
4196
+ if isinstance(expression.this, exp.Table):
4197
+ this_sql = f"TABLE {this_sql}"
4198
+
4199
+ return self.func(
4200
+ "FEATURES_AT_TIME",
4201
+ this_sql,
4202
+ expression.args.get("time"),
4203
+ expression.args.get("num_rows"),
4204
+ expression.args.get("ignore_feature_nulls"),
4205
+ )
4206
+
4207
+ def vectorsearch_sql(self, expression: exp.VectorSearch) -> str:
4208
+ this_sql = self.sql(expression, "this")
4209
+ if isinstance(expression.this, exp.Table):
4210
+ this_sql = f"TABLE {this_sql}"
4211
+
4212
+ query_table = self.sql(expression, "query_table")
4213
+ if isinstance(expression.args["query_table"], exp.Table):
4214
+ query_table = f"TABLE {query_table}"
4215
+
4216
+ return self.func(
4217
+ "VECTOR_SEARCH",
4218
+ this_sql,
4219
+ expression.args.get("column_to_search"),
4220
+ query_table,
4221
+ expression.args.get("query_column_to_search"),
4222
+ expression.args.get("top_k"),
4223
+ expression.args.get("distance_type"),
4224
+ expression.args.get("options"),
4225
+ )
4226
+
4165
4227
  def forin_sql(self, expression: exp.ForIn) -> str:
4166
4228
  this = self.sql(expression, "this")
4167
4229
  expression_sql = self.sql(expression, "expression")
@@ -4869,19 +4931,6 @@ class Generator(metaclass=_Generator):
4869
4931
  value = f" {value}" if value else ""
4870
4932
  return f"{this}{value}"
4871
4933
 
4872
- def featuresattime_sql(self, expression: exp.FeaturesAtTime) -> str:
4873
- this_sql = self.sql(expression, "this")
4874
- if isinstance(expression.this, exp.Table):
4875
- this_sql = f"TABLE {this_sql}"
4876
-
4877
- return self.func(
4878
- "FEATURES_AT_TIME",
4879
- this_sql,
4880
- expression.args.get("time"),
4881
- expression.args.get("num_rows"),
4882
- expression.args.get("ignore_feature_nulls"),
4883
- )
4884
-
4885
4934
  def watermarkcolumnconstraint_sql(self, expression: exp.WatermarkColumnConstraint) -> str:
4886
4935
  return (
4887
4936
  f"WATERMARK FOR {self.sql(expression, 'this')} AS {self.sql(expression, 'expression')}"
@@ -5151,3 +5200,20 @@ class Generator(metaclass=_Generator):
5151
5200
 
5152
5201
  def space_sql(self: Generator, expression: exp.Space) -> str:
5153
5202
  return self.sql(exp.Repeat(this=exp.Literal.string(" "), times=expression.this))
5203
+
5204
+ def buildproperty_sql(self, expression: exp.BuildProperty) -> str:
5205
+ return f"BUILD {self.sql(expression, 'this')}"
5206
+
5207
+ def refreshtriggerproperty_sql(self, expression: exp.RefreshTriggerProperty) -> str:
5208
+ method = self.sql(expression, "method")
5209
+ kind = expression.args.get("kind")
5210
+ if not kind:
5211
+ return f"REFRESH {method}"
5212
+
5213
+ every = self.sql(expression, "every")
5214
+ unit = self.sql(expression, "unit")
5215
+ every = f" EVERY {every} {unit}" if every else ""
5216
+ starts = self.sql(expression, "starts")
5217
+ starts = f" STARTS {starts}" if starts else ""
5218
+
5219
+ return f"REFRESH {method} ON {kind}{every}{starts}"
@@ -853,7 +853,7 @@ def qualify_outputs(scope_or_expression: Scope | exp.Expression) -> None:
853
853
  if isinstance(selection, exp.Subquery):
854
854
  if not selection.output_name:
855
855
  selection.set("alias", exp.TableAlias(this=exp.to_identifier(f"_col_{i}")))
856
- elif not isinstance(selection, exp.Alias) and not selection.is_star:
856
+ elif not isinstance(selection, (exp.Alias, exp.Aliases)) and not selection.is_star:
857
857
  selection = alias(
858
858
  selection,
859
859
  alias=selection.output_name or f"_col_{i}",
sqlglot/parser.py CHANGED
@@ -1244,7 +1244,6 @@ class Parser(metaclass=_Parser):
1244
1244
  "OPENJSON": lambda self: self._parse_open_json(),
1245
1245
  "OVERLAY": lambda self: self._parse_overlay(),
1246
1246
  "POSITION": lambda self: self._parse_position(),
1247
- "PREDICT": lambda self: self._parse_predict(),
1248
1247
  "SAFE_CAST": lambda self: self._parse_cast(False, safe=True),
1249
1248
  "STRING_AGG": lambda self: self._parse_string_agg(),
1250
1249
  "SUBSTRING": lambda self: self._parse_substring(),
@@ -3533,10 +3532,17 @@ class Parser(metaclass=_Parser):
3533
3532
 
3534
3533
  while True:
3535
3534
  if self._match_set(self.QUERY_MODIFIER_PARSERS, advance=False):
3536
- parser = self.QUERY_MODIFIER_PARSERS[self._curr.token_type]
3535
+ modifier_token = self._curr
3536
+ parser = self.QUERY_MODIFIER_PARSERS[modifier_token.token_type]
3537
3537
  key, expression = parser(self)
3538
3538
 
3539
3539
  if expression:
3540
+ if this.args.get(key):
3541
+ self.raise_error(
3542
+ f"Found multiple '{modifier_token.text.upper()}' clauses",
3543
+ token=modifier_token,
3544
+ )
3545
+
3540
3546
  this.set(key, expression)
3541
3547
  if key == "limit":
3542
3548
  offset = expression.args.pop("offset", None)
@@ -6914,20 +6920,6 @@ class Parser(metaclass=_Parser):
6914
6920
  exp.StrPosition, this=haystack, substr=needle, position=seq_get(args, 2)
6915
6921
  )
6916
6922
 
6917
- def _parse_predict(self) -> exp.Predict:
6918
- self._match_text_seq("MODEL")
6919
- this = self._parse_table()
6920
-
6921
- self._match(TokenType.COMMA)
6922
- self._match_text_seq("TABLE")
6923
-
6924
- return self.expression(
6925
- exp.Predict,
6926
- this=this,
6927
- expression=self._parse_table(),
6928
- params_struct=self._match(TokenType.COMMA) and self._parse_bitwise(),
6929
- )
6930
-
6931
6923
  def _parse_join_hint(self, func_name: str) -> exp.JoinHint:
6932
6924
  args = self._parse_csv(self._parse_table)
6933
6925
  return exp.JoinHint(this=func_name.upper(), expressions=args)
@@ -7597,6 +7589,7 @@ class Parser(metaclass=_Parser):
7597
7589
  exists = self._parse_exists()
7598
7590
  only = self._match_text_seq("ONLY")
7599
7591
  this = self._parse_table(schema=True)
7592
+ check = self._match_text_seq("WITH", "CHECK")
7600
7593
  cluster = self._parse_on_property() if self._match(TokenType.ON) else None
7601
7594
 
7602
7595
  if self._next:
@@ -7619,6 +7612,7 @@ class Parser(metaclass=_Parser):
7619
7612
  options=options,
7620
7613
  cluster=cluster,
7621
7614
  not_valid=not_valid,
7615
+ check=check,
7622
7616
  )
7623
7617
 
7624
7618
  return self._parse_as_command(start)
@@ -8722,3 +8716,36 @@ class Parser(metaclass=_Parser):
8722
8716
  returning=returning,
8723
8717
  on_condition=self._parse_on_condition(),
8724
8718
  )
8719
+
8720
+ def _parse_group_concat(self) -> t.Optional[exp.Expression]:
8721
+ def concat_exprs(
8722
+ node: t.Optional[exp.Expression], exprs: t.List[exp.Expression]
8723
+ ) -> exp.Expression:
8724
+ if isinstance(node, exp.Distinct) and len(node.expressions) > 1:
8725
+ concat_exprs = [
8726
+ self.expression(exp.Concat, expressions=node.expressions, safe=True)
8727
+ ]
8728
+ node.set("expressions", concat_exprs)
8729
+ return node
8730
+ if len(exprs) == 1:
8731
+ return exprs[0]
8732
+ return self.expression(exp.Concat, expressions=args, safe=True)
8733
+
8734
+ args = self._parse_csv(self._parse_lambda)
8735
+
8736
+ if args:
8737
+ order = args[-1] if isinstance(args[-1], exp.Order) else None
8738
+
8739
+ if order:
8740
+ # Order By is the last (or only) expression in the list and has consumed the 'expr' before it,
8741
+ # remove 'expr' from exp.Order and add it back to args
8742
+ args[-1] = order.this
8743
+ order.set("this", concat_exprs(order.this, args))
8744
+
8745
+ this = order or concat_exprs(args[0], args)
8746
+ else:
8747
+ this = None
8748
+
8749
+ separator = self._parse_field() if self._match(TokenType.SEPARATOR) else None
8750
+
8751
+ return self.expression(exp.GroupConcat, this=this, separator=separator)
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 27.8.0
3
+ Version: 27.9.0
4
4
  Summary: An easily customizable SQL parser and transpiler
5
5
  Author-email: Toby Mao <toby.mao@gmail.com>
6
+ License-Expression: MIT
6
7
  Project-URL: Homepage, https://sqlglot.com/
7
8
  Project-URL: Documentation, https://sqlglot.com/sqlglot.html
8
9
  Project-URL: Repository, https://github.com/tobymao/sqlglot
@@ -72,6 +73,7 @@ Contributions are very welcome in SQLGlot; read the [contribution guide](https:/
72
73
  * [Run Tests and Lint](#run-tests-and-lint)
73
74
  * [Benchmarks](#benchmarks)
74
75
  * [Optional Dependencies](#optional-dependencies)
76
+ * [Supported Dialects](#supported-dialects)
75
77
 
76
78
  ## Install
77
79
 
@@ -584,3 +586,41 @@ SQLGlot uses [dateutil](https://github.com/dateutil/dateutil) to simplify litera
584
586
  ```sql
585
587
  x + interval '1' month
586
588
  ```
589
+
590
+ ## Supported Dialects
591
+
592
+ | Dialect | Support Level |
593
+ |---------|---------------|
594
+ | Athena | Official |
595
+ | BigQuery | Official |
596
+ | ClickHouse | Official |
597
+ | Databricks | Official |
598
+ | Doris | Community |
599
+ | Dremio | Community |
600
+ | Drill | Community |
601
+ | Druid | Community |
602
+ | DuckDB | Official |
603
+ | Exasol | Community |
604
+ | Fabric | Community |
605
+ | Hive | Official |
606
+ | Materialize | Community |
607
+ | MySQL | Official |
608
+ | Oracle | Official |
609
+ | Postgres | Official |
610
+ | Presto | Official |
611
+ | PRQL | Community |
612
+ | Redshift | Official |
613
+ | RisingWave | Community |
614
+ | SingleStore | Community |
615
+ | Snowflake | Official |
616
+ | Spark | Official |
617
+ | SQLite | Official |
618
+ | StarRocks | Official |
619
+ | Tableau | Official |
620
+ | Teradata | Community |
621
+ | Trino | Official |
622
+ | TSQL | Official |
623
+
624
+ **Official Dialects** are maintained by the core SQLGlot team with higher priority for bug fixes and feature additions.
625
+
626
+ **Community Dialects** are developed and maintained primarily through community contributions. These are fully functional but may receive lower priority for issue resolution compared to officially supported dialects. We welcome and encourage community contributions to improve these dialects.
@@ -1,15 +1,15 @@
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=6Bcdz-xEd_4XJzvpG14av5V0A6AT1_hYMo5MIczQYNw,706
4
+ sqlglot/_version.py,sha256=ajw9kWYWGubzKizjYwTc7fCRm3mKMWSeBdumU45KcDc,706
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=qtKgdbejSFXnsDcIZ8XT6wR6EXrtru7U2G4edUyVzU4,247540
8
- sqlglot/generator.py,sha256=KXHnyJQKSq2Xy5RBDC-6GAW_zJqcNsHhZFV4P13l_iU,219354
7
+ sqlglot/expressions.py,sha256=h_bK-KD-wGVNekA7ya4mdZbc9cS9P01gulgYGm6YIFA,250240
8
+ sqlglot/generator.py,sha256=jS270aRZjI04N1boPyRwni-_B0qyG3EWDFsyWpuTOwg,221954
9
9
  sqlglot/helper.py,sha256=9nZjFVRBtMKFC3EdzpDQ6jkazFO19po6BF8xHiNGZIo,15111
10
10
  sqlglot/jsonpath.py,sha256=SQgaxzaEYBN7At9dkTK4N1Spk6xHxvHL6QtCIP6iM30,7905
11
11
  sqlglot/lineage.py,sha256=Qj5ykuDNcATppb9vOjoIKBqRVLbu3OMPiZk9f3iyv40,15312
12
- sqlglot/parser.py,sha256=3DexBAzFLyrg4eEgNffcHB9d1ugwsxrFoZBWttRnmto,329221
12
+ sqlglot/parser.py,sha256=K0Lx-PyjMgpzGXz7qmnLdWDV4GYNc7oW7wJJMXLHQTk,330514
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
@@ -18,30 +18,30 @@ sqlglot/time.py,sha256=Q62gv6kL40OiRBF6BMESxKJcMVn7ZLNw7sv8H34z5FI,18400
18
18
  sqlglot/tokens.py,sha256=ibw_XDjfMgX80ScCwXXrxKLyKCSmHWwZhxPkmKF7q3I,48937
19
19
  sqlglot/transforms.py,sha256=utNDsCBsA7hPUK3-aby3DDgiY_XVMAKQqeoLm1EyihI,41218
20
20
  sqlglot/trie.py,sha256=v27uXMrHfqrXlJ6GmeTSMovsB_3o0ctnlKhdNt7W6fI,2245
21
- sqlglot/dialects/__init__.py,sha256=BQUv9EuMmvhP_wVitGLo0PlCi15atvfXgvREpsTsxeQ,3799
21
+ sqlglot/dialects/__init__.py,sha256=e3K2NHrZO7oXfBzEpRsvgWAgJ_UCEyg7SlUCRqvnPj4,3799
22
22
  sqlglot/dialects/athena.py,sha256=ofArmayYLev4qZQ15GM8mevG04qqR5WGFb2ZcuYm6x4,10966
23
- sqlglot/dialects/bigquery.py,sha256=OAzuqTOGti3_US_oa0s0LWP56LjBaxTJ1B8tVZBgwVY,59733
24
- sqlglot/dialects/clickhouse.py,sha256=ygkVXh8fAxQ2sPvsDIP3y-1bUxV2PSLeS-983MI1uKs,57780
23
+ sqlglot/dialects/bigquery.py,sha256=7zDye1IusAN3F6yWzL04n22X1y-R_iMLoOewEU44V9U,64120
24
+ sqlglot/dialects/clickhouse.py,sha256=OuaDWpvVrHCF9N-u3ZmHZUCs7DSKq_aaRt8yOh2CtaY,58301
25
25
  sqlglot/dialects/databricks.py,sha256=761qPlGOFHa9V8mdQYNAEw0pv4HUJYMkGEuFsdsLC7s,4714
26
- sqlglot/dialects/dialect.py,sha256=QXis6e9a0jX02QbtqpEKGXDY-gWa46EWOv14k9TE_zE,73001
27
- sqlglot/dialects/doris.py,sha256=HT3NyPORz8E1Kk6nNT00CEe4cwz1CfXGhhBcg8Hht1s,21709
28
- sqlglot/dialects/dremio.py,sha256=opJ6QbsJJwhJRH4josxwkw28M_ABgP6zMY30-A6JFdg,5189
26
+ sqlglot/dialects/dialect.py,sha256=02W-j8nYJduA78_BMxMTMGXv2i9mcAGAmXBt1YsH0CQ,73055
27
+ sqlglot/dialects/doris.py,sha256=NvDGHIKGJDVp0b4oOnMu1fyAprJPOiC8J6M85V75iuU,25136
28
+ sqlglot/dialects/dremio.py,sha256=o9wqHnUXlEetOuGUWBZLER1whId9U4l1xledme7qGsg,7392
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=YUne3dZOD-nRlf_JGK5EcT_DJt9I0w7byeYuPcXvKvo,51894
31
+ sqlglot/dialects/duckdb.py,sha256=vCIjZV9lszyXt-hNylVyUdHHlD_F9zsYznzcZLaqGDg,52241
32
32
  sqlglot/dialects/dune.py,sha256=gALut-fFfN2qMsr8LvZ1NQK3F3W9z2f4PwMvTMXVVVg,375
33
- sqlglot/dialects/exasol.py,sha256=vvoL5QcPF6eBoXuZF_iRc_VpF0OviRNjtWD0ER59xqI,14554
33
+ sqlglot/dialects/exasol.py,sha256=ay3g_VyT5WvHTgNyJuCQu0nBt4bpllLZ9IdMBizEgYM,15761
34
34
  sqlglot/dialects/fabric.py,sha256=4Sng2ZhQSaf6eK3ituR9DqDZERaVwYS_UfdpusjsISg,10220
35
35
  sqlglot/dialects/hive.py,sha256=bAZz0qnaOH9f5FyIMkqBu3XB2Cj7y-xnCPbxPsk8U9I,31959
36
36
  sqlglot/dialects/materialize.py,sha256=LD2q1kTRrCwkIu1BfoBvnjTGbupDtoQ8JQMDCIYAXHg,3533
37
- sqlglot/dialects/mysql.py,sha256=ds_dsTw1ZzsoW0tRbxpKOB9fVaIpXb9t1Hqa9n5MGX0,48764
37
+ sqlglot/dialects/mysql.py,sha256=tQHedJthtXdjgHi3cDfdt71kJ4w6ju6J8kD4_MYFwyE,47308
38
38
  sqlglot/dialects/oracle.py,sha256=DpckKjR3FauVmXDIDaNTFqJE0KzXnW4sUlnZjQC8z0Y,15735
39
39
  sqlglot/dialects/postgres.py,sha256=8QF9uEXXFAGCXQah1n8mv4fonF58o0n59Il66hOZYqI,33942
40
40
  sqlglot/dialects/presto.py,sha256=XVeYr2NP86x5enlRqI7MYR6le85_ucYg_BBRocGN3jM,33413
41
41
  sqlglot/dialects/prql.py,sha256=fwN-SPEGx-drwf1K0U2MByN-PkW3C_rOgQ3xeJeychg,7908
42
- sqlglot/dialects/redshift.py,sha256=MXI9W7CgKCtMNjNRPcZPxO8NBA9_PxZx14HB52o-aUc,15822
42
+ sqlglot/dialects/redshift.py,sha256=_sQTom4CGozFDZXW9y6bHQcZ-KiQ7QJjjQqM5rVagSc,15889
43
43
  sqlglot/dialects/risingwave.py,sha256=BqWwW1iT_OIVMwfRamaww79snnBwIgCfr22Go-ggO68,3289
44
- sqlglot/dialects/singlestore.py,sha256=FQzHqeFQd_nBisCIcUK4-4cbLr8bjnAcbVNN7LI7HPk,35533
44
+ sqlglot/dialects/singlestore.py,sha256=x6QUI_lsbQKJVwzF9q2PNg3gKrCbBBXxR05Tk58Zo64,41703
45
45
  sqlglot/dialects/snowflake.py,sha256=XPsqYGBjn3dfddF2dcuM7Ur-4sYdthjW7cSPnptWq_s,70542
46
46
  sqlglot/dialects/spark.py,sha256=5dKMb9cGl0GMreEyFfjClvW1Cwm1JEx3W-hFnxjqW8E,9362
47
47
  sqlglot/dialects/spark2.py,sha256=aCwPqLduLRSUSPtbI1VtBjydK6haKgEy3iahmueGRo4,14742
@@ -50,7 +50,7 @@ sqlglot/dialects/starrocks.py,sha256=2gav0PSNgRdAGXzawdznZliBpglJoQ0wBxPI7ZIMsRw
50
50
  sqlglot/dialects/tableau.py,sha256=oIawDzUITxGCWaEMB8OaNMPWhbC3U-2y09pYPm4eazc,2190
51
51
  sqlglot/dialects/teradata.py,sha256=7LxCcRwP0Idd_OnCzA57NCdheVjHcKC2aFAKG5N49IU,18202
52
52
  sqlglot/dialects/trino.py,sha256=Z7prRhCxIBh0KCxIQpWmVOIGHCJM9Xl5oRlqySxln4Y,4350
53
- sqlglot/dialects/tsql.py,sha256=sz1t79iCcsMXw8PKYnKldZJbAQ2iobNsqLPVAj-QTXk,54036
53
+ sqlglot/dialects/tsql.py,sha256=kfzHDyKdciqwre6mjZaRHP9tnqfPSPjcM9SP9C045VA,54075
54
54
  sqlglot/executor/__init__.py,sha256=FslewzYQtQdDNg_0Ju2UaiP4vo4IMUgkfkmFsYUhcN0,2958
55
55
  sqlglot/executor/context.py,sha256=WJHJdYQCOeVXwLw0uSSrWSc25eBMn5Ix108RCvdsKRQ,3386
56
56
  sqlglot/executor/env.py,sha256=tQhU5PpTBMcxgZIFddFqxWMNPtHN0vOOz72voncY3KY,8276
@@ -71,13 +71,13 @@ sqlglot/optimizer/optimizer.py,sha256=vXEXDWHvbO-vJmSI7UqJuydM2WrD1xko7rETq2EtVJ
71
71
  sqlglot/optimizer/pushdown_predicates.py,sha256=HGjs3Z4V3-X2d1VTfWhyByY3aL5SmKnVvt3aDXiiBM0,8414
72
72
  sqlglot/optimizer/pushdown_projections.py,sha256=7NoK5NAUVYVhs0YnYyo6WuXfaO-BShSwS6lA8Y-ATQ4,6668
73
73
  sqlglot/optimizer/qualify.py,sha256=oAPfwub7dEkrlCrsptcJWpLya4BgKhN6M5SwIs_86LY,4002
74
- sqlglot/optimizer/qualify_columns.py,sha256=hOfhyczK9zBbUuysKdOK36PJ44nCzzw9BivJh8U5RBI,43921
74
+ sqlglot/optimizer/qualify_columns.py,sha256=EweCIUeb9iDuv3Lo0iYHCrqva4G31CwCfrOg_N3IV_8,43936
75
75
  sqlglot/optimizer/qualify_tables.py,sha256=dA4ZazL7ShQh2JgBwpHuG-4c5lBw1TNzCnuN7m0iVTA,6645
76
76
  sqlglot/optimizer/scope.py,sha256=T6iVYnYwubt-WB1BOFsFYdJ-D7WtWZGL37SuCRQK23s,31154
77
77
  sqlglot/optimizer/simplify.py,sha256=-_yus42OYwqjQ9a2TSGhtG2G0pSkInUry1z7hEMz2pY,51062
78
78
  sqlglot/optimizer/unnest_subqueries.py,sha256=kzWUVDlxs8z9nmRx-8U-pHXPtVZhEIwkKqmKhr2QLvc,10908
79
- sqlglot-27.8.0.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
80
- sqlglot-27.8.0.dist-info/METADATA,sha256=wmjTJpMM7ieiqzI1z-VsjfHD7NH6NzBycgCo0Of-OgY,19444
81
- sqlglot-27.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
82
- sqlglot-27.8.0.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
83
- sqlglot-27.8.0.dist-info/RECORD,,
79
+ sqlglot-27.9.0.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
80
+ sqlglot-27.9.0.dist-info/METADATA,sha256=1kzKJ_pmJY6MWnkGONHCA4nETXxcWclkGSwjYu-sXjk,20681
81
+ sqlglot-27.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
82
+ sqlglot-27.9.0.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
83
+ sqlglot-27.9.0.dist-info/RECORD,,