o
    svXj>.  ã                   @   sr  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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)d,d-„ Z*eƒ d.d/„ ƒZ+d0d1„ Z,d2d3„ Z-d4d5„ d6d5„ d7d8d8fd9d:„Z.d7S );é    )Úsql)Útokens)ÚrecurseÚimtc           	   	   C   s°   g }d}t t| ƒƒD ]K\}}|| }|jrq
|jr$t||ƒs$t||ƒ q
|j|jŽ r0| |¡ q
|j|j	Ž rUz| 
¡ }W n	 tyE   Y q
w |}|  |||¡ ||| 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ÚtidxÚopen_idxÚ	close_idx© r   úU/var/www/html/myproject/venv/lib/python3.10/site-packages/sqlparse/engine/grouping.pyr      s,   
ý€är   c                 C   ó   t | tjƒ d S ©N)r   r   ÚSquareBrackets©r   r   r   r   Úgroup_brackets5   ó   r"   c                 C   r   r   )r   r   ÚParenthesisr!   r   r   r   Úgroup_parenthesis9   r#   r%   c                 C   r   r   )r   r   ÚCaser!   r   r   r   Ú
group_case=   r#   r'   c                 C   r   r   )r   r   ÚIfr!   r   r   r   Úgroup_ifA   r#   r)   c                 C   r   r   )r   r   ÚForr!   r   r   r   Ú	group_forE   r#   r+   c                 C   r   r   )r   r   ÚBeginr!   r   r   r   Úgroup_beginI   r#   r-   c                 C   ó8   dd„ }dd„ }dd„ }| }}t | tj||||ƒ d S )Nc                 S   ó   |   tjd¡S )Nz::©r   ÚTÚPunctuation©r   r   r   r   r   N   ó   zgroup_typecasts.<locals>.matchc                 S   s   | d uS r   r   r3   r   r   r   ÚvalidQ   ó   zgroup_typecasts.<locals>.validc                 S   ó   ||fS r   r   ©r   Úpidxr   Únidxr   r   r   ÚpostT   r6   zgroup_typecasts.<locals>.post©Ú_groupr   Ú
Identifier©r   r   r5   r;   Ú
valid_prevÚ
valid_nextr   r   r   Úgroup_typecastsM   s
   rB   c                 C   ó8   dd„ }dd„ }dd„ }dd„ }t | tj||||ƒ d S )	Nc                 S   r/   )NÚ.r0   r3   r   r   r   r   \   r4   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>   r1   ÚNameÚStringÚSymbolr   )r   ÚsqlclsÚttypesr   r   r   r@   _   s   z group_period.<locals>.valid_prevc                 S   ó   dS ©NTr   r3   r   r   r   rA   d   s   z group_period.<locals>.valid_nextc                 S   sT   t jt jf}tjtjjtjf}|d ur| | nd }t|||d�}|r&||fS ||fS rE   )	r   r    ÚFunctionr1   rI   rJ   rK   ÚWildcardr   )r   r9   r   r:   rL   rM   Únext_rA   r   r   r   r;   h   s
   zgroup_period.<locals>.postr<   ©r   r   r@   rA   r;   r   r   r   Úgroup_period[   s
   	rT   c                 C   rC   )	Nc                 S   s   | j o| jdkS )NÚAS)Ú
is_keywordÚ
normalizedr3   r   r   r   r   u   r#   zgroup_as.<locals>.matchc                 S   s   | j dkp| j S )NÚNULL)rW   rV   r3   r   r   r   r@   x   s   zgroup_as.<locals>.valid_prevc                 S   s"   t jt jf}t| |d� o| d uS ©N©rH   )r1   ÚDMLÚDDLr   )r   rM   r   r   r   rA   {   s   zgroup_as.<locals>.valid_nextc                 S   r7   r   r   r8   r   r   r   r;      r6   zgroup_as.<locals>.postr<   rS   r   r   r   Úgroup_ast   s
   r]   c                 C   r.   )Nc                 S   r/   )Nz:=)r   r1   Ú
