U
    5øi™>  ã                   @   s¶  d dl mZ d dl mZ d dlmZ d dlmZmZ dZ	d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dDd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/d0„ ƒZ.eƒ d1d2„ ƒZ/eej0ƒd3d4„ ƒZ1eej$ƒd5d6„ ƒZ2eƒ d7d8„ ƒZ3d9d:„ Z4d;d<„ Z5d=d>„ d?d>„ d@dAdAd fdBdC„Z6d@S )Eé    )Úsql)Útokens)ÚSQLParseError)ÚrecurseÚimtéd   i'  c              	   C   s  t dk	r |t kr tdt › d�ƒ‚tdk	rFt| jƒtkrFtdt› d�ƒ‚g }d}t| ƒ}t|ƒD ]¢\}}|| }|jrvq^|jr˜t	||ƒs˜t
|||d ƒ 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.Nú!Maximum grouping depth exceeded (ú).ú#Maximum number of tokens exceeded (r   é   )ÚMAX_GROUPING_DEPTHr   ÚMAX_GROUPING_TOKENSÚlenr   ÚlistÚ	enumerateÚis_whitespaceÚis_groupÚ
isinstanceÚ_group_matchingÚmatchÚM_OPENÚappendÚM_CLOSEÚpopÚ
IndexErrorÚgroup_tokens)ÚtlistÚclsÚdepthÚopensÚtidx_offsetÚ
token_listÚidxÚtokenÚtidxZopen_idxZ	close_idx© r%   ú</tmp/pip-unpacked-wheel-uuk014bl/sqlparse/engine/grouping.pyr      s<    
ÿÿ
ÿ
r   c                 C   s   t | tjƒ d S ©N)r   r   ÚSquareBrackets©r   r%   r%   r&   Úgroup_bracketsL   s    r*   c                 C   s   t | tjƒ d S r'   )r   r   ÚParenthesisr)   r%   r%   r&   Úgroup_parenthesisP   s    r,   c                 C   s   t | tjƒ d S r'   )r   r   ÚCaser)   r%   r%   r&   Ú
group_caseT   s    r.   c                 C   s   t | tjƒ d S r'   )r   r   ZIfr)   r%   r%   r&   Úgroup_ifX   s    r/   c                 C   s   t | tjƒ d S r'   )r   r   ZForr)   r%   r%   r&   Ú	group_for\   s    r0   c                 C   s   t | tjƒ d S r'   )r   r   ZBeginr)   r%   r%   r&   Úgroup_begin`   s    r1   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   e   s    zgroup_typecasts.<locals>.matchc                 S   s   | d k	S r'   r%   r5   r%   r%   r&   Úvalidh   s    zgroup_typecasts.<locals>.validc                 S   s   ||fS r'   r%   ©r   Úpidxr$   Únidxr%   r%   r&   Úpostk   s    zgroup_typecasts.<locals>.post©Ú_groupr   Ú
Identifier©r   r   r6   r:   Ú
valid_prevÚ
valid_nextr%   r%   r&   Úgroup_typecastsd   s
    rA   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'   )Úttyper3   ÚKeywordZTZCastr5   r%   r%   r&   r   s   s    zgroup_tzcasts.<locals>.matchc                 S   s   | d k	S r'   r%   r5   r%   r%   r&   r?   v   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   r3   rC   r   ÚTypedLiteralr   r5   r%   r%   r&   r@   y   s    ÿýz!group_tzcasts.<locals>.valid_nextc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:   €   s    zgroup_tzcasts.<locals>.postr;   ©r   r   r?   r@   r:   r%   r%   r&   Úgroup_tzcastsr   s
    rH   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   rF   r   r5   r%   r%   r&   r   Œ   s    z"group_typed_literal.<locals>.matchc                 S   s   t | tjƒS r'   )r   r   rF   r5   r%   r%   r&   Úmatch_to_extend�   s    z,group_typed_literal.<locals>.match_to_extendc                 S   s   | d k	S r'   r%   r5   r%   r%   r&   r?   ’   s    z'group_typed_literal.<locals>.valid_prevc                 S   s   | d k	o| j tjjŽ S r'   )r   r   rF   r   r5   r%   r%   r&   r@   •   s    z'group_typed_literal.<locals>.valid_nextc                 S   s   | d k	o| j tjjŽ S r'   )r   r   rF   ZM_EXTENDr5   r%   r%   r&   Úvalid_final˜   s    z(group_typed_literal.<locals>.valid_finalc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:   ›   s    z!group_typed_literal.<locals>.postF©ÚextendT)r<   r   rF   )r   r   rK   r?   r@   rL   r:   r%   r%   r&   Úgroup_typed_literal†   s     ÿ ÿrO   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)r3   r4   ÚOperatorr   )r#   rB   Ú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(   r=   r3   ÚNameÚStringÚSymbolr   )r#   ÚsqlclsÚttypesr%   r%   r&   r?   ­   s    z group_period.<locals>.valid_prevc                 S   s   dS ©NTr%   r5   r%   r%   r&   r@   ²   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 rS   )
