sqlglot 27.9.0__py3-none-any.whl → 27.10.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/_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.9.0'
32
- __version_tuple__ = version_tuple = (27, 9, 0)
31
+ __version__ = version = '27.10.0'
32
+ __version_tuple__ = version_tuple = (27, 10, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -340,16 +340,13 @@ def _build_format_time(expr_type: t.Type[exp.Expression]) -> t.Callable[[t.List]
340
340
  return _builder
341
341
 
342
342
 
343
- def _build_contains_substring(args: t.List) -> exp.Contains | exp.Anonymous:
344
- if len(args) == 3:
345
- return exp.Anonymous(this="CONTAINS_SUBSTR", expressions=args)
346
-
343
+ def _build_contains_substring(args: t.List) -> exp.Contains:
347
344
  # Lowercase the operands in case of transpilation, as exp.Contains
348
345
  # is case-sensitive on other dialects
349
346
  this = exp.Lower(this=seq_get(args, 0))
350
347
  expr = exp.Lower(this=seq_get(args, 1))
351
348
 
352
- return exp.Contains(this=this, expression=expr)
349
+ return exp.Contains(this=this, expression=expr, json_scope=seq_get(args, 2))
353
350
 
354
351
 
355
352
  def _json_extract_sql(self: BigQuery.Generator, expression: JSON_EXTRACT_TYPE) -> str:
@@ -497,7 +494,6 @@ class BigQuery(Dialect):
497
494
  exp.Array: _annotate_array,
498
495
  exp.ArrayConcat: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
499
496
  exp.Ascii: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
500
- exp.JSONBool: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BOOLEAN),
501
497
  exp.BitwiseAndAgg: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
502
498
  exp.BitwiseOrAgg: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
503
499
  exp.BitwiseXorAgg: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
@@ -511,6 +507,7 @@ class BigQuery(Dialect):
511
507
  e, exp.DataType.Type.VARCHAR
512
508
  ),
513
509
  exp.Concat: _annotate_concat,
510
+ exp.Contains: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BOOLEAN),
514
511
  exp.Corr: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.DOUBLE),
515
512
  exp.CovarPop: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.DOUBLE),
516
513
  exp.CovarSamp: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.DOUBLE),
@@ -524,6 +521,7 @@ class BigQuery(Dialect):
524
521
  ),
525
522
  exp.Grouping: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
526
523
  exp.JSONArray: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.JSON),
524
+ exp.JSONBool: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BOOLEAN),
527
525
  exp.JSONExtractScalar: lambda self, e: self._annotate_with_type(
528
526
  e, exp.DataType.Type.VARCHAR
529
527
  ),
@@ -534,6 +532,7 @@ class BigQuery(Dialect):
534
532
  exp.Lag: lambda self, e: self._annotate_by_args(e, "this", "default"),
535
533
  exp.LowerHex: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.VARCHAR),
536
534
  exp.MD5Digest: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BINARY),
535
+ exp.Normalize: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.VARCHAR),
537
536
  exp.ParseTime: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.TIME),
538
537
  exp.ParseDatetime: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.DATETIME),
