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
25from sqlglot .dialects .mysql import MySQL
36from 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
613class 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