sqlglot 27.17.0__py3-none-any.whl → 27.19.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.17.0'
32
- __version_tuple__ = version_tuple = (27, 17, 0)
31
+ __version__ = version = '27.19.0'
32
+ __version_tuple__ = version_tuple = (27, 19, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -88,6 +88,7 @@ DIALECTS = [
88
88
  "RisingWave",
89
89
  "SingleStore",
90
90
  "Snowflake",
91
+ "Solr",
91
92
  "Spark",
92
93
  "Spark2",
93
94
  "SQLite",
@@ -754,15 +754,31 @@ class BigQuery(Dialect):
754
754
  SUPPORTS_IMPLICIT_UNNEST = True
755
755
  JOINS_HAVE_EQUAL_PRECEDENCE = True
756
756
 
757
- # BigQuery does not allow ASC/DESC to be used as an identifier
758
- ID_VAR_TOKENS = parser.Parser.ID_VAR_TOKENS - {TokenType.ASC, TokenType.DESC}
759
- ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - {TokenType.ASC, TokenType.DESC}
760
- TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - {TokenType.ASC, TokenType.DESC}
761
- COMMENT_TABLE_ALIAS_TOKENS = parser.Parser.COMMENT_TABLE_ALIAS_TOKENS - {
762
- TokenType.ASC,
763
- TokenType.DESC,
764
- }
765
- UPDATE_ALIAS_TOKENS = parser.Parser.UPDATE_ALIAS_TOKENS - {TokenType.ASC, TokenType.DESC}
757
+ # BigQuery does not allow ASC/DESC to be used as an identifier, allows GRANT as an identifier
758
+ ID_VAR_TOKENS = {
759
+ *parser.Parser.ID_VAR_TOKENS,
760
+ TokenType.GRANT,
761
+ } - {TokenType.ASC, TokenType.DESC}
762
+
763
+ ALIAS_TOKENS = {
764
+ *parser.Parser.ALIAS_TOKENS,
765
+ TokenType.GRANT,
766
+ } - {TokenType.ASC, TokenType.DESC}
767
+
768
+ TABLE_ALIAS_TOKENS = {
769
+ *parser.Parser.TABLE_ALIAS_TOKENS,
770
+ TokenType.GRANT,
771
+ } - {TokenType.ASC, TokenType.DESC}
772
+
773
+ COMMENT_TABLE_ALIAS_TOKENS = {
774
+ *parser.Parser.COMMENT_TABLE_ALIAS_TOKENS,
775
+ TokenType.GRANT,
776
+ } - {TokenType.ASC, TokenType.DESC}
777
+
778
+ UPDATE_ALIAS_TOKENS = {
779
+ *parser.Parser.UPDATE_ALIAS_TOKENS,
780
+ TokenType.GRANT,
781
+ } - {TokenType.ASC, TokenType.DESC}
766
782
 
767
783
  FUNCTIONS = {
768
784
  **parser.Parser.FUNCTIONS,
@@ -99,6 +99,7 @@ class Dialects(str, Enum):
99
99
  REDSHIFT = "redshift"
100
100
  RISINGWAVE = "risingwave"
101
101
  SNOWFLAKE = "snowflake"
102
+ SOLR = "solr"
102
103
  SPARK = "spark"
103
104
  SPARK2 = "spark2"
104
105
  SQLITE = "sqlite"
@@ -291,6 +292,12 @@ class _Dialect(type):
291
292
  TokenType.SEMI,
292
293
  }
293
294
 
295
+ klass.VALID_INTERVAL_UNITS = {
296
+ *klass.VALID_INTERVAL_UNITS,
297
+ *klass.DATE_PART_MAPPING.keys(),
298
+ *klass.DATE_PART_MAPPING.values(),
299
+ }
300
+
294
301
  return klass
295
302
 
296
303
 
@@ -551,6 +558,8 @@ class Dialect(metaclass=_Dialect):
551
558
  IDENTIFIER_START = '"'
552
559
  IDENTIFIER_END = '"'
553
560
 
561
+ VALID_INTERVAL_UNITS: t.Set[str] = set()
562
+
554
563
  # Delimiters for bit, hex, byte and unicode literals
555
564
  BIT_START: t.Optional[str] = None
556
565
  BIT_END: t.Optional[str] = None
sqlglot/dialects/mysql.py CHANGED
@@ -179,6 +179,21 @@ class MySQL(Dialect):
179
179
  "%W": "%A",
180
180
  }
181
181
 
182
+ VALID_INTERVAL_UNITS = {
183
+ *Dialect.VALID_INTERVAL_UNITS,
184
+ "SECOND_MICROSECOND",
185
+ "MINUTE_MICROSECOND",
186
+ "MINUTE_SECOND",
187
+ "HOUR_MICROSECOND",
188
+ "HOUR_SECOND",
189
+ "HOUR_MINUTE",
190
+ "DAY_MICROSECOND",
191
+ "DAY_SECOND",
192
+ "DAY_MINUTE",
193
+ "DAY_HOUR",
194
+ "YEAR_MONTH",
195
+ }
196
+
182
197
  class Tokenizer(tokens.Tokenizer):
183
198
  QUOTES = ["'", '"']
184
199
  COMMENTS = ["--", "#", ("/*", "*/")]
@@ -532,20 +532,26 @@ class Snowflake(Dialect):
532
532
  exp.DataType.Type.INT: {
533
533
  *Dialect.TYPE_TO_EXPRESSIONS[exp.DataType.Type.INT],
534
534
  exp.Ascii,
535
+ exp.ByteLength,
535
536
  exp.Length,
537
+ exp.RtrimmedLength,
536
538
  exp.BitLength,
537
539
  exp.Levenshtein,
540
+ exp.JarowinklerSimilarity,
541
+ exp.StrPosition,
538
542
  },
539
543
  exp.DataType.Type.VARCHAR: {
540
544
  *Dialect.TYPE_TO_EXPRESSIONS[exp.DataType.Type.VARCHAR],
541
545
  exp.Base64DecodeString,
542
546
  exp.Base64Encode,
547
+ exp.DecompressString,
543
548
  exp.MD5,
544
549
  exp.AIAgg,
545
550
  exp.AIClassify,
546
551
  exp.AISummarizeAgg,
547
552
  exp.Chr,
548
553
  exp.Collate,
554
+ exp.Collation,
549
555
  exp.HexDecodeString,
550
556
  exp.HexEncode,
551
557
  exp.Initcap,
@@ -562,6 +568,7 @@ class Snowflake(Dialect):
562
568
  *Dialect.TYPE_TO_EXPRESSIONS[exp.DataType.Type.BINARY],
563
569
  exp.Base64DecodeBinary,
564
570
  exp.Compress,
571
+ exp.DecompressBinary,
565
572
  exp.MD5Digest,
566
573
  exp.SHA1Digest,
567
574
  exp.SHA2Digest,
@@ -575,6 +582,10 @@ class Snowflake(Dialect):
575
582
  exp.DataType.Type.ARRAY: {
576
583
  exp.Split,
577
584
  },
585
+ exp.DataType.Type.OBJECT: {
586
+ exp.ParseUrl,
587
+ exp.ParseIp,
588
+ },
578
589
  }
579
590
 
580
591
  ANNOTATORS = {
@@ -588,7 +599,9 @@ class Snowflake(Dialect):
588
599
  expr_type: lambda self, e: self._annotate_by_args(e, "this")
589
600
  for expr_type in (
590
601
  exp.Left,
602
+ exp.Pad,
591
603
  exp.Right,
604
+ exp.Stuff,
592
605
  exp.Substring,
593
606
  )
594
607
  },
@@ -726,6 +739,9 @@ class Snowflake(Dialect):
726
739
  "NULLIFZERO": _build_if_from_nullifzero,
727
740
  "OBJECT_CONSTRUCT": _build_object_construct,
728
741
  "OCTET_LENGTH": exp.ByteLength.from_arg_list,
742
+ "PARSE_URL": lambda args: exp.ParseUrl(
743
+ this=seq_get(args, 0), permissive=seq_get(args, 1)
744
+ ),
729
745
  "REGEXP_EXTRACT_ALL": _build_regexp_extract(exp.RegexpExtractAll),
730
746
  "REGEXP_REPLACE": _build_regexp_replace,
731
747
  "REGEXP_SUBSTR": _build_regexp_extract(exp.RegexpExtract),
@@ -1503,13 +1519,23 @@ class Snowflake(Dialect):
1503
1519
 
1504
1520
  def datatype_sql(self, expression: exp.DataType) -> str:
1505
1521
  expressions = expression.expressions
1506
- if (
1507
- expressions
1508
- and expression.is_type(*exp.DataType.STRUCT_TYPES)
1509
- and any(isinstance(field_type, exp.DataType) for field_type in expressions)
1510
- ):
1511
- # The correct syntax is OBJECT [ (<key> <value_type [NOT NULL] [, ...]) ]
1512
- return "OBJECT"
1522
+ if expressions and expression.is_type(*exp.DataType.STRUCT_TYPES):
1523
+ for field_type in expressions:
1524
+ # The correct syntax is OBJECT [ (<key> <value_type [NOT NULL] [, ...]) ]
1525
+ if isinstance(field_type, exp.DataType):
1526
+ return "OBJECT"
1527
+ if (
1528
+ isinstance(field_type, exp.ColumnDef)
1529
+ and field_type.this
1530
+ and field_type.this.is_string
1531
+ ):
1532
+ # Doing OBJECT('foo' VARCHAR) is invalid snowflake Syntax. Moreover, besides
1533
+ # converting 'foo' into an identifier, we also need to quote it because these
1534
+ # keys are case-sensitive. For example:
1535
+ #
1536
+ # WITH t AS (SELECT OBJECT_CONSTRUCT('x', 'y') AS c) SELECT c:x FROM t -- correct
1537
+ # WITH t AS (SELECT OBJECT_CONSTRUCT('x', 'y') AS c) SELECT c:X FROM t -- incorrect, returns NULL
1538
+ field_type.this.replace(exp.to_identifier(field_type.name, quoted=True))
1513
1539
 
1514
1540
  return super().datatype_sql(expression)
1515
1541
 
@@ -0,0 +1,22 @@
1
+ from sqlglot import exp, parser, tokens
2
+ from sqlglot.dialects.dialect import Dialect, NormalizationStrategy
3
+ from sqlglot.tokens import TokenType
4
+
5
+
6
+ # https://solr.apache.org/guide/solr/latest/query-guide/sql-query.html
7
+
8
+
9
+ class Solr(Dialect):
10
+ NORMALIZATION_STRATEGY = NormalizationStrategy.CASE_INSENSITIVE
11
+ DPIPE_IS_STRING_CONCAT = False
12
+ SUPPORTS_SEMI_ANTI_JOIN = False
13
+
14
+ class Parser(parser.Parser):
15
+ DISJUNCTION = {
16
+ **parser.Parser.DISJUNCTION,
17
+ TokenType.DPIPE: exp.Or,
18
+ }
19
+
20
+ class Tokenizer(tokens.Tokenizer):
21
+ QUOTES = ["'"]
22
+ IDENTIFIERS = ["`"]
sqlglot/expressions.py CHANGED
@@ -5531,6 +5531,10 @@ class EuclideanDistance(Func):
5531
5531
  arg_types = {"this": True, "expression": True}
5532
5532
 
5533
5533
 
5534
+ class JarowinklerSimilarity(Func):
5535
+ arg_types = {"this": True, "expression": True}
5536
+
5537
+
5534
5538
  class AggFunc(Func):
5535
5539
  pass
5536
5540
 
@@ -6022,6 +6026,10 @@ class Collate(Binary, Func):
6022
6026
  pass
6023
6027
 
6024
6028
 
6029
+ class Collation(Func):
6030
+ pass
6031
+
6032
+
6025
6033
  class Ceil(Func):
6026
6034
  arg_types = {"this": True, "decimals": False, "to": False}
6027
6035
  _sql_names = ["CEIL", "CEILING"]
@@ -6483,6 +6491,7 @@ class HexDecodeString(Func):
6483
6491
  pass
6484
6492
 
6485
6493
 
6494
+ # https://docs.snowflake.com/en/sql-reference/functions/hex_encode
6486
6495
  class HexEncode(Func):
6487
6496
  arg_types = {"this": True, "case": False}
6488
6497
 
@@ -6493,6 +6502,16 @@ class Compress(Func):
6493
6502
  arg_types = {"this": True, "method": False}
6494
6503
 
6495
6504
 
6505
+ # Snowflake: https://docs.snowflake.com/en/sql-reference/functions/decompress_binary
6506
+ class DecompressBinary(Func):
6507
+ arg_types = {"this": True, "method": True}
6508
+
6509
+
6510
+ # Snowflake: https://docs.snowflake.com/en/sql-reference/functions/decompress_string
6511
+ class DecompressString(Func):
6512
+ arg_types = {"this": True, "method": True}
6513
+
6514
+
6496
6515
  class LowerHex(Hex):
6497
6516
  pass
6498
6517
 
@@ -6869,6 +6888,16 @@ class ParseJSON(Func):
6869
6888
  arg_types = {"this": True, "expression": False, "safe": False}
6870
6889
 
6871
6890
 
6891
+ # Snowflake: https://docs.snowflake.com/en/sql-reference/functions/parse_url
6892
+ # Databricks: https://docs.databricks.com/aws/en/sql/language-manual/functions/parse_url
6893
+ class ParseUrl(Func):
6894
+ arg_types = {"this": True, "part_to_extract": False, "key": False, "permissive": False}
6895
+
6896
+
6897
+ class ParseIp(Func):
6898
+ arg_types = {"this": True, "type": True, "permissive": False}
6899
+
6900
+
6872
6901
  class ParseTime(Func):
6873
6902
  arg_types = {"this": True, "format": True}
6874
6903
 
@@ -6899,6 +6928,10 @@ class Length(Func):
6899
6928
  _sql_names = ["LENGTH", "LEN", "CHAR_LENGTH", "CHARACTER_LENGTH"]
6900
6929
 
6901
6930
 
6931
+ class RtrimmedLength(Func):
6932
+ pass
6933
+
6934
+
6902
6935
  class BitLength(Func):
6903
6936
  pass
6904
6937
 
@@ -1588,7 +1588,7 @@ class Gen:
1588
1588
  kvs = []
1589
1589
  arg_types = list(node.arg_types)[arg_index:] if arg_index else node.arg_types
1590
1590
 
1591
- for k in arg_types or arg_types:
1591
+ for k in arg_types:
1592
1592
  v = node.args.get(k)
1593
1593
 
1594
1594
  if v is not None:
sqlglot/parser.py CHANGED
@@ -809,6 +809,8 @@ class Parser(metaclass=_Parser):
809
809
  exp.DataType: lambda self: self._parse_types(allow_identifiers=False, schema=True),
810
810
  exp.Expression: lambda self: self._parse_expression(),
811
811
  exp.From: lambda self: self._parse_from(joins=True),
812
+ exp.GrantPrincipal: lambda self: self._parse_grant_principal(),
813
+ exp.GrantPrivilege: lambda self: self._parse_grant_privilege(),
812
814
  exp.Group: lambda self: self._parse_group(),
813
815
  exp.Having: lambda self: self._parse_having(),
814
816
  exp.Hint: lambda self: self._parse_hint_body(),
@@ -3123,21 +3125,26 @@ class Parser(metaclass=_Parser):
3123
3125
  )