539
538
  exp.ParseBignumeric: lambda self, e: self._annotate_with_type(
@@ -689,6 +688,10 @@ class BigQuery(Dialect):
689
688
  "JSON_VALUE_ARRAY": _build_extract_json_with_default_path(exp.JSONValueArray),
690
689
  "LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True),
691
690
  "MD5": exp.MD5Digest.from_arg_list,
691
+ "NORMALIZE_AND_CASEFOLD": lambda args: exp.Normalize(
692
+ this=seq_get(args, 0), form=seq_get(args, 1), is_casefold=True
693
+ ),
694
+ "OCTET_LENGTH": exp.ByteLength.from_arg_list,
692
695
  "TO_HEX": _build_to_hex,
693
696
  "PARSE_DATE": lambda args: build_formatted_time(exp.StrToDate, "bigquery")(
694
697
  [seq_get(args, 1), seq_get(args, 0)]
@@ -1155,6 +1158,7 @@ class BigQuery(Dialect):
1155
1158
  exp.ArrayContains: _array_contains_sql,
1156
1159
  exp.ArrayFilter: filter_array_using_unnest,
1157
1160
  exp.ArrayRemove: filter_array_using_unnest,
1161
+ exp.ByteLength: rename_func("BYTE_LENGTH"),
1158
1162
  exp.Cast: transforms.preprocess([transforms.remove_precision_parameterized_types]),
1159
1163
  exp.CollateProperty: lambda self, e: (
1160
1164
  f"DEFAULT COLLATE {self.sql(e, 'this')}"
@@ -1198,6 +1202,11 @@ class BigQuery(Dialect):
1198
1202
  exp.MD5: lambda self, e: self.func("TO_HEX", self.func("MD5", e.this)),
1199
1203
  exp.MD5Digest: rename_func("MD5"),
1200
1204
  exp.Min: min_or_least,
1205
+ exp.Normalize: lambda self, e: self.func(
1206
+ "NORMALIZE_AND_CASEFOLD" if e.args.get("is_casefold") else "NORMALIZE",
1207
+ e.this,
1208
+ e.args.get("form"),
1209
+ ),
1201
1210
  exp.PartitionedByProperty: lambda self, e: f"PARTITION BY {self.sql(e, 'this')}",
1202
1211
  exp.RegexpExtract: lambda self, e: self.func(
1203
1212
  "REGEXP_EXTRACT",
@@ -1533,7 +1542,7 @@ class BigQuery(Dialect):
1533
1542
  this = this.this
1534
1543
  expr = expr.this
1535
1544
 
1536
- return self.func("CONTAINS_SUBSTR", this, expr)
1545
+ return self.func("CONTAINS_SUBSTR", this, expr, expression.args.get("json_scope"))
1537
1546
 
1538
1547
  def cast_sql(self, expression: exp.Cast, safe_prefix: t.Optional[str] = None) -> str:
1539
1548
  this = expression.this
@@ -345,7 +345,6 @@ class Postgres(Dialect):
345
345
  "REFRESH": TokenType.COMMAND,
346
346
  "REINDEX": TokenType.COMMAND,
347
347
  "RESET": TokenType.COMMAND,
348
- "REVOKE": TokenType.COMMAND,
349
348
  "SERIAL": TokenType.SERIAL,
350
349
  "SMALLSERIAL": TokenType.SMALLSERIAL,
351
350
  "TEMP": TokenType.TEMPORARY,
@@ -113,6 +113,11 @@ class SingleStore(MySQL):
113
113
  % 7,
114
114
  "UNIX_TIMESTAMP": exp.StrToUnix.from_arg_list,
115
115
  "FROM_UNIXTIME": build_formatted_time(exp.UnixToTime, "mysql"),
116
+ "TIME_BUCKET": lambda args: exp.DateBin(
117
+ this=seq_get(args, 0),
118
+ expression=seq_get(args, 1),
119
+ origin=seq_get(args, 2),
120
+ ),
116
121
  "BSON_EXTRACT_BSON": build_json_extract_path(exp.JSONBExtract),
117
122
  "BSON_EXTRACT_STRING": build_json_extract_path(
118
123
  exp.JSONBExtractScalar, json_type="STRING"
@@ -148,6 +153,7 @@ class SingleStore(MySQL):
148
153
  expression=seq_get(args, 0),
149
154
  json_type="JSON",
150
155
  ),
156
+ "JSON_PRETTY": exp.JSONFormat.from_arg_list,
151
157
  "DATE": exp.Date.from_arg_list,
152
158
  "DAYNAME": lambda args: exp.TimeToStr(
153
159
  this=seq_get(args, 0),
@@ -173,6 +179,11 @@ class SingleStore(MySQL):
173
179
  occurrence=seq_get(args, 3),
174
180
  parameters=seq_get(args, 4),
175
181
  ),
182
+ "REDUCE": lambda args: exp.Reduce(
183
+ initial=seq_get(args, 0),
184
+ this=seq_get(args, 1),
185
+ merge=seq_get(args, 2),
186
+ ),
176
187
  }
177
188
 
178
189
  CAST_COLUMN_OPERATORS = {TokenType.COLON_GT, TokenType.NCOLON_GT}
@@ -263,6 +274,9 @@ class SingleStore(MySQL):
263
274
  ),
264
275
  ),
265
276
  exp.UnixToTimeStr: lambda self, e: f"FROM_UNIXTIME({self.sql(e, 'this')}) :> TEXT",
277
+ exp.DateBin: unsupported_args("unit", "zone")(
278
+ lambda self, e: self.func("TIME_BUCKET", e.this, e.expression, e.args.get("origin"))
279
+ ),
266
280
  exp.JSONExtract: unsupported_args(
267
281
  "only_json_types",
268
282
  "expressions",
@@ -277,6 +291,7 @@ class SingleStore(MySQL):
277
291
  exp.JSONPathKey: json_path_key_only_name,
278
292
  exp.JSONPathSubscript: lambda self, e: self.json_path_part(e.this),
279
293
  exp.JSONPathRoot: lambda *_: "",
294
+ exp.JSONFormat: unsupported_args("options", "is_json")(rename_func("JSON_PRETTY")),
280
295
  exp.DayOfWeekIso: lambda self, e: f"(({self.func('DAYOFWEEK', e.this)} % 7) + 1)",
281
296
  exp.DayOfMonth: rename_func("DAY"),
282
297
  exp.Hll: rename_func("APPROX_COUNT_DISTINCT"),
@@ -330,6 +345,11 @@ class SingleStore(MySQL):
330
345
  exp.FromBase: lambda self, e: self.func(
331
346
  "CONV", e.this, e.expression, exp.Literal.number(10)
332
347
  ),
348
+ exp.Reduce: unsupported_args("finish")(
349
+ lambda self, e: self.func(
350
+ "REDUCE", e.args.get("initial"), e.this, e.args.get("merge")
351
+ )
352
+ ),
333
353
  }
334
354
  TRANSFORMS.pop(exp.JSONExtractScalar)
335
355
 
sqlglot/expressions.py CHANGED
@@ -2468,6 +2468,10 @@ class Grant(Expression):
2468
2468
  }
