o
    6i<                     @   s  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dCd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 d0d1 Z-eej.d2d3 Z/eej"d4d5 Z0e d6d7 Z1d8d9 Z2d:d; Z3d<d= d>d= d?d@d@d fdAdBZ4d?S )D    )sql)tokens)recurseimtd   i'  c              	   C   s   t dur
|t kr
dS tdurt| jtkrdS g }d}t| }t|D ]N\}}|| }|jr/q#|jr@t||s@t	|||d  q#|j
|j rL|| q#|j
|j rqz| }	W n	 tya   Y q#w |}
| ||	|
 ||
|	 7 }q#dS )z*Groups Tokens that have beginning and end.Nr      )MAX_GROUPING_DEPTH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#   ]/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/sqlparse/engine/grouping.pyr      s8   r   c                 C      t | tj d S N)r   r   SquareBracketsr   r#   r#   r$   group_bracketsG      r)   c                 C   r%   r&   )r   r   Parenthesisr(   r#   r#   r$   group_parenthesisK   r*   r,   c                 C   r%   r&   )r   r   Caser(   r#   r#   r$   
group_caseO   r*   r.   c                 C   r%   r&   )r   r   Ifr(   r#   r#   r$   group_ifS   r*   r0   c                 C   r%   r&   )r   r   Forr(   r#   r#   r$   	group_forW   r*   r2   c                 C   r%   r&   )r   r   Beginr(   r#   r#   r$   group_begin[   r*   r4   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   `      zgroup_typecasts.<locals>.matchc                 S      | d uS r&   r#   r:   r#   r#   r$   validc      zgroup_typecasts.<locals>.validc                 S      ||fS r&   r#   r   pidxr    nidxr#   r#   r$   postf   r>   zgroup_typecasts.<locals>.post_groupr   
Identifierr   r   r=   rC   
valid_prev
valid_nextr#   r#   r$   group_typecasts_   s
   rJ   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&   )ttyper8   KeywordTZCastr:   r#   r#   r$   r   n   r;   zgroup_tzcasts.<locals>.matchc                 S   r<   r&   r#   r:   r#   r#   r$   rH   q   r>   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   r8   rN   r   TypedLiteralr   r:   r#   r#   r$   rI   t   s   z!group_tzcasts.<locals>.valid_nextc                 S   r?   r&   r#   r@   r#   r#   r$   rC   {   r>   zgroup_tzcasts.<locals>.postrD   r   r   rH   rI   rC   r#   r#   r$   group_tzcastsm   s
   rT   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   rR   r   r:   r#   r#   r$   r      r*   z"group_typed_literal.<locals>.matchc                 S      t | tjS r&   )r   r   rR   r:   r#   r#   r$   match_to_extend      z,group_typed_literal.<locals>.match_to_extendc                 S   r<   r&   r#   r:   r#   r#   r$   rH      r>   z'group_typed_literal.<locals>.valid_prevc                 S      | d uo
