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}xªt 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\}	}
xÊt 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   #
$