3
v^q4                 @   s  d dl mZ d dl mZ d dlmZmZ ejejjejj	fZ
ejejjejjfZejejjfZdd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zeej d d! Z!d"d# Z"d$d% Z#d&d' Z$eej%d(d) Z&eej'd*d+ Z(e d,d- Z)eej*d.d/ Z+d0d1 Z,e d2d3 Z-d4d5 Z.d6d7 Z/d8d9 d:d9 d;d<d<fd=d>Z0d;S )?    )sql)tokens)recurseimtc       	      C   s   g }d}xt t| D ]\}}|| }|jr.q|jrLt|| rLt|| q|j|j rd|j| q|j|j	 ry|j
 }W n tk
r   wY nX |}| j||| ||| 7 }qW dS )z*Groups Tokens that have beginning and end.r   N)	enumeratelistis_whitespaceis_group
isinstance_group_matchingmatchM_OPENappendM_CLOSEpop
IndexErrorgroup_tokens)	tlistclsZopenstidx_offsetidxtokentidxZopen_idxZ	close_idx r   </usr/lib/python3.6/site-packages/sqlparse/engine/grouping.pyr      s&    
r   c             C   s   t | tj d S )N)r   r   SquareBrackets)r   r   r   r   group_brackets5   s    r   c             C   s   t | tj d S )N)r   r   Parenthesis)r   r   r   r   group_parenthesis9   s    r   c             C   s   t | tj d S )N)r   r   Case)r   r   r   r   
group_case=   s    r    c             C   s   t | tj d S )N)r   r   If)r   r   r   r   group_ifA   s    r"   c             C   s   t | tj d S )N)r   r   For)r   r   r   r   	group_forE   s    r$   c             C   s   t | tj d S )N)r   r   Begin)r   r   r   r   group_beginI   s    r&   c             C   s8   dd }dd }dd }| }}t | tj|||| d S )Nc             S   s   | j tjdS )Nz::)r   TPunctuation)r   r   r   r   r   N   s    zgroup_typecasts.<locals>.matchc             S   s   | d k	S )Nr   )r   r   r   r   validQ   s    zgroup_typecasts.<locals>.validc             S   s   ||fS )Nr   )r   pidxr   nidxr   r   r   postT   s    zgroup_typecasts.<locals>.post)_groupr   
Identifier)r   r   r)   r,   
valid_prev
valid_nextr   r   r   group_typecastsM   s
    r1   c             C   s0   dd }dd }dd }t | tj|||| d S )Nc             S   s   | j tjjkS )N)ttyper'   KeywordZTZCast)r   r   r   r   r   \   s    zgroup_tzcasts.<locals>.matchc             S   s   | d k	S )Nr   )r   r   r   r   r)   _   s    zgroup_tzcasts.<locals>.validc             S   s   ||fS )Nr   )r   r*   r   r+   r   r   r   r,   b   s    zgroup_tzcasts.<locals>.post)r-   r   r.   )r   r   r)   r,   r   r   r   group_tzcasts[   s    r4   c          	   C   sd   dd }dd }dd }dd }d	d
 }dd }t | tj||||dd t | tj||||dd d S )Nc             S   s   t | tjjdS )N)m)r   r   TypedLiteralr   )r   r   r   r   r   n   s    z"group_typed_literal.<locals>.matchc             S   s   t | tjS )N)r
   r   r6   )r   r   r   r   match_to_extendq   s    z,group_typed_literal.<locals>.match_to_extendc             S   s   | d k	S )Nr   )r   r   r   r   r/   t   s    z'group_typed_literal.<locals>.valid_prevc             S   s   | d k	o| j tjj S )N)r   r   r6   r   )r   r   r   r   r0   w   s    z'group_typed_literal.<locals>.valid_nextc             S   s   | d k	o| j tjj S )N)r   r   r6   M_EXTEND)r   r   r   r   valid_finalz   s    z(group_typed_literal.<locals>.valid_finalc             S   s   ||fS )Nr   )r   r*   r   r+   r   r   r   r,   }   s    z!group_typed_literal.<locals>.postF)extendT)r-   r   r6   )r   r   r7   r/   r0   r9   r,   r   r   r   group_typed_literalh   s    
r;   c             C   s8   dd }dd }dd }dd }t | tj|||| d S )	Nc             S   s   | j tjdS )N.)r   r'   r(   )r   r   r   r   r      s    zgroup_period.<locals>.matchc             S   s(   t jt jf}tjtjjf}t| ||dS )N)it)r   r   r.   r'   NameStringSymbolr   )r   sqlclsttypesr   r   r   r/      s    z group_period.<locals>.valid_prevc             S   s   dS )NTr   )r   r   r   r   r0      s    z group_period.<locals>.valid_nextc             S   sT   t jt jf}tjtjjtjf}|d k	r.| | nd }t|||d}|rL||fS ||fS )N)r=   r>   )	r   r   Functionr'   r?   r@   rA   Wildcardr   )r   r*   r   r+   rB   rC   next_r0   r   r   r   r,      s
    zgroup_period.<locals>.post)r-   r   r.   )r   r   r/   r0   r,   r   r   r   group_period   s
    	rG   c             C   s8   dd }dd }dd }dd }t | tj|||| d S )	Nc             S   s   | j o| jdkS )NAS)
