apb_extra_utils.sql_parser.x_grouping
1# coding=utf-8 2# 3# Author: Ernesto Arredondo Martinez (ernestone@gmail.com) 4# Created: 7/6/19 18:23 5# Last modified: 25/4/18 15:27 6# Copyright (c) 2019 7 8from sqlparse import sql 9from sqlparse.engine import grouping 10from sqlparse.sql import TokenList 11 12 13class ElemGroup(TokenList): 14 pass 15 16 17def group_elems_parenthesis(tlist): 18 for tok_idx, tok in enumerate(tlist.tokens): 19 if isinstance(tok, sql.Parenthesis) or isinstance(tok, sql.SquareBrackets): 20 ini_idx = 1 # Comienza desde el segundo token distinto a ( o [ 21 fi_elem = fi_idx = len(tok.tokens) - 2 # Acaba en el penultimo token antes de ) o ] 22 for tidx in range(fi_idx, ini_idx, -1): 23 if tok.tokens[tidx].value == ",": 24 tok.group_tokens(ElemGroup, tidx + 1, fi_elem) 25 fi_elem = tidx - 1 26 27 tok.group_tokens(ElemGroup, ini_idx, fi_elem) 28 29 30def group(stmt): 31 for func in [ 32 grouping.group_comments, 33 34 # _group_matching 35 grouping.group_brackets, 36 grouping.group_parenthesis, 37 group_elems_parenthesis, 38 grouping.group_case, 39 grouping.group_if, 40 grouping.group_for, 41 grouping.group_begin, 42 43 grouping.group_functions, 44 grouping.group_where, 45 grouping.group_period, 46 grouping.group_arrays, 47 # grouping.group_identifier, 48 grouping.group_operator, 49 grouping.group_order, 50 grouping.group_typecasts, 51 grouping.group_as, 52 grouping.group_aliased, 53 grouping.group_assignment, 54 grouping.group_comparison, 55 56 grouping.align_comments, 57 # group_identifier_list, 58 ]: 59 func(stmt) 60 return stmt
class
ElemGroup(sqlparse.sql.TokenList):
A group of tokens.
It has an additional instance attribute tokens
which holds a
list of child-tokens.
def
group_elems_parenthesis(tlist):
18def group_elems_parenthesis(tlist): 19 for tok_idx, tok in enumerate(tlist.tokens): 20 if isinstance(tok, sql.Parenthesis) or isinstance(tok, sql.SquareBrackets): 21 ini_idx = 1 # Comienza desde el segundo token distinto a ( o [ 22 fi_elem = fi_idx = len(tok.tokens) - 2 # Acaba en el penultimo token antes de ) o ] 23 for tidx in range(fi_idx, ini_idx, -1): 24 if tok.tokens[tidx].value == ",": 25 tok.group_tokens(ElemGroup, tidx + 1, fi_elem) 26 fi_elem = tidx - 1 27 28 tok.group_tokens(ElemGroup, ini_idx, fi_elem)
def
group(stmt):
31def group(stmt): 32 for func in [ 33 grouping.group_comments, 34 35 # _group_matching 36 grouping.group_brackets, 37 grouping.group_parenthesis, 38 group_elems_parenthesis, 39 grouping.group_case, 40 grouping.group_if, 41 grouping.group_for, 42 grouping.group_begin, 43 44 grouping.group_functions, 45 grouping.group_where, 46 grouping.group_period, 47 grouping.group_arrays, 48 # grouping.group_identifier, 49 grouping.group_operator, 50 grouping.group_order, 51 grouping.group_typecasts, 52 grouping.group_as, 53 grouping.group_aliased, 54 grouping.group_assignment, 55 grouping.group_comparison, 56 57 grouping.align_comments, 58 # group_identifier_list, 59 ]: 60 func(stmt) 61 return stmt