2469
2469
 
2470
2470
 
2471
+ class Revoke(Expression):
2472
+ arg_types = {**Grant.arg_types, "cascade": False}
2473
+
2474
+
2471
2475
  class Group(Expression):
2472
2476
  arg_types = {
2473
2477
  "expressions": False,
@@ -5942,8 +5946,9 @@ class ConcatWs(Concat):
5942
5946
  _sql_names = ["CONCAT_WS"]
5943
5947
 
5944
5948
 
5949
+ # https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#contains_substr
5945
5950
  class Contains(Func):
5946
- arg_types = {"this": True, "expression": True}
5951
+ arg_types = {"this": True, "expression": True, "json_scope": False}
5947
5952
 
5948
5953
 
5949
5954
  # https://docs.oracle.com/cd/B13789_01/server.101/b10759/operators004.htm#i1035022
@@ -5998,7 +6003,7 @@ class DateAdd(Func, IntervalOp):
5998
6003
 
5999
6004
 
6000
6005
  class DateBin(Func, IntervalOp):
6001
- arg_types = {"this": True, "expression": True, "unit": False, "zone": False}
6006
+ arg_types = {"this": True, "expression": True, "unit": False, "zone": False, "origin": False}
6002
6007
 
6003
6008
 
6004
6009
  class DateSub(Func, IntervalOp):
@@ -6792,7 +6797,7 @@ class Nvl2(Func):
6792
6797
 
6793
6798
 
6794
6799
  class Normalize(Func):
6795
- arg_types = {"this": True, "form": False}
6800
+ arg_types = {"this": True, "form": False, "is_casefold": False}
6796
6801
 
6797
6802
 
6798
6803
  class Overlay(Func):
sqlglot/generator.py CHANGED
@@ -4803,7 +4803,14 @@ class Generator(metaclass=_Generator):
4803
4803
 
4804
4804
  return f"{this} APPLY({expr})"
4805
4805
 
4806
- def grant_sql(self, expression: exp.Grant) -> str:
4806
+ def _grant_or_revoke_sql(
4807
+ self,
4808
+ expression: exp.Grant | exp.Revoke,
4809
+ keyword: str,
4810
+ preposition: str,
4811
+ grant_option_prefix: str = "",
4812
+ grant_option_suffix: str = "",
4813
+ ) -> str:
4807
4814
  privileges_sql = self.expressions(expression, key="privileges", flat=True)
4808
4815
 
4809
4816
  kind = self.sql(expression, "kind")
@@ -4814,9 +4821,30 @@ class Generator(metaclass=_Generator):
4814
4821
 
4815
4822
  principals = self.expressions(expression, key="principals", flat=True)
4816
4823
 
4817
- grant_option = " WITH GRANT OPTION" if expression.args.get("grant_option") else ""
4824
+ if not expression.args.get("grant_option"):
4825
+ grant_option_prefix = grant_option_suffix = ""
4818
4826
 
4819
- return f"GRANT {privileges_sql} ON{kind}{securable} TO {principals}{grant_option}"
4827
+ # cascade for revoke only
4828
+ cascade = self.sql(expression, "cascade")
4829
+ cascade = f" {cascade}" if cascade else ""
4830
+
4831
+ return f"{keyword} {grant_option_prefix}{privileges_sql} ON{kind}{securable} {preposition} {principals}{grant_option_suffix}{cascade}"
4832
+
4833
+ def grant_sql(self, expression: exp.Grant) -> str:
4834
+ return self._grant_or_revoke_sql(
4835
+ expression,
4836
+ keyword="GRANT",
4837
+ preposition="TO",
4838
+ grant_option_suffix=" WITH GRANT OPTION",
4839
+ )
4840
+
4841
+ def revoke_sql(self, expression: exp.Revoke) -> str:
4842
+ return self._grant_or_revoke_sql(
4843
+ expression,
4844
+ keyword="REVOKE",
4845
+ preposition="FROM",
4846
+ grant_option_prefix="GRANT OPTION FOR ",
4847
+ )
4820
4848
 
4821
4849
  def grantprivilege_sql(self, expression: exp.GrantPrivilege):
4822
4850
  this = self.sql(expression, "this")
@@ -304,6 +304,7 @@ class Scope:
304
304
  isinstance(ancestor, (exp.Order, exp.Distinct))
305
305
  and (
306
306
  isinstance(ancestor.parent, (exp.Window, exp.WithinGroup))
307
+ or not isinstance(ancestor.parent, exp.Select)
307
308
  or column.name not in named_selects
308
309
  )
309
310
  )