3124
3126
 
3125
3127
  def _parse_update(self) -> exp.Update:
3126
- this = self._parse_table(joins=True, alias_tokens=self.UPDATE_ALIAS_TOKENS)
3127
- expressions = self._match(TokenType.SET) and self._parse_csv(self._parse_equality)
3128
- returning = self._parse_returning()
3129
- return self.expression(
3130
- exp.Update,
3131
- **{ # type: ignore
3132
- "this": this,
3133
- "expressions": expressions,
3134
- "from": self._parse_from(joins=True),
3135
- "where": self._parse_where(),
3136
- "returning": returning or self._parse_returning(),
3137
- "order": self._parse_order(),
3138
- "limit": self._parse_limit(),
3139
- },
3140
- )
3128
+ kwargs: t.Dict[str, t.Any] = {
3129
+ "this": self._parse_table(joins=True, alias_tokens=self.UPDATE_ALIAS_TOKENS),
3130
+ }
3131
+ while self._curr:
3132
+ if self._match(TokenType.SET):
3133
+ kwargs["expressions"] = self._parse_csv(self._parse_equality)
3134
+ elif self._match(TokenType.RETURNING, advance=False):
3135
+ kwargs["returning"] = self._parse_returning()
3136
+ elif self._match(TokenType.FROM, advance=False):
3137
+ kwargs["from"] = self._parse_from(joins=True)
3138
+ elif self._match(TokenType.WHERE, advance=False):
3139
+ kwargs["where"] = self._parse_where()
3140
+ elif self._match(TokenType.ORDER_BY, advance=False):
3141
+ kwargs["order"] = self._parse_order()
3142
+ elif self._match(TokenType.LIMIT, advance=False):
3143
+ kwargs["limit"] = self._parse_limit()
3144
+ else:
3145
+ break
3146
+
3147
+ return self.expression(exp.Update, **kwargs)
3141
3148
 
