B
    HVvg6                 @   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rJt||sJt|| q|j|j rb|| q|j|j	 ry|
 }W n tk
r   wY nX |}| ||| ||| 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   >/tmp/pip-install-o3oxmrkh/sqlparse/sqlparse/engine/grouping.pyr      s&    
r   c             C   s   t | tj d S )N)r   r   SquareBrackets)r   r   r   r   group_brackets4   s    r   c             C   s   t | tj d S )N)r   r   Parenthesis)r   r   r   r   group_parenthesis8   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   ZIf)r   r   r   r   group_if@   s    r!   c             C   s   t | tj d S )N)r   r   ZFor)r   r   r   r   	group_forD   s    r"   c             C   s   t | tj d S )N)r   r   ZBegin)r   r   r   r   group_beginH   s    r#   c             C   s8   dd }dd }dd }| }}t | tj|||| d S )Nc             S   s   |  tjdS )Nz::)r   TPunctuation)r   r   r   r   r   M   s    zgroup_typecasts.<locals>.matchc             S   s   | d k	S )Nr   )r   r   r   r   validP   s    zgroup_typecasts.<locals>.validc             S   s   ||fS )Nr   )r   pidxr   nidxr   r   r   postS   s    zgroup_typecasts.<locals>.post)_groupr   
Identifier)r   r   r&   r)   
valid_prev
valid_nextr   r   r   group_typecastsL   s
    r.   c             C   s8   dd }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>.valid_prevc             S   s*   | d k	o(| j p(| tjdp(| jtjj S )NAS)r   r   r$   r0   r   TypedLiteralr   )r   r   r   r   r-   a   s    z!group_tzcasts.<locals>.valid_nextc             S   s   ||fS )Nr   )r   r'   r   r(   r   r   r   r)   h   s    zgroup_tzcasts.<locals>.post)r*   r   r+   )r   r   r,   r-   r)   r   r   r   group_tzcastsZ   s
    r3   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   r2   r   )r   r   r   r   r   t   s    z"group_typed_literal.<locals>.matchc             S   s   t | tjS )N)r
   r   r2   )r   r   r   r   match_to_extendw   s    z,group_typed_literal.<locals>.match_to_extendc             S   s   | d k	S )Nr   )r   r   r   r   r,   z   s    z'group_typed_literal.<locals>.valid_prevc             S   s   | d k	o| j tjj S )N)r   r   r2   r   )r   r   r   r   r-   }   s    z'group_typed_literal.<locals>.valid_nextc             S   s   | d k	o| j tjj S )N)r   r   r2   ZM_EXTEND)r   r   r   r   valid_final   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   r2   )r   r   r5   r,   r-   r6   r)   r   r   r   group_typed_literaln   s    
r8   c             C   s8   dd }dd }dd }dd }t | tj|||| d S )	Nc             S   s   |  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   r-      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=   r>   Wildcardr   )r   r'   r   r(   r?   r@   next_r-   r   r   r   r)      s
    zgroup_period.<locals>.post)r*   r   r+   )r   r   r,   r-   r)   r   r   r   group_period   s
    	rD   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 )Nr1   )
is_keyword
normalized)r   r   r   r   r      s    zgroup_as.<locals>.matchc             S   s   | j dkp| j S )NNULL)rF   rE   )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$   ZDMLZDDLZCTEr   )r   r@   r   r   r   r-      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,   r-   r)   r   r   r   group_as   s
    rH   c             C   s8   dd }dd }dd }| }}t | tj|||| d S )Nc             S   s   |  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)r/   r$   r0   )r   r   r   r   r&      s    zgroup_assignment.<locals>.validc             S   s,   t jdf}| j||d\}}|p"|}||fS )N;)r4   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   rI   )r   r   r&   r)   r,   r-   r   r   r   group_assignment   s
    rM   c          	      sf   t j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)r/   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:   TrG   F)r   rE   rF   )r   )r?   r@   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)r7   )r   r   rA   r+   	Operationr2   T_NUMERICALT_STRINGT_NAMEr*   rO   )r   r   r&   r)   r,   r-   r   )r?   r@   r   group_comparison   s    
rT   c             C   sN   t jjt jf}| j|d\}}x*|rH| tj|| | j||d\}}q W d S )N)r;   )r;   r   )r$   r=   r>   r<   rK   r   r   r+   )r   r@   r   r   r   r   r   group_identifier   s
    rU   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   )r?   r@   r   r   r,      s    z group_arrays.<locals>.valid_prevc             S   s   dS )NTr   )r   r   r   r   r-      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)r7   r   )	r   r   r+   rA   r$   r<   r=   r>   r*   )r   r   r,   r-   r)   r   )r?   r@   r   group_arrays   s    