| j tjj S r&   )r   r   rR   r   r:   r#   r#   r$   rI         z'group_typed_literal.<locals>.valid_nextc                 S   rZ   r&   )r   r   rR   M_EXTENDr:   r#   r#   r$   valid_final   r[   z(group_typed_literal.<locals>.valid_finalc                 S   s   ||fS r&   r#   r@   r#   r#   r$   rC      r>   z!group_typed_literal.<locals>.postFextendT)rE   r   rR   )r   r   rX   rH   rI   r]   rC   r#   r#   r$   group_typed_literal   s   
r`   c                 C   rK   )	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)r8   r9   Operatorr   )r   rM   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'   rF   r8   NameStringSymbolr   )r   sqlclsttypesr#   r#   r$   rH      s   z group_period.<locals>.valid_prevc                 S      dS NTr#   r:   r#   r#   r$   rI      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 rd   )
r   r'   Functionr8   rh   ri   rj   WildcardSingler   )r   rA   r    rB   rk   rl   next_rI   r#   r#   r$   rC      s
   zgroup_period.<locals>.postrD   rS   r#   r#   r$   group_period   s
   	rs   c                 C   rK   )	Nc                 S   s   | j o| jdkS rP   )
is_keyword
normalizedr:   r#   r#   r$   r      r*   zgroup_as.<locals>.matchc                 S   s   | j dkp| j S )NNULL)ru   rt   r:   r#   r#   r$   rH      s   zgroup_as.<locals>.valid_prevc                 S   s&   t jt jt jf}t| |d o| d uS Nrg   )r8   DMLDDLCTEr   )r   rl   r#   r#   r$   rI      s   zgroup_as.<locals>.valid_nextc                 S   r?   r&   r#   r@   r#   r#   r$   rC      r>   zgroup_as.<locals>.postrD   rS   r#   r#   r$   group_as   s
   r|   c                 C   r5   )Nc                 S   r6   )Nz:=)r   r8   
Assignmentr:   r#   r#   r$   r      r;   zgroup_assignment.<locals>.matchc                 S   s   | d uo
| j tjfvS r&   )rM   r8   rN   r:   r#   r#   r$   r=      r[   zgroup_assignment.<locals>.validc                 S   s,   t jdf}| j||d\}}|p|}||fS )N;rV   r   )r8   r9   token_next_by)r   rA   r    rB   m_semicolonsnidx_r#   r#   r$   rC      s   
zgroup_assignment.<locals>.post)rE   r   r}   rG   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   rL   r&   )rM   r8   rb   
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)rg   rf   Trv   F)r   rt   ru   r:   rk   rl   r#   r$   r=      s
   zgroup_comparison.<locals>.validc                 S   r?   r&   r#   r@   r#   r#   r$   rC      r>   zgroup_comparison.<locals>.postFr^   )r   r+   ro   rF   	OperationrR   T_NUMERICALT_STRINGT_NAMErE   r   rG   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 )Nrx   rg   r   )r8   ri   rj   rh   r   r   r   rF   )r   rl   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 )NrU   re   r   )
r   r   Overr   
token_nextr   r+   r8   rh   r   )r   r    r   rB   rr   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   rW   r&   )r   r   r'   r:   r#   r#   r$   r     rY   zgroup_arrays.<locals>.matchc                    s   t |  dS rd   r   r:   r   r#   r$   rH     r;   z group_arrays.<locals>.valid_prevc                 S   rm   rn   r#   r:   r#   r#   r$   rI     s   z group_arrays.<locals>.valid_nextc                 S   s   ||fS r&   r#   r@   r#   r#   r$   rC     r>   zgroup_arrays.<locals>.postTF)r_   r   )	r   r'   rF   ro   r8   rh   ri   rj   rE   rS   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 rw   )r   r8   rb   rp   r:   r#   r#   r$   r   $  s   zgroup_operator.<locals>.matchc                    s    t |  dp| o| tjdS )Nre   )CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP)r   r   r8   rN   r:   r   r#   r$   r=   '  s   zgroup_operator.<locals>.validc                 S   s   t j| | _||fS r&   )r8   rb   rM   r@   r#   r#   r$   rC   -  s   zgroup_operator.<locals>.postFr^   )r   r   r   r   r'   r+   ro   rF   r   rR   rE   rG   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   r6   )N,r7   r:   r#   r#   r$   r   =  r;   z$group_identifier_list.<locals>.matchc                    s   t |  dS )N)rf   rV   rg   r   r:   m_rolerk   rl   r#   r$   r=   @  r*   z$group_identifier_list.<locals>.validc                 S   r?   r&   r#   r@   r#   r#   r$   rC   C  r>   z#group_identifier_list.<locals>.postTr^   )r8   rN   r   ro   r-   rF   r   IdentifierListr   r   r   r   Commentrp   rE   rG   r#   r   r$   group_identifier_list6  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 )Nrx   c                 S   s   t | tjdp	| jS rw   )r   r8   r   
is_newline)tkr#   r#   r$   <lambda>P  s    z group_comments.<locals>.<lambda>)r   F)skip_wsr   )r   r8   r   token_not_matching
token_prevr   r   r   r    r   eidxendr#   r#   r$   group_commentsK  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 )NrU   r   r   )	r   r   Wherer   r   _groupable_tokensr   token_indexr   r   r#   r#   r$   group_whereX  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 )Nre   Tr^   )rf   rg   r   )r   r+   ro   r-   rF   r   r   r   r8   Numberr   r   r   )r   I_ALIASr    r   rB   rr   r#   r#   r$   group_aliasedi  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TABLErQ   rx   r   )r   rc   upperr   r8   rh   r   r   r   r+   r   r   ro   )r   
has_create	has_tablehas_as	tmp_tokenr    r   rB   rr   over_idxoverr   r#   r#   r$   group_functionsv  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 tokenrx   re   r   N)
r   r8   rN   Orderr   r   r   rF   r   r   r   r    r   rA   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)rf   Tr^   )rf   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VALUESrU   r   Tr^   )	r   r8   rN   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)   r,   r.   r0   r2   r4   r   r   r   rs   r   r   r   rJ   rT   r`   r   r   r|   r   r   r   r   r   )stmtfuncr#   r#   r$   group  s8   
r   c                 C   rm   rn   r#   rx   r#   r#   r$   r         r   c                 C   rm   rn   r#   rx   r#   r#   r$   r     r   NTc	                 C   s  t dur
|t kr
dS tdurt| jtkrdS d}	d\}
}t| }t|D ]a\}}||	 }|dk r2q%|jr6q%|rN|jrNt||sNt	|||||||d|d 	 ||r| 
|\}}|r||r||r|| |
||\}}| j||||d}|	|| 7 }	||}
}q%||}
}q%dS )zDGroups together tokens that are joined by a middle token. i.e. x < yNr   )NNTr   r^   )r   r	   r
   r   r   r   r   r   r   rE   r   r   )r   r   r   rH   rI   rC   r_   r   r   r   rA   r   r   r   r   r    rB   rr   from_idxto_idxgrpr#   r#   r$   rE     s8   	
rE   )r   )5sqlparser   r   r8   sqlparse.utilsr   r   r   r	   r   IntegerFloatr   ri   rq   rj   r   rh   Placeholderr   r   r)   r,   r.   r0   r2   r4   rJ   rT   r`   rs   r|   r   r   rF   r   r   r   r   r   r   r   r   r   r   r   ro   r   r   r   r   r   rE   r#   r#   r#   r$   <module>   sd   
-
	
	






%