U
    g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 ]\}}|| }|jr,q|jrHt||sHt|| 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.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tidxZopen_idxZ	close_idx r   </tmp/pip-unpacked-wheel-yfdqi671/sqlparse/engine/grouping.pyr      s&    

r   c                 C   s   t | tj d S N)r   r   SquareBracketsr   r   r   r   group_brackets4   s    r   c                 C   s   t | tj d S r   )r   r   Parenthesisr   r   r   r   group_parenthesis8   s    r!   c                 C   s   t | tj d S r   )r   r   Caser   r   r   r   
group_case<   s    r#   c                 C   s   t | tj d S r   )r   r   ZIfr   r   r   r   group_if@   s    r$   c                 C   s   t | tj d S r   )r   r   ZForr   r   r   r   	group_forD   s    r%   c                 C   s   t | tj d S r   )r   r   ZBeginr   r   r   r   group_beginH   s    r&   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   M   s    zgroup_typecasts.<locals>.matchc                 S   s   | d k	S r   r   r*   r   r   r   validP   s    zgroup_typecasts.<locals>.validc                 S   s   ||fS r   r   r   pidxr   nidxr   r   r   postS   s    zgroup_typecasts.<locals>.post_groupr   
Identifierr   r   r+   r/   
valid_prev
valid_nextr   r   r   group_typecastsL   s
    r6   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   )ttyper(   KeywordZTZCastr*   r   r   r   r   [   s    zgroup_tzcasts.<locals>.matchc                 S   s   | d k	S r   r   r*   r   r   r   r4   ^   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   r(   r8   r   TypedLiteralr   r*   r   r   r   r5   a   s    z!group_tzcasts.<locals>.valid_nextc                 S   s   ||fS r   r   r,   r   r   r   r/   h   s    zgroup_tzcasts.<locals>.postr0   r   r   r4   r5   r/   r   r   r   group_tzcastsZ   s
    r=   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   r;   r   r*   r   r   r   r   t   s    z"group_typed_literal.<locals>.matchc                 S   s   t | tjS r   )r
   r   r;   r*   r   r   r   match_to_extendw   s    z,group_typed_literal.<locals>.match_to_extendc                 S   s   | d k	S r   r   r*   r   r   r   r4   z   s    z'group_typed_literal.<locals>.valid_prevc                 S   s   | d k	o| j tjj S r   )r   r   r;   r   r*   r   r   r   r5   }   s    z'group_typed_literal.<locals>.valid_nextc                 S   s   | d k	o| j tjj S r   )r   r   r;   ZM_EXTENDr*   r   r   r   valid_final   s    z(group_typed_literal.<locals>.valid_finalc                 S   s   ||fS r   r   r,   r   r   r   r/      s    z!group_typed_literal.<locals>.postFextendT)r1   r   r;   )r   r   r@   r4   r5   rA   r/   r   r   r   group_typed_literaln   s      rD   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)r(   r)   Operatorr   )r   r7   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   r2   r(   NameStringSymbolr   )r   sqlclsttypesr   r   r   r4      s    z group_period.<locals>.valid_prevc                 S   s   dS NTr   r*   r   r   r   r5      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 rH   )
r   r   Functionr(   rL   rM   rN   WildcardSingler   )r   r-   r   r.   rO   rP   next_r5   r   r   r   r/      s
    zgroup_period.<locals>.postr0   r<   r   r   r   group_period   s
    	rV   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 r9   )
