
kR\,                 @   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 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(  d* d+    Z) d, d-   Z* e   d. d/    Z+ d0 d1   Z, d2 d3   d4 d3   d5 d6 d6 d7 d8  Z- d5 S)9    )sql)tokens)recurseimtc       	      C   s   g  } d } x t  t |    D] \ } } | | } | j rD q n  | j rp t | |  rp t | |  q n  | j | j   r | j |  q | j | j	   r y | j
   } Wn t k
 r w Yn X| } |  j | | |  | | | 7} q q Wd 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   @/var/www/dbchiro/venv/build/sqlparse/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)N)r   r   Parenthesis)r   r   r   r   group_parenthesis8   s    r   c             C   s   t  |  t j  d  S)N)r   r   Case)r   r   r   r   
group_case<   s    r    c             C   s   t  |  t j  d  S)N)r   r   If)r   r   r   r   group_if@   s    r"   c             C   s   t  |  t j  d  S)N)r   r   For)r   r   r   r   	group_forD   s    r$   c             C   s   t  |  t j  d  S)N)r   r   ZBegin)r   r   r   r   group_beginH   s    r%   c             C   sN   d d   } d d   } d d   } | } } t  |  t j | | | |  d  S)Nc             S   s   |  j  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)Nr   )r   r   r   r   validP   s    zgroup_typecasts.<locals>.validc             S   s
   | | f S)Nr   )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
    
r0   c             C   sP   d d   } d d   } d d   } d d   } t  |  t j | | | |  d  S)	Nc             S   s   |  j  t j d  S)N.)r   r&   r'   )r   r   r   r   r   [   s    zgroup_period.<locals>.matchc             S   s=   t  j t  j f } t j t j j f } t |  d | 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   s   d S)NTr   )r   r   r   r   r/   c   s    z group_period.<locals>.valid_nextc             S   s{   t  j t  j f } t j t j j t j f } | d  k	 rC |  | n d  } t | d | d | } | rq | | f S| | f S)Nr2   r3   )	r   r   Functionr&   r4   r5   r6   Wildcardr   )r   r)   r   r*   r7   r8   next_r/   r   r   r   r+   g   s
    zgroup_period.<locals>.post)r,   r   r-   )r   r   r.   r/   r+   r   r   r   group_periodZ   s
    	r<   c             C   sP   d d   } d d   } d d   } d d   } t  |  t j | | | |  d  S)	Nc             S   s   |  j  o |  j d k S)NZAS)
is_keyword
normalized)r   r   r   r   r   t   s    zgroup_as.<locals>.matchc             S   s   |  j  d k p |  j S)NNULL)r>   r=   )r   r   r   r   r.   w   s    zgroup_as.<locals>.valid_prevc             S   s/   t  j t  j f } t |  d | o. |  d  k	 S)Nr3   )r&   ZDMLZDDLr   )r   r8   r   r   r   r/   z   s    zgroup_as.<locals>.valid_nextc             S   s
   | | f S)Nr   )r   r)   r   r*   r   r   r   r+   ~   s    zgroup_as.<locals>.post)r,   r   r-   )r   r   r.   r/   r+   r   r   r   group_ass   s
    r@   c             C   sN   d d   } d d   } d d   } | } } t  |  t j | | | |  d  S)Nc             S   s   |  j  t j d  S)Nz:=)r   r&   
Assignment)r   r   r   r   r      s    zgroup_assignment.<locals>.matchc             S   s   |  d  k	 o |  j  t j k S)N)ttyper&   Keyword)r   r   r   r   r(      s    zgroup_assignment.<locals>.validc             S   sC   t  j d f } |  j d | d |  \ } } | p6 | } | | f S)N;mr   )r&   r'   token_next_by)r   r)   r   r*   Zm_semicolonZsnidx_r   r   r   r+      s    zgroup_assignment.<locals>.post)r,   r   rA   )r   r   r(   r+   r.   r/   r   r   r   group_assignment   s
    
rH   c          	      s   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)N)rB   r&   Operator
Comparison)r   r   r   r   r      s    zgroup_comparison.<locals>.matchc                sF   t  |  d  d   r d S|  r> |  j r> |  j d k r> d Sd Sd  S)Nr3   r2   Tr?   F)r   r=   r>   )r   )r7   r8   r   r   r(      s
    zgroup_comparison.<locals>.validc             S   s
   | | f S)Nr   )r   r)   r   r*   r   r   r   r+      s    zgroup_comparison.<locals>.postextendF)
r   r   r9   r-   	OperationT_NUMERICALT_STRINGT_NAMEr,   rJ   )r   r   r(   r+   r.   r/   r   )r7   r8   r   group_comparison   s    
rP   c             C   sr   t  j j t  j f } |  j d |  \ } } x> | rm |  j t j | |  |  j d | d |  \ } } q0 Wd  S)Nr3   r   )r&   r5   r6   r4   rF   r   r   r-   )r   r8   r   r   r   r   r   group_identifier   s
    	rQ   c                s   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 d  S)Nc             S   s   t  |  t j  S)N)r
   r   r   )r   r   r   r   r      s    zgroup_arrays.<locals>.matchc                s   t  |  d   d  S)Nr2   r3   )r   )r   )r7   r8   r   r   r.      s    z group_arrays.<locals>.valid_prevc             S   s   d S)NTr   )r   r   r   r   r/      s    z group_arrays.<locals>.valid_nextc             S   s
   | | f S)Nr   )r   r)   r   r*   r   r   r   r+      s    zgroup_arrays.<locals>.postrK   Tr   F)	r   r   r-   r9   r&   r4   r5   r6   r,   )r   r   r.   r/   r+   r   )r7   r8   r   group_arrays   s    rR   c          	      s   t  t t  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  |  d t j t j f S)Nr3   )r   r&   rI   r:   )r   r   r   r   r      s    zgroup_operator.<locals>.matchc                s   t  |  d   d  S)Nr2   r3   )r   )r   )r7   r8   r   r   r(      s    zgroup_operator.<locals>.validc             S   s   t  j |  | _ | | f S)N)r&   rI   rB   )r   r)   r   r*   r   r   r   r+      s    zgroup_operator.<locals>.postrK   F)