is_keyword
normalized)r   r   r   r   r      s    zgroup_as.<locals>.matchc             S   s   | j dkp| j S )NNULL)rJ   rI   )r   r   r   r   r/      s    zgroup_as.<locals>.valid_prevc             S   s&   t jt jt jf}t| |d o$| d k	S )N)r>   )r'   DMLDDLCTEr   )r   rC   r   r   r   r0      s    zgroup_as.<locals>.valid_nextc             S   s   ||fS )Nr   )r   r*   r   r+   r   r   r   r,      s    zgroup_as.<locals>.post)r-   r   r.   )r   r   r/   r0   r,   r   r   r   group_as   s
    rO   c             C   s8   dd }dd }dd }| }}t | tj|||| d S )Nc             S   s   | j tjdS )Nz:=)r   r'   
Assignment)r   r   r   r   r      s    zgroup_assignment.<locals>.matchc             S   s   | d k	o| j tjkS )N)r2   r'   r3   )r   r   r   r   r)      s    zgroup_assignment.<locals>.validc             S   s,   t jdf}| j||d\}}|p"|}||fS )N;)r5   r   )r'   r(   token_next_by)r   r*   r   r+   Zm_semicolonZsnidx_r   r   r   r,      s    
zgroup_assignment.<locals>.post)r-   r   rP   )r   r   r)   r,   r/   r0   r   r   r   group_assignment   s
    rT   c          	      sb   t jt jt jt jf tt t dd } fdd}dd }| }}t| t j	||||dd d S )	Nc             S   s   | j tjjkS )N)r2   r'   Operator
Comparison)r   r   r   r   r      s    zgroup_comparison.<locals>.matchc                s2   t |  drdS | r*| jr*| jdkr*dS dS d S )N)r>   r=   TrK   F)r   rI   rJ   )r   )rB   rC   r   r   r)      s
    zgroup_comparison.<locals>.validc             S   s   ||fS )Nr   )r   r*   r   r+   r   r   r   r,      s    zgroup_comparison.<locals>.postF)r:   )
r   r   rD   r.   	OperationT_NUMERICALT_STRINGT_NAMEr-   rV   )r   r   r)   r,   r/   r0   r   )rB   rC   r   group_comparison   s    
r[   c             C   sN   t jjt jf}| j|d\}}x*|rH| jtj|| | j||d\}}q W d S )N)r>   )r>   r   )r'   r@   rA   r?   rR   r   r   r.   )r   rC   r   r   r   r   r   group_identifier   s
    r\   c          
      sb   t jt jt jf tjtjjfdd } fdd}dd }dd }t| t j||||d	d
d d S )Nc             S   s   t | tjS )N)r
   r   r   )r   r   r   r   r      s    zgroup_arrays.<locals>.matchc                s   t |  dS )N)r=   r>   )r   )r   )rB   rC   r   r   r/      s    z group_arrays.<locals>.valid_prevc             S   s   dS )NTr   )r   r   r   r   r0      s    z group_arrays.<locals>.valid_nextc             S   s   ||fS )Nr   )r   r*   r   r+   r   r   r   r,      s    zgroup_arrays.<locals>.postTF)r:   r   )	r   r   r.   rD   r'   r?   r@   rA   r-   )r   r   r/   r0   r,   r   )rB   rC   r   group_arrays   s    
r]   c          	      sj   t t t tjtjtjtjtjtj	f dd } fdd}dd }| }}t
| tj||||dd d S )	Nc             S   s   t | tjtjfdS )N)r>   )r   r'   rU   rE   )r   r   r   r   r      s    zgroup_operator.<locals>.matchc                s    t |  dp| o| jtjdS )N)r=   r>   CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP)r^   r_   r`   )r   r   r'   r3   )r   )rB   rC   r   r   r)      s    zgroup_operator.<locals>.validc             S   s   t j| | _||fS )N)r'   rU   r2   )r   r*   r   r+   r   r   r   r,     s    zgroup_operator.<locals>.postF)r:   )rX   rY   rZ   r   r   r   rD   r.   rW   r6   r-   )r   r   r)   r,   r/   r0   r   )rB   rC   r   group_operator   s    
ra   c          	      s   t jdf tjtjtjtjtjtjft	t
 t t jt jt jf dd } fdd}dd }| }}t| tj||||d	d
 d S )Nnullrolec             S   s   | j tjdS )N,)r   r'   r(   )r   r   r   r   r     s    z$group_identifier_list.<locals>.matchc                s   t |  dS )N)r=   r5   r>   )r   )r   )m_rolerB   rC   r   r   r)     s    z$group_identifier_list.<locals>.validc             S   s   ||fS )Nr   )r   r*   r   r+   r   r   r   r,     s    z#group_identifier_list.<locals>.postT)r:   )rb   rc   )r'   r3   r   rD   r   r.   rV   IdentifierListrW   rX   rY   rZ   CommentrE   r-   )r   r   r)   r,   r/   r0   r   )re   rB   rC   r   group_identifier_list  s    

