U
    7ÄT_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}t t| ƒƒD ]œ\}}|| }|jr,q|jrHt||ƒsHt||ƒ q|j|jŽ r`| |¡ q|j|j	Ž rz| 
¡ }W n tk
r�   Y qY nX |}|  |||¡ ||| 7 }q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-unpacked-wheel-bbdw8hci/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 r   )r   r   ÚParenthesisr   r   r   r   Úgroup_parenthesis9   s    r    c                 C   s   t | tjƒ d S r   )r   r   ÚCaser   r   r   r   Ú
group_case=   s    r"   c                 C   s   t | tjƒ d S r   )r   r   ZIfr   r   r   r   Úgroup_ifA   s    r#   c                 C   s   t | tjƒ d S r   )r   r   ZForr   r   r   r   Ú	group_forE   s    r$   c                 C   s   t | tjƒ d S r   )r   r   ZBeginr   r   r   r   Úgroup_beginI   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   N   s    zgroup_typecasts.<locals>.matchc                 S   s   | d k	S r   r   r)   r   r   r   ÚvalidQ   s    zgroup_typecasts.<locals>.validc                 S   s   ||fS r   r   ©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
    r5   c                 C   s0   dd„ }dd„ }dd„ }t | tj||||ƒ d S )Nc                 S   s   | j tjjkS r   )Úttyper'   ÚKeywordZTZCastr)   r   r   r   r   \   s    zgroup_tzcasts.<locals>.matchc                 S   s   | d k	S r   r   r)   r   r   r   r*   _   s    zgroup_tzcasts.<locals>.validc                 S   s   ||fS r   r   r+   r   r   r   r.   b   s    zgroup_tzcasts.<locals>.postr/   )r   r   r*   r.   r   r   r   Úgroup_tzcasts[   s    r8   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 r   )r
   r   r;   r)   r   r   r   Úmatch_to_extendq   s    z,group_typed_literal.<locals>.match_to_extendc                 S   s   | d k	S r   r   r)   r   r   r   r3   t   s    z'group_typed_literal.<locals>.valid_prevc                 S   s   | d k	o| j tjjŽ S r   )r   r   r;   r   r)   r   r   r   r4   w   s    z'group_typed_literal.<locals>.valid_nextc                 S   s   | d k	o| j tjjŽ S r   )r   r   r;   ZM_EXTENDr)   r   r   r   Úvalid_finalz   s    z(group_typed_literal.<locals>.valid_finalc                 S   s   ||fS r   r   r+   r   r   r   r.   }   s    z!group_typed_literal.<locals>.postF©ÚextendT)r0   r   r;   )r   r   r<   r3   r4   r=   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   |   tjd¡S )NÚ.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   r1   r'   ÚNameÚStringÚSymbolr   )r   ÚsqlclsÚttypesr   r   r   r3   Š   s    z group_period.<locals>.valid_prevc                 S   s   dS ©NTr   r)   r   r   r   r4   �   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 rB   )	r   r   ÚFunctionr'   rF   rG   rH   ÚWildcardr   )r   r,   r   r-   rI   rJ   Únext_r4   r   r   r   r.   “   s
    zgroup_period.<locals>.postr/   ©r   r   r3   r4   r.   r   r   r   Úgroup_period†   s
    	rP   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 )NZAS)Ú
is_keywordÚ
normalizedr)   r   r   r   r       s    zgroup_as.<locals>.matchc                 S   s   | j dkp| j S )NÚNULL)rR   rQ   r)   r   r   r   r3   £   s    zgroup_as.<locals>.valid_prevc                 S   s&   t jt jt jf}t| |d� o$| d k	S ©N©rE   )r'   ZDMLZDDLZCTEr   )r   rJ   r   r   r   r4   ¦   s    zgroup_as.<locals>.valid_nextc                 S   s   ||fS r   r   r+   r   r   r   r.   ª   s    zgroup_as.<locals>.postr/   rO   r   r   r   Úgroup_asŸ   s
    rV   c                 C   s8   dd„ }dd„ }dd„ }| }}t | tj||||ƒ d S )Nc                 S   s   |   tjd¡S )Nz:=)r   r'   Ú
Assignmentr)   r   r   r   r   ±   s    zgroup_assignment.<locals>.matchc                 S   s   | d k	o| j tjkS r   )r6   r'   r7   r)   r   r   r   r*   ´   s    zgroup_assignment.<locals>.validc                 S   s,   t jdf}| j||d�\}}|p"|}||fS )Nú;©r:   r   )r'   r(   Útoken_next_by)r   r,   r   r-   Zm_semicolonZsnidxÚ_r   r   r   r.   ·   s    
zgroup_assignment.<locals>.post)r0   r   rW   r2   r   r   r   Úgroup_assignment°   s
    r\   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 r   )r6   r'   ÚOperatorÚ
Comparisonr)   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)rE   rD   TrS   F)r   rQ   rR   r)   ©rI   rJ   r   r   r*   É   s
    zgroup_comparison.<locals>.validc                 S   s   ||fS r   r   r+   r   r   r   r.   Ñ   s    zgroup_comparison.<locals>.postFr>   )
r   r   rL   r1   Ú	OperationÚT_NUMERICALÚT_STRINGÚT_NAMEr0   r^   r2   r   r_   r   Úgroup_comparisonÁ   s    ÿ
   ÿrd   c                 C   sJ   t jjt jf}| j|d�\}}|rF|  tj||¡ | j||d�\}}qd S )NrU   ©rE   r   )r'   rG   rH   rF   rZ   r   r   r1   )r   rJ   r   r   r   r   r   Úgroup_identifierÙ   s
    rf   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 r   )r
   r   r   r)   r   r   r   r   ç   s    zgroup_arrays.<locals>.matchc                    s   t | ˆ ˆd�S rB   ©r   r)   r_   r   r   r3   ê   s    z group_arrays.<locals>.valid_prevc                 S   s   dS rK   r   r)   r   r   r   r4   í   s    z group_arrays.<locals>.valid_nextc                 S   s   ||fS r   r   r+   r   r   r   r.   ð   s    zgroup_arrays.<locals>.postTF)r?   r   )	r   r   r1   rL   r'   rF   rG   rH   r0   rO   r   r_   r   Úgroup_arraysã   s    
    ÿrh   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 rT   )r   r'   r]   rM   r)   r   r   r   r   ü   s    zgroup_operator.<locals>.matchc                    s    t | ˆ ˆd�p| o|  tjd¡S )NrC   )ZCURRENT_DATEZCURRENT_TIMEZCURRENT_TIMESTAMP)r   r   r'   r7   r)   r_   r   r   r*   ÿ   s    þÿzgroup_operator.<locals>.validc                 S   s   t j| | _||fS r   )r'   r]   r6   r+   r   r   r   r.     s    zgroup_operator.<locals>.postFr>   )ra   rb   rc   r   r   r   rL   r1   r`   r;   r0   r2   r   r_   r   Úgroup_operator÷   s       ÿ
   ÿri   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     s    z$group_identifier_list.<locals>.matchc                    s   t | ˆˆ ˆd�S )N)rD   r:   rE   rg   r)   ©Zm_rolerI   rJ   r   r   r*     s    z$group_identifier_list.<locals>.validc                 S   s   ||fS r   r   r+   r   r   r   r.     s    z#group_identifier_list.<locals>.postTr>   )r'   r7   r   rL   r!   r1   r^   ZIdentifierListr`   ra   rb   rc   ÚCommentrM   r0   r2   r   rm   r   Úgroup_identifier_list  s$    
 ÿ