3142
3149
  def _parse_use(self) -> exp.Use:
3143
3150
  return self.expression(
@@ -4240,9 +4247,11 @@ class Parser(metaclass=_Parser):
4240
4247
  )
4241
4248
 
4242
4249
  def _parse_unnest(self, with_alias: bool = True) -> t.Optional[exp.Unnest]:
4243
- if not self._match(TokenType.UNNEST):
4250
+ if not self._match_pair(TokenType.UNNEST, TokenType.L_PAREN, advance=False):
4244
4251
  return None
4245
4252
 
4253
+ self._advance()
4254
+
4246
4255
  expressions = self._parse_wrapped_csv(self._parse_equality)
4247
4256
  offset = self._match_pair(TokenType.WITH, TokenType.ORDINALITY)
4248
4257
 
@@ -5104,7 +5113,8 @@ class Parser(metaclass=_Parser):
5104
5113
  isinstance(this, exp.Column)
5105
5114
  and not this.table
5106
5115
  and not this.this.quoted
5107
- and this.name.upper() in ("IS", "ROWS")
5116
+ and self._curr
5117
+ and self._curr.text.upper() not in self.dialect.VALID_INTERVAL_UNITS
5108
5118
  ):
5109
5119
  self._retreat(index)
5110
5120
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 27.17.0
3
+ Version: 27.19.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
@@ -39,7 +39,7 @@ Dynamic: provides-extra
39
39
 
40
40
  ![SQLGlot logo](sqlglot.png)
41
41
 
42
- SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and engine. It can be used to format SQL or translate between [30 different dialects](https://github.com/tobymao/sqlglot/blob/main/sqlglot/dialects/__init__.py) like [DuckDB](https://duckdb.org/), [Presto](https://prestodb.io/) / [Trino](https://trino.io/), [Spark](https://spark.apache.org/) / [Databricks](https://www.databricks.com/), [Snowflake](https://www.snowflake.com/en/), and [BigQuery](https://cloud.google.com/bigquery/). It aims to read a wide variety of SQL inputs and output syntactically and semantically correct SQL in the targeted dialects.
42
+ SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and engine. It can be used to format SQL or translate between [31 different dialects](https://github.com/tobymao/sqlglot/blob/main/sqlglot/dialects/__init__.py) like [DuckDB](https://duckdb.org/), [Presto](https://prestodb.io/) / [Trino](https://trino.io/), [Spark](https://spark.apache.org/) / [Databricks](https://www.databricks.com/), [Snowflake](https://www.snowflake.com/en/), and [BigQuery](https://cloud.google.com/bigquery/). It aims to read a wide variety of SQL inputs and output syntactically and semantically correct SQL in the targeted dialects.
43
43
 
44
44
  It is a very comprehensive generic SQL parser with a robust [test suite](https://github.com/tobymao/sqlglot/blob/main/tests/). It is also quite [performant](#benchmarks), while being written purely in Python.
45
45
 
@@ -613,6 +613,7 @@ x + interval '1' month
613
613
  | RisingWave | Community |
614
614
  | SingleStore | Community |
615
615
  | Snowflake | Official |
616
+ | Solr | Community |
616
617
  | Spark | Official |
617
618
  | SQLite | Official |
618
619
  | StarRocks | Official |
@@ -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=RQW_jRqTjxNrqe9v5PCSBGQGoLKZnnPnQlpUKXMTiY8,708
4
+ sqlglot/_version.py,sha256=wVbD9GMknBXDREyMG-Yx-Nw3OZVxyzYGofDpSiCozV4,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=CXkTw8G84YP32iuWBAaRsGEg7MUTlvsDUgE7IF_pKgY,257541
7
+ sqlglot/expressions.py,sha256=gR0XWI066giI1oStYhmswO7FY_pA0twxmc1P2XTo1tU,258468
8
8
  sqlglot/generator.py,sha256=ZHFzi6_EOJl5V-dnz71QJOIwtxj66oJdF6tUQoxBpck,226436
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=-zOjkGkInw1Bu-OnrVPlhLP0VDJPCTKlgqxuEpS9IXk,336855
12
+ sqlglot/parser.py,sha256=4UXHIDwR9mdbN5C7PVMffheR-cj3ipVJqIIK8W-o5ac,337436
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,12 +18,12 @@ sqlglot/time.py,sha256=Q62gv6kL40OiRBF6BMESxKJcMVn7ZLNw7sv8H34z5FI,18400
18
18
  sqlglot/tokens.py,sha256=M6E-2vbIs41CYwyLIFtRqre9Mh9kO7Qt9rQvpfVeB7w,49217
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=e3K2NHrZO7oXfBzEpRsvgWAgJ_UCEyg7SlUCRqvnPj4,3799
21
+ sqlglot/dialects/__init__.py,sha256=g3HRtyb32r3LooiHKTzuUNB0_rBO_RauuOegp42gB48,3811
22
22
  sqlglot/dialects/athena.py,sha256=ofArmayYLev4qZQ15GM8mevG04qqR5WGFb2ZcuYm6x4,10966
23
- sqlglot/dialects/bigquery.py,sha256=9Q-oCXcpa2vrT2eMgVGHWwEvECMm4RQeV1XkjJj0nPA,72483
23
+ sqlglot/dialects/bigquery.py,sha256=m3Tk_rieNds4i-t0v-dELB5MvLfIvJY3ozuU6FItXJ8,72758
24
24
  sqlglot/dialects/clickhouse.py,sha256=6kx1cm0YhtHbg5kvcY64Hau2KdeC7Y26SVlVHGLyPEA,58579
25
25
  sqlglot/dialects/databricks.py,sha256=H4QTq7gg6tJylKc_YWsGp6049KydoI_wlQUHM7iCJtI,4753
26
- sqlglot/dialects/dialect.py,sha256=BU4-x1d8tRCSAfdpeP5b86me0wXfgpcEPdyk27wLgg4,73293
26
+ sqlglot/dialects/dialect.py,sha256=KfBctpr7VdrCdHrP1Tk7CqAml53tRq9x-aDAkaN-9l0,73540
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
@@ -34,7 +34,7 @@ sqlglot/dialects/exasol.py,sha256=ay3g_VyT5WvHTgNyJuCQu0nBt4bpllLZ9IdMBizEgYM,15
34
34
  sqlglot/dialects/fabric.py,sha256=BdkvzM8s-m5DIdBwdjEYskp32ub7aHCAex_xlhQn92I,10222
35
35
  sqlglot/dialects/hive.py,sha256=UGIkXjMCk5a9ndUXQtvfG560oi3emdpqOYLQCmGabBk,32046
36
36
  sqlglot/dialects/materialize.py,sha256=LD2q1kTRrCwkIu1BfoBvnjTGbupDtoQ8JQMDCIYAXHg,3533
37
- sqlglot/dialects/mysql.py,sha256=0s7RIpWPCaBYvxgR8Z6JWPub1BHBB_0Th7KHCIXVfms,49702
37
+ sqlglot/dialects/mysql.py,sha256=xxVAR-pXMljYCUioavP3nROtOqKmK4kfdp4WWXX7X9g,50049
38
38
  sqlglot/dialects/oracle.py,sha256=zWPCpzGiTlgCJ5E6FjfX3Rszjcw4SnHg6xeVboMYIyo,15972
39
39
  sqlglot/dialects/postgres.py,sha256=_pXSu29684utgeuzPziSJ0Sw54WEIIunwLugJw7KFD8,34853
40
40
  sqlglot/dialects/presto.py,sha256=XVeYr2NP86x5enlRqI7MYR6le85_ucYg_BBRocGN3jM,33413
@@ -42,7 +42,8 @@ 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=BqWwW1iT_OIVMwfRamaww79snnBwIgCfr22Go-ggO68,3289
44
44
  sqlglot/dialects/singlestore.py,sha256=0QqNYOucNklPQuyeGcsisLI97qPGx_RfWKOFarJz2qw,61711
45
- sqlglot/dialects/snowflake.py,sha256=JK7FursV_ZdHU0UolaZFOy4TtEFqHTySZa1zxocCUww,77433
45
+ sqlglot/dialects/snowflake.py,sha256=D9GlZtIDLU_aqHWvGQUC8AS-U94WPBS_qEzErIJIoWY,78746
46
+ sqlglot/dialects/solr.py,sha256=pydnl4ml-3M1Fc4ALm6cMVO9h-5EtqZxPZH_91Nz1Ss,617
46
47
  sqlglot/dialects/spark.py,sha256=PzyhkelDzbCMgJ3RVHD6yyzLIFp9NdZfwVas5IymowM,10147
47
48
  sqlglot/dialects/spark2.py,sha256=qz36FT9k4iuiqboRpyG4VpKGkPR0P2fifmqgZ9gNUEU,14851
48
49
  sqlglot/dialects/sqlite.py,sha256=zzXEbnaLjJeg6hPLHricjpfSkuf8tpXECnjcHtoqIbw,13263
@@ -74,10 +75,10 @@ sqlglot/optimizer/qualify.py,sha256=oAPfwub7dEkrlCrsptcJWpLya4BgKhN6M5SwIs_86LY,
74
75
  sqlglot/optimizer/qualify_columns.py,sha256=7aabZhD-dKNiwIW_ZjOEr0RPbWfhSbuR-WI6NnVCZAA,45298
75
76
  sqlglot/optimizer/qualify_tables.py,sha256=dA4ZazL7ShQh2JgBwpHuG-4c5lBw1TNzCnuN7m0iVTA,6645
76
77
  sqlglot/optimizer/scope.py,sha256=UOTrbwqcTc5iRQf0WStgYWXpE24w6riZy-tJYA18yTw,31229
77
- sqlglot/optimizer/simplify.py,sha256=-_yus42OYwqjQ9a2TSGhtG2G0pSkInUry1z7hEMz2pY,51062
78
+ sqlglot/optimizer/simplify.py,sha256=27IYsqbz1kyMlURSfRkm_ADSQJg-4805AOMFOjKKytU,51049
78
79
  sqlglot/optimizer/unnest_subqueries.py,sha256=kzWUVDlxs8z9nmRx-8U-pHXPtVZhEIwkKqmKhr2QLvc,10908
79
- sqlglot-27.17.0.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
80
- sqlglot-27.17.0.dist-info/METADATA,sha256=XAZqZw1-AFuV3rTul6kbEoI8BzcX6_QnF1rChBhRyzQ,20682
81
- sqlglot-27.17.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
82
- sqlglot-27.17.0.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
83
- sqlglot-27.17.0.dist-info/RECORD,,
80
+ sqlglot-27.19.0.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
81
+ sqlglot-27.19.0.dist-info/METADATA,sha256=yaLkwFBKI3tGRmU2ayVsF3uEDoRgBLryVjdzeePUW4M,20703
82
+ sqlglot-27.19.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
83
+ sqlglot-27.19.0.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
84
+ sqlglot-27.19.0.dist-info/RECORD,,