U
    5i>                     @   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k	r |t kr tdt  dtdk	rFt| jtkrFtdt dg }d}t| }t|D ]\}}|| }|jrvq^|jrt	||st
|||d  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.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tidxZopen_idxZ	close_idx r%   </tmp/pip-unpacked-wheel-uuk014bl/sqlparse/engine/grouping.pyr      s<    


r   c                 C   s   t | tj d S N)r   r   SquareBracketsr   r%   r%   r&   group_bracketsL   s    r*   c                 C   s   t | tj d S r'   )r   r   Parenthesisr)   r%   r%   r&   group_parenthesisP   s    r,   c                 C   s   t | tj d S r'   )r   r   Caser)   r%   r%   r&   
group_caseT   s    r.   c                 C   s   t | tj d S r'   )r   r   ZIfr)   r%   r%   r&   group_ifX   s    r/   c                 C   s   t | tj d S r'   )r   r   ZForr)   r%   r%   r&   	group_for\   s    r0   c                 C   s   t | tj d S r'   )r   r   ZBeginr)   r%   r%   r&   group_begin`   s    r1   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   e   s    zgroup_typecasts.<locals>.matchc                 S   s   | d k	S r'   r%   r5   r%   r%   r&   validh   s    zgroup_typecasts.<locals>.validc                 S   s   ||fS r'   r%   r   pidxr$   nidxr%   r%   r&   postk   s    zgroup_typecasts.<locals>.post_groupr   
Identifierr   r   r6   r:   
valid_prev
valid_nextr%   r%   r&   group_typecastsd   s
    rA   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'   )ttyper3   KeywordZTZCastr5   r%   r%   r&   r   s   s    zgroup_tzcasts.<locals>.matchc                 S   s   | d k	S r'   r%   r5   r%   r%   r&   r?   v   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   r3   rC   r   TypedLiteralr   r5   r%   r%   r&   r@   y   s    z!group_tzcasts.<locals>.valid_nextc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:      s    zgroup_tzcasts.<locals>.postr;   r   r   r?   r@   r:   r%   r%   r&   group_tzcastsr   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   r5   r%   r%   r&   r      s    z"group_typed_literal.<locals>.matchc                 S   s   t | tjS r'   )r   r   rF   r5   r%   r%   r&   match_to_extend   s    z,group_typed_literal.<locals>.match_to_extendc                 S   s   | d k	S r'   r%   r5   r%   r%   r&   r?      s    z'group_typed_literal.<locals>.valid_prevc                 S   s   | d k	o| j tjj S r'   )r   r   rF   r   r5   r%   r%   r&   r@      s    z'group_typed_literal.<locals>.valid_nextc                 S   s   | d k	o| j tjj S r'   )r   r   rF   ZM_EXTENDr5   r%   r%   r&   valid_final   s    z(group_typed_literal.<locals>.valid_finalc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:      s    z!group_typed_literal.<locals>.postFextendT)r<   r   rF   )r   r   rK   r?   r@   rL   r:   r%   r%   r&   group_typed_literal   s      rO   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)r3   r4   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=   r3   NameStringSymbolr   )r#   sqlclsttypesr%   r%   r&   r?      s    z group_period.<locals>.valid_prevc                 S   s   dS NTr%   r5   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 k	r4| | nd }t	|||d}|rR||fS ||fS rS   )
r   r(   Functionr3   rW   rX   rY   WildcardSingler   )r   r8   r$   r9   rZ   r[   next_r@   r%   r%   r&   r:      s
    zgroup_period.<locals>.postr;   rG   r%   r%   r&   group_period   s
    	ra   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 rD   )
is_keyword
normalizedr5   r%   r%   r&   r      s    zgroup_as.<locals>.matchc                 S   s   | j dkp| j S )NNULL)rc   rb   r5   r%   r%   r&   r?      s    zgroup_as.<locals>.valid_prevc                 S   s&   t jt jt jf}t| |d o$| d k	S NrV   )r3   ZDMLZDDLZCTEr   )r#   r[   r%   r%   r&   r@      s    zgroup_as.<locals>.valid_nextc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:      s    zgroup_as.<locals>.postr;   rG   r%   r%   r&   group_as   s
    rg   c                 C   s8   dd }dd }dd }| }}t | tj|||| d S )Nc                 S   s   |  tjdS )Nz:=)r   r3   
Assignmentr5   r%   r%   r&   r      s    zgroup_assignment.<locals>.matchc                 S   s   | d k	o| j tjfkS r'   )rB   r3   rC   r5   r%   r%   r&   r6      s    zgroup_assignment.<locals>.validc                 S   s,   t jdf}| j||d\}}|p"|}||fS )N;rJ   r"   )r3   r4   token_next_by)r   r8   r$   r9   Zm_semicolonZsnidx_r%   r%   r&   r:      s    
zgroup_assignment.<locals>.post)r<   r   rh   r>   r%   r%   r&   group_assignment   s
    rm   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'   )rB   r3   rQ   
Comparisonr5   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)rV   rU   Trd   F)r   rb   rc   r5   rZ   r[   r%   r&   r6      s
    zgroup_comparison.<locals>.validc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:      s    zgroup_comparison.<locals>.postFrM   )r   r+   r]   r=   	OperationrF   T_NUMERICALT_STRINGT_NAMEr<   rn   r>   r%   ro   r&   group_comparison   s     
   rt   c                 C   sJ   t jjt jf}| j|d\}}|rF| tj|| | j||d\}}qd S )Nrf   rV   r"   )r3   rX   rY   rW   rk   r   r   r=   )r   r[   r$   r#   r%   r%   r&   group_identifier   s
    rv   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 )NrI   rT   rj   )