is_keyword
normalizedr*   r   r   r   r      s    zgroup_as.<locals>.matchc                 S   s   | j dkp| j S )NNULL)rX   rW   r*   r   r   r   r4      s    zgroup_as.<locals>.valid_prevc                 S   s&   t jt jt jf}t| |d o$| d k	S NrK   )r(   ZDMLZDDLZCTEr   )r   rP   r   r   r   r5      s    zgroup_as.<locals>.valid_nextc                 S   s   ||fS r   r   r,   r   r   r   r/      s    zgroup_as.<locals>.postr0   r<   r   r   r   group_as   s
    r\   c                 C   s8   dd }dd }dd }| }}t | tj|||| d S )Nc                 S   s   |  tjdS )Nz:=)r   r(   
Assignmentr*   r   r   r   r      s    zgroup_assignment.<locals>.matchc                 S   s   | d k	o| j tjfkS r   )r7   r(   r8   r*   r   r   r   r+      s    zgroup_assignment.<locals>.validc                 S   s,   t jdf}| j||d\}}|p"|}||fS )N;r?   r   )r(   r)   token_next_by)r   r-   r   r.   Zm_semicolonZsnidx_r   r   r   r/      s    
zgroup_assignment.<locals>.post)r1   r   r]   r3   r   r   r   group_assignment   s
    rb   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   )r7   r(   rF   
Comparisonr*   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)rK   rJ   TrY   F)r   rW   rX   r*   rO   rP   r   r   r+      s
    zgroup_comparison.<locals>.validc                 S   s   ||fS r   r   r,   r   r   r   r/      s    zgroup_comparison.<locals>.postFrB   )r   r    rR   r2   	Operationr;   T_NUMERICALT_STRINGT_NAMEr1   rc   r3   r   rd   r   group_comparison   s     
   ri   c                 C   sJ   t jjt jf}| j|d\}}|rF| tj|| | j||d\}}qd S )Nr[   rK   r   )r(   rM   rN   rL   r`   r   r   r2   )r   rP   r   r   r   r   r   group_identifier   s
    rk   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 )Nr>   rI   r_   )
r`   r   Overr   
token_nextr   r    r(   rL   r   )r   r   r   r.   rU   r   r   r   
group_over   s    rn   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   r*   r   r   r   r      s    zgroup_arrays.<locals>.matchc                    s   t |  dS rH   r   r*   rd   r   r   r4      s    z group_arrays.<locals>.valid_prevc                 S   s   dS rQ   r   r*   r   r   r   r5     s    z group_arrays.<locals>.valid_nextc                 S   s   ||fS r   r   r,   r   r   r   r/     s    zgroup_arrays.<locals>.postTF)rC   r   )	r   r   r2   rR   r(   rL   rM   rN   r1   r<   r   rd   r   group_arrays   s    
    rp   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 rZ   )r   r(   rF   rS   r*   r   r   r   r     s    zgroup_operator.<locals>.matchc                    s    t |  dp| o| tjdS )NrI   )ZCURRENT_DATEZCURRENT_TIMEZCURRENT_TIMESTAMP)r   r   r(   r8   r*   rd   r   r   r+     s    zgroup_operator.<locals>.validc                 S   s   t j| | _||fS r   )r(   rF   r7   r,   r   r   r   r/     s    zgroup_operator.<locals>.postFrB   )rf   rg   rh   r   r   r    rR   r2   re   r;   r1   r3   r   rd   r   group_operator  s       
   rq   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,r'   r*   r   r   r   r   *  s    z$group_identifier_list.<locals>.matchc                    s   t |  dS )N)rJ   r?   rK   ro   r*   Zm_rolerO   rP   r   r   r+   -  s    z$group_identifier_list.<locals>.validc                 S   s   ||fS r   r   r,   r   r   r   r/   0  s    z#group_identifier_list.<locals>.postTrB   )r(   r8   r   rR   r"   r2   rc   ZIdentifierListre   rf   rg   rh   CommentrS   r1   r3   r   ru   r   group_identifier_list#  s$    
 

   rw   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 )Nr[   c                 S   s   t | tjdp| jS rZ   )r   r(   rv   r   )Ztkr   r   r   <lambda>=      z group_comments.<locals>.<lambda>)r   F)Zskip_wsrj   )r`   r(   rv   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\}}|r| j tjj|d\}}|d krB| jd }n| j|d  }| |}| tj|| | j tjj|d\}}qd S )Nr>   r_      )	r`   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\}}|rz| 
|\}}t|t jrb| jt j||dd | j|tj	|d\}}q0d S )NrI   TrB   )rJ   rK   r   )r   r    rR   r"   r2   re   rc   r`   r(   Numberrm   r
   r   )r   ZI_ALIASr   r   r.   rU   r   r   r   group_aliasedV  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| |\}	}
|
rt|
tj
r|	}n|}| tj|| | jtj|d\}}qld S )NFZCREATETZTABLEr:   r[   rj   )r   rG   upperr`   r(   rL   rm   r
   r   r    rl   r   rR   )r   Z
has_createZ	has_tableZhas_asZ	tmp_tokenr   r   r.   rU   Zover_idxZoverr|   r   r   r   group_functionsc  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 tokenr[   rI   rj   N)
r`   r(   r8   ZOrderrz   r   r   r2   r   r   r   r   r   r-   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)rJ   TrB   )rJ   r   )r`   r   rv   rz   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VALUESr>   r   TrB   )	r`   r(   r8   r
   r   r    rm   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$   r%   r&   rn   r   r   rV   rp   rk   r   r6   r=   rD   rq   ri   r\   r   rb   r   rw   r   )Zstmtfuncr   r   r   group  s8    
r   c                 C   s   dS rQ   r   r[   r   r   r   rx     ry   rx   c                 C   s   dS rQ   r   r[   r   r   r   rx     ry   NTc              	   C   s   d}d\}	}
t t| D ]\}}|| }|dk r2q|jr:q|rb|jrbt||sbt||||||| ||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   )NNrB   N)r   r   r   r	   r
   r1   rm   r   )r   r   r   r4   r5   r/   rC   r   r   r-   r   r   r   r   r.   rU   Zfrom_idxZto_idxgrpr   r   r   r1     s&    	
r1   )3Zsqlparser   r   r(   Zsqlparse.utilsr   r   r   ZIntegerZFloatrf   rM   rT   rN   rg   rL   ZPlaceholderrh   r   r   r!   r#   r$   r%   r&   r6   r=   rD   rV   r\   rb   ri   r2   rk   rl   rn   rp   rq   rw   rv   r~   r   r   r   rR   r   r   r   r   r   r1   r   r   r   r   <module>   s\   #
	
	






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