o
    [h
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 ]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clsZopenstidx_offsetidxtokentidxZopen_idxZ	close_idx r   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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_brackets4      r   c                 C   r   r   )r   r   Parenthesisr   r   r   r   group_parenthesis8   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_if@   r    r&   c                 C   r   r   )r   r   Forr   r   r   r   	group_forD   r    r(   c                 C   r   r   )r   r   ZBeginr   r   r   r   group_beginH   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   M      zgroup_typecasts.<locals>.matchc                 S      | d uS r   r   r/   r   r   r   validP      zgroup_typecasts.<locals>.validc                 S      ||fS r   r   r   pidxr   nidxr   r   r   postS   r3   zgroup_typecasts.<locals>.post_groupr   
Identifierr   r   r2   r8   
valid_prev
valid_nextr   r   r   group_typecastsL   s
   r?   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-   KeywordZTZCastr/   r   r   r   r   [   r0   zgroup_tzcasts.<locals>.matchc                 S   r1   r   r   r/   r   r   r   r=   ^   r3   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-   rC   r   TypedLiteralr   r/   r   r   r   r>   a   s   z!group_tzcasts.<locals>.valid_nextc                 S   r4   r   r   r5   r   r   r   r8   h   r3   zgroup_tzcasts.<locals>.postr9   r   r   r=   r>   r8   r   r   r   group_tzcastsZ   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   r/   r   r   r   r   t   r    z"group_typed_literal.<locals>.matchc                 S      t | tjS r   )r
   r   rF   r/   r   r   r   match_to_extendw      z,group_typed_literal.<locals>.match_to_extendc                 S   r1   r   r   r/   r   r   r   r=   z   r3   z'group_typed_literal.<locals>.valid_prevc                 S      | d uo
| j tjj S r   )r   r   rF   r   r/   r   r   r   r>   }      z'group_typed_literal.<locals>.valid_nextc                 S   rN   r   )r   r   rF   ZM_EXTENDr/   r   r   r   valid_final   rO   z(group_typed_literal.<locals>.valid_finalc                 S   s   ||fS r   r   r5   r   r   r   r8      r3   z!group_typed_literal.<locals>.postFextendT)r:   r   rF   )r   r   rL   r=   r>   rP   r8   r   r   r   group_typed_literaln   s   
rS   c                 C   r@   )	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   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;   r-   NameStringSymbolr   )r   sqlclsttypesr   r   r   r=      s   z group_period.<locals>.valid_prevc                 S      dS NTr   r/   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 ur| | nd }t	|||d}|r)||fS ||fS rW   )
r   r   Functionr-   r[   r\   r]   WildcardSingler   )r   r6   r   r7   r^   r_   next_r>   r   r   r   r8      s
   zgroup_period.<locals>.postr9   rG   r   r   r   group_period   s
   	rf   c                 C   r@   )	Nc                 S   s   | j o| jdkS rD   )
is_keyword
normalizedr/   r   r   r   r      r    zgroup_as.<locals>.matchc                 S   s   | j dkp| j S )NNULL)rh   rg   r/   r   r   r   r=      s   zgroup_as.<locals>.valid_prevc                 S   s&   t jt jt jf}t| |d o| d uS NrZ   )r-   ZDMLZDDLZCTEr   )r   r_   r   r   r   r>      s   zgroup_as.<locals>.valid_nextc                 S   r4   r   r   r5   r   r   r   r8      r3   zgroup_as.<locals>.postr9   rG   r   r   r   group_as   s
   rl   c                 C   r*   )Nc                 S   r+   )Nz:=)r   r-   
Assignmentr/   r   r   r   r      r0   zgroup_assignment.<locals>.matchc                 S   s   | d uo
| j tjfvS r   )rB   r-   rC   r/   r   r   r   r2      rO   zgroup_assignment.<locals>.validc                 S   s,   t jdf}| j||d\}}|p|}||fS )N;rJ   r   )r-   r.   token_next_by)r   r6   r   r7   Zm_semicolonZsnidx_r   r   r   r8      s   
zgroup_assignment.<locals>.post)r:   r   rm   r<   r   r   r   group_assignment   s
   rr   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   rA   r   )rB   r-   rU   
Comparisonr/   r   r   r   r      r0   zgroup_comparison.<locals>.matchc                    s.   t |  dr	dS | r| jr| jdkrdS dS )N)rZ   rY   Tri   F)r   rg   rh   r/   r^   r_   r   r   r2      s
   zgroup_comparison.<locals>.validc                 S   r4   r   r   r5   r   r   r   r8      r3   zgroup_comparison.<locals>.postFrQ   )r   r!   rb   r;   	OperationrF   T_NUMERICALT_STRINGT_NAMEr:   rs   r<   r   rt   r   group_comparison   s   