Assignmentr3   r   r   r   r   †   r4   zgroup_assignment.<locals>.matchc                 S   s   | d uo	| j tjvS r   )Úttyper1   ÚKeywordr3   r   r   r   r5   ‰   ó   zgroup_assignment.<locals>.validc                 S   s,   t jdf}| j||d�\}}|p|}||fS )Nú;©Úmr   )r1   r2   Útoken_next_by)r   r9   r   r:   Úm_semicolonÚsnidxÚ_r   r   r   r;   Œ   s   
zgroup_assignment.<locals>.post)r=   r   r^   r?   r   r   r   Úgroup_assignment…   s
   ri   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   )r_   r1   ÚOperatorÚ
Comparisonr3   r   r   r   r   ›   r4   zgroup_comparison.<locals>.matchc                    s.   t | ˆˆ d�r	dS | r| jr| jdkrdS dS )N)rH   rG   TrX   F)r   rV   rW   r3   ©rL   rM   r   r   r5   ž   s
   zgroup_comparison.<locals>.validc                 S   r7   r   r   r8   r   r   r   r;   ¦   r6   zgroup_comparison.<locals>.postF©Úextend)
r   r$   rP   r>   Ú	OperationÚT_NUMERICALÚT_STRINGÚT_NAMEr=   rk   r?   r   rl   r   Úgroup_comparison–   s   ÿ

ÿrs   c                 C   sP   t jjt jf}| j|d�\}}|r&|  tj||¡ | j||d�\}}|sd S d S )NrZ   ©rH   r   )r1   rJ   rK   rI   re   r   r   r>   )r   rM   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 r   )r
   r   r    r3   r   r   r   r   ¼   s   zgroup_arrays.<locals>.matchc                    ó   t | ˆ ˆd�S rE   ©r   r3   rl   r   r   r@   ¿   r4   z group_arrays.<locals>.valid_prevc                 S   rN   rO   r   r3   r   r   r   rA   Â   s   z group_arrays.<locals>.valid_nextc                 S   s   ||fS r   r   r8   r   r   r   r;   Å   r6   zgroup_arrays.<locals>.postTF)rn   r   )	r   r    r>   rP   r1   rI   rJ   rK   r=   rS   r   rl   r   Úgroup_arrays¸   s   


ÿrx   c              	      sf   t t t ‰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 rY   )r   r1   rj   rQ   r3   r   r   r   r   Ñ   ra   zgroup_operator.<locals>.matchc                    rv   rE   rw   r3   rl   r   r   r5   Ô   r4   zgroup_operator.<locals>.validc                 S   s   t j| | _||fS r   )r1   rj   r_   r8   r   r   r   r;   ×   s   zgroup_operator.<locals>.postFrm   )
rp   rq   rr   r   r    r$   rP   r>   ro   r=   r?   r   rl   r   Úgroup_operatorÌ   s   ÿ

ÿry   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   r/   )Nú,r0   r3   r   r   r   r   ç   r4   z$group_identifier_list.<locals>.matchc                    s   t | ˆˆ ˆd�S )N)rG   rd   rH   rw   r3   ©Úm_rolerL   rM   r   r   r5   ê   r#   z$group_identifier_list.<locals>.validc                 S   r7   r   r   r8   r   r   r   r;   í   r6   z#group_identifier_list.<locals>.postTrm   )r1   r`   r   rP   r&   r>   rk   ÚIdentifierListro   rp   rq   rr   ÚCommentrQ   r=   r?   r   r}   r   Úgroup_identifier_listà   s   
ÿ
ÿ