rM   rN   rO   r   r   r   r9   r-   rL   r,   )r   r   r(   r+   r.   r/   r   )r7   r8   r   group_operator   s    
rS   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   |  j  t j d  S)N,)r   r&   r'   )r   r   r   r   r      s    z$group_identifier_list.<locals>.matchc                s   t  |  d  d   d  S)Nr2   rE   r3   )r   )r   )m_roler7   r8   r   r   r(      s    z$group_identifier_list.<locals>.validc             S   s
   | | f S)Nr   )r   r)   r   r*   r   r   r   r+      s    z#group_identifier_list.<locals>.postrK   T)znullzrole)r&   rC   r   r9   r   r-   rJ   ZIdentifierListrL   rM   rN   rO   Commentr:   r,   )r   r   r(   r+   r.   r/   r   )rW   r7   r8   r   group_identifier_list   s    
rY   c             C   s   |  j  d t j  \ } } x | r |  j d d   d | \ } } | d  k	 r |  j | d d \ } } |  j t j | |  n  |  j  d t j d |  \ } } q Wd  S)Nr3   c             S   s   t  |  d t j p |  j S)Nr3   )r   r&   rX   r   )Ztkr   r   r   <lambda>   s    z group_comments.<locals>.<lambda>r   Zskip_wsF)rF   r&   rX   Ztoken_not_matching
token_prevr   r   )r   r   r   eidxendr   r   r   group_comments   s    	r^   c             C   s   |  j  d t j j  \ } } x | r |  j  d t j j d |  \ } } | d  k rg |  j d } n |  j | d } |  j |  } |  j t j | |  |  j  d t j j d |  \ } } q! Wd  S)NrE   r      )	rF   r   Wherer   r   Z_groupable_tokensr   Ztoken_indexr   )r   r   r   r\   r]   r   r   r   group_where  s    	$rb   c             C   s   t  j t  j t  j t  j t  j t  j f } |  j d | d t j	  \ } } xw | r |  j
 |  \ } } t | t  j  r |  j t  j | | d d n  |  j d | d t j	 d |  \ } } qN Wd  S)Nr2   r3   rK   Tr   )r   r   r9   r   r-   rL   rJ   rF   r&   Number
token_nextr
   r   )r   ZI_ALIASr   r   r*   r;   r   r   r   group_aliased  s    !	re   c             C   s   d } d } xA |  j  D]6 } | j d k r4 d } n  | j d k r d } q q W| r` | r` d  S|  j d t j  \ } } xk | r |  j |  \ } } t | t j  r |  j	 t j
 | |  n  |  j d t j d |  \ } } q~ Wd  S)NFZCREATETZTABLEr3   r   )r   valuerF   r&   r4   rd   r
   r   r   r   r9   )r   Z
has_createZ	has_tableZ	tmp_tokenr   r   r*   r;   r   r   r   group_functions  s    		rg   c             C   s   |  j  d t j j  \ } } x | r |  j |  \ } } t | d t j d t j ry |  j	 t j | |  | } n  |  j  d t j j d |  \ } } q! Wd S)z,Group together Identifier and Asc/Desc tokenr3   r2   r   N)
rF   r&   rC   ZOrderr[   r   r   r-   rc   r   )r   r   r   r)   prev_r   r   r   group_order3  s    		ri   c             C   s   |  j  d t j  \ } } xw | r |  j |  \ } } t | t j  rp |  j t j | | d d | } n  |  j  d t j d |  \ } } q Wd  S)Nr2   rK   Tr   )rF   r   rX   r[   r
   Z	TokenListr   )r   r   r   r)   rh   r   r   r   align_comments>  s    		rj   c             C   s^   xW t  t t t t t t t t t	 t
 t t t t t t t t t t g D] } | |   qF W|  S)N)r^   r   r   r    r"   r$   r%   rg   rb   r<   rR   rQ   ri   r0   rS   rP   r@   re   rH   rj   rY   )stmtfuncr   r   r   groupI  s0    rm   c             C   s   d S)NTr   )r3   r   r   r   rZ   j  s    rZ   c             C   s   d S)NTr   )r3   r   r   r   rZ   k  s    NTc          	   C   s6  d } d \ }	 }
 xt  t |    D]	\ } } | | } | j rJ q% n  | r | j r t | |  r t | | | | | | |  n  | |  r!|  j |  \ } } |
 r!| |
  r!| |  r!| |  |	 | |  \ } } |  j | | | d | } | | | 7} | | }	 }
 q% q!n  | | }	 }
 q% Wd S)zCGroups together tokens that are joined by a middle token. ie. x < yr   NrK   )NN)r   r   r   r	   r
   r,   rd   r   )r   r   r   r.   r/   r+   rK   r   r   r)   rh   r   r   r   r*   r;   Zfrom_idxZto_idxgrpr   r   r   r,   i  s"    	
		r,   ).Zsqlparser   r   r&   Zsqlparse.utilsr   r   rc   ZIntegerZFloatrM   r5   Singler6   rN   r4   ZPlaceholderrO   r   r   r   r    r"   r$   r%   r0   r<   r@   rH   rP   r-   rQ   rR   rS   rY   rX   r^   ra   rb   re   r9   rg   ri   rj   rm   r,   r   r   r   r   <module>   sB   #
!		