ÿ
   ÿro   c                 C   sp   | j tjd�\}}|rl| jdd„ |d�\}}|d k	rV| j|dd�\}}|  tj||¡ | j tj|d�\}}qd S )NrU   c                 S   s   t | tjd�p| jS rT   )r   r'   rn   r   )Ztkr   r   r   Ú<lambda>(  ó    z group_comments.<locals>.<lambda>)r   F)Zskip_wsre   )rZ   r'   rn   Ztoken_not_matchingÚ
token_prevr   r   ©r   r   r   ZeidxÚendr   r   r   Úgroup_comments#  s     ÿ
ru   c                 C   s†   | j tjjd�\}}|r‚| j tjj|d�\}}|d krB| jd }n| j|d  }|  |¡}|  tj||¡ | j tjj|d�\}}qd S )Nr9   rY   éÿÿÿÿé   )	rZ   r   ÚWherer   r   Z_groupable_tokensr   Ztoken_indexr   rs   r   r   r   Úgroup_where0  s    
ry   c                 C   s~   t jt jt jt jt jt jf}| j|tj	d�\}}|rz|  
|¡\}}t|t jƒrb| jt j||dd� | j|tj	|d�\}}q0d S )NrC   Tr>   )rD   rE   r   )r   r   rL   r!   r1   r`   r^   rZ   r'   ÚNumberÚ
token_nextr
   r   )r   ZI_ALIASr   r   r-   rN   r   r   r   Úgroup_aliasedA  s     ÿr|   c                 C   s–   d}d}| j D ] }|jdkr d}|jdkrd}q|r<|r<d S | jtjd�\}}|r’|  |¡\}}t|tjƒr||  	tj
||¡ | jtj|d�\}}qNd S )NFZCREATETZTABLErU   re   )r   ÚvaluerZ   r'   rF   r{   r
   r   r   r   rL   )r   Z
has_createZ	has_tableZ	tmp_tokenr   r   r-   rN   r   r   r   Úgroup_functionsN  s    


r~   c                 C   sh   | j tjjd�\}}|rd|  |¡\}}t|tjtjd�rL|  	tj||¡ |}| j tjj|d�\}}qdS )z,Group together Identifier and Asc/Desc tokenrU   rC   re   N)
rZ   r'   r7   ZOrderrr   r   r   r1   rz   r   ©r   r   r   r,   Úprev_r   r   r   Úgroup_orderb  s    r�   c                 C   sb   | j tjd�\}}|r^|  |¡\}}t|tjƒrH| jtj||dd� |}| j tj|d�\}}qd S )N)rD   Tr>   )rD   r   )rZ   r   rn   rr   r
   Z	TokenListr   r   r   r   r   Úalign_commentsm  s    r‚   c                 C   sb   | j tjdfd�\}}|}d}|rBt|tjƒr2|}|  |¡\}}q|dkr^| jtj||dd� d S )NZVALUESr9   rv   Tr>   )	rZ   r'   r7   r
   r   r   r{   r   ÚValues)r   r   r   Z	start_idxZend_idxr   r   r   Úgroup_valuesx  s    r„   c                 C   sF   t ttttttttt	t
tttttttttttttfD ]}|| ƒ q4| S r   )ru   r   r    r"   r#   r$   r%   r~   ry   rP   rh   rf   r�   r5   r8   r@   ri   rd   rV   r|   r\   r‚   ro   r„   )ZstmtÚfuncr   r   r   Úgroup„  s6    ä
r†   c                 C   s   dS rK   r   rU   r   r   r   rp   ¨  rq   rp   c                 C   s   dS rK   r   rU   r   r   r   rp   ©  rq   NTc              	   C   sÎ   d}d\}	}
t t| ƒƒD ]°\}}|| }|jr0q|rX|jrXt||ƒsXt|||||||ƒ ||ƒr¾|  |¡\}}|
r¾||
ƒr¾||ƒr¾|| |	||ƒ\}}| j||||d�}||| 7 }|| }	}
q|| }	}
qdS )zDGroups together tokens that are joined by a middle token. i.e. x < yr   )NNr>   N)r   r   r   r	   r
   r0   r{   r   )r   r   r   r3   r4   r.   r?   r   r   r,   r€   r   r   r   r-   rN   Zfrom_idxZto_idxÚgrpr   r   r   r0   §  s"    	
r0   )1Zsqlparser   r   r'   Zsqlparse.utilsr   r   rz   ZIntegerZFloatra   rG   ÚSinglerH   rb   rF   ZPlaceholderrc   r   r   r    r"   r#   r$   r%   r5   r8   r@   rP   rV   r\   rd   r1   rf   rh   ri   ro   rn   ru   rx   ry   r|   rL   r~   r�   r‚   r„   r†   r0   r   r   r   r   Ú<module>	   sV   #
	





$û