@@ -32,15 +32,16 @@ def _group_left_right(tlist, m, cls,
3232 continue
3333
3434 tidx = tlist .token_index (token )
35- left , right = tlist .token_prev (tidx ), tlist .token_next (tidx )
35+ pidx , prev_ = tlist .token_idx_prev (tidx )
36+ nidx , next_ = tlist .token_idx_next (tidx )
3637
37- if valid_left (left ) and valid_right (right ):
38+ if valid_left (prev_ ) and valid_right (next_ ):
3839 if semicolon :
3940 # only overwrite if a semicolon present.
40- sright = tlist .token_next_by (m = M_SEMICOLON , idx = tidx + 1 )
41- right = sright or right
41+ snidx , _ = tlist .token_idx_next_by (m = M_SEMICOLON , idx = nidx )
42+ nidx = snidx or nidx
4243 # Luckily, this leaves the position of `token` intact.
43- tlist .group_tokens_between (cls , left , right , extend = True )
44+ tlist .group_tokens_between (cls , pidx , nidx , extend = True )
4445
4546
4647def _group_matching (tlist , cls ):
@@ -114,11 +115,10 @@ def group_case(tlist):
114115def group_identifier (tlist ):
115116 T_IDENT = (T .String .Symbol , T .Name )
116117
117- token = tlist .token_next_by (t = T_IDENT )
118+ tidx , token = tlist .token_idx_next_by (t = T_IDENT )
118119 while token :
119- tidx = tlist .token_index (token )
120- token = tlist .group_tokens_between (sql .Identifier , tidx , tidx )
121- token = tlist .token_next_by (t = T_IDENT , idx = tidx + 1 )
120+ tlist .group_tokens_between (sql .Identifier , tidx , tidx )
121+ tidx , token = tlist .token_idx_next_by (t = T_IDENT , idx = tidx + 1 )
122122
123123
124124def group_period (tlist ):
@@ -133,13 +133,14 @@ def group_period(tlist):
133133
134134
135135def group_arrays (tlist ):
136- token = tlist .token_next_by (i = sql .SquareBrackets )
136+ tidx , token = tlist .token_idx_next_by (i = sql .SquareBrackets )
137137 while token :
138- prev = tlist .token_prev ( tlist . token_index ( token ) )
138+ pidx , prev = tlist .token_idx_prev ( tidx )
139139 if imt (prev , i = (sql .SquareBrackets , sql .Identifier , sql .Function ),
140140 t = (T .Name , T .String .Symbol ,)):
141- token = tlist .group_tokens_between (sql .Identifier , prev , token , extend = True )
142- token = tlist .token_next_by (i = sql .SquareBrackets , idx = tlist .token_index (token ) + 1 )
141+ tlist .group_tokens_between (sql .Identifier , pidx , tidx , extend = True )
142+ tidx = pidx
143+ tidx , token = tlist .token_idx_next_by (i = sql .SquareBrackets , idx = tidx + 1 )
143144
144145
145146@recurse (sql .Identifier )
@@ -150,15 +151,18 @@ def group_operator(tlist):
150151 T_CYCLE = T_NUMERICAL + T_STRING + T_NAME
151152 func = lambda tk : imt (tk , i = I_CYCLE , t = T_CYCLE )
152153
153- token = tlist .token_next_by (t = (T .Operator , T .Wildcard ))
154+ tidx , token = tlist .token_idx_next_by (t = (T .Operator , T .Wildcard ))
154155 while token :
155- left , right = tlist .token_prev (tlist .token_index (token )), tlist .token_next (tlist .token_index (token ))
156+ pidx , prev_ = tlist .token_idx_prev (tidx )
157+ nidx , next_ = tlist .token_idx_next (tidx )
156158
157- if func (left ) and func (right ):
159+ if func (prev_ ) and func (next_ ):
158160 token .ttype = T .Operator
159- token = tlist .group_tokens_between (sql .Operation , left , right )
161+ tlist .group_tokens_between (sql .Operation , pidx , nidx )
162+ tidx = pidx
160163
161- token = tlist .token_next_by (t = (T .Operator , T .Wildcard ), idx = tlist .token_index (token ) + 1 )
164+ tidx , token = tlist .token_idx_next_by (t = (T .Operator , T .Wildcard ),
165+ idx = tidx + 1 )
162166
163167
164168@recurse (sql .IdentifierList )
@@ -172,13 +176,12 @@ def group_identifier_list(tlist):
172176
173177 tidx , token = tlist .token_idx_next_by (m = M_COMMA )
174178 while token :
175- before_idx , before = tlist .token_idx_prev (tidx )
176- after_idx , after = tlist .token_idx_next (tidx )
177-
178- if func (before ) and func (after ):
179- tidx = before_idx
180- token = tlist .group_tokens_between (sql .IdentifierList , tidx , after_idx , extend = True )
179+ pidx , prev_ = tlist .token_idx_prev (tidx )
180+ nidx , next_ = tlist .token_idx_next (tidx )
181181
182+ if func (prev_ ) and func (next_ ):
183+ tlist .group_tokens_between (sql .IdentifierList , pidx , nidx , extend = True )
184+ tidx = pidx
182185 tidx , token = tlist .token_idx_next_by (m = M_COMMA , idx = tidx + 1 )
183186
184187
@@ -192,31 +195,32 @@ def group_parenthesis(tlist):
192195
193196@recurse (sql .Comment )
194197def group_comments (tlist ):
195- token = tlist .token_next_by (t = T .Comment )
198+ tidx , token = tlist .token_idx_next_by (t = T .Comment )
196199 while token :
197200 end = tlist .token_not_matching (
198- lambda tk : imt (tk , t = T .Comment ) or tk .is_whitespace (),
199- idx = tlist .token_index (token ) + 1 )
201+ lambda tk : imt (tk , t = T .Comment ) or tk .is_whitespace (), idx = tidx + 1 )
200202 if end is not None :
201- end = tlist .token_prev (tlist .token_index (end ), False )
202- token = tlist .group_tokens_between (sql .Comment , token , end )
203+ eidx = tlist .token_index (end )
204+ eidx , end = tlist .token_idx_prev (eidx , skip_ws = False )
205+ tlist .group_tokens_between (sql .Comment , tidx , eidx )
203206
204- token = tlist .token_next_by (t = T .Comment , idx = tlist . token_index ( token ) + 1 )
207+ tidx , token = tlist .token_idx_next_by (t = T .Comment , idx = tidx + 1 )
205208
206209
207210@recurse (sql .Where )
208211def group_where (tlist ):
209- token = tlist .token_next_by (m = sql .Where .M_OPEN )
212+ tidx , token = tlist .token_idx_next_by (m = sql .Where .M_OPEN )
210213 while token :
211- end = tlist .token_next_by (m = sql .Where .M_CLOSE , idx = tlist . token_index ( token ) + 1 )
214+ eidx , end = tlist .token_idx_next_by (m = sql .Where .M_CLOSE , idx = tidx + 1 )
212215
213216 if end is None :
214217 end = tlist ._groupable_tokens [- 1 ]
215218 else :
216- end = tlist .tokens [tlist .token_index (end ) - 1 ]
217-
218- token = tlist .group_tokens_between (sql .Where , token , end )
219- token = tlist .token_next_by (m = sql .Where .M_OPEN , idx = tlist .token_index (token ) + 1 )
219+ end = tlist .tokens [eidx - 1 ]
220+ # TODO: convert this to eidx instead of end token.
221+ # i think above values are len(tlist) and eidx-1
222+ tlist .group_tokens_between (sql .Where , tidx , end )
223+ tidx , token = tlist .token_idx_next_by (m = sql .Where .M_OPEN , idx = tidx + 1 )
220224
221225
222226@recurse ()
@@ -226,9 +230,9 @@ def group_aliased(tlist):
226230
227231 tidx , token = tlist .token_idx_next_by (i = I_ALIAS , t = T .Number )
228232 while token :
229- next_index_ , next_ = tlist .token_idx_next (tidx )
233+ nidx , next_ = tlist .token_idx_next (tidx )
230234 if imt (next_ , i = sql .Identifier ):
231- token = tlist .group_tokens_between (sql .Identifier , tidx , next_index_ , extend = True )
235+ tlist .group_tokens_between (sql .Identifier , tidx , nidx , extend = True )
232236 tidx , token = tlist .token_idx_next_by (i = I_ALIAS , t = T .Number , idx = tidx + 1 )
233237
234238
@@ -247,32 +251,35 @@ def group_functions(tlist):
247251 has_table = True
248252 if has_create and has_table :
249253 return
250- token = tlist .token_next_by (t = T .Name )
254+
255+ tidx , token = tlist .token_idx_next_by (t = T .Name )
251256 while token :
252- next_ = tlist .token_next ( tlist . token_index ( token ) )
253- if imt (next_ , i = sql .Parenthesis ):
254- token = tlist .group_tokens_between (sql .Function , token , next_ )
255- token = tlist .token_next_by (t = T .Name , idx = tlist . token_index ( token ) + 1 )
257+ nidx , next_ = tlist .token_idx_next ( tidx )
258+ if isinstance (next_ , sql .Parenthesis ):
259+ tlist .group_tokens_between (sql .Function , tidx , nidx )
260+ tidx , token = tlist .token_idx_next_by (t = T .Name , idx = tidx + 1 )
256261
257262
258263def group_order (tlist ):
259264 """Group together Identifier and Asc/Desc token"""
260- token = tlist .token_next_by (t = T .Keyword .Order )
265+ tidx , token = tlist .token_idx_next_by (t = T .Keyword .Order )
261266 while token :
262- prev = tlist .token_prev ( tlist . token_index ( token ) )
267+ pidx , prev = tlist .token_idx_prev ( tidx )
263268 if imt (prev , i = sql .Identifier , t = T .Number ):
264- token = tlist .group_tokens_between (sql .Identifier , prev , token )
265- token = tlist .token_next_by (t = T .Keyword .Order , idx = tlist .token_index (token ) + 1 )
269+ tlist .group_tokens_between (sql .Identifier , pidx , tidx )
270+ tidx = pidx
271+ tidx , token = tlist .token_idx_next_by (t = T .Keyword .Order , idx = tidx + 1 )
266272
267273
268274@recurse ()
269275def align_comments (tlist ):
270- token = tlist .token_next_by (i = sql .Comment )
276+ tidx , token = tlist .token_idx_next_by (i = sql .Comment )
271277 while token :
272- before = tlist .token_prev (tlist .token_index (token ))
273- if isinstance (before , sql .TokenList ):
274- token = tlist .group_tokens_between (sql .TokenList , before , token , extend = True )
275- token = tlist .token_next_by (i = sql .Comment , idx = tlist .token_index (token ) + 1 )
278+ pidx , prev = tlist .token_idx_prev (tidx )
279+ if isinstance (prev , sql .TokenList ):
280+ tlist .group_tokens_between (sql .TokenList , pidx , tidx , extend = True )
281+ tidx = pidx
282+ tidx , token = tlist .token_idx_next_by (i = sql .Comment , idx = tidx + 1 )
276283
277284
278285def group (stmt ):
0 commit comments