sqlglot/parser.py CHANGED
@@ -844,6 +844,7 @@ class Parser(metaclass=_Parser):
844
844
  TokenType.DESCRIBE: lambda self: self._parse_describe(),
845
845
  TokenType.DROP: lambda self: self._parse_drop(),
846
846
  TokenType.GRANT: lambda self: self._parse_grant(),
847
+ TokenType.REVOKE: lambda self: self._parse_revoke(),
847
848
  TokenType.INSERT: lambda self: self._parse_insert(),
848
849
  TokenType.KILL: lambda self: self._parse_kill(),
849
850
  TokenType.LOAD: lambda self: self._parse_load(),
@@ -8410,9 +8411,9 @@ class Parser(metaclass=_Parser):
8410
8411
 
8411
8412
  return self.expression(exp.GrantPrincipal, this=principal, kind=kind)
8412
8413
 
8413
- def _parse_grant(self) -> exp.Grant | exp.Command:
8414
- start = self._prev
8415
-
8414
+ def _parse_grant_revoke_common(
8415
+ self,
8416
+ ) -> t.Tuple[t.Optional[t.List], t.Optional[str], t.Optional[exp.Expression]]:
8416
8417
  privileges = self._parse_csv(self._parse_grant_privilege)
8417
8418
 
8418
8419
  self._match(TokenType.ON)
@@ -8422,6 +8423,13 @@ class Parser(metaclass=_Parser):
8422
8423
  # such as "foo.*", "*.*" which are not easily parseable yet
8423
8424
  securable = self._try_parse(self._parse_table_parts)
8424
8425
 
8426
+ return privileges, kind, securable
8427
+
8428
+ def _parse_grant(self) -> exp.Grant | exp.Command:
8429
+ start = self._prev
8430
+
8431
+ privileges, kind, securable = self._parse_grant_revoke_common()
8432
+
8425
8433
  if not securable or not self._match_text_seq("TO"):
8426
8434
  return self._parse_as_command(start)
8427
8435
 
@@ -8441,6 +8449,35 @@ class Parser(metaclass=_Parser):
8441
8449
  grant_option=grant_option,
8442
8450
  )
8443
8451
 