rk   r   Overr   
token_nextr   r+   r3   rW   r   )r   r$   r#   r9   r`   r%   r%   r&   
group_over  s    ry   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(   r5   r%   r%   r&   r     s    zgroup_arrays.<locals>.matchc                    s   t |  dS rS   r   r5   ro   r%   r&   r?     s    z group_arrays.<locals>.valid_prevc                 S   s   dS r\   r%   r5   r%   r%   r&   r@     s    z group_arrays.<locals>.valid_nextc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:     s    zgroup_arrays.<locals>.postTF)rN   r   )	r   r(   r=   r]   r3   rW   rX   rY   r<   rG   r%   ro   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 re   )r   r3   rQ   r^   r5   r%   r%   r&   r   )  s    zgroup_operator.<locals>.matchc                    s    t |  dp| o| tjdS )NrT   )ZCURRENT_DATEZCURRENT_TIMEZCURRENT_TIMESTAMP)r   r   r3   rC   r5   ro   r%   r&   r6   ,  s    zgroup_operator.<locals>.validc                 S   s   t j| | _||fS r'   )r3   rQ   rB   r7   r%   r%   r&   r:   2  s    zgroup_operator.<locals>.postFrM   )rq   rr   rs   r   r(   r+   r]   r=   rp   rF   r<   r>   r%   ro   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   s   |  tjdS )N,r2   r5   r%   r%   r&   r   B  s    z$group_identifier_list.<locals>.matchc                    s   t |  dS )N)rU   rJ   rV   rz   r5   Zm_rolerZ   r[   r%   r&   r6   E  s    z$group_identifier_list.<locals>.validc                 S   s   ||fS r'   r%   r7   r%   r%   r&   r:   H  s    z#group_identifier_list.<locals>.postTrM   )r3   rC   r   r]   r-   r=   rn   ZIdentifierListrp   rq   rr   rs   Commentr^   r<   r>   r%   r   r&   group_identifier_list;  s$    
 

   r   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 )Nrf   c                 S   s   t | tjdp| jS re   )r   r3   r   Z
is_newline)Ztkr%   r%   r&   <lambda>U      z group_comments.<locals>.<lambda>)r"   F)Zskip_wsru   )rk   r3   r   Z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\}}|r| j tjj|d\}}|d krB| jd }n| j|d  }| |}| tj|| | j tjj|d\}}qd S )NrI   rj   r   )	rk   r   Wherer   r   Z_groupable_tokensr   Z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\}}|rz| 
|\}}t|t jrb| jt j||dd | j|tj	|d\}}q0d S )NrT   TrM   )rU   rV   r"   )r   r+   r]   r-   r=   rp   rn   rk   r3   Numberrx   r   r   )r   ZI_ALIASr$   r#   r9   r`   r%   r%   r&   group_aliasedn  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TABLErE   rf   ru   )r   rR   upperrk   r3   rW   rx   r   r   r+   rw   r   r]   )r   Z
has_createZ	has_tableZhas_asZ	tmp_tokenr$   r#   r9   r`   Zover_idxZoverr   r%   r%   r&   group_functions{  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 tokenrf   rT   ru   N)
rk   r3   rC   ZOrderr   r   r   r=   r   r   r   r$   r#   r8   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)rU   TrM   )rU   r"   )rk   r   r   r   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VALUESrI   r   TrM   )	rk   r3   rC   r   r   r+   rx   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/   r0   r1   ry   r   r   ra   r{   rv   r   rA   rH   rO   r|   rt   rg   r   rm   r   r   r   )Zstmtfuncr%   r%   r&   group  s8    
r   c                 C   s   dS r\   r%   rf   r%   r%   r&   r     r   r   c                 C   s   dS r\   r%   rf   r%   r%   r&   r     r   NTc	                 C   s2  t dk	r |t kr tdt  dtdk	rFt| jtkrFtdt dd}	d\}
}t| }t|D ]\}}||	 }|dk r|qb|jrqb|r|jrt	||st
|||||||d|d 	 ||r"| |\}}|r"||r"||r"|| |
||\}}| j||||d	}|	|| 7 }	|| }
}qb|| }
}qbdS )
zDGroups together tokens that are joined by a middle token. i.e. x < yNr   r	   r
   r   )NNTr   rM   )r   r   r   r   r   r   r   r   r   r   r<   rx   r   )r   r   r   r?   r@   r:   rN   r   r   r    r8   r   r!   r"   r#   r$   r9   r`   Zfrom_idxZto_idxgrpr%   r%   r&   r<     sF    	

   

r<   )r   )7Zsqlparser   r   r3   Zsqlparse.exceptionsr   Zsqlparse.utilsr   r   r   r   r   ZIntegerZFloatrq   rX   r_   rY   rr   rW   ZPlaceholderrs   r   r*   r,   r.   r/   r0   r1   rA   rH   rO   ra   rg   rm   rt   r=   rv   rw   ry   r{   r|   r   r   r   r   r   r   r]   r   r   r   r   r   r<   r%   r%   r%   r&   <module>   sd   
1
	
	






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