o
    Di>                     @   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imtd   i'  c              	   C   s   t dur|t krtdt  dtdur#t| jtkr#tdt dg }d}t| }t|D ]N\}}|| }|jr;q/|jrLt	||sLt
|||d  q/|j|j rX|| q/|j|j r}z| }	W n	 tym   Y q/w |}
| ||	|
 ||
|	 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tidxopen_idx	close_idx r'   a/var/www/html/smartRegister/backend/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_bracketsL      r-   c                 C   r)   r*   )r   r   Parenthesisr,   r'   r'   r(   group_parenthesisP   r.   r0   c                 C   r)   r*   )r   r   Caser,   r'   r'   r(   
group_caseT   r.   r2   c                 C   r)   r*   )r   r   Ifr,   r'   r'   r(   group_ifX   r.   r4   c                 C   r)   r*   )r   r   Forr,   r'   r'   r(   	group_for\   r.   r6   c                 C   r)   r*   )r   r   Beginr,   r'   r'   r(   group_begin`   r.   r8   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   e      zgroup_typecasts.<locals>.matchc                 S      | d uS r*   r'   r>   r'   r'   r(   validh      zgroup_typecasts.<locals>.validc                 S      ||fS r*   r'   r   pidxr$   nidxr'   r'   r(   postk   rB   zgroup_typecasts.<locals>.post_groupr   
Identifierr   r   rA   rG   
valid_prev
valid_nextr'   r'   r(   group_typecastsd   s
   rN   c                 C   8   dd }dd }dd }dd }t | tj|||| d S )	Nc                 S      | j tjjkS r*   )ttyper<   KeywordTZCastr>   r'   r'   r(   r   s   r?   zgroup_tzcasts.<locals>.matchc                 S   r@   r*   r'   r>   r'   r'   r(   rL   v   rB   z!group_tzcasts.<locals>.valid_prevc                 S   s*   | d uo| j p| tjdp| jtjj S NAS)r   r   r<   rR   r   TypedLiteralr   r>   r'   r'   r(   rM   y   s   z!group_tzcasts.<locals>.valid_nextc                 S   rC   r*   r'   rD   r'   r'   r(   rG      rB   zgroup_tzcasts.<locals>.postrH   r   r   rL   rM   rG   r'   r'   r(   group_tzcastsr   s
   rX   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   rV   r   r>   r'   r'   r(   r      r.   z"group_typed_literal.<locals>.matchc                 S      t | tjS r*   )r   r   rV   r>   r'   r'   r(   match_to_extend      z,group_typed_literal.<locals>.match_to_extendc                 S   r@   r*   r'   r>   r'   r'   r(   rL      rB   z'group_typed_literal.<locals>.valid_prevc                 S      | d uo
| j tjj S r*   )r   r   rV   r   r>   r'   r'   r(   rM         z'group_typed_literal.<locals>.valid_nextc                 S   r^   r*   )r   r   rV   M_EXTENDr>   r'   r'   r(   valid_final   r_   z(group_typed_literal.<locals>.valid_finalc                 S   s   ||fS r*   r'   rD   r'   r'   r(   rG      rB   z!group_typed_literal.<locals>.postFextendT)rI   r   rV   )r   r   r\   rL   rM   ra   rG   r'   r'   r(   group_typed_literal   s   
rd   c                 C   rO   )	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#   rQ   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+   rJ   r<   NameStringSymbolr   )r#   sqlclsttypesr'   r'   r(   rL      s   z group_period.<locals>.valid_prevc                 S      dS NTr'   r>   r'   r'   r(   rM      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 ur| | nd }t	|||d}|r)||fS ||fS rh   )
r   r+   Functionr<   rl   rm   rn   WildcardSingler   )r   rE   r$   rF   ro   rp   next_rM   r'   r'   r(   rG      s
   zgroup_period.<locals>.postrH   rW   r'   r'   r(   group_period   s
   	rw   c                 C   rO   )	Nc                 S   s   | j o| jdkS rT   )
is_keyword
normalizedr>   r'   r'   r(   r      r.   zgroup_as.<locals>.matchc                 S   s   | j dkp| j S )NNULL)ry   rx   r>   r'   r'   r(   rL      s   zgroup_as.<locals>.valid_prevc                 S   s&   t jt jt jf}t| |d o| d uS Nrk   )r<   DMLDDLCTEr   )r#   rp   r'   r'   r(   rM      s   zgroup_as.<locals>.valid_nextc                 S   rC   r*   r'   rD   r'   r'   r(   rG      rB   zgroup_as.<locals>.postrH   rW   r'   r'   r(   group_as   s
   r   c                 C   r9   )Nc                 S   r:   )Nz:=)r   r<   
Assignmentr>   r'   r'   r(   r      r?   zgroup_assignment.<locals>.matchc                 S   s   | d uo
| j tjfvS r*   )rQ   r<   rR   r>   r'   r'   r(   rA      r_   zgroup_assignment.<locals>.validc                 S   s,   t jdf}| j||d\}}|p|}||fS )N;rZ   r"   )r<   r=   token_next_by)r   rE   r$   rF   m_semicolonsnidx_r'   r'   r(   rG      s   
zgroup_assignment.<locals>.post)rI   r   r   rK   r'   r'   r(   group_assignment   s
   r   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   rP   r*   )rQ   r<   rf   
Comparisonr>   r'   r'   r(   r      r?   zgroup_comparison.<locals>.matchc                    s.   t |  dr	dS | r| jr| jdkrdS dS )N)rk   rj   Trz   F)r   rx   ry   r>   ro   rp   r'   r(   rA      s
   zgroup_comparison.<locals>.validc                 S   rC   r*   r'   rD   r'   r'   r(   rG      rB   zgroup_comparison.<locals>.postFrb   )r   r/   rs   rJ   	OperationrV   T_NUMERICALT_STRINGT_NAMErI   r   rK   r'   r   r(   group_comparison   s   

r   c                 C   sP   t jjt jf}| j|d\}}|r&| tj|| | j||d\}}|sd S d S )Nr|   rk   r"   )r<   rm   rn   rl   r   r   r   rJ   )r   rp   r$   r#   r'   r'   r(   group_identifier   s   r   c                 C   sj   | j tjjd\}}|r3| |\}}t|tjtjdr$| 	tj|| | j tjj|d\}}|sd S d S )NrY   ri   r   )
r   r   Overr   
token_nextr   r/   r<   rl   r   )r   r$   r#   rF   rv   r'   r'   r(   
group_over  s   r   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   r[   r*   )r   r   r+   r>   r'   r'   r(   r     r]   zgroup_arrays.<locals>.matchc                    s   t |  dS rh   r   r>   r   r'   r(   rL     r?   z group_arrays.<locals>.valid_prevc                 S   rq   rr   r'   r>   r'   r'   r(   rM     s   z group_arrays.<locals>.valid_nextc                 S   s   ||fS r*   r'   rD   r'   r'   r(   rG     rB   zgroup_arrays.<locals>.postTF)rc   r   )	r   r+   rJ   rs   r<   rl   rm   rn   rI   rW   r'   r   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 r{   )r   r<   rf   rt   r>   r'   r'   r(   r   )  s   zgroup_operator.<locals>.matchc                    s    t |  dp| o| tjdS )Nri   )CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP)r   r   r<   rR   r>   r   r'   r(   rA   ,  s   zgroup_operator.<locals>.validc                 S   s   t j| | _||fS r*   )r<   rf   rQ   rD   r'   r'   r(   rG   2  s   zgroup_operator.<locals>.postFrb   )r   r   r   r   r+   r/   rs   rJ   r   rV   rI   rK   r'   r   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   r:   )N,r;   r>   r'   r'   r(   r   B  r?   z$group_identifier_list.<locals>.matchc                    s   t |  dS )N)rj   rZ   rk   r   r>   m_rolero   rp   r'   r(   rA   E  r.   z$group_identifier_list.<locals>.validc                 S   rC   r*   r'   rD   r'   r'   r(   rG   H  rB   z#group_identifier_list.<locals>.postTrb   )r<   rR   r   rs   r1   rJ   r   IdentifierListr   r   r   r   Commentrt   rI   rK   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 )Nr|   c                 S   s   t | tjdp	| jS r{   )r   r<   r   
is_newline)tkr'   r'   r(   <lambda>U  s    z group_comments.<locals>.<lambda>)r"   F)skip_wsr   )r   r<   r   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\}}|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 )NrY   r   r   )	r   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 )Nri   Trb   )rj   rk   r"   )r   r/   rs   r1   rJ   r   r   r   r<   Numberr   r   r   )r   I_ALIASr$   r#   rF   rv   r'   r'   r(   group_aliasedn  s   r   c                 C   s   d}d}d}| j D ]}|j dkrd}|j dkrd}|jdkr$d}q	|r-|r-|s-d S | jtjd\}}|ro| |\}}t|tj	ra| |\}	}
|
rWt|
tj
rW|	}n|}| tj|| | jtj|d\}}|s8d S d S )NFCREATETTABLErU   r|   r   )r   rg   upperr   r<   rl   r   r   r   r/   r   r   rs   )r   
has_create	has_tablehas_as	tmp_tokenr$   r#   rF   rv   over_idxoverr   r'   r'   r(   group_functions{  s0   

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 tokenr|   ri   r   N)
r   r<   rR   Orderr   r   r   rJ   r   r   r   r$   r#   rE   prev_r'   r'   r(   group_order  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)rj   Trb   )rj   r"   )r   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VALUESrY   r   Trb   )	r   r<   rR   r   r   r/   r   r   Values)r   r$   r#   	start_idx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 ]}||  q| S r*   )r   r-   r0   r2   r4   r6   r8   r   r   r   rw   r   r   r   rN   rX   rd   r   r   r   r   r   r   r   r   )stmtfuncr'   r'   r(   group  s8   
r   c                 C   rq   rr   r'   r|   r'   r'   r(   r         r   c                 C   rq   rr   r'   r|   r'   r'   r(   r     r   NTc	                 C   s*  t dur|t krtdt  dtdur#t| jtkr#tdt dd}	d\}
}t| }t|D ]a\}}||	 }|dk r>q1|jrBq1|rZ|jrZt	||sZt
|||||||d|d 	 ||r| |\}}|r||r||r|| |
||\}}| j||||d	}|	|| 7 }	||}
}q1||}
}q1dS )
zDGroups together tokens that are joined by a middle token. i.e. x < yNr   r	   r
   r   )NNTr   rb   )r   r   r   r   r   r   r   r   r   r   rI   r   r   )r   r   r   rL   rM   rG   rc   r   r   r    rE   r   r!   r"   r#   r$   rF   rv   from_idxto_idxgrpr'   r'   r(   rI     s@   	


rI   )r   )7sqlparser   r   r<   sqlparse.exceptionsr   sqlparse.utilsr   r   r   r   r   IntegerFloatr   rm   ru   rn   r   rl   Placeholderr   r   r-   r0   r2   r4   r6   r8   rN   rX   rd   rw   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   r   r   r   rI   r'   r'   r'   r(   <module>   sf   
1
	
	






%