8452
+ def _parse_revoke(self) -> exp.Revoke | exp.Command:
8453
+ start = self._prev
8454
+
8455
+ grant_option = self._match_text_seq("GRANT", "OPTION", "FOR")
8456
+
8457
+ privileges, kind, securable = self._parse_grant_revoke_common()
8458
+
8459
+ if not securable or not self._match_text_seq("FROM"):
8460
+ return self._parse_as_command(start)
8461
+
8462
+ principals = self._parse_csv(self._parse_grant_principal)
8463
+
8464
+ cascade = None
8465
+ if self._match_texts(("CASCADE", "RESTRICT")):
8466
+ cascade = self._prev.text.upper()
8467
+
8468
+ if self._curr:
8469
+ return self._parse_as_command(start)
8470
+
8471
+ return self.expression(
8472
+ exp.Revoke,
8473
+ privileges=privileges,
8474
+ kind=kind,
8475
+ securable=securable,
8476
+ principals=principals,
8477
+ grant_option=grant_option,
8478
+ cascade=cascade,
8479
+ )
8480
+
8444
8481
  def _parse_overlay(self) -> exp.Overlay:
8445
8482
  return self.expression(
8446
8483
  exp.Overlay,
sqlglot/tokens.py CHANGED
@@ -376,6 +376,7 @@ class TokenType(AutoName):
376
376
  RENAME = auto()
377
377
  REPLACE = auto()
378
378
  RETURNING = auto()
379
+ REVOKE = auto()
379
380
  REFERENCES = auto()
380
381
  RIGHT = auto()
381
382
  RLIKE = auto()
@@ -972,6 +973,7 @@ class Tokenizer(metaclass=_Tokenizer):
972
973
  "COMMENT": TokenType.COMMENT,
973
974
  "EXPLAIN": TokenType.COMMAND,
974
975
  "GRANT": TokenType.GRANT,
976
+ "REVOKE": TokenType.REVOKE,
975
977
  "OPTIMIZE": TokenType.COMMAND,
976
978
  "PREPARE": TokenType.COMMAND,
977
979
  "VACUUM": TokenType.COMMAND,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 27.9.0
3
+ Version: 27.10.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,26 +1,26 @@
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=ajw9kWYWGubzKizjYwTc7fCRm3mKMWSeBdumU45KcDc,706
4
+ sqlglot/_version.py,sha256=UQWMArALhjnnjO2LJbcK8eqVDukANsZFTdd9DkZF4Vg,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=h_bK-KD-wGVNekA7ya4mdZbc9cS9P01gulgYGm6YIFA,250240
8
- sqlglot/generator.py,sha256=jS270aRZjI04N1boPyRwni-_B0qyG3EWDFsyWpuTOwg,221954
7
+ sqlglot/expressions.py,sha256=kgMzkI6ypuceCguV7qw8qQY-Q2LmTAnCYa17wh0hjbQ,250479
8
+ sqlglot/generator.py,sha256=kAU58UNnAsbuP0ualoi2n4b61c2cg3C0mJJD7IjOciU,222829
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=K0Lx-PyjMgpzGXz7qmnLdWDV4GYNc7oW7wJJMXLHQTk,330514
12
+ sqlglot/parser.py,sha256=QL4ELtwIv8acNgQ3eFQOfMA-q7N7reAalvvtBb8JIGU,331692
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=DQVJ95WrIvhYfe02Ytb4NQug2aMwDCEwpMBW1LKDqzE,2031
17
17
  sqlglot/time.py,sha256=Q62gv6kL40OiRBF6BMESxKJcMVn7ZLNw7sv8H34z5FI,18400
18
- sqlglot/tokens.py,sha256=ibw_XDjfMgX80ScCwXXrxKLyKCSmHWwZhxPkmKF7q3I,48937
18
+ sqlglot/tokens.py,sha256=4U_eej87MjWiqruZrEqvVQGuDuIS7YfR99Kxk1aLu64,48993
19
19
  sqlglot/transforms.py,sha256=utNDsCBsA7hPUK3-aby3DDgiY_XVMAKQqeoLm1EyihI,41218
20
20
  sqlglot/trie.py,sha256=v27uXMrHfqrXlJ6GmeTSMovsB_3o0ctnlKhdNt7W6fI,2245
21
21
  sqlglot/dialects/__init__.py,sha256=e3K2NHrZO7oXfBzEpRsvgWAgJ_UCEyg7SlUCRqvnPj4,3799
22
22
  sqlglot/dialects/athena.py,sha256=ofArmayYLev4qZQ15GM8mevG04qqR5WGFb2ZcuYm6x4,10966
23
- sqlglot/dialects/bigquery.py,sha256=7zDye1IusAN3F6yWzL04n22X1y-R_iMLoOewEU44V9U,64120
23
+ sqlglot/dialects/bigquery.py,sha256=66hGREFUnfora2KRBw6AqZCMc8a2Xk9XbHegRE8rLPI,64753
24
24
  sqlglot/dialects/clickhouse.py,sha256=OuaDWpvVrHCF9N-u3ZmHZUCs7DSKq_aaRt8yOh2CtaY,58301
25
25
  sqlglot/dialects/databricks.py,sha256=761qPlGOFHa9V8mdQYNAEw0pv4HUJYMkGEuFsdsLC7s,4714
26
26
  sqlglot/dialects/dialect.py,sha256=02W-j8nYJduA78_BMxMTMGXv2i9mcAGAmXBt1YsH0CQ,73055
@@ -36,12 +36,12 @@ sqlglot/dialects/hive.py,sha256=bAZz0qnaOH9f5FyIMkqBu3XB2Cj7y-xnCPbxPsk8U9I,3195
36
36
  sqlglot/dialects/materialize.py,sha256=LD2q1kTRrCwkIu1BfoBvnjTGbupDtoQ8JQMDCIYAXHg,3533
37
37
  sqlglot/dialects/mysql.py,sha256=tQHedJthtXdjgHi3cDfdt71kJ4w6ju6J8kD4_MYFwyE,47308
38
38
  sqlglot/dialects/oracle.py,sha256=DpckKjR3FauVmXDIDaNTFqJE0KzXnW4sUlnZjQC8z0Y,15735
39
- sqlglot/dialects/postgres.py,sha256=8QF9uEXXFAGCXQah1n8mv4fonF58o0n59Il66hOZYqI,33942
39
+ sqlglot/dialects/postgres.py,sha256=RAwAhrp_Gbz5Oi8OEuLcmHKnYXydvczYexd81Co0N9Y,33901
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
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=x6QUI_lsbQKJVwzF9q2PNg3gKrCbBBXxR05Tk58Zo64,41703
44
+ sqlglot/dialects/singlestore.py,sha256=rn3a9Koom9AsS3h7anZfW6AfIEmADvAJ8EuTH9NRG9s,42616
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
@@ -73,11 +73,11 @@ sqlglot/optimizer/pushdown_projections.py,sha256=7NoK5NAUVYVhs0YnYyo6WuXfaO-BShS
73
73
  sqlglot/optimizer/qualify.py,sha256=oAPfwub7dEkrlCrsptcJWpLya4BgKhN6M5SwIs_86LY,4002
74
74
  sqlglot/optimizer/qualify_columns.py,sha256=EweCIUeb9iDuv3Lo0iYHCrqva4G31CwCfrOg_N3IV_8,43936
75
75
  sqlglot/optimizer/qualify_tables.py,sha256=dA4ZazL7ShQh2JgBwpHuG-4c5lBw1TNzCnuN7m0iVTA,6645
76
- sqlglot/optimizer/scope.py,sha256=T6iVYnYwubt-WB1BOFsFYdJ-D7WtWZGL37SuCRQK23s,31154
76
+ sqlglot/optimizer/scope.py,sha256=UOTrbwqcTc5iRQf0WStgYWXpE24w6riZy-tJYA18yTw,31229
77
77
  sqlglot/optimizer/simplify.py,sha256=-_yus42OYwqjQ9a2TSGhtG2G0pSkInUry1z7hEMz2pY,51062
78
78
  sqlglot/optimizer/unnest_subqueries.py,sha256=kzWUVDlxs8z9nmRx-8U-pHXPtVZhEIwkKqmKhr2QLvc,10908
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,,
79
+ sqlglot-27.10.0.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
80
+ sqlglot-27.10.0.dist-info/METADATA,sha256=FYz_px3ppPANEJZGC0NthW3Gu3LCGggxS-AaHbJrDbU,20682
81
+ sqlglot-27.10.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
82
+ sqlglot-27.10.0.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
83
+ sqlglot-27.10.0.dist-info/RECORD,,