rV   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$   rN   rB   )r   r   r   r   r     s    zgroup_operator.<locals>.matchc                s    t |  dp| o| tjdS )N)r:   r;   )ZCURRENT_DATEZCURRENT_TIMEZCURRENT_TIMESTAMP)r   r   r$   r0   )r   )r?   r@   r   r   r&     s    zgroup_operator.<locals>.validc             S   s   t j| | _||fS )N)r$   rN   r/   )r   r'   r   r(   r   r   r   r)     s    zgroup_operator.<locals>.postF)r7   )rQ   rR   rS   r   r   r   rA   r+   rP   r2   r*   )r   r   r&   r)   r,   r-   r   )r?   r@   r   group_operator   s    
rW   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   |  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:   r4   r;   )r   )r   )m_roler?   r@   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)r7   )r$   r0   r   rA   r   r+   rO   ZIdentifierListrP   rQ   rR   rS   CommentrB   r*   )r   r   r&   r)   r,   r-   r   )r[   r?   r@   r   group_identifier_list  s    

r]   c             C   st   | j tjd\}}x\|rn| jdd |d\}}|d k	rX| j|dd\}}| 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$   r\   r   )Ztkr   r   r   <lambda>.      z group_comments.<locals>.<lambda>)r   F)Zskip_ws)r;   r   )rK   r$   r\   Ztoken_not_matching
token_prevr   r   )r   r   r   eidxendr   r   r   group_comments)  s    rc   c             C   s   | j tjjd\}}xp|r| j tjj|d\}}|d krD| jd }n| j|d  }| |}| tj|| | j tjj|d\}}qW d S )N)r4   )r4   r      )	rK   r   Wherer   r   Z_groupable_tokensr   Ztoken_indexr   )r   r   r   ra   rb   r   r   r   group_where6  s    
rg   c             C   s   t jt jt jt jt jt jf}| j|tj	d\}}xL|r|| 
|\}}t|t jrd| jt j||dd | j|tj	|d\}}q2W d S )N)r:   r;   T)r7   )r:   r;   r   )r   r   rA   r   r+   rP   rO   rK   r$   Number
token_nextr
   r   )r   ZI_ALIASr   r   r(   rC   r   r   r   group_aliasedG  s    rj   c       	      C   s   d}d}d}x@| j D ]6}|j dkr*d}|j dkr<d}|jdkrd}qW |r^|r^|s^d S | jtjd\}}xF|r| |\}}t|tj	r| 
tj|| | jtj|d\}}qrW d S )NFZCREATETZTABLEr1   )r;   )r;   r   )r   valueupperrK   r$   r<   ri   r
   r   r   r   rA   )	r   Z
has_createZ	has_tableZhas_asZ	tmp_tokenr   r   r(   rC   r   r   r   group_functionsT  s$    
rm   c             C   sl   | j tjjd\}}xR|rf| |\}}t|tjtjdrN| 	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)
rK   r$   r0   ZOrderr`   r   r   r+   rh   r   )r   r   r   r'   prev_r   r   r   group_orderk  s    ro   c             C   sf   | j tjd\}}xN|r`| |\}}t|tjrJ| jtj||dd |}| j tj|d\}}qW d S )N)r:   T)r7   )r:   r   )rK   r   r\   r`   r
   Z	TokenListr   )r   r   r   r'   rn   r   r   r   align_commentsv  s    rp   c             C   sf   | j tjdfd\}}|}d}x&|rDt|tjr4|}| |\}}q W |dkrb| jtj||dd d S )NZVALUES)r4   rd   T)r7   )	rK   r$   r0   r
   r   r   ri   r   Values)r   r   r   Z	start_idxZend_idxr   r   r   group_values  s    rr   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)rc   r   r   r    r!   r"   r#   rm   rg   rD   rV   rU   ro   r.   r3   r8   rW   rT   rH   rj   rM   rp   r]   rr   )Zstmtfuncr   r   r   group  s6    
rt   c             C   s   dS )NTr   )r;   r   r   r   r^     r_   r^   c             C   s   dS )NTr   )r;   r   r   r   r^     r_   NTc          	   C   s   d}d\}	}
xt t| D ]\}}|| }|dk r4q|jr<q|rd|jrdt||sdt||||||| ||r| |\}}|
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   )NN)r7   N)r   r   r   r	   r
   r*   ri   r   )r   r   r   r,   r-   r)   r7   r   r   r'   rn   r   r   r   r(   rC   Zfrom_idxZto_idxgrpr   r   r   r*     s&    	
r*   )1Zsqlparser   r   r$   Zsqlparse.utilsr   r   rh   ZIntegerZFloatrQ   r=   Singler>   rR   r<   ZPlaceholderrS   r   r   r   r    r!   r"   r#   r.   r3   r8   rD   rH   rM   rT   r+   rU   rV   rW   r]   r\   rc   rf   rg   rj   rA   rm   ro   rp   rr   rt   r*   r   r   r   r   <module>   sH   #
$