ry   c                 C   sP   t jjt jf}| j|d\}}|r&| tj|| | j||d\}}|sd S d S )Nrk   rZ   r   )r-   r\   r]   r[   rp   r   r   r;   )r   r_   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 )NrI   rX   ro   )
rp   r   Overr   
token_nextr   r!   r-   r[   r   )r   r   r   r7   re   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   rK   r   )r
   r   r   r/   r   r   r   r      rM   zgroup_arrays.<locals>.matchc                    s   t |  dS rW   r   r/   rt   r   r   r=      r0   z group_arrays.<locals>.valid_prevc                 S   r`   ra   r   r/   r   r   r   r>     s   z group_arrays.<locals>.valid_nextc                 S   s   ||fS r   r   r5   r   r   r   r8     r3   zgroup_arrays.<locals>.postTF)rR   r   )	r   r   r;   rb   r-   r[   r\   r]   r:   rG   r   rt   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 rj   )r   r-   rU   rc   r/   r   r   r   r     s   zgroup_operator.<locals>.matchc                    s    t |  dp| o| tjdS )NrX   )ZCURRENT_DATEZCURRENT_TIMEZCURRENT_TIMESTAMP)r   r   r-   rC   r/   rt   r   r   r2     s   zgroup_operator.<locals>.validc                 S   s   t j| | _||fS r   )r-   rU   rB   r5   r   r   r   r8     s   zgroup_operator.<locals>.postFrQ   )rv   rw   rx   r   r   r!   rb   r;   ru   rF   r:   r<   r   rt   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)nullZrolec                 S   r+   )N,r,   r/   r   r   r   r   *  r0   z$group_identifier_list.<locals>.matchc                    s   t |  dS )N)rY   rJ   rZ   r   r/   Zm_roler^   r_   r   r   r2   -  r    z$group_identifier_list.<locals>.validc                 S   r4   r   r   r5   r   r   r   r8   0  r3   z#group_identifier_list.<locals>.postTrQ   )r-   rC   r   rb   r#   r;   rs   ZIdentifierListru   rv   rw   rx   Commentrc   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 )Nrk   c                 S   s   t | tjdp	| jS rj   )r   r-   r   Z
is_newline)tkr   r   r   <lambda>=  s    z group_comments.<locals>.<lambda>)r   F)Zskip_wsrz   )rp   r-   r   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\}}|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 )NrI   ro      )	rp   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\}}|r@| 
|\}}t|t jr1| jt j||dd | j|tj	|d\}}|sd S d S )NrX   TrQ   )rY   rZ   r   )r   r!   rb   r#   r;   ru   rs   rp   r-   Numberr}   r
   r   )r   ZI_ALIASr   r   r7   re   r   r   r   group_aliasedV  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 )NFZCREATETZTABLErE   rk   rz   )r   rV   upperrp   r-   r[   r}   r
   r   r!   r|   r   rb   )r   Z
has_createZ	has_tableZhas_asZ	tmp_tokenr   r   r7   re   Zover_idxZoverr   r   r   r   group_functionsc  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 tokenrk   rX   rz   N)
rp   r-   rC   ZOrderr   r   r   r;   r   r   r   r   r   r6   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)rY   TrQ   )rY   r   )rp   r   r   r   r
   Z	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 )NZVALUESrI   r   TrQ   )	rp   r-   rC   r
   r   r!   r}   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 ]}||  q| S r   )r   r   r"   r$   r&   r(   r)   r~   r   r   rf   r   r{   r   r?   rH   rS   r   ry   rl   r   rr   r   r   r   )stmtfuncr   r   r   group  s8   
r   c                 C   r`   ra   r   rk   r   r   r   r         r   c                 C   r`   ra   r   rk   r   r   r   r     r   NTc              	   C   s   d}d\}	}
t t| D ]]\}}|| }|dk rq|jrq|r1|jr1t||s1t||||||| ||rd| |\}}|
rd||
rd||rd|| |	||\}}| j||||d}||| 7 }||}	}
q||}	}
qdS )zDGroups together tokens that are joined by a middle token. i.e. x < yr   )NNrQ   N)r   r   r   r	   r
   r:   r}   r   )r   r   r   r=   r>   r8   rR   r   r   r6   r   r   r   r   r7   re   Zfrom_idxZto_idxgrpr   r   r   r:     s(   	
r:   )3Zsqlparser   r   r-   Zsqlparse.utilsr   r   r   IntegerFloatrv   r\   rd   r]   rw   r[   ZPlaceholderrx   r   r   r"   r$   r&   r(   r)   r?   rH   rS   rf   rl   rr   ry   r;   r{   r|   r~   r   r   r   r   r   r   r   r   rb   r   r   r   r   r   r:   r   r   r   r   <module>   s^   #
	
	






%