U
    ÈS‚g
9  ã                   @   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!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,ƒd0d1„ ƒZ-eej ƒd2d3„ ƒZ.eƒ d4d5„ ƒZ/d6d7„ Z0d8d9„ Z1d:d;„ d<d;„ d=d>d>fd?d@„Z2d=S )Aé    )Ú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ÚclsÚopensÚtidx_offsetÚidxÚtokenÚtidxZopen_idxZ	close_idx© r   ú</tmp/pip-unpacked-wheel-r3w0l0xc/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 r   )r   r   ÚParenthesisr   r   r   r   Úgroup_parenthesis8   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_if@   s    r$   c                 C   s   t | tjƒ d S r   )r   r   ZForr   r   r   r   Ú	group_forD   s    r%   c                 C   s   t | tjƒ d S r   )r   r   ZBeginr   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 r   r   r*   r   r   r   ÚvalidP   s    zgroup_typecasts.<locals>.validc                 S   s   ||fS r   r   ©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
    r6   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 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   r4   ^   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(   r8   r   ÚTypedLiteralr   r*   r   r   r   r5   a   s    ÿýz!group_tzcasts.<locals>.valid_nextc                 S   s   ||fS r   r   r,   r   r   r   r/   h   s    zgroup_tzcasts.<locals>.postr0   ©r   r   r4   r5   r/   r   r   r   Úgroup_tzcastsZ   s
    r=   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   r;   r   r*   r   r   r   r   t   s    z"group_typed_literal.<locals>.matchc                 S   s   t | tjƒS r   )r
   r   r;   r*   r   r   r   Úmatch_to_extendw   s    z,group_typed_literal.<locals>.match_to_extendc                 S   s   | d k	S r   r   r*   r   r   r   r4   z   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   r5   }   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_final€   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)r1   r   r;   )r   r   r@   r4   r5   rA   r/   r   r   r   Úgroup_typed_literaln   s     ÿ ÿrD   c                 C   s8   dd„ }dd„ }dd„ }dd„ }t | tj||||ƒ d S )	Nc                 S   s<   t jdft jdft jdffD ]\}}|  ||¡r dS qdS )NÚ.z->z->>TF)r(   r)   ÚOperatorr   )r   r7   Úvaluer   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   r2   r(   ÚNameÚStringÚSymbolr   )r   ÚsqlclsÚttypesr   r   r   r4   •   s    z group_period.<locals>.valid_prevc                 S   s   dS ©NTr   r*   r   r   r   r5   š   s    z group_period.<locals>.valid_nextc                 S   sZ   t jt jf}tjtjjtjtjjf}|d k	r4| | nd }t	|||d�}|rR||fS ||fS rH   )
r   r   ÚFunctionr(   rL   rM   rN   ÚWildcardÚSingler   )r   r-   r   r.   rO   rP   Únext_r5   r   r   r   r/   ž   s
    zgroup_period.<locals>.postr0   r<   r   r   r   Úgroup_periodŒ   s
    	rV   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 r9   )Ú
is_keywordÚ
normalizedr*   r   r   r   r   «   s    zgroup_as.<locals>.matchc                 S   s   | j dkp| j S )NÚNULL)rX   rW   r*   r   r   r   r4   ®   s    zgroup_as.<locals>.valid_prevc                 S   s&   t jt jt jf}t| |d� o$| d k	S ©N©rK   )r(   ZDMLZDDLZCTEr   )r   rP   r   r   r   r5   ±   s    zgroup_as.<locals>.valid_nextc                 S   s   ||fS r   r   r,   r   r   r   r/   µ   s    zgroup_as.<locals>.postr0   r<   r   r   r   Úgroup_asª   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   r(   Ú
Assignmentr*   r   r   r   r   ¼   s    zgroup_assignment.<locals>.matchc                 S   s   | d k	o| j tjfkS r   )r7   r(   r8   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)r1   r   r]   r3   r   r   r   Úgroup_assignment»   s
    rb   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 r   )r7   r(   rF   Ú
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)rK   rJ   TrY   F)r   rW   rX   r*   ©rO   rP   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>.postFrB   )r   r    rR   r2   Ú	Operationr;   ÚT_NUMERICALÚT_STRINGÚT_NAMEr1   rc   r3   r   rd   r   Úgroup_comparisonÌ   s     ÿ
   ÿri   c                 C   sJ   t jjt jf}| j|d�\}}|rF|  tj||¡ | j||d�\}}qd S )Nr[   ©rK   r   )r(   rM   rN   rL   r`   r   r   r2   )r   rP   r   r   r   r   r   Úgroup_identifierä   s
    rk   c                 C   sd   | j tjjd�\}}|r`|  |¡\}}t|tjtjd�rH|  	tj||¡ | j tjj|d�\}}qd S )Nr>   rI   r_   )
