@@ -108,24 +108,8 @@ def visit_like_predicate(self, node, context):
108
108
if isinstance (pattern , StringLiteral ):
109
109
if not pattern .value .startswith ('%' ):
110
110
can_query_range = True
111
- qualifed_name = node .value .name
112
111
if can_query_range :
113
- if len (qualifed_name .parts ) == 2 :
114
- table_or_alias_name = qualifed_name .parts [0 ]
115
- for _table in self .table_list :
116
- if _table ['alias' ] == table_or_alias_name or _table [
117
- 'table_name' ] == table_or_alias_name :
118
- filter_column_list = _table ['filter_column_list' ]
119
- filter_column_list .append ({
120
- 'column_name' : qualifed_name .parts [1 ],
121
- 'opt' : 'like'
122
- })
123
- else :
124
- filter_column_list = self .table_list [- 1 ]['filter_column_list' ]
125
- filter_column_list .append ({
126
- 'column_name' : qualifed_name .parts [0 ],
127
- 'opt' : 'like'
128
- })
112
+ self .add_filter_column_with_qualified_name_reference (node .value , 'like' )
129
113
130
114
return self .visit_expression (node , context )
131
115
@@ -141,22 +125,7 @@ def visit_in_predicate(self, node, context):
141
125
self .in_count_list .append (len (node .value_list .values ))
142
126
143
127
if isinstance (value , QualifiedNameReference ):
144
- if len (value .name .parts ) == 2 :
145
- table_or_alias_name = value .name .parts [0 ]
146
- for _table in self .table_list :
147
- if _table ['alias' ] == table_or_alias_name or _table [
148
- 'table_name' ] == table_or_alias_name :
149
- filter_column_list = _table ['filter_column_list' ]
150
- filter_column_list .append ({
151
- 'column_name' : value .name .parts [1 ],
152
- 'opt' : 'in'
153
- })
154
- else :
155
- filter_column_list = self .table_list [- 1 ]['filter_column_list' ]
156
- filter_column_list .append ({
157
- 'column_name' : value .name .parts [0 ],
158
- 'opt' : 'in'
159
- })
128
+ self .add_filter_column_with_qualified_name_reference (value , 'in' )
160
129
161
130
self .process (node .value , None )
162
131
self .process (node .value_list , None )
@@ -258,6 +227,30 @@ def visit_delete(self, node, context):
258
227
self .process (node .where , context )
259
228
return None
260
229
230
+ def visit_between_predicate (self , node , context ):
231
+ if isinstance (node .value , QualifiedNameReference ):
232
+ self .add_filter_column_with_qualified_name_reference (node .value , 'between' )
233
+ return None
234
+
235
+ def add_filter_column_with_qualified_name_reference (self , qualified_name_reference : QualifiedNameReference ,
236
+ opt ):
237
+ if len (qualified_name_reference .name .parts ) == 2 :
238
+ table_or_alias_name = qualified_name_reference .name .parts [0 ]
239
+ for _table in self .table_list :
240
+ if _table ['alias' ] == table_or_alias_name or _table [
241
+ 'table_name' ] == table_or_alias_name :
242
+ filter_column_list = _table ['filter_column_list' ]
243
+ filter_column_list .append ({
244
+ 'column_name' : qualified_name_reference .name .parts [1 ],
245
+ 'opt' : opt
246
+ })
247
+ else :
248
+ filter_column_list = self .table_list [- 1 ]['filter_column_list' ]
249
+ filter_column_list .append ({
250
+ 'column_name' : qualified_name_reference .name .parts [0 ],
251
+ 'opt' : opt
252
+ })
253
+
261
254
visitor = FormatVisitor ()
262
255
visitor .process (statement , None )
263
256
return visitor
0 commit comments