ÿr�   c                 C   sv   | j tjd�\}}|r9| jdd„ |d�\}}|d ur+| j|dd�\}}|  tj||¡ | j tj|d�\}}|sd S d S )NrZ   c                 S   s   t | tjd�p	| jS rY   )r   r1   r€   r   )Útkr   r   r   Ú<lambda>ú   s    z group_comments.<locals>.<lambda>)r   F)Úskip_wsrt   )re   r1   r€   Útoken_not_matchingÚ
token_prevr   r   ©r   r   r   ÚeidxÚendr   r   r   Úgroup_commentsõ   s   
ÿùrŠ   c                 C   sŒ   | j tjjd�\}}|rD| j tjj|d�\}}|d u r!| jd }n| j|d  }|  |¡}|  tj||¡ | j tjj|d�\}}|sd S d S )N©rd   rc   éÿÿÿÿé   )	re   r   ÚWherer   r   Ú_groupable_tokensr   Ú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�\}}|r@|  
|¡\}}t|t jƒr1| jt j||dd� | j|tj	|d�\}}|sd S d S )NrF   Trm   )rG   rH   r   )r   r$   rP   r&   r>   ro   rk   re   r1   ÚNumberÚ
token_nextr
   r   )r   ÚI_ALIASr   r   r:   rR   r   r   r   Úgroup_aliased  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�\}}|rL|  |¡\}}t|tjƒr>|  	tj
||¡ | jtj|d�\}}|s)d S d S )NFÚCREATETÚTABLErZ   rt   )r   Úvaluere   r1   rI   r“   r
   r   r$   r   rP   )r   Ú
has_createÚ	has_tableÚ	tmp_tokenr   r   r:   rR   r   r   r   Úgroup_functions   s"   


€ürœ   c                 C   sn   | j tjjd�\}}|r5|  |¡\}}t|tjtjd�r&|  	tj||¡ |}| j tjj|d�\}}|sdS dS )z,Group together Identifier and Asc/Desc tokenrZ   rF   rt   N)
re   r1   r`   ÚOrderr†   r   r   r>   r’   r   ©r   r   r   r9   Úprev_r   r   r   Úgroup_order4  s   ûr    c                 C   sh   | j tjd�\}}|r2|  |¡\}}t|tjƒr$| jtj||dd� |}| j tj|d�\}}|sd S d S )N)rG   Trm   )rG   r   )re   r   r€   r†   r
   Ú	TokenListr   rž   r   r   r   Úalign_comments?  s   ûr¢   c                 C   sh   | j tjdfd�\}}|}d}|r"t|tjƒr|}|  |¡\}}|s|dkr2| jtj||dd� d S d S )NÚVALUESr‹   rŒ   Trm   )	re   r1   r`   r
   r   r$   r“   r   ÚValues)r   r   r   Ú	start_idxÚend_idxr   r   r   Úgroup_valuesJ  s   ýÿr§   c                 C   sB   t ttttttttt	t
tttttttttttfD ]}|| ƒ q| S r   )rŠ   r"   r%   r'   r)   r+   r-   rœ   r‘   rT   rx   ru   r    rB   ry   rs   r]   r•   ri   r¢   r�   r§   )ÚstmtÚfuncr   r   r   ÚgroupV  s2   æ
rª   c                 C   rN   rO   r   rZ   r   r   r   rƒ   x  ó    rƒ   c                 C   rN   rO   r   rZ   r   r   r   rƒ   y  r«   NTc              	   C   sÎ   d}d\}	}
t t| ƒƒD ]X\}}|| }|jrq|r,|jr,t||ƒs,t|||||||ƒ ||ƒ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   )NNrm   N)r   r   r   r	   r
   r=   r“   r   )r   r   r   r@   rA   r;   rn   r   r   r9   rŸ   r   r   r   r:   rR   Úfrom_idxÚto_idxÚgrpr   r   r   r=   w  s$   	
ír=   )/Úsqlparser   r   r1   Úsqlparse.utilsr   r   r’   ÚIntegerÚFloatrp   rJ   ÚSinglerK   rq   rI   ÚPlaceholderrr   r   r"   r%   r'   r)   r+   r-   rB   rT   r]   ri   rs   r>   ru   rx   ry   r�   r€   rŠ   rŽ   r‘   r•   rP   rœ   r    r¢   r§   rª   r=   r   r   r   r   Ú<module>   sT   #
	





"û