r`   r   ÚOverr   Ú
token_nextr   r    r(   rL   r   )r   r   r   r.   rU   r   r   r   Ú
group_overî   s    rn   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 rH   ©r   r*   rd   r   r   r4   ÿ   s    z group_arrays.<locals>.valid_prevc                 S   s   dS rQ   r   r*   r   r   r   r5     s    z group_arrays.<locals>.valid_nextc                 S   s   ||fS r   r   r,   r   r   r   r/     s    zgroup_arrays.<locals>.postTF)rC   r   )	r   r   r2   rR   r(   rL   rM   rN   r1   r<   r   rd   r   Úgroup_arraysø   s    
    ÿrp   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 rZ   )r   r(   rF   rS   r*   r   r   r   r     s    zgroup_operator.<locals>.matchc                    s    t | ˆ ˆd�p| o|  tjd¡S )NrI   )ZCURRENT_DATEZCURRENT_TIMEZCURRENT_TIMESTAMP)r   r   r(   r8   r*   rd   r   r   r+     s    þÿzgroup_operator.<locals>.validc                 S   s   t j| | _||fS r   )r(   rF   r7   r,   r   r   r   r/     s    zgroup_operator.<locals>.postFrB   )rf   rg   rh   r   r   r    rR   r2   re   r;   r1   r3   r   rd   r   Úgroup_operator  s       ÿ
   ÿrq   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)rJ   r?   rK   ro   r*   ©Zm_rolerO   rP   r   r   r+   -  s    z$group_identifier_list.<locals>.validc                 S   s   ||fS r   r   r,   r   r   r   r/   0  s    z#group_identifier_list.<locals>.postTrB   )r(   r8   r   rR   r"   r2   rc   ZIdentifierListre   rf   rg   rh   ÚCommentrS   r1   r3   r   ru   r   Úgroup_identifier_list#  s$    
 ÿ
ÿ
   ÿrw   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 )Nr[   c                 S   s   t | tjd�p| jS rZ   )r   r(   rv   Z
is_newline)Ztkr   r   r   Ú<lambda>=  ó    z group_comments.<locals>.<lambda>)r   F)Zskip_wsrj   )r`   r(   rv   Ztoken_not_matchingÚ
token_prevr   r   ©r   r   r   ÚeidxÚendr   r   r   Úgroup_comments8  s     ÿ
r~   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 )Nr>   r_   éÿÿÿÿé   )	r`   r   ÚWherer   r   Z_groupable_tokensr   Ztoken_indexr   r{   r   r   r   Úgroup_whereE  s    
r‚   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 )NrI   TrB   )rJ   rK   r   )r   r    rR   r"   r2   re   rc   r`   r(   ÚNumberrm   r
   r   )r   ZI_ALIASr   r   r.   rU   r   r   r   Úgroup_aliasedV  s     ÿr„   c                 C   sÜ   d}d}d}| j D ]6}|j ¡ dkr(d}|j ¡ dkr:d}|jdkrd}q|rZ|rZ|sZd S | jtjd�\}}|rØ|  |¡\}}t|tj	ƒrÂ|  |¡\}	}
|
r®t|
tj
ƒr®|	}n|}|  tj||¡ | jtj|d�\}}qld S )NFZCREATETZTABLEr:   r[   rj   )r   rG   Úupperr`   r(   rL   rm   r
   r   r    rl   r   rR   )r   Z
has_createZ	has_tableZhas_asZ	tmp_tokenr   r   r.   rU   Zover_idxZoverr|   r   r   r   Úgroup_functionsc  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 tokenr[   rI   rj   N)
r`   r(   r8   ZOrderrz   r   r   r2   rƒ   r   ©r   r   r   r-   Úprev_r   r   r   Úgroup_order  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)rJ   TrB   )rJ   r   )r`   r   rv   rz   r
   Z	TokenListr   r‡   r   r   r   Úalign_comments‹  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VALUESr>   r   TrB   )	r`   r(   r8   r
   r   r    rm   r   ÚValues)r   r   r   Z	start_idxZend_idxr   r   r   Úgroup_values–  s    rŒ   c                 C   sH   t 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 ]}|| ƒ q6| S r   )r~   r   r!   r#   r$   r%   r&   rn   r†   r‚   rV   rp   rk   r‰   r6   r=   rD   rq   ri   r\   r„   rb   rŠ   rw   rŒ   )ZstmtÚfuncr   r   r   Úgroup¢  s8    ã
rŽ   c                 C   s   dS rQ   r   r[   r   r   r   rx   Ç  ry   rx   c                 C   s   dS rQ   r   r[   r   r   r   rx   È  ry   NTc              	   C   sØ   d}d\}	}
t t| ƒƒD ]º\}}|| }|dk r2q|jr:q|rb|jrbt||ƒsbt|||||||ƒ ||ƒ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   )NNrB   N)r   r   r   r	   r
   r1   rm   r   )r   r   r   r4   r5   r/   rC   r   r   r-   rˆ   r   r   r   r.   rU   Zfrom_idxZto_idxÚgrpr   r   r   r1   Æ  s&    	
r1   )3Zsqlparser   r   r(   Zsqlparse.utilsr   r   rƒ   ZIntegerZFloatrf   rM   rT   rN   rg   rL   ZPlaceholderrh   r   r   r!   r#   r$   r%   r&   r6   r=   rD   rV   r\   rb   ri   r2   rk   rl   rn   rp   rq   rw   rv   r~   r�   r‚   r„   rR   r†   r‰   rŠ   rŒ   rŽ   r1   r   r   r   r   Ú<module>   s\   #
	
	






%û