rh   c             C   st   | j tjd\}}x\|rn| jdd |d\}}|d k	rX| j|dd\}}| jtj|| | j tj|d\}}qW d S )N)r>   c             S   s   t | tjdp| jS )N)r>   )r   r'   rg   r   )tkr   r   r   <lambda>(  s    z group_comments.<locals>.<lambda>)r   F)skip_ws)r>   r   )rR   r'   rg   token_not_matching
token_prevr   r   )r   r   r   eidxendr   r   r   group_comments#  s    rp   c             C   s   | j tjjd\}}xp|r| j tjj|d\}}|d krD| jd }n| j|d  }| j|}| jtj|| | j tjj|d\}}qW d S )N)r5   )r5   r      )	rR   r   Wherer   r   _groupable_tokensr   token_indexr   )r   r   r   rn   ro   r   r   r   group_where0  s    
rv   c             C   s   t jt jt jt jt jt jf}| j|tj	d\}}xL|r|| j
|\}}t|t jrd| jt j||dd | j|tj	|d\}}q2W d S )N)r=   r>   T)r:   )r=   r>   r   )r   r   rD   r   r.   rW   rV   rR   r'   Number
token_nextr
   r   )r   ZI_ALIASr   r   r+   rF   r   r   r   group_aliasedA  s    ry   c             C   s   d}d}x*| j D ] }|jdkr"d}|jdkrd}qW |r@|r@d S | jtjd\}}xF|r| j|\}}t|tjr| j	tj
|| | jtj|d\}}qTW d S )NFZCREATETZTABLE)r>   )r>   r   )r   valuerR   r'   r?   rx   r
   r   r   r   rD   )r   Z
has_createZ	has_tableZ	tmp_tokenr   r   r+   rF   r   r   r   group_functionsN  s    

r{   c             C   sl   | j tjjd\}}xR|rf| j|\}}t|tjtjdrN| j	tj|| |}| j tjj|d\}}qW dS )z,Group together Identifier and Asc/Desc token)r>   )r=   r>   )r>   r   N)
rR   r'   r3   Orderrm   r   r   r.   rw   r   )r   r   r   r*   prev_r   r   r   group_orderb  s    r~   c             C   sf   | j tjd\}}xN|r`| j|\}}t|tjrJ| jtj||dd |}| j tj|d\}}qW d S )N)r=   T)r:   )r=   r   )rR   r   rg   rm   r
   	TokenListr   )r   r   r   r*   r}   r   r   r   align_commentsm  s    r   c             C   sf   | j tjdfd\}}|}d}x&|rDt|tjr4|}| j|\}}q W |dkrb| jtj||dd d S )NZVALUES)r5   rq   T)r:   rr   rr   )	rR   r'   r3   r
   r   r   rx   r   Values)r   r   r   	start_idxend_idxr   r   r   group_valuesx  s    r   c             C   sJ   xDt ttttttttt	t
tttttttttttttgD ]}||  q6W | S )N)rp   r   r   r    r"   r$   r&   r{   rv   rG   r]   r\   r~   r1   r4   r;   ra   r[   rO   ry   rT   r   rh   r   )stmtfuncr   r   r   group  s6    
r   c             C   s   dS )NTr   )r>   r   r   r   rj     s    rj   c             C   s   dS )NTr   )r>   r   r   r   rj     s    NTc          	   C   s   d}d\}	}
xt t| D ]\}}|| }|jr2q|r\|jr\t|| r\t||||||| ||r| j|\}}|
r||
r||r|| |	||\}}| j||||d}||| 7 }|| }	}
q|| }	}
qW dS )zDGroups together tokens that are joined by a middle token. i.e. x < yr   N)r:   )NN)r   r   r   r	   r
   r-   rx   r   )r   r   r   r/   r0   r,   r:   r   r   r*   r}   r   r   r   r+   rF   Zfrom_idxZto_idxgrpr   r   r   r-     s"    	
r-   )1sqlparser   r   r'   sqlparse.utilsr   r   rw   IntegerZFloatrX   r@   SinglerA   rY   r?   ZPlaceholderrZ   r   r   r   r    r"   r$   r&   r1   r4   r;   rG   rO   rT   r[   r.   r\   r]   ra   rh   rg   rp   rs   rv   ry   rD   r{   r~   r   r   r   r-   r   r   r   r   <module>	   sH   #
$