r   r(   ÚFunctionr3   rW   rX   rY   ÚWildcardÚSingler   )r   r8   r$   r9   rZ   r[   Únext_r@   r%   r%   r&   r:   ¶   s
    zgroup_period.<locals>.postr;   rG   r%   r%   r&   Úgroup_period¤   s
    	ra   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 rD   )Ú
is_keywordÚ
normalizedr5   r%   r%   r&   r   Ã   s    zgroup_as.<locals>.matchc                 S   s   | j dkp| j S )NÚNULL)rc   rb   r5   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©rV   )r3   ZDMLZDDLZCTEr   )r#   r[   r%   r%   r&   r@   É   s    zgroup_as.<locals>.valid_nextc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:   Í   s    zgroup_as.<locals>.postr;   rG   r%   r%   r&   Úgroup_asÂ   s
    rg   c                 C   s8   dd„ }dd„ }dd„ }| }}t | tj||||ƒ d S )Nc                 S   s   |   tjd¡S )Nz:=)r   r3   Ú
Assignmentr5   r%   r%   r&   r   Ô   s    zgroup_assignment.<locals>.matchc                 S   s   | d k	o| j tjfkS r'   )rB   r3   rC   r5   r%   r%   r&   r6   ×   s    zgroup_assignment.<locals>.validc                 S   s,   t jdf}| j||d�\}}|p"|}||fS )Nú;©rJ   r"   )r3   r4   Útoken_next_by)r   r8   r$   r9   Zm_semicolonZsnidxÚ_r%   r%   r&   r:   Ú   s    
zgroup_assignment.<locals>.post)r<   r   rh   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 r'   )rB   r3   rQ   Ú
Comparisonr5   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)rV   rU   Trd   F)r   rb   rc   r5   ©rZ   r[   r%   r&   r6   ì   s
    zgroup_comparison.<locals>.validc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:   ô   s    zgroup_comparison.<locals>.postFrM   )r   r+   r]   r=   Ú	OperationrF   ÚT_NUMERICALÚT_STRINGÚT_NAMEr<   rn   r>   r%   ro   r&   Úgroup_comparisonä   s     ÿ
   ÿrt   c                 C   sJ   t jjt jf}| j|d�\}}|rF|  tj||¡ | j||d�\}}qd S )Nrf   ©rV   r"   )r3   rX   rY   rW   rk   r   r   r=   )r   r[   r$   r#   r%   r%   r&   Úgroup_identifierü   s
    rv   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 )NrI   rT   rj   )
rk   r   ÚOverr   Ú
token_nextr   r+   r3   rW   r   )r   r$   r#   r9   r`   r%   r%   r&   Ú
group_over  s    ry   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(   r5   r%   r%   r&   r     s    zgroup_arrays.<locals>.matchc                    s   t | ˆ ˆd�S rS   ©r   r5   ro   r%   r&   r?     s    z group_arrays.<locals>.valid_prevc                 S   s   dS r\   r%   r5   r%   r%   r&   r@     s    z group_arrays.<locals>.valid_nextc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:     s    zgroup_arrays.<locals>.postTF)rN   r   )	r   r(   r=   r]   r3   rW   rX   rY   r<   rG   r%   ro   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 re   )r   r3   rQ   r^   r5   r%   r%   r&   r   )  s    zgroup_operator.<locals>.matchc                    s    t | ˆ ˆd�p| o|  tjd¡S )NrT   )ZCURRENT_DATEZCURRENT_TIMEZCURRENT_TIMESTAMP)r   r   r3   rC   r5   ro   r%   r&   r6   ,  s    þÿzgroup_operator.<locals>.validc                 S   s   t j| | _||fS r'   )r3   rQ   rB   r7   r%   r%   r&   r:   2  s    zgroup_operator.<locals>.postFrM   )rq   rr   rs   r   r(   r+   r]   r=   rp   rF   r<   r>   r%   ro   r&   Úgroup_operator$  s       ÿ
   ÿr|   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ú,r2   r5   r%   r%   r&   r   B  s    z$group_identifier_list.<locals>.matchc                    s   t | ˆˆ ˆd�S )N)rU   rJ   rV   rz   r5   ©Zm_rolerZ   r[   r%   r&   r6   E  s    z$group_identifier_list.<locals>.validc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:   H  s    z#group_identifier_list.<locals>.postTrM   )r3   rC   r   r]   r-   r=   rn   ZIdentifierListrp   rq   rr   rs   ÚCommentr^   r<   r>   r%   r€   r&   Úgroup_identifier_list;  s$    
 ÿ
ÿ
   ÿr‚   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 )Nrf   c                 S   s   t | tjd�p| jS re   )r   r3   r�   Z
is_newline)Ztkr%   r%   r&   Ú<lambda>U  ó    z group_comments.<locals>.<lambda>)r"   F)Zskip_wsru   )rk   r3   r�   Ztoken_not_matchingÚ
token_prevr   r   ©r   r$   r#   ÚeidxÚendr%   r%   r&   Úgroup_commentsP  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 )NrI   rj   éÿÿÿÿr   )	rk   r   ÚWherer   r   Z_groupable_tokensr   Ztoken_indexr   r†   r%   r%   r&   Úgroup_where]  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 )NrT   TrM   )rU   rV   r"   )r   r+   r]   r-   r=   rp   rn   rk   r3   ÚNumberrx   r   r   )r   ZI_ALIASr$   r#   r9   r`   r%   r%   r&   Úgroup_aliasedn  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TABLErE   rf   ru   )r   rR   Úupperrk   r3   rW   rx   r   r   r+   rw   r   r]   )r   Z
has_createZ	has_tableZhas_asZ	tmp_tokenr$   r#   r9   r`   Zover_idxZoverr‡   r%   r%   r&   Úgroup_functions{  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 tokenrf   rT   ru   N)
rk   r3   rC   ZOrderr…   r   r   r=   r�   r   ©r   r$   r#   r8   Ú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)rU   TrM   )rU   r"   )rk   r   r�   r…   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VALUESrI   rŠ   TrM   )	rk   r3   rC   r   r   r+   rx   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/   r0   r1   ry   r�   rŒ   ra   r{   rv   r“   rA   rH   rO   r|   rt   rg   rŽ   rm   r”   r‚   r–   )ZstmtÚfuncr%   r%   r&   Úgroupº  s8    ã
r˜   c                 C   s   dS r\   r%   rf   r%   r%   r&   rƒ   ß  r„   rƒ   c                 C   s   dS r\   r%   rf   r%   r%   r&   rƒ   à  r„   NTc	                 C   s2  t dk	r |t kr tdt › d�ƒ‚tdk	rFt| jƒtkrFtdt› d�ƒ‚d}	d\}
}t| ƒ}t|ƒD ]Ê\}}||	 }|dk r|qb|jr„qb|r´|jr´t	||ƒs´t
|||||||d|d ƒ	 ||ƒ�r"|  |¡\}}|�r"||ƒ�r"||ƒ�r"|| |
||ƒ\}}| j||||d	�}|	|| 7 }	|| }
}qb|| }
}qbdS )
zDGroups together tokens that are joined by a middle token. i.e. x < yNr   r	   r
   r   )NNTr   rM   )r   r   r   r   r   r   r   r   r   r   r<   rx   r   )r   r   r   r?   r@   r:   rN   r   r   r    r8   r’   r!   r"   r#   r$   r9   r`   Zfrom_idxZto_idxÚgrpr%   r%   r&   r<   Þ  sF    	
ÿÿ
ÿ   ÿ

r<   )r   )7Zsqlparser   r   r3   Zsqlparse.exceptionsr   Zsqlparse.utilsr   r   r   r   r�   ZIntegerZFloatrq   rX   r_   rY   rr   rW   ZPlaceholderrs   r   r*   r,   r.   r/   r0   r1   rA   rH   rO   ra   rg   rm   rt   r=   rv   rw   ry   r{   r|   r‚   r�   r‰   r‹   rŒ   rŽ   r]   r�   r“   r”   r–   r˜   r<   r%   r%   r%   r&   Ú<module>   sd   
1
	
	






%ú