Skip to content

Commit e584246

Browse files
chore: upgrade sqlglot (#1692)
Co-authored-by: anandgupta42 <[email protected]>
1 parent e94d997 commit e584246

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+28331
-6334
lines changed

altimate_packages/sqlglot/__init__.py

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# ruff: noqa: F401
12
"""
23
.. include:: ../README.md
34
@@ -22,14 +23,18 @@
2223
Expression as Expression,
2324
alias_ as alias,
2425
and_ as and_,
26+
case as case,
2527
cast as cast,
2628
column as column,
2729
condition as condition,
30+
delete as delete,
2831
except_ as except_,
2932
from_ as from_,
3033
func as func,
34+
insert as insert,
3135
intersect as intersect,
3236
maybe_parse as maybe_parse,
37+
merge as merge,
3338
not_ as not_,
3439
or_ as or_,
3540
select as select,
@@ -43,7 +48,7 @@
4348
from sqlglot.generator import Generator as Generator
4449
from sqlglot.parser import Parser as Parser
4550
from sqlglot.schema import MappingSchema as MappingSchema, Schema as Schema
46-
from sqlglot.tokens import Tokenizer as Tokenizer, TokenType as TokenType
51+
from sqlglot.tokens import Token as Token, Tokenizer as Tokenizer, TokenType as TokenType
4752

4853
if t.TYPE_CHECKING:
4954
from sqlglot._typing import E
@@ -63,8 +68,20 @@
6368
pretty = False
6469
"""Whether to format generated SQL by default."""
6570

66-
schema = MappingSchema()
67-
"""The default schema used by SQLGlot (e.g. in the optimizer)."""
71+
72+
def tokenize(sql: str, read: DialectType = None, dialect: DialectType = None) -> t.List[Token]:
73+
"""
74+
Tokenizes the given SQL string.
75+
76+
Args:
77+
sql: the SQL code string to tokenize.
78+
read: the SQL dialect to apply during tokenizing (eg. "spark", "hive", "presto", "mysql").
79+
dialect: the SQL dialect (alias for read).
80+
81+
Returns:
82+
The resulting list of tokens.
83+
"""
84+
return Dialect.get_or_raise(read or dialect).tokenize(sql)
6885

6986

7087
def parse(
@@ -82,18 +99,15 @@ def parse(
8299
Returns:
83100
The resulting syntax tree collection.
84101
"""
85-
dialect = Dialect.get_or_raise(read or dialect)()
86-
return dialect.parse(sql, **opts)
102+
return Dialect.get_or_raise(read or dialect).parse(sql, **opts)
87103

88104

89105
@t.overload
90-
def parse_one(sql: str, *, into: t.Type[E], **opts) -> E:
91-
...
106+
def parse_one(sql: str, *, into: t.Type[E], **opts) -> E: ...
92107

93108

94109
@t.overload
95-
def parse_one(sql: str, **opts) -> Expression:
96-
...
110+
def parse_one(sql: str, **opts) -> Expression: ...
97111

98112

99113
def parse_one(
@@ -117,7 +131,7 @@ def parse_one(
117131
The syntax tree for the first parsed statement.
118132
"""
119133

120-
dialect = Dialect.get_or_raise(read or dialect)()
134+
dialect = Dialect.get_or_raise(read or dialect)
121135

122136
if into:
123137
result = dialect.parse_into(into, sql, **opts)
@@ -157,7 +171,8 @@ def transpile(
157171
The list of transpiled SQL statements.
158172
"""
159173
write = (read if write is None else write) if identity else write
174+
write = Dialect.get_or_raise(write)
160175
return [
161-
Dialect.get_or_raise(write)().generate(expression, **opts)
176+
write.generate(expression, copy=False, **opts) if expression else ""
162177
for expression in parse(sql, read, error_level=error_level)
163178
]

altimate_packages/sqlglot/__main__.py

Lines changed: 96 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,96 @@
1-
# from __future__ import annotations
2-
#
3-
# import argparse
4-
# import sys
5-
# import typing as t
6-
#
7-
# import sqlglot as sqlglot
8-
#
9-
# parser = argparse.ArgumentParser(description="Transpile SQL")
10-
# parser.add_argument(
11-
# "sql",
12-
# metavar="sql",
13-
# type=str,
14-
# help="SQL statement(s) to transpile, or - to parse stdin.",
15-
# )
16-
# parser.add_argument(
17-
# "--read",
18-
# dest="read",
19-
# type=str,
20-
# default=None,
21-
# help="Dialect to read default is generic",
22-
# )
23-
# parser.add_argument(
24-
# "--write",
25-
# dest="write",
26-
# type=str,
27-
# default=None,
28-
# help="Dialect to write default is generic",
29-
# )
30-
# parser.add_argument(
31-
# "--no-identify",
32-
# dest="identify",
33-
# action="store_false",
34-
# help="Don't auto identify fields",
35-
# )
36-
# parser.add_argument(
37-
# "--no-pretty",
38-
# dest="pretty",
39-
# action="store_false",
40-
# help="Compress sql",
41-
# )
42-
# parser.add_argument(
43-
# "--parse",
44-
# dest="parse",
45-
# action="store_true",
46-
# help="Parse and return the expression tree",
47-
# )
48-
# parser.add_argument(
49-
# "--tokenize",
50-
# dest="tokenize",
51-
# action="store_true",
52-
# help="Tokenize and return the tokens list",
53-
# )
54-
# parser.add_argument(
55-
# "--error-level",
56-
# dest="error_level",
57-
# type=str,
58-
# default="IMMEDIATE",
59-
# help="IGNORE, WARN, RAISE, IMMEDIATE (default)",
60-
# )
61-
#
62-
#
63-
# args = parser.parse_args()
64-
# error_level = sqlglot.ErrorLevel[args.error_level.upper()]
65-
#
66-
# sql = sys.stdin.read() if args.sql == "-" else args.sql
67-
#
68-
# if args.parse:
69-
# objs: t.Union[t.List[str], t.List[sqlglot.tokens.Token]] = [
70-
# repr(expression)
71-
# for expression in sqlglot.parse(
72-
# sql,
73-
# read=args.read,
74-
# error_level=error_level,
75-
# )
76-
# ]
77-
# elif args.tokenize:
78-
# objs = sqlglot.Dialect.get_or_raise(args.read)().tokenize(sql)
79-
# else:
80-
# objs = sqlglot.transpile(
81-
# sql,
82-
# read=args.read,
83-
# write=args.write,
84-
# identify=args.identify,
85-
# pretty=args.pretty,
86-
# error_level=error_level,
87-
# )
88-
#
89-
# for obj in objs:
90-
# print(obj)
1+
from __future__ import annotations
2+
3+
import argparse
4+
import sys
5+
import typing as t
6+
7+
import sqlglot
8+
9+
parser = argparse.ArgumentParser(description="Transpile SQL")
10+
parser.add_argument(
11+
"sql",
12+
metavar="sql",
13+
type=str,
14+
help="SQL statement(s) to transpile, or - to parse stdin.",
15+
)
16+
parser.add_argument(
17+
"--read",
18+
dest="read",
19+
type=str,
20+
default=None,
21+
help="Dialect to read default is generic",
22+
)
23+
parser.add_argument(
24+
"--write",
25+
dest="write",
26+
type=str,
27+
default=None,
28+
help="Dialect to write default is generic",
29+
)
30+
parser.add_argument(
31+
"--no-identify",
32+
dest="identify",
33+
action="store_false",
34+
help="Don't auto identify fields",
35+
)
36+
parser.add_argument(
37+
"--no-pretty",
38+
dest="pretty",
39+
action="store_false",
40+
help="Compress sql",
41+
)
42+
parser.add_argument(
43+
"--parse",
44+
dest="parse",
45+
action="store_true",
46+
help="Parse and return the expression tree",
47+
)
48+
parser.add_argument(
49+
"--tokenize",
50+
dest="tokenize",
51+
action="store_true",
52+
help="Tokenize and return the tokens list",
53+
)
54+
parser.add_argument(
55+
"--error-level",
56+
dest="error_level",
57+
type=str,
58+
default="IMMEDIATE",
59+
help="IGNORE, WARN, RAISE, IMMEDIATE (default)",
60+
)
61+
parser.add_argument(
62+
"--version",
63+
action="version",
64+
version=sqlglot.__version__,
65+
help="Display the SQLGlot version",
66+
)
67+
68+
69+
args = parser.parse_args()
70+
error_level = sqlglot.ErrorLevel[args.error_level.upper()]
71+
72+
sql = sys.stdin.read() if args.sql == "-" else args.sql
73+
74+
if args.parse:
75+
objs: t.Union[t.List[str], t.List[sqlglot.tokens.Token]] = [
76+
repr(expression)
77+
for expression in sqlglot.parse(
78+
sql,
79+
read=args.read,
80+
error_level=error_level,
81+
)
82+
]
83+
elif args.tokenize:
84+
objs = sqlglot.Dialect.get_or_raise(args.read).tokenize(sql)
85+
else:
86+
objs = sqlglot.transpile(
87+
sql,
88+
read=args.read,
89+
write=args.write,
90+
identify=args.identify,
91+
pretty=args.pretty,
92+
error_level=error_level,
93+
)
94+
95+
for obj in objs:
96+
print(obj)

altimate_packages/sqlglot/_typing.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,16 @@
22

33
import typing as t
44

5-
import sqlglot as sqlglot
5+
import sqlglot
66

7+
if t.TYPE_CHECKING:
8+
from typing_extensions import Literal as Lit # noqa
9+
10+
# A little hack for backwards compatibility with Python 3.7.
11+
# For example, we might want a TypeVar for objects that support comparison e.g. SupportsRichComparisonT from typeshed.
12+
# But Python 3.7 doesn't support Protocols, so we'd also need typing_extensions, which we don't want as a dependency.
13+
A = t.TypeVar("A", bound=t.Any)
14+
B = t.TypeVar("B", bound="sqlglot.exp.Binary")
715
E = t.TypeVar("E", bound="sqlglot.exp.Expression")
16+
F = t.TypeVar("F", bound="sqlglot.exp.Func")
817
T = t.TypeVar("T")

0 commit comments

Comments
 (0)