o e}_4@sddlmZddlmZddlmZmZejejjejj fZ ej ej j ej j fZejejjfZddZddZdd Zd d Zd d ZddZddZddZddZddZddZddZddZddZeej d d!Z!d"d#Z"d$d%Z#d&d'Z$eej%d(d)Z&eej'd*d+Z(ed,d-Z)eej*d.d/Z+d0d1Z,ed2d3Z-d4d5Z.d6d7Z/d8d9d:d9d;dZ0d;S)?)sql)tokens)recurseimtc Csg}d}tt|D]K\}}||}|jrq |jr$t||s$t||q |j|jr0||q |j|j rUz| }Wn t yEYq w|}| ||||||7}q dS)z*Groups Tokens that have beginning and end.rN) enumeratelist is_whitespaceis_group isinstance_group_matchingmatchM_OPENappendM_CLOSEpop IndexError group_tokens) tlistclsopens tidx_offsetidxtokentidxopen_idx close_idxr:/usr/lib/python3/dist-packages/sqlparse/engine/grouping.pyr s,       r cCt|tjdSN)r rSquareBracketsrrrrgroup_brackets4r"cCrr)r r Parenthesisr!rrrgroup_parenthesis8r#r%cCrr)r rCaser!rrr group_case<r#r'cCrr)r rIfr!rrrgroup_if@r#r)cCrr)r rForr!rrr group_forDr#r+cCrr)r rBeginr!rrr group_beginHr#r-cC8dd}dd}dd}|}}t|tj||||dS)NcS|tjdS)Nz::r T Punctuationrrrrr Mzgroup_typecasts..matchcS|duSrrr3rrrvalidPzgroup_typecasts..validcS||fSrrrpidxrnidxrrrpostSr7zgroup_typecasts..post_groupr Identifierrr r6r< valid_prev valid_nextrrrgroup_typecastsLs rCcCs0dd}dd}dd}t|tj||||dS)NcS|jtjjkSr)ttyper1KeywordTZCastr3rrrr [r4zgroup_tzcasts..matchcSr5rrr3rrrr6^r7zgroup_tzcasts..validcSr8rrr9rrrr<ar7zgroup_tzcasts..postr=)rr r6r<rrr group_tzcastsZsrHc Csddd}dd}dd}dd}d d }d d }t|tj||||d dt|tj||||dddS)NcSst|tjjdS)Nm)rr TypedLiteralr r3rrrr mr#z"group_typed_literal..matchcS t|tjSr)r rrKr3rrrmatch_to_extendp z,group_typed_literal..match_to_extendcSr5rrr3rrrrAsr7z'group_typed_literal..valid_prevcS|duo |jtjjSr)r rrKrr3rrrrBvz'group_typed_literal..valid_nextcSrOr)r rrKM_EXTENDr3rrr valid_finalyrPz(group_typed_literal..valid_finalcSs||fSrrr9rrrr<|r7z!group_typed_literal..postFextendT)r>rrK)rr rMrArBrRr<rrrgroup_typed_literalgs rUcC8dd}dd}dd}dd}t|tj||||dS) NcSr/)N.r0r3rrrr r4zgroup_period..matchcSs(tjtjf}tjtjjf}t|||dSNit)rr r?r1NameStringSymbolr)rsqlclsttypesrrrrAs z group_period..valid_prevcSdSNTrr3rrrrBsz group_period..valid_nextcSsTtjtjf}tjtjjtjf}|dur||nd}t|||d}|r&||fS||fSrX) rr Functionr1r\r]r^Wildcardr)rr:rr;r_r`next_rBrrrr<s zgroup_period..postr=rr rArBr<rrr group_periods  rgcCrV) NcSs|jo|jdkS)NAS) is_keyword normalizedr3rrrr r#zgroup_as..matchcSs|jdkp|j S)NNULL)rjrir3rrrrAszgroup_as..valid_prevcSs&tjtjtjf}t||d o|duSNr[)r1DMLDDLCTEr)rr`rrrrBszgroup_as..valid_nextcSr8rrr9rrrr<r7zgroup_as..postr=rfrrrgroup_ass rqcCr.)NcSr/)Nz:=)r r1 Assignmentr3rrrr r4zgroup_assignment..matchcSs|duo |jtjvSr)rEr1rFr3rrrr6zgroup_assignment..validcSs,tjdf}|j||d\}}|p|}||fS)N;rJr)r1r2 token_next_by)rr:rr; m_semicolonsnidx_rrrr<s zgroup_assignment..post)r>rrrr@rrrgroup_assignments rzc sftjtjtjtjtjftttdd}fdd}dd}|}}t |tj ||||dddS) NcSrDr)rEr1Operator Comparisonr3rrrr r4zgroup_comparison..matchcs.t|dr dS|r|jr|jdkrdSdS)N)r[rZTrkF)rrirjr3r_r`rrr6s zgroup_comparison..validcSr8rrr9rrrr<r7zgroup_comparison..postFrS) rr$rcr? OperationrK T_NUMERICALT_STRINGT_NAMEr>r|r@rr}rgroup_comparisons    rcCsPtjjtjf}|j|d\}}|r&|tj|||j||d\}}|sdSdS)Nrmr[r)r1r]r^r\rvrrr?)rr`rrrrrgroup_identifiers  rc sbtjtjtjftjtjjfdd}fdd}dd}dd}t|tj||||d d d dS) NcSrLr)r rr r3rrrr rNzgroup_arrays..matchcst|dSrXrr3r}rrrAr4z group_arrays..valid_prevcSrarbrr3rrrrBsz group_arrays..valid_nextcSs||fSrrr9rrrr<r7zgroup_arrays..postTF)rTr) rr r?rcr1r\r]r^r>rfrr}r group_arrayss   rc sjttttjtjtjtjtjtj fdd}fdd}dd}|}}t |tj||||dddS) NcSst|tjtjfdSrl)rr1r{rdr3rrrr rszgroup_operator..matchcs t|dp|o|tjdS)NrY) CURRENT_DATE CURRENT_TIMECURRENT_TIMESTAMP)rr r1rFr3r}rrr6s zgroup_operator..validcSstj||_||fSr)r1r{rEr9rrrr<s zgroup_operator..postFrS) rrrrr r$rcr?r~rKr>r@rr}rgroup_operators     rc stjdftjtjtjtjtjtjft t t tjtj tj fdd}fdd}dd}|}}t|tj||||dd dS) N)nullrolecSr/)N,r0r3rrrr r4z$group_identifier_list..matchcst|dS)N)rZrJr[rr3m_roler_r`rrr6r#z$group_identifier_list..validcSr8rrr9rrrr<r7z#group_identifier_list..postTrS)r1rFrrcr&r?r|IdentifierListr~rrrCommentrdr>r@rrrgroup_identifier_list s    rcCsv|jtjd\}}|r9|jdd|d\}}|dur+|j|dd\}}|tj|||jtj|d\}}|s dSdS)NrmcSst|tjdp |jSrl)rr1rr)tkrrr'sz group_comments..)rF)skip_wsr)rvr1rtoken_not_matching token_prevrrrrreidxendrrrgroup_comments"s  rcCs|jtjjd\}}|rD|jtjj|d\}}|dur!|jd}n|j|d}||}|tj|||jtjj|d\}}|s dSdS)NrIru) rvrWherer r_groupable_tokensr token_indexrrrrr group_where/s   rcCstjtjtjtjtjtjf}|j|tj d\}}|r@| |\}}t |tjr1|j tj||dd|j|tj |d\}}|sdSdS)NrYTrS)rZr[r) rr$rcr&r?r~r|rvr1Number token_nextr r)rI_ALIASrrr;rerrr group_aliased@s  rcCsd}d}|jD]}|jdkrd}|jdkrd}q|r|rdS|jtjd\}}|rL||\}}t|tjr>| tj |||jtj|d\}}|s)dSdS)NFCREATETTABLErmr) rvaluervr1r\rr rr$rrc)r has_create has_table tmp_tokenrrr;rerrrgroup_functionsMs"     rcCsn|jtjjd\}}|r5||\}}t|tjtjdr&| tj|||}|jtjj|d\}}|s dSdS)z,Group together Identifier and Asc/Desc tokenrmrYrN) rvr1rFOrderrrrr?rrrrrr:prev_rrr group_orderas rcCsh|jtjd\}}|r2||\}}t|tjr$|jtj||dd|}|jtj|d\}}|s dSdS)N)rZTrS)rZr)rvrrrr TokenListrrrrralign_commentsls  rcCsh|jtjdfd\}}|}d}|r"t|tjr|}||\}}|s|dkr2|jtj||dddSdS)NVALUESrIrTrS) rvr1rFr rr$rrValues)rrr start_idxend_idxrrr group_valuesws rcCsFtttttttttt t t t t ttttttttttfD]}||q|Sr)rr"r%r'r)r+r-rrrgrrrrCrHrUrrrqrrzrrr)stmtfuncrrrgroups6 rcCrarbrrmrrrrrcCrarbrrmrrrrrNTc Csd}d\} } tt|D]]\} } | |} | dkrq | jrq |r1| jr1t| |s1t| |||||||| rd|| \}}| rd|| rd||rd||| | |\}}|j||||d}|||7}||} } q | | } } q dS)zDGroups together tokens that are joined by a middle token. i.e. x < yr)NNrSN)rrrr r r>rr)rrr rArBr<rTrrr:rrrrr;refrom_idxto_idxgrprrrr>s(    r>)1sqlparserrr1sqlparse.utilsrrrIntegerFloatrr]Singler^rr\ Placeholderrr r"r%r'r)r+r-rCrHrUrgrqrzrr?rrrrrrrrrrcrrrrrr>rrrrsX  #          $