
    %hnQ                     &   S r SSKrSSKJr  SSKJrJr   " S S5      r " S S5      r	 " S	 S
\	5      r
 " S S\
5      r " S S\\
5      r " S S\
5      r " S S\
5      r " S S\
5      r " S S\
5      r " S S\
5      r " S S\
5      r " S S\
5      r " S S\
5      r " S S \
5      r " S! S"\
5      r " S# S$\
5      r " S% S&\
5      r " S' S(\
5      r " S) S*\\
5      r " S+ S,\
5      r " S- S.\
5      r " S/ S0\
5      r " S1 S2\
5      rg)3zFThis module contains classes representing syntactical elements of SQL.    Ntokens)imtremove_quotesc                   $    \ rS rSrSrS rS rSrg)NameAliasMixin   z'Implements get_real_name and get_alias.c                 d    U R                  [        R                  S4S9u  pU R                  USS9$ )7Returns the real name (object name) of this identifier..mT)	real_name)token_next_byTPunctuation_get_first_name)selfdot_idx_s      >/var/www/html/env/lib/python3.13/site-packages/sqlparse/sql.pyget_real_nameNameAliasMixin.get_real_name   s8     ''1==#*>'?
##Gt#<<    c                    U R                  [        R                  S4S9u  pUb  U R                  US-   SS9$ U R                  [        R                  S9u  p4[        U R                  5      S:  a  Ub  U R                  SS	9$ gg)
2Returns the alias for this identifier or ``None``.ASr   N   T)keywordst   reverse)r   r   Keywordr   
Whitespacelenr   )r   kw_idxkwr   wss        r   	get_aliasNameAliasMixin.get_alias   s     ''199d*;'<
>''
T'BB ""Q\\"2t{{aBN'''55 %3r    N)__name__
__module____qualname____firstlineno____doc__r   r+   __static_attributes__r-   r   r   r   r      s    1=6r   r   c                   \    \ rS rSrSrSrS rS rS rS r	S r
S	 rSS
 jrS rS rS rSrg)Token'   zBase class for all other classes in this module.

It represents a single token and has two instance attributes:
``value`` is the unchanged value of the token and ``ttype`` is
the type of the token.
)valuettypeparent
normalized
is_keywordis_groupis_whitespace
is_newlinec                 b   [        U5      nX l        Xl        S U l        SU l        U[
        R                  ;   U l        U R                  [
        R                  ;   U l	        U R                  [
        R                  ;   U l        U R                  (       a  UR                  5       U l        g UU l        g )NF)strr7   r8   r9   r<   r   r%   r;   r&   r=   Newliner>   upperr:   )r   r8   r7   s      r   __init__Token.__init__2   su    E


199,!ZZ1<<7**		1+/??%++-r   c                     U R                   $ Nr7   r   s    r   __str__Token.__str__=   s    zzr   c                     U R                  5       nU R                  5       nUR                  S5      (       a  UR                  S5      (       a  SOSnSR                  " SS[        U 5      0[        5       D6$ )N'"z"<{cls} {q}{value}{q} at 0x{id:2X}>idr-   )_get_repr_name_get_repr_value
startswithendswithformatrN   locals)r   clsr7   qs       r   __repr__Token.__repr__D   sl    !!#$$&##C((U^^C-@-@Cc3:: %$x%!8% 	%r   c                 P    [        U R                  5      R                  S5      S   $ )Nr   )r@   r8   splitrH   s    r   rO   Token._get_repr_nameL   s     4::$$S)"--r   c                 v    [        U 5      n[        U5      S:  a  US S S-   n[        R                  " SSU5      $ )N      z...z\s+ )r@   r'   resub)r   raws     r   rP   Token._get_repr_valueO   s8    $is8a<bq'E/Cvvfc3''r   c              #      #    U v   g7f)zResolve subgroups.Nr-   rH   s    r   flattenToken.flattenU   s
     
s   c                 ~  ^ U R                   UL nU(       a  Uc  U$ [        U[        5      (       a  U4nU(       a[  U R                  (       a  [        R
                  OSmU4S jU 5       nU H%  nUR                  U R                  5      (       d  M%    g   gU R                  (       a	  S U 5       nU R                  U;   $ )a  Checks whether the token matches the given arguments.

*ttype* is a token type. If this token doesn't match the given token
type.
*values* is a list of possible values for this token. The values
are OR'ed together so if only one of the values matches ``True``
is returned. Except for keyword tokens the comparison is
case-sensitive. For convenience it's OK to pass in a single string.
If *regex* is ``True`` (default is ``False``) the given values are
treated as regular expressions.
r   c              3   R   >#    U  H  n[         R                  " UT5      v   M     g 7frF   )ra   compile).0vflags     r   	<genexpr>Token.match.<locals>.<genexpr>o   s     :6abjjD))6s   $'TFc              3   @   #    U  H  oR                  5       v   M     g 7frF   )rB   )rk   rl   s     r   rn   ro   w   s     0Aggiis   )r8   
isinstancer@   r;   ra   
IGNORECASEsearchr:   )r   r8   valuesregextype_matchedpatternrm   s         @r   matchToken.matchY   s     zzU*v~fc""YF$(OO2==D:6:F!>>$//22 " ??00F&((r   c                 v    U R                   nU(       a&  [        X!5      (       a  gUR                   nU(       a  M&  g)zReturns ``True`` if this token is within *group_cls*.

Use this method for example to check if an identifier is within
a function: ``t.within(sql.Function)``.
TF)r9   rq   )r   	group_clsr9   s      r   withinToken.within{   s3     &,,]]F f r   c                      U R                   U:H  $ )z<Returns ``True`` if this token is a direct child of *other*.r9   )r   others     r   is_child_ofToken.is_child_of   s    {{e##r   c                 `    U R                   nU(       a  X!:X  a  gUR                   nU(       a  M  g)z7Returns ``True`` if *other* is in this tokens ancestry.TFr   )r   r   r9   s      r   has_ancestorToken.has_ancestor   s+    ]]F f r   )r<   r;   r>   r=   r:   r9   r8   r7   NF)r.   r/   r0   r1   r2   	__slots__rC   rI   rW   rO   rP   rf   rx   r|   r   r   r3   r-   r   r   r5   r5   '   sB    <I	F%.( )D$r   r5   c                   
  ^  \ rS rSrSrSrS U 4S jjrS rS rS r	S r
S!S	 jrS
 rS rS r\S 5       rS"S jrS#S jrS$S jrS rS rS#S jrS%S jrS&S jr  S#S jrS rS'S jrS rS rS rS rS r   S(S jr!Sr"U =r#$ ))	TokenList   zkA group of tokens.

It has an additional instance attribute ``tokens`` which holds a
list of child-tokens.
r   c                    > U=(       d    / U l         U R                    Vs/ s H  n[        USU 5      PM       n[        TU ]  S [	        U 5      5        SU l        g s  snf )Nr9   T)r   setattrsuperrC   r@   r<   )r   r   token	__class__s      r   rC   TokenList.__init__   sM    l59[[A[E$	'[As4y) 	Bs   Ac                 N    SR                  S U R                  5        5       5      $ )N c              3   8   #    U  H  oR                   v   M     g 7frF   rG   )rk   r   s     r   rn   $TokenList.__str__.<locals>.<genexpr>   s     ?u{{s   )joinrf   rH   s    r   rI   TokenList.__str__   s    ww????r   c                 ,    [        U R                  5      $ rF   )iterr   rH   s    r   __iter__TokenList.__iter__   s    DKK  r   c                      U R                   U   $ rF   r   )r   items     r   __getitem__TokenList.__getitem__   s    {{4  r   c                 ,    [        U 5      R                  $ rF   )typer.   rH   s    r   rO   TokenList._get_repr_name   s    Dz"""r   c           	         [        U R                  5      n[        U R                  5       H  u  pgUR                  5       nUR	                  5       n	XeS-
  :H  n
U
(       a  SOSnU	R                  S5      (       a  U	R                  S5      (       a  SOSn[        SR                  " S0 [        5       D6US9  UR                  (       d  M  Ub  X!:  d  M  U
(       a  S	OS
nUR                  XS-   X4U-   5        M     g)zPretty-print the object tree.r   z`- z|- rL   rM   z${_pre}{pre}{idx} {cls} {q}{value}{q})fileNz   z|  r-   )r'   r   	enumeraterO   rP   rQ   rR   printrS   rT   r<   _pprint_tree)r   	max_depthdepthf_pretoken_countidxr   rU   r7   lastprerV   
parent_pres                 r   r   TokenList._pprint_tree   s    $++&#DKK0JC&&(C))+E?+D%UC'',,1D1D#A86 &"H&,-/ ~~~9#48I&*U
""9ai:<MN 1r   c                     SnU R                  5        H/  nU[        UR                  5      -   nX!s=::  a
  U:  a   Us  $   UnM1     g)z-Returns the token that is on position offset.r   N)rf   r'   r7   )r   offsetr   r   ends        r   get_token_at_offsetTokenList.get_token_at_offset   sD    \\^EEKK((C"s" #C	 $r   c              #      #    U R                    H2  nUR                  (       a  UR                  5        Sh  vN   M.  Uv   M4     g N7f)z^Generator yielding ungrouped tokens.

This method is recursively called for all child tokens.
N)r   r<   rf   r   r   s     r   rf   TokenList.flatten   s3     
 [[E~~ ==?**	 !*s   4AAAc              #   `   #    U R                    H  nUR                  (       d  M  Uv   M     g 7frF   )r   r<   r   s     r   get_sublistsTokenList.get_sublists   s!     [[E~~~ !s   .	.c                     U R                   $ rF   r   rH   s    r   _groupable_tokensTokenList._groupable_tokens   s    {{r   c                 2   Uc  g[        U[        [        45      (       d  U4nU(       a  Ub   e[        US-
  SS5      nO#Uc  [	        U R
                  5      n[        X#5      nU H/  nU R
                  U   nU H  nU" U5      (       d  M  Xg4s  s  $    M1     g)znext token that match functionsNr"   rZ   NN)rq   listtupleranger'   r   )	r   funcsstartr   r$   indexesr   r   funcs	            r   _token_matchingTokenList._token_matching   s    =%$//HE;;EAIr2.G{$++&E'GCKK$E;;:%  
 r   c                 <   ^^ UU4S jnU R                  U5      S   $ )zReturns the first child token.

If *skip_ws* is ``True`` (the default), whitespace
tokens are ignored.

if *skip_cm* is ``True`` (default: ``False``), comments are
ignored too.
c                    > T=(       a    U R                   =(       d&    T=(       a    [        U [        R                  [        S9(       + $ N)r!   ir=   r   r   Commenttkskip_cmskip_wss    r   matcher&TokenList.token_first.<locals>.matcher  8     5R%5%5 I#GB!))w(GJ Jr   r   r   )r   r   r   r   s    `` r   token_firstTokenList.token_first   s!    	J ##G,Q//r   c                 B   ^^^ US-  nU R                  UUU4S jXE5      $ )Nr   c                     > [        U TTT5      $ rF   )r   )r   r   r   r!   s    r   <lambda>)TokenList.token_next_by.<locals>.<lambda>  s    s2q!Q/?r   r   )r   r   r   r!   r   r   s    ```  r   r   TokenList.token_next_by	  s     q##$?JJr   c                    ^ [        U[        [        45      (       d  U4OUnU V^s/ s H	  mU4S jPM     nnU R                  X5      $ s  snf )Nc                    > T" U 5      (       + $ rF   r-   )r   r   s    r   r   .TokenList.token_not_matching.<locals>.<lambda>  s    RLr   )rq   r   r   r   )r   r   r   r   s      `r   token_not_matchingTokenList.token_not_matching  sG     *54- @ @e5:;UT(U;##E// <s   A
c                 *    U R                  X5      S   $ )Nr   r   )r   r   r   s      r   token_matchingTokenList.token_matching  s    ##E/22r   c                 $    U R                  XUSS9$ )zReturns the previous token relative to *idx*.

If *skip_ws* is ``True`` (the default) whitespace tokens are ignored.
If *skip_cm* is ``True`` comments are ignored.
``None`` is returned if there's no previous token.
T)_reverse)
token_next)r   r   r   r   s       r   
token_prevTokenList.token_prev  s     sWtDDr   c                 F   ^^ Uc  gUS-  nUU4S jnU R                  XQUS9$ )zReturns the next token relative to *idx*.

If *skip_ws* is ``True`` (the default) whitespace tokens are ignored.
If *skip_cm* is ``True`` comments are ignored.
``None`` is returned if there's no next token.
r   r   c                    > T=(       a    U R                   =(       d&    T=(       a    [        U [        R                  [        S9(       + $ r   r   r   s    r   r   %TokenList.token_next.<locals>.matcher*  r   r   r#   r   )r   r   r   r   r   r   s     ``  r   r   TokenList.token_next  s4     ;q	J ##G(#CCr   c                     [        U[        5      (       a  UOU R                  U5      nX R                  US R	                  U5      -   $ )zReturn list index of token.N)rq   inttoken_indexr   index)r   r   r   s      r   r   TokenList.token_index/  s?    #E3//T5E5Ee5L{{56*00777r   c                 v   UnU R                   U   nX4-   nU(       ab  [        X!5      (       aR  U R                   US-   U nUn	U	R                   R                  U5        U R                   US-   U2	 [        U5      U	l        O+U R                   Xg nU" U5      n	U	/U R                   Xg& X	l        U H	  n
Xl        M     U	$ )z+Replace tokens by an instance of *grp_cls*.r   )r   rq   extendr@   r7   r9   )r   grp_clsr   r   include_endr   	start_idxend_idx	subtokensgrpr   s              r   group_tokensTokenList.group_tokens4  s     	I&# j00IM':ICJJi(IM'12E
CII6I)$C.1UDKK	*JEL  
r   c                     [        U[        5      (       d  U R                  U5      nXl        U R                  R                  X5        g)zInserts *token* before *where*.N)rq   r   r   r9   r   insert)r   wherer   s      r   insert_beforeTokenList.insert_beforeR  s6    %%%$$U+E5(r   c                     [        U[        5      (       d  U R                  U5      nU R                  XS9u  pEXl        Uc  U R
                  R                  U5        gU R
                  R                  XB5        g)zInserts *token* after *where*.r   N)rq   r   r   r   r9   r   appendr   )r   r  r   r   nidxnext_s         r   insert_afterTokenList.insert_afterY  s_    %%%$$U+Eooeo==KKu%KKt+r   c                 &    U R                  5       SL$ )z(Returns ``True`` if an alias is present.N)r+   rH   s    r   	has_aliasTokenList.has_aliasd  s    ~~t++r   c                     g)r   Nr-   rH   s    r   r+   TokenList.get_aliash      r   c                 P    U R                  5       =(       d    U R                  5       $ )zReturns the name of this identifier.

This is either it's alias or it's real name. The returned valued can
be considered as the name under which the object corresponding to
this identifier is known within the current statement.
)r+   r   rH   s    r   get_nameTokenList.get_namel  s     ~~74#5#5#77r   c                     g)r   Nr-   rH   s    r   r   TokenList.get_real_nameu  r  r   c                     U R                  [        R                  S4S9u  pU R                  U5      u  p#Ub  [	        UR
                  5      $ S$ )zdReturn name of the parent object if any.

A parent object is identified by the first occurring dot.
r   r   N)r   r   r   r   r   r7   )r   r   r   prev_s       r   get_parent_nameTokenList.get_parent_namey  sK    
 ''1==#*>'?
??7+-2->}U[[)HDHr   c                    U(       a  U R                   US OU R                   nU(       a  [        U5      OUn[        R                  [        R                  [        R
                  R                  /nU(       a  UR                  [        R                  5        U Hp  nUR                  U;   a  [        UR                  5      s  $ [        U[        [        45      (       d  MG  U(       a  UR                  5       s  $ UR!                  5       s  $    g)z/Returns the name of the first token with a nameN)r   reversedr   NameWildcardStringSymbolr  r%   r8   r   r7   rq   
IdentifierFunctionr   r  )r   r   r$   r   r   r   typesr   s           r   r   TokenList._get_first_name  s     '*ST"t{{%,&!&QXX__5LL#E{{e#$U[[11EJ#9::09u**,Ou~~?OO	 r   )r<   r   rF   )Nr   Nr   )r   NF)TF)NNNrZ   N)TFF)r   )T)NFFF)$r.   r/   r0   r1   r2   r   rC   rI   r   r   rO   r   r   rf   r   propertyr   r   r   r   r   r   r   r   r   r   r  r	  r  r+   r  r   r  r   r3   __classcell__)r   s   @r   r   r      s     I@!!#O$	
  ,0K0
3ED 8
 =A!<)	,,8I AF"'P Pr   r   c                       \ rS rSrSrS rSrg)	Statementi  zRepresents a SQL statement.c                 4   U R                  SS9nUc  gUR                  [        R                  R                  [        R                  R
                  4;   a  UR                  $ UR                  [        R                  R                  :X  a  U R                  U5      nUb{  U R                  USS9u  p![        U[        [        45      (       aI  U R                  USS9u  p!Ub4  UR                  [        R                  R                  :X  a  UR                  $ Ub  M{  g)a  Returns the type of a statement.

The returned value is a string holding an upper-cased reprint of
the first DML or DDL keyword. If the first token in this group
isn't a DML or DDL keyword "UNKNOWN" is returned.

Whitespaces and comments at the beginning of the statement
are ignored.
T)r   UNKNOWNr  )r   r8   r   r%   DMLDDLr:   CTEr   r   rq   r   IdentifierList)r   r   tidxs      r   get_typeStatement.get_type  s        .= [[QYY]]AIIMM::###[[AIIMM) ##E*D""oodDoAej.%ABB"&//$/"EKD( %qyy}} <$/// " r   r-   N)r.   r/   r0   r1   r2   r/  r3   r-   r   r   r'  r'    s
    %"r   r'  c                   0    \ rS rSrSrS rS rS rS rSr	g)	r   i  zFRepresents an identifier.

Identifiers may have aliases or typecasts.
c                 H    U R                  [        R                  S9u  pUSL$ )z7Return ``True`` if this identifier contains a wildcard.r    N)r   r   r  )r   r   r   s      r   is_wildcardIdentifier.is_wildcard  s&    %%

%3D  r   c                     U R                  [        R                  S4S9u  pU R                  USS9u  p4U(       a  UR                  $ S$ )z<Returns the typecast or ``None`` of this object as a string.z::r   Fr  N)r   r   r   r   r7   )r   midxmarkerr  r  s        r   get_typecastIdentifier.get_typecast  sE    ))Q]]D,A)BoodEo:#u{{--r   c                 ~    U R                  [        R                  R                  S9u  pU(       a  UR                  $ S$ )z5Returns the ordering or ``None`` as uppercase string.r    N)r   r   r%   Orderr:   )r   r   orderings      r   get_orderingIdentifier.get_ordering  s2    ((199??(;&.x""8D8r   c              #      #    U R                    H+  n[        U[        5      (       d  M  UR                   SS v   M-     g7f)z(Returns an iterator of index token listsr   rZ   N)r   rq   SquareBracketsr   s     r   get_array_indicesIdentifier.get_array_indices  s3      [[E%00ll1R(( !s   #??r-   N)
r.   r/   r0   r1   r2   r3  r8  r=  rA  r3   r-   r   r   r   r     s    
!
.9
)r   r   c                       \ rS rSrSrS rSrg)r-  i  z.A list of :class:`~sqlparse.sql.Identifier`'s.c              #      #    U R                    HA  nUR                  (       a  M  UR                  [        R                  S5      (       a  M=  Uv   MC     g7f)z[Returns the identifiers.

Whitespaces and punctuations are not included in this generator.
,N)r   r=   rx   r   r   r   s     r   get_identifiersIdentifierList.get_identifiers  s:     
 [[E'''5;;q}}c+J+J !s   A#A	Ar-   N)r.   r/   r0   r1   r2   rF  r3   r-   r   r   r-  r-    s
    9r   r-  c                       \ rS rSrSr\R                  R                  S4\R                  S4/r	\R                  R                  S4r\R                  S4rSrg)TypedLiterali  zEA typed literal, such as "date '2001-09-28'" or "interval '2 hours'".N	TIMESTAMP)DAYHOURMINUTEMONTHSECONDYEARr-   )r.   r/   r0   r1   r2   r   r  Builtinr%   M_OPENr  SingleM_CLOSEM_EXTENDr3   r-   r   r   rI  rI    sF    Ovv~~t$qyy+&>?Fhhoot#GyyNNHr   rI  c                   `    \ rS rSrSr\R                  S4r\R                  S4r\	S 5       r
Srg)Parenthesisi  zTokens between parenthesis.()c                      U R                   SS $ Nr   rZ   r   rH   s    r   r   Parenthesis._groupable_tokens      {{1R  r   r-   Nr.   r/   r0   r1   r2   r   r   rR  rT  r$  r   r3   r-   r   r   rW  rW    s3    %]]CFmmS G! !r   rW  c                   `    \ rS rSrSr\R                  S4r\R                  S4r\	S 5       r
Srg)r@  i  zTokens between square brackets[]c                      U R                   SS $ r[  r   rH   s    r   r    SquareBrackets._groupable_tokens  r]  r   r-   Nr^  r-   r   r   r@  r@    s3    (]]CFmmS G! !r   r@  c                       \ rS rSrSrSrg)
Assignmenti  z An assignment like 'var := val;'r-   Nr.   r/   r0   r1   r2   r3   r-   r   r   re  re    s    *r   re  c                   P    \ rS rSrSr\R                  S4r\R                  S4rSr	g)Ifi  z7An 'if' clause with possible 'else if' or 'else' parts.IFzEND IFr-   N
r.   r/   r0   r1   r2   r   r%   rR  rT  r3   r-   r   r   rh  rh    s     AYY_Fii!Gr   rh  c                   P    \ rS rSrSr\R                  S4r\R                  S4rSr	g)Fori  zA 'FOR' loop.)FORFOREACHzEND LOOPr-   Nrj  r-   r   r   rl  rl    s"    YY**Fii#Gr   rl  c                   8    \ rS rSrSr\S 5       r\S 5       rSrg)
Comparisoni  z/A comparison used for example in WHERE clauses.c                      U R                   S   $ Nr   r   rH   s    r   leftComparison.left  s    {{1~r   c                      U R                   S   $ )NrZ   r   rH   s    r   rightComparison.right  s    {{2r   r-   N)	r.   r/   r0   r1   r2   r$  rs  rv  r3   r-   r   r   rp  rp    s+    9   r   rp  c                       \ rS rSrSrS rSrg)r   i  z
A comment.c                     U R                   =(       a4    U R                   S   R                  [        R                  R                  :H  $ rr  )r   r8   r   r   	MultilinerH   s    r   is_multilineComment.is_multiline"  s.    {{Jt{{1~33qyy7J7JJJr   r-   N)r.   r/   r0   r1   r2   r{  r3   r-   r   r   r   r     s    Kr   r   c                   P    \ rS rSrSr\R                  S4r\R                  S4rSr	g)Wherei&  zA WHERE clause.WHERE)	ORDER BYzGROUP BYLIMITUNIONz	UNION ALLEXCEPTHAVING	RETURNINGINTOr-   Nrj  r-   r   r   r~  r~  &  s&    YYFii ' 'Gr   r~  c                   4    \ rS rSrSr\R                  S4rSrg)Overi.  zAn OVER clause.OVERr-   N)	r.   r/   r0   r1   r2   r   r%   rR  r3   r-   r   r   r  r  .  s    YYFr   r  c                   P    \ rS rSrSr\R                  S4r\R                  S4rSr	g)Havingi3  zA HAVING clause.r  )r  r  r-   Nrj  r-   r   r   r  r  3  s"    YY Fii..Gr   r  c                   Z    \ rS rSrSr\R                  S4r\R                  S4rSS jr	Sr
g)	Casei9  zAA CASE statement with one or more WHEN and possibly an ELSE part.CASEENDc                 $   SnSn/ nUnU R                    GHv  nUR                  [        R                  S5      (       a  M+  U(       a   UR                  [        R
                  ;   a  MR  UR                  [        R                  S5      (       a  UR                  / / 45        UnOUR                  [        R                  S5      (       a  UnObUR                  [        R                  S5      (       a  UR                  S/ 45        UnO'UR                  [        R                  S5      (       a  SnU(       a  U(       d  UR                  / / 45        XR:X  a  US	   S
   R                  U5        GMW  XS:X  d  GM_  US	   S   R                  U5        GMy     U$ )zUReturns a list of 2-tuples (condition, value).

If an ELSE exists condition is None.
r   r"   r  WHENTHENELSENr  rZ   r   )r   rx   r   r%   r8   r&   r  )r   r   	CONDITIONVALUEretmoder   s          r   	get_casesCase.get_cases>  s3   
 	[[E{{199f--U[[ALL8QYY//

B8$ QYY//QYY//

D":&QYY.. C

B8$  B
!!%(B
!!%(? !D 
r   r-   Nr   )r.   r/   r0   r1   r2   r   r%   rR  rT  r  r3   r-   r   r   r  r  9  s&    KYYFiiG-r   r  c                   $    \ rS rSrSrS rS rSrg)r!  in  zA function or procedure call.c                 *   U R                  [        S9S   n/ nUR                   Hj  n[        U[        5      (       a  UR                  5       s  $ [        U[        [        [        4[        R                  S9(       d  MY  UR                  U5        Ml     U$ )zReturn a list of parameters.r   r   )r   r!   )r   rW  r   rq   r-  rF  r   r!  r   rI  r   Literalr  )r   parenthesisresultr   s       r   get_parametersFunction.get_parametersq  s}    ((;(7: ''E%00,,..Ux\Byy" "e$ ( r   c                 \    U R                  [        S9nU(       d  gUS   R                  S   $ )zReturn the window if it exists.r  Nr   rZ   )r   r  r   )r   over_clauses     r   
get_windowFunction.get_window}  s0    ((4(01~$$R((r   r-   N)r.   r/   r0   r1   r2   r  r  r3   r-   r   r   r!  r!  n  s    '
)r   r!  c                   P    \ rS rSrSr\R                  S4r\R                  S4rSr	g)Begini  zA BEGIN/END block.BEGINr  r-   Nrj  r-   r   r   r  r    s!    YYFiiGr   r  c                       \ rS rSrSrSrg)	Operationi  zGrouping of operationsr-   Nrf  r-   r   r   r  r    s     r   r  c                       \ rS rSrSrSrg)Valuesi  zGrouping of valuesr-   Nrf  r-   r   r   r  r    s    r   r  c                       \ rS rSrSrSrg)Commandi  zGrouping of CLI commands.r-   Nrf  r-   r   r   r  r    s    #r   r  )r2   ra   sqlparser   r   sqlparse.utilsr   r   r   r5   r   r'  r   r-  rI  rW  r@  re  rh  rl  rp  r   r~  r  r  r  r!  r  r  r  r  r-   r   r   <module>r     s6   M 	   -6 6.l l^{P {P|%	 %P) )>
Y 
O9 O!) !!Y !+ +" "$) $	 	Ki K'I '9 
/Y /29 2j)~y ).I !	 !Y $i $r   