Skip to content

Commit 24c7fb0

Browse files
committed
fix: import Expression from sqlglot.expressions for sqlglot 30+
sqlglot 30 removed Expression from the package __init__ re-exports. Importing from sqlglot.expressions remains valid from 26.x onward. Made-with: Cursor
1 parent 4b0bcc8 commit 24c7fb0

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

pyobvector/client/ob_vec_json_table_client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
)
1616
from sqlalchemy.dialects.mysql import TINYINT
1717
from sqlalchemy.orm import declarative_base, sessionmaker, Session
18-
from sqlglot import parse_one, exp, Expression, to_identifier
18+
from sqlglot import parse_one, exp, to_identifier
19+
from sqlglot.expressions import Expression
1920

2021

2122
from .ob_vec_client import ObVecClient

pyobvector/json_table/oceanbase_dialect.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1-
from sqlglot import parser, exp, Expression
1+
import sqlglot as _sqlglot
2+
3+
from sqlglot import parser, exp
4+
from sqlglot.expressions import Expression
25
from sqlglot.dialects.mysql import MySQL
36
from sqlglot.tokens import TokenType
47

8+
# sqlglot 30+ passes a pre-built expression into Parser.expression(); older versions
9+
# pass the class and kwargs separately.
10+
_SQLGLOT_GE_30 = int(_sqlglot.__version__.split(".", 1)[0]) >= 30
11+
512

613
class ChangeColumn(Expression):
714
arg_types = {
@@ -29,6 +36,11 @@ class Parser(MySQL.Parser):
2936
"CHANGE": lambda self: self._parse_change_table_column(),
3037
}
3138

39+
def _make_expression(self, expr_cls: type, **kwargs):
40+
if _SQLGLOT_GE_30:
41+
return self.expression(expr_cls(**kwargs))
42+
return self.expression(expr_cls, **kwargs)
43+
3244
def _parse_alter_table_alter(self) -> exp.Expression | None:
3345
if self._match_texts(self.ALTER_ALTER_PARSERS):
3446
return self.ALTER_ALTER_PARSERS[self._prev.text.upper()](self)
@@ -37,31 +49,31 @@ def _parse_alter_table_alter(self) -> exp.Expression | None:
3749
column = self._parse_field_def()
3850

3951
if self._match_pair(TokenType.DROP, TokenType.DEFAULT):
40-
return self.expression(exp.AlterColumn, this=column, drop=True)
52+
return self._make_expression(exp.AlterColumn, this=column, drop=True)
4153
if self._match_pair(TokenType.SET, TokenType.DEFAULT):
42-
return self.expression(
54+
return self._make_expression(
4355
exp.AlterColumn, this=column, default=self._parse_assignment()
4456
)
4557
if self._match(TokenType.COMMENT):
46-
return self.expression(
58+
return self._make_expression(
4759
exp.AlterColumn, this=column, comment=self._parse_string()
4860
)
4961
if self._match_text_seq("DROP", "NOT", "NULL"):
50-
return self.expression(
62+
return self._make_expression(
5163
exp.AlterColumn,
5264
this=column,
5365
drop=True,
5466
allow_null=True,
5567
)
5668
if self._match_text_seq("SET", "NOT", "NULL"):
57-
return self.expression(
69+
return self._make_expression(
5870
exp.AlterColumn,
5971
this=column,
6072
allow_null=False,
6173
)
6274
self._match_text_seq("SET", "DATA")
6375
self._match_text_seq("TYPE")
64-
return self.expression(
76+
return self._make_expression(
6577
exp.AlterColumn,
6678
this=column,
6779
dtype=self._parse_types(),
@@ -95,7 +107,7 @@ def _parse_drop(self, exists: bool = False) -> exp.Drop | exp.Command:
95107
else:
96108
expressions = None
97109

98-
return self.expression(
110+
return self._make_expression(
99111
exp.Drop,
100112
exists=if_exists,
101113
this=this,
@@ -114,7 +126,7 @@ def _parse_change_table_column(self) -> exp.Expression | None:
114126
self._match(TokenType.COLUMN)
115127
origin_col = self._parse_field(any_token=True)
116128
column = self._parse_field()
117-
return self.expression(
129+
return self._make_expression(
118130
ChangeColumn,
119131
this=column,
120132
origin_col_name=origin_col,

0 commit comments

Comments
 (0)