§
    ¡”j•Q  ã                   ó²  — d Z ddlZddlmZ ddlmZmZ  G d„ d¦  «        Z G d„ d¦  «        Z	 G d	„ d
e	¦  «        Z
 G d„ de
¦  «        Z G d„ dee
¦  «        Z G d„ de
¦  «        Z G d„ de
¦  «        Z G d„ de
¦  «        Z G d„ de
¦  «        Z G d„ de
¦  «        Z G d„ de
¦  «        Z G d„ de
¦  «        Z G d„ de
¦  «        Z G d„ d e
¦  «        Z G d!„ d"e
¦  «        Z G d#„ d$e
¦  «        Z G d%„ d&e
¦  «        Z G d'„ d(e
¦  «        Z G d)„ d*ee
¦  «        Z G d+„ d,e
¦  «        Z G d-„ d.e
¦  «        Z G d/„ d0e
¦  «        Z G d1„ d2e
¦  «        ZdS )3zFThis module contains classes representing syntactical elements of SQL.é    N©Útokens)ÚimtÚremove_quotesc                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚNameAliasMixinz'Implements get_real_name and get_alias.c                 óz   — |                       t          j        df¬¦  «        \  }}|                      |d¬¦  «        S )ú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/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/sqlparse/sql.pyÚget_real_namezNameAliasMixin.get_real_name   s>   € ð ×'Ò'­1¬=¸#Ð*>Ð'Ñ?Ô?‰
ˆ�Ø×#Ò# G°tÐ#Ñ<Ô<Ð<ó    c                 ó2  — |                       t          j        df¬¦  «        \  }}|�|                      |dz   d¬¦  «        S |                       t          j        ¬¦  «        \  }}t          | j        ¦  «        dk    r|�|                      d¬	¦  «        S dS dS )
ú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_aliaszNameAliasMixin.get_alias   s¡   € ð ×'Ò'­1¬9°dÐ*;Ð'Ñ<Ô<‰
ˆ�Øˆ>Ø×'Ò'¨°©
¸TÐ'ÑBÔBÐBð ×"Ò"¥Q¤\Ð"Ñ2Ô2‰ˆˆ2ÝˆtŒ{ÑÔ˜aÒÐ B NØ×'Ò'°Ð'Ñ5Ô5Ð5ð  Ð N Nr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   © r   r   r   r      s8   € € € € € Ø1Ð1ð=ð =ð =ð6ð 6ð 6ð 6ð 6r   r   c                   óT   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
dd
„Zd„ Zd„ Zd„ ZdS )ÚTokenzÖBase 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                 ó&  — t          |¦  «        }|| _        || _        d | _        d| _        |t
          j        v | _        | j        t
          j        v | _	        | j        t
          j
        v | _        | j        r|                     ¦   «         n|| _        d S )NF)Ústrr1   r2   r3   r6   r   r#   r5   r$   r7   ÚNewliner8   Úupperr4   )r   r2   r1   s      r   Ú__init__zToken.__init__2   sv   € Ý�E‘
”
ˆØˆŒ
ØˆŒ
ØˆŒØˆŒØ¥1¤9Ð,ˆŒØ!œZ­1¬<Ð7ˆÔØœ*­¬	Ð1ˆŒØ+/¬?ÐE˜%Ÿ+š+™-œ-˜-ÀˆŒˆˆr   c                 ó   — | j         S ©N©r1   ©r   s    r   Ú__str__zToken.__str__=   s
   € ØŒzÐr   c                 óþ   — |                       ¦   «         }|                      ¦   «         }|                     d¦  «        r|                     d¦  «        rdnd} dj        ddt          | ¦  «        it          ¦   «         ¤ŽS )Nú'ú"z"<{cls} {q}{value}{q} at 0x{id:2X}>Úidr.   )Ú_get_repr_nameÚ_get_repr_valueÚ
startswithÚendswithÚformatrF   Úlocals)r   Úclsr1   Úqs       r   Ú__repr__zToken.__repr__D   sˆ   € Ø×!Ò!Ñ#Ô#ˆØ×$Ò$Ñ&Ô&ˆà×#Ò# CÑ(Ô(ÐI¨U¯^ª^¸CÑ-@Ô-@ÐIˆCˆCÀcˆØ:Ð3Ô:ð %ð %Ý�$‰xŒxð%Ý!™8œ8ð%ð %ð 	%r   c                 ó\   — t          | j        ¦  «                             d¦  «        d         S )Nr   éÿÿÿÿ)r:   r2   ÚsplitrA   s    r   rG   zToken._get_repr_nameL   s#   € Ý�4”:‰Œ×$Ò$ SÑ)Ô)¨"Ô-Ð-r   c                 óŒ   — t          | ¦  «        }t          |¦  «        dk    r|d d…         dz   }t          j        dd|¦  «        S )Né   é   z...z\s+ú )r:   r%   ÚreÚsub)r   Úraws     r   rH   zToken._get_repr_valueO   sA   € Ý�$‰iŒiˆÝˆs‰8Œ8�aŠ<ˆ<Ø�b�q�b”'˜E‘/ˆCÝŒv�f˜c 3Ñ'Ô'Ð'r   c              #   ó   K  — | V — dS )zResolve subgroups.Nr.   rA   s    r   ÚflattenzToken.flattenU   s   è è € àˆ
ˆ
ˆ
ˆ
ˆ
r   Fc                 ó  ‡— | j         |u }|r|€|S t          |t          ¦  «        r|f}|rG| j        rt          j        ndŠˆfd„|D ¦   «         }|D ]}|                     | j        ¦  «        r dS Œ dS | j        rd„ |D ¦   «         }| j        |v S )al  Checks whether the token matches the given arguments.

        *ttype* is a token type as defined in `sqlparse.tokens`. If it does
        not match, ``False`` is returned.
        *values* is a list of possible values for this token. For match to be
        considered valid, the token value needs to be in this list. For tokens
        of type ``Keyword`` the comparison is case-insensitive. For
        convenience, a single value can be given passed as a string.
        If *regex* is ``True``, the given values are treated as regular
        expressions. Partial matches are allowed. Defaults to ``False``.
        Nr   c              3   óB   •K  — | ]}t          j        |‰¦  «        V — Œd S r?   )rW   Úcompile)Ú.0ÚvÚflags     €r   ú	<genexpr>zToken.match.<locals>.<genexpr>o   s/   øè è € Ð:Ð:¨a•b”j  DÑ)Ô)Ð:Ð:Ð:Ð:Ð:Ð:r   TFc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r?   )r<   )r_   r`   s     r   rb   zToken.match.<locals>.<genexpr>w   s*   è è € Ð0Ð0 A�a—g’g‘i”iÐ0Ð0Ð0Ð0Ð0Ð0r   )r2   Ú
isinstancer:   r5   rW   Ú
IGNORECASEÚsearchr4   )r   r2   ÚvaluesÚregexÚtype_matchedÚpatternra   s         @r   ÚmatchzToken.matchY   sÏ   ø€ ð ”z UÐ*ˆØð 	 ˜v˜~ØÐå�f�cÑ"Ô"ð 	Ø�YˆFàð 	à$(¤OÐ:•2”=�=¸ˆDØ:Ð:Ð:Ð:°6Ð:Ñ:Ô:ˆFà!ð  ð  �Ø—>’> $¤/Ñ2Ô2ð  Ø˜4˜4ð à�5àŒ?ð 	1Ø0Ð0¨Ð0Ñ0Ô0ˆFàŒ &Ð(Ð(r   c                 óN   — | j         }|rt          ||¦  «        rdS |j         }|°dS )z·Returns ``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)r3   rd   )r   Ú	group_clsr3   s      r   ÚwithinzToken.within{   sB   € ð ”ˆØð 	#Ý˜& )Ñ,Ô,ð Ø�tØ”]ˆFð ð 	#ð ˆur   c                 ó   — | j         |k    S )z<Returns ``True`` if this token is a direct child of *other*.©r3   )r   Úothers     r   Úis_child_ofzToken.is_child_ofˆ   s   € àŒ{˜eÒ#Ð#r   c                 ó:   — | j         }|r||k    rdS |j         }|°dS )z7Returns ``True`` if *other* is in this tokens ancestry.TFrp   )r   rq   r3   s      r   Úhas_ancestorzToken.has_ancestorŒ   s7   € à”ˆØð 	#Ø˜ŠˆØ�tØ”]ˆFð ð 	#ð ˆur   N©F)r*   r+   r,   r-   Ú	__slots__r=   rB   rO   rG   rH   r[   rk   rn   rr   rt   r.   r   r   r0   r0   '   sÄ   € € € € € ðð ð<€Ið	Fð 	Fð 	Fðð ð ð%ð %ð %ð.ð .ð .ð(ð (ð (ðð ð ð )ð  )ð  )ð  )ðDð ð ð$ð $ð $ðð ð ð ð r   r0   c                   óð   ‡ — e Zd ZdZdZd$ˆ fd„	Zd„ Zd„ Zd„ Zd„ Z	d%d„Z
d„ Zd„ Zd„ Zed„ ¦   «         Zd&d„Zd'd„Zd(d„Zd„ Zd„ Zd'd„Zd)d„Zd*d„Z	 	 d'd„Zd„ Zd+d„Zd„ Zd„ Zd „ Zd!„ Zd"„ Z	 	 d,d#„Z ˆ xZ!S )-Ú	TokenListzwA group of tokens.

    It has an additional instance attribute ``tokens`` which holds a
    list of child-tokens.
    r   Nc                 ó®   •‡ — |pg ‰ _         ˆ fd„‰ j         D ¦   «          t          ¦   «                              d t          ‰ ¦  «        ¦  «         d‰ _        d S )Nc                 ó2   •— g | ]}t          |d ‰¦  «        ‘ŒS rp   )Úsetattr)r_   Útokenr   s     €r   ú
<listcomp>z&TokenList.__init__.<locals>.<listcomp>¡   s%   ø€ ÐAÐAÐA¨E��˜ $Ñ	'Ô	'ÐAÐAÐAr   T)r   Úsuperr=   r:   r6   )r   r   Ú	__class__s   ` €r   r=   zTokenList.__init__Ÿ   sV   øø€ Ø�l ˆŒØAÐAÐAÐA°T´[ÐAÑAÔAÐAÝ‰Œ×Ò˜�s 4™yœyÑ)Ô)Ð)ØˆŒˆˆr   c                 ód   — d                      d„ |                      ¦   «         D ¦   «         ¦  «        S )NÚ c              3   ó$   K  — | ]}|j         V — Œd S r?   r@   )r_   r|   s     r   rb   z$TokenList.__str__.<locals>.<genexpr>¦   s$   è è € Ð?Ð? u�u”{Ð?Ð?Ð?Ð?Ð?Ð?r   )Újoinr[   rA   s    r   rB   zTokenList.__str__¥   s+   € Ø�wŠwÐ?Ð?°·²±´Ð?Ñ?Ô?Ñ?Ô?Ð?r   c                 ó*   — t          | j        ¦  «        S r?   )Úiterr   rA   s    r   Ú__iter__zTokenList.__iter__¬   s   € Ý�D”KÑ Ô Ð r   c                 ó   — | j         |         S r?   r   )r   Úitems     r   Ú__getitem__zTokenList.__getitem__¯   s   € ØŒ{˜4Ô Ð r   c                 ó*   — t          | ¦  «        j        S r?   )Útyper*   rA   s    r   rG   zTokenList._get_repr_name²   s   € Ý�D‰zŒzÔ"Ð"r   r   r�   c                 óÔ  — t          | j        ¦  «        }t          | j        ¦  «        D ]¾\  }}|                     ¦   «         }|                     ¦   «         }	||dz
  k    }
|
rdnd}|	                     d¦  «        r|	                     d¦  «        rdnd}t          |› |› |› d|› d|› |	› |› �	|¬¦  «         |j        r,|�||k     r$|
rd	nd
}| 	                    ||dz   |||z   ¦  «         Œ¿dS )zPretty-print the object tree.r   z`- z|- rD   rE   rV   )ÚfileNz   z|  )
r%   r   Ú	enumeraterG   rH   rI   rJ   Úprintr6   Ú_pprint_tree)r   Ú	max_depthÚdepthÚfÚ_preÚtoken_countÚidxr|   rM   r1   ÚlastÚprerN   Ú
parent_pres                 r   r�   zTokenList._pprint_treeµ   s0  € å˜$œ+Ñ&Ô&ˆÝ# D¤KÑ0Ô0ð 	Oð 	O‰JˆC�Ø×&Ò&Ñ(Ô(ˆCØ×)Ò)Ñ+Ô+ˆEà˜;¨™?Ò+ˆDØÐ*�%�% UˆCà×'Ò'¨Ñ,Ô,ÐM°·²ÀÑ1DÔ1DÐM��È#ˆAÝ�TÐ9˜3Ð9 Ð9Ð9 cÐ9Ð9¨AÐ9¨uÐ9°aÐ9Ð9ÀÐBÑBÔBÐBàŒ~ð O 9Ð#4¸À	Ò8IÐ8IØ&*Ð5˜U˜U°�
Ø×"Ò" 9¨e°a©i¸¸DÀ:Ñ<MÑNÔNÐNøð	Oð 	Or   c                 ó’   — d}|                       ¦   «         D ]/}|t          |j        ¦  «        z   }||cxk    r|k     rn n|c S |}Œ0dS )z-Returns the token that is on position offset.r   N)r[   r%   r1   )r   Úoffsetr–   r|   Úends        r   Úget_token_at_offsetzTokenList.get_token_at_offsetÆ   sn   € àˆØ—\’\‘^”^ð 	ð 	ˆEØ�˜EœKÑ(Ô(Ñ(ˆCØ�fÐ"Ð"Ò"Ð"˜sÒ"Ð"Ð"Ð"Ð"Ø���ØˆCˆCð		ð 	r   c              #   ój   K  — | j         D ](}|j        r|                     ¦   «         E d{V —† Œ$|V — Œ)dS )znGenerator yielding ungrouped tokens.

        This method is recursively called for all child tokens.
        N)r   r6   r[   ©r   r|   s     r   r[   zTokenList.flattenÏ   s[   è è € ð
 ”[ð 	ð 	ˆEØŒ~ð Ø Ÿ=š=™?œ?Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*à����ð		ð 	r   c              #   ó4   K  — | j         D ]}|j        r|V — Œd S r?   )r   r6   rŸ   s     r   Úget_sublistszTokenList.get_sublistsÚ   s5   è è € Ø”[ð 	ð 	ˆEØŒ~ð Ø���øð	ð 	r   c                 ó   — | j         S r?   r   rA   s    r   Ú_groupable_tokenszTokenList._groupable_tokensß   s
   € àŒ{Ðr   Fc                 ó"  — |€dS t          |t          t          f¦  «        s|f}|r|�J ‚t          |dz
  dd¦  «        }n&|€t	          | j        ¦  «        }t          ||¦  «        }|D ]'}| j        |         }|D ]} ||¦  «        r||fc c S ŒŒ(dS )znext token that match functionsNr    rQ   ©NN)rd   ÚlistÚtupleÚranger%   r   )	r   ÚfuncsÚstartrœ   r"   Úindexesr–   r|   Úfuncs	            r   Ú_token_matchingzTokenList._token_matchingã   sÕ   € àˆ=Ø�4å˜%¥$­ Ñ/Ô/ð 	Ø�HˆEàð 	(Ø�;�;�;Ý˜E A™I r¨2Ñ.Ô.ˆGˆGàˆ{Ý˜$œ+Ñ&Ô&�Ý˜E 3Ñ'Ô'ˆGØð 	&ð 	&ˆCØ”K Ô$ˆEØð &ð &�Ø�4˜‘;”;ð &Ø ˜:Ð%Ð%Ð%Ð%Ð%ð&ð&ð ˆzr   Tc                 óH   ‡‡— ˆˆfd„}|                       |¦  «        d         S )zÙReturns 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                 ó^   •— ‰r| j         p"‰o t          | t          j        t          ¬¦  «         S ©N)r   Úi©r7   r   r   ÚComment©ÚtkÚskip_cmÚskip_wss    €€r   Úmatcherz&TokenList.token_first.<locals>.matcher  ó9   ø€ Ø Ð5 RÔ%5ð IØ#ÐG­¨Bµ!´)½wÐ(GÑ(GÔ(GðJð Jr   r   ©r­   )r   r·   r¶   r¸   s    `` r   Útoken_firstzTokenList.token_firstù   sC   øø€ ð	Jð 	Jð 	Jð 	Jð 	Jð 	Jð ×#Ò# GÑ,Ô,¨QÔ/Ð/r   rQ   c                 óJ   ‡‡‡— |dz  }|                       ˆˆˆfd„||¦  «        S )Nr   c                 ó(   •— t          | ‰‰‰¦  «        S r?   )r   )rµ   r±   r   r   s    €€€r   ú<lambda>z)TokenList.token_next_by.<locals>.<lambda>
  s   ø€ ­s°2°q¸!¸QÑ/?Ô/?€ r   rº   )r   r±   r   r   r–   rœ   s    ```  r   r   zTokenList.token_next_by  s6   øøø€ Øˆq‰ˆØ×#Ò#Ð$?Ð$?Ð$?Ð$?Ð$?Ð$?ÀÀcÑJÔJÐJr   c                 óˆ   — t          |t          t          f¦  «        s|fn|}d„ |D ¦   «         }|                      ||¦  «        S )Nc                 ó   ‡— g | ]Šˆfd „‘ŒS )c                 ó   •—  ‰| ¦  «         S r?   r.   )rµ   r¬   s    €r   r¾   z9TokenList.token_not_matching.<locals>.<listcomp>.<lambda>  s   ø€    R¡¤˜L€ r   r.   )r_   r¬   s    @r   r}   z0TokenList.token_not_matching.<locals>.<listcomp>  s#   ø€ Ð;Ð;Ð;¨TÐ(Ð(Ð(Ð(Ð;Ð;Ð;r   )rd   r¦   r§   r­   ©r   r©   r–   s      r   Útoken_not_matchingzTokenList.token_not_matching  sI   € Ý *¨5µ4½°-Ñ @Ô @ÐK���ÀeˆØ;Ð;°UÐ;Ñ;Ô;ˆØ×#Ò# E¨3Ñ/Ô/Ð/r   c                 ó:   — |                       ||¦  «        d         S )Nr   rº   rÂ   s      r   Útoken_matchingzTokenList.token_matching  s   € Ø×#Ò# E¨3Ñ/Ô/°Ô2Ð2r   c                 ó4   — |                       |||d¬¦  «        S )z÷Returns 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_prevzTokenList.token_prev  s   € ð �Š˜s G¨W¸tˆÑDÔDÐDr   c                 óT   ‡‡— |€dS |dz  }ˆˆfd„}|                       |||¬¦  «        S )zïReturns 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.
        Nr¥   r   c                 ó^   •— ‰r| j         p"‰o t          | t          j        t          ¬¦  «         S r°   r²   r´   s    €€r   r¸   z%TokenList.token_next.<locals>.matcher)  r¹   r   r!   rº   )r   r–   r·   r¶   rÇ   r¸   s     ``  r   rÈ   zTokenList.token_next  sZ   øø€ ð ˆ;Ø�:Øˆq‰ˆð	Jð 	Jð 	Jð 	Jð 	Jð 	Jð ×#Ò# G¨S¸(Ð#ÑCÔCÐCr   c                 ó¤   — t          |t          ¦  «        r|n|                      |¦  «        }|| j        |d…                              |¦  «        z   S )zReturn list index of token.N)rd   ÚintÚtoken_indexr   Úindex)r   r|   rª   s      r   rÎ   zTokenList.token_index.  sL   € å# E­3Ñ/Ô/ÐL��°T×5EÒ5EÀeÑ5LÔ5LˆØ�t”{ 5 6 6Ô*×0Ò0°Ñ7Ô7Ñ7Ð7r   c                 óf  — |}| j         |         }||z   }|r`t          ||¦  «        rP| j         |dz   |…         }|}	|	j                              |¦  «         | j         |dz   |…= t          |¦  «        |	_        n.| j         ||…         } ||¦  «        }	|	g| j         ||…<   | |	_        |D ]	}
|	|
_        Œ
|	S )z+Replace tokens by an instance of *grp_cls*.r   )r   rd   Úextendr:   r1   r3   )r   Úgrp_clsrª   rœ   Úinclude_endrÑ   Ú	start_idxÚend_idxÚ	subtokensÚgrpr|   s              r   Úgroup_tokenszTokenList.group_tokens3  sã   € ð ˆ	Ø”˜IÔ&ˆà˜Ñ#ˆð ð 	•j ¨Ñ0Ô0ð 	Øœ I°¡M°'Ð$9Ô:ˆIàˆCØŒJ×Ò˜iÑ(Ô(Ð(Ø”˜I¨™M¨'Ð1Ð2Ý˜E™
œ
ˆCŒIˆIàœ I¨gÐ$5Ô6ˆIØ�'˜)Ñ$Ô$ˆCØ.1¨UˆDŒK˜	 'Ð)Ñ*ØˆCŒJàð 	ð 	ˆEØˆEŒLˆLàˆ
r   c                 óž   — t          |t          ¦  «        s|                      |¦  «        }| |_        | j                             ||¦  «         dS )zInserts *token* before *where*.N)rd   rÍ   rÎ   r3   r   Úinsert)r   Úwherer|   s      r   Úinsert_beforezTokenList.insert_beforeQ  sL   € å˜%¥Ñ%Ô%ð 	,Ø×$Ò$ UÑ+Ô+ˆEØˆŒØŒ×Ò˜5 %Ñ(Ô(Ð(Ð(Ð(r   c                 ó  — t          |t          ¦  «        s|                      |¦  «        }|                      ||¬¦  «        \  }}| |_        |€| j                             |¦  «         dS | j                             ||¦  «         dS )zInserts *token* after *where*.©r·   N)rd   rÍ   rÎ   rÈ   r3   r   ÚappendrÚ   )r   rÛ   r|   r·   ÚnidxÚnext_s         r   Úinsert_afterzTokenList.insert_afterX  s†   € å˜%¥Ñ%Ô%ð 	,Ø×$Ò$ UÑ+Ô+ˆEØ—o’o e°W�oÑ=Ô=‰ˆˆeØˆŒØˆ=ØŒK×Ò˜uÑ%Ô%Ð%Ð%Ð%àŒK×Ò˜t UÑ+Ô+Ð+Ð+Ð+r   c                 ó.   — |                       ¦   «         duS )z(Returns ``True`` if an alias is present.N)r)   rA   s    r   Ú	has_aliaszTokenList.has_aliasc  s   € à�~Š~ÑÔ tÐ+Ð+r   c                 ó   — dS )r   Nr.   rA   s    r   r)   zTokenList.get_aliasg  ó   € àˆtr   c                 óR   — |                       ¦   «         p|                      ¦   «         S )a  Returns 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   rA   s    r   Úget_namezTokenList.get_namek  s%   € ð �~Š~ÑÔÐ7 4×#5Ò#5Ñ#7Ô#7Ð7r   c                 ó   — dS )r
   Nr.   rA   s    r   r   zTokenList.get_real_namet  ræ   r   c                 ó¬   — |                       t          j        df¬¦  «        \  }}|                      |¦  «        \  }}|�t	          |j        ¦  «        ndS )ztReturn 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   r1   )r   r   r   Úprev_s       r   Úget_parent_namezTokenList.get_parent_namex  sT   € ð
 ×'Ò'­1¬=¸#Ð*>Ð'Ñ?Ô?‰
ˆ�Ø—?’? 7Ñ+Ô+‰ˆˆ5Ø-2Ð->�}˜Uœ[Ñ)Ô)Ð)ÀDÐHr   c                 óÆ  — |r| j         |d…         n| j         }|rt          |¦  «        n|}t          j        t          j        t          j        j        g}|r|                     t          j        ¦  «         |D ]i}|j	        |v rt          |j        ¦  «        c S t          |t          t          f¦  «        r,|r|                     ¦   «         n|                     ¦   «         c S ŒjdS )z/Returns the name of the first token with a nameN)r   Úreversedr   ÚNameÚWildcardÚStringÚSymbolrß   r#   r2   r   r1   rd   Ú
IdentifierÚFunctionr   rè   )r   r–   r"   r   r   r   Útypesr|   s           r   r   zTokenList._get_first_name�  sñ   € ð '*Ð:�”˜S˜T˜TÔ"Ð"¨t¬{ˆØ%,Ð8•˜&Ñ!Ô!Ð!°&ˆÝ”�œ¥Q¤X¤_Ð5ˆàð 	$Ø�LŠL�œÑ#Ô#Ð#àð 	Pð 	PˆEØŒ{˜eÐ#Ð#Ý$ U¤[Ñ1Ô1Ð1Ð1Ð1Ý˜E¥JµÐ#9Ñ:Ô:ð PØ09ÐO�u×*Ò*Ñ,Ô,Ð,¸u¿~º~Ñ?OÔ?OÐOÐOÐOðPð	Pð 	Pr   r?   )Nr   Nr�   )r   NF)TF)NNNrQ   N)TFF)r   )T)NFFF)"r*   r+   r,   r-   rv   r=   rB   r†   r‰   rG   r�   r�   r[   r¡   Úpropertyr£   r­   r»   r   rÃ   rÅ   rÉ   rÈ   rÎ   rØ   rÜ   râ   rä   r)   rè   r   rì   r   Ú__classcell__)r   s   @r   rx   rx   –   sC  ø€ € € € € ðð ð €Iðð ð ð ð ð ð@ð @ð @ð!ð !ð !ð!ð !ð !ð#ð #ð #ðOð Oð Oð Oð"ð ð ð	ð 	ð 	ðð ð ð
 ðð ñ „Xððð ð ð ð,0ð 0ð 0ð 0ðKð Kð Kð Kð0ð 0ð 0ð
3ð 3ð 3ðEð Eð Eð EðDð Dð Dð Dð 8ð 8ð 8ð 8ð
 =AØ!ðð ð ð ð<)ð )ð )ð	,ð 	,ð 	,ð 	,ð,ð ,ð ,ðð ð ð8ð 8ð 8ðð ð ðIð Ið Ið AFØ"'ðPð Pð Pð Pð Pð Pð Pð Pr   rx   c                   ó   — e Zd ZdZd„ ZdS )Ú	StatementzRepresents a SQL statement.c                 óæ  — |                       d¬¦  «        }|€dS |j        t          j        j        t          j        j        fv r|j        S |j        t          j        j        k    rŒ|                      |¦  «        }|�u|  	                    |d¬¦  «        \  }}t          |t          t          f¦  «        r=|  	                    |d¬¦  «        \  }}|�!|j        t          j        j        k    r|j        S |­udS )aM  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¶   NÚUNKNOWNrÞ   )r»   r2   r   r#   ÚDMLÚDDLr4   ÚCTErÎ   rÈ   rd   ró   ÚIdentifierList)r   r|   Útidxs      r   Úget_typezStatement.get_type–  sí   € ð × Ò ¨Ð Ñ.Ô.ˆØˆ=ð �9àŒ[�QœYœ]­A¬I¬MÐ:Ð:Ð:ØÔ#Ð#àŒ[�AœIœMÒ)Ð)ð ×#Ò# EÑ*Ô*ˆDØÐ"Ø"Ÿošo¨d¸D˜oÑAÔA‘��eÝ˜e¥jµ.Ð%AÑBÔBð 0Ø"&§/¢/°$À /Ñ"EÔ"E‘K�D˜%àÐ(Ø %¤­q¬y¬}Ò <Ð <Ø$Ô/Ð/ð Ð"ð ˆyr   N)r*   r+   r,   r-   r  r.   r   r   rù   rù   “  s)   € € € € € Ø%Ð%ð"ð "ð "ð "ð "r   rù   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ró   zNRepresents an identifier.

    Identifiers may have aliases or typecasts.
    c                 óP   — |                       t          j        ¬¦  «        \  }}|duS )z7Return ``True`` if this identifier contains a wildcard.r   N)r   r   rð   )r   r   r|   s      r   Úis_wildcardzIdentifier.is_wildcardÁ  s)   € à×%Ò%­¬
Ð%Ñ3Ô3‰ˆˆ5Ø˜DÐ Ð r   c                 ó–   — |                       t          j        df¬¦  «        \  }}|                      |d¬¦  «        \  }}|r|j        ndS )z<Returns the typecast or ``None`` of this object as a string.z::r   FrÞ   N)r   r   r   rÈ   r1   )r   ÚmidxÚmarkerrà   rá   s        r   Úget_typecastzIdentifier.get_typecastÆ  sM   € à×)Ò)­Q¬]¸DÐ,AÐ)ÑBÔB‰ˆˆfØ—o’o d°E�oÑ:Ô:‰ˆˆeØ#Ð-ˆuŒ{ˆ{¨Ð-r   c                 óh   — |                       t          j        j        ¬¦  «        \  }}|r|j        ndS )z5Returns the ordering or ``None`` as uppercase string.r   N)r   r   r#   ÚOrderr4   )r   r   Úorderings      r   Úget_orderingzIdentifier.get_orderingÌ  s3   € à×(Ò(­1¬9¬?Ð(Ñ;Ô;‰ˆˆ8Ø&.Ð8ˆxÔ"Ð"°DÐ8r   c              #   ój   K  — | j         D ](}t          |t          ¦  «        r|j         dd…         V — Œ)dS )z(Returns an iterator of index token listsr   rQ   N)r   rd   ÚSquareBracketsrŸ   s     r   Úget_array_indiceszIdentifier.get_array_indicesÑ  sM   è è € ð ”[ð 	)ð 	)ˆEÝ˜%¥Ñ0Ô0ð )à”l 1 R 4Ô(Ð(Ð(Ð(øð	)ð 	)r   N)r*   r+   r,   r-   r  r  r  r  r.   r   r   ró   ró   »  sZ   € € € € € ðð ð
!ð !ð !ð
.ð .ð .ð9ð 9ð 9ð
)ð )ð )ð )ð )r   ró   c                   ó   — e Zd ZdZd„ ZdS )rÿ   z.A list of :class:`~sqlparse.sql.Identifier`'s.c              #   ót   K  — | j         D ]-}|j        s$|                     t          j        d¦  «        s|V — Œ.dS )zkReturns the identifiers.

        Whitespaces and punctuations are not included in this generator.
        ú,N)r   r7   rk   r   r   rŸ   s     r   Úget_identifierszIdentifierList.get_identifiersÝ  sO   è è € ð
 ”[ð 	ð 	ˆEØÔ'ð ¨5¯;ª;µq´}ÀcÑ+JÔ+Jð Ø���øð	ð 	r   N)r*   r+   r,   r-   r  r.   r   r   rÿ   rÿ   Ú  s)   € € € € € Ø9Ð9ðð ð ð ð r   rÿ   c                   ón   — e Zd ZdZej        j        dfej        dfgZej	        j
        dfZej        dfZdS )ÚTypedLiteralzEA typed literal, such as "date '2001-09-28'" or "interval '2 hours'".NÚ	TIMESTAMP)ÚDAYÚHOURÚMINUTEÚMONTHÚSECONDÚYEAR)r*   r+   r,   r-   r   rï   ÚBuiltinr#   ÚM_OPENrñ   ÚSingleÚM_CLOSEÚM_EXTENDr.   r   r   r  r  ç  sI   € € € € € ØOÐOØŒvŒ~˜tÐ$ q¤y°+Ð&>Ð?€FØŒhŒo˜tÐ#€GØŒyÐNÐN€H€H€Hr   r  c                   óL   — e Zd ZdZej        dfZej        dfZed„ ¦   «         Z	dS )ÚParenthesiszTokens between parenthesis.ú(ú)c                 ó    — | j         dd…         S ©Nr   rQ   r   rA   s    r   r£   zParenthesis._groupable_tokensó  ó   € àŒ{˜1˜R˜4Ô Ð r   N©
r*   r+   r,   r-   r   r   r  r   rö   r£   r.   r   r   r#  r#  î  sK   € € € € € Ø%Ð%ØŒ]˜CÐ€FØŒm˜SÐ €Gàð!ð !ñ „Xð!ð !ð !r   r#  c                   óL   — e Zd ZdZej        dfZej        dfZed„ ¦   «         Z	dS )r  zTokens between square bracketsú[ú]c                 ó    — | j         dd…         S r'  r   rA   s    r   r£   z SquareBrackets._groupable_tokensý  r(  r   Nr)  r.   r   r   r  r  ø  sK   € € € € € Ø(Ð(ØŒ]˜CÐ€FØŒm˜SÐ €Gàð!ð !ñ „Xð!ð !ð !r   r  c                   ó   — e Zd ZdZdS )Ú
Assignmentz An assignment like 'var := val;'N©r*   r+   r,   r-   r.   r   r   r/  r/    s   € € € € € Ø*Ð*Ð*Ð*r   r/  c                   ó6   — e Zd ZdZej        dfZej        dfZdS )ÚIfz7An 'if' clause with possible 'else if' or 'else' parts.ÚIFzEND IFN©r*   r+   r,   r-   r   r#   r  r   r.   r   r   r2  r2    s+   € € € € € ØAÐAØŒY˜ˆ_€FØŒi˜Ð!€G€G€Gr   r2  c                   ó6   — e Zd ZdZej        dfZej        dfZdS )ÚForzA 'FOR' loop.)ÚFORÚFOREACHzEND LOOPNr4  r.   r   r   r6  r6    s-   € € € € € ØÐØŒYÐ*Ð*€FØŒi˜Ð#€G€G€Gr   r6  c                   ó>   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         ZdS )Ú
Comparisonz/A comparison used for example in WHERE clauses.c                 ó   — | j         d         S ©Nr   r   rA   s    r   ÚleftzComparison.left  s   € àŒ{˜1Œ~Ðr   c                 ó   — | j         d         S )NrQ   r   rA   s    r   ÚrightzComparison.right  s   € àŒ{˜2ŒÐr   N)r*   r+   r,   r-   rö   r=  r?  r.   r   r   r:  r:    sN   € € € € € Ø9Ð9àðð ñ „Xðð ðð ñ „Xðð ð r   r:  c                   ó   — e Zd ZdZd„ ZdS )r³   z
A comment.c                 óZ   — | j         o$| j         d         j        t          j        j        k    S r<  )r   r2   r   r³   Ú	MultilinerA   s    r   Úis_multilinezComment.is_multiline!  s"   € ØŒ{ÐJ˜tœ{¨1œ~Ô3µq´yÔ7JÒJÐJr   N)r*   r+   r,   r-   rC  r.   r   r   r³   r³     s.   € € € € € ØÐðKð Kð Kð Kð Kr   r³   c                   ó6   — e Zd ZdZej        dfZej        dfZdS )ÚWherezA WHERE clause.ÚWHERE)
úORDER BYzGROUP BYÚLIMITÚUNIONz	UNION ALLÚEXCEPTÚ	INTERSECTÚHAVINGÚ	RETURNINGÚINTONr4  r.   r   r   rE  rE  %  s1   € € € € € ØÐØŒY˜Ð€FØŒið 4ð 4€G€G€Gr   rE  c                   ó$   — e Zd ZdZej        dfZdS )ÚOverzAn OVER clause.ÚOVERN)r*   r+   r,   r-   r   r#   r  r.   r   r   rP  rP  -  s    € € € € € ØÐØŒY˜Ð€F€F€Fr   rP  c                   ó6   — e Zd ZdZej        dfZej        dfZdS )ÚHavingzA HAVING clause.rL  )rG  rH  Nr4  r.   r   r   rS  rS  2  s-   € € € € € ØÐØŒY˜Ð €FØŒiÐ.Ð.€G€G€Gr   rS  c                   ó>   — e Zd ZdZej        dfZej        dfZdd„ZdS )ÚCasezAA CASE statement with one or more WHEN and possibly an ELSE part.ÚCASEÚENDFc                 óä  — d}d}g }|}| j         D �]^}|                     t          j        d¦  «        rŒ$|r|j        t          j        v rŒ:|                     t          j        d¦  «        r|                     g g f¦  «         |}n|                     t          j        d¦  «        r|}n\|                     t          j        d¦  «        r|                     dg f¦  «         |}n"|                     t          j        d¦  «        rd}|r|s|                     g g f¦  «         ||k    r#|d	         d
                              |¦  «         �Œ7||k    r!|d	         d                              |¦  «         �Œ`|S )zeReturns a list of 2-tuples (condition, value).

        If an ELSE exists condition is None.
        r   r    rV  ÚWHENÚTHENÚELSENrW  rQ   r   )r   rk   r   r#   r2   r$   rß   )r   r·   Ú	CONDITIONÚVALUEÚretÚmoder|   s          r   Ú	get_caseszCase.get_cases=  sƒ  € ð
 ˆ	ØˆàˆØˆà”[ð 	)ñ 	)ˆEà�{Š{�1œ9 fÑ-Ô-ð Øàð ˜Uœ[­A¬LÐ8Ð8Øà—’�QœY¨Ñ/Ô/ð Ø—
’
˜B ˜8Ñ$Ô$Ð$Ø ��à—’�QœY¨Ñ/Ô/ð Ø��à—’�QœY¨Ñ/Ô/ð Ø—
’
˜D "˜:Ñ&Ô&Ð&Ø��à—’�QœY¨Ñ.Ô.ð Ø�ð ð %˜Cð %Ø—
’
˜B ˜8Ñ$Ô$Ð$ð �yÒ Ð Ø�B”˜”
×!Ò! %Ñ(Ô(Ð(Ñ(à˜’�Ø�B”˜”
×!Ò! %Ñ(Ô(Ð(ùð ˆ
r   Nru   )	r*   r+   r,   r-   r   r#   r  r   r`  r.   r   r   rU  rU  8  sF   € € € € € ØKÐKØŒY˜Ð€FØŒi˜Ð€Gð-ð -ð -ð -ð -ð -r   rU  c                   ó   — e Zd ZdZd„ Zd„ ZdS )rô   zA function or procedure call.c                 ó<  — |                       t          ¬¦  «        d         }g }|j        D ]p}t          |t          ¦  «        r|                     ¦   «         c S t          |t          t          t          ft          j        ¬¦  «        r|                     |¦  «         Œq|S )zReturn a list of parameters.©r±   r   )r±   r   )r   r#  r   rd   rÿ   r  r   rô   ró   r  r   ÚLiteralrß   )r   ÚparenthesisÚresultr|   s       r   Úget_parameterszFunction.get_parametersp  s�   € à×(Ò(­;Ð(Ñ7Ô7¸Ô:ˆØˆØ Ô'ð 	%ð 	%ˆEÝ˜%¥Ñ0Ô0ð %Ø×,Ò,Ñ.Ô.Ð.Ð.Ð.Ý�U�x­µ\ÐBÝ”yð"ñ "ô "ð %à—’˜eÑ$Ô$Ð$øØˆr   c                 óf   — |                       t          ¬¦  «        }|sdS |d         j        d         S )zReturn the window if it exists.rc  Nr   rQ   )r   rP  r   )r   Úover_clauses     r   Ú
get_windowzFunction.get_window|  s7   € à×(Ò(­4Ð(Ñ0Ô0ˆØð 	Ø�4Ø˜1Œ~Ô$ RÔ(Ð(r   N)r*   r+   r,   r-   rg  rj  r.   r   r   rô   rô   m  s8   € € € € € Ø'Ð'ð
ð 
ð 
ð)ð )ð )ð )ð )r   rô   c                   ó6   — e Zd ZdZej        dfZej        dfZdS )ÚBeginzA BEGIN/END block.ÚBEGINrW  Nr4  r.   r   r   rl  rl  „  s,   € € € € € ØÐØŒY˜Ð€FØŒi˜Ð€G€G€Gr   rl  c                   ó   — e Zd ZdZdS )Ú	OperationzGrouping of operationsNr0  r.   r   r   ro  ro  Š  s   € € € € € Ø Ð Ð Ð r   ro  c                   ó   — e Zd ZdZdS )ÚValueszGrouping of valuesNr0  r.   r   r   rq  rq  Ž  s   € € € € € ØÐÐÐr   rq  c                   ó   — e Zd ZdZdS )ÚCommandzGrouping of CLI commands.Nr0  r.   r   r   rs  rs  ’  s   € € € € € Ø#Ð#Ð#Ð#r   rs  )r-   rW   Úsqlparser   r   Úsqlparse.utilsr   r   r   r0   rx   rù   ró   rÿ   r  r#  r  r/  r2  r6  r:  r³   rE  rP  rS  rU  rô   rl  ro  rq  rs  r.   r   r   ú<module>rv     s=  ðð MÐ Là 	€	€	€	à  Ð  Ð  Ð  Ð  Ð  Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð6ð 6ð 6ð 6ð 6ñ 6ô 6ð 6ð.lð lð lð lð lñ lô lð lð^zPð zPð zPð zPð zP�ñ zPô zPð zPðz%ð %ð %ð %ð %�	ñ %ô %ð %ðP)ð )ð )ð )ð )� ñ )ô )ð )ð>
ð 
ð 
ð 
ð 
�Yñ 
ô 
ð 
ðOð Oð Oð Oð O�9ñ Oô Oð Oð!ð !ð !ð !ð !�)ñ !ô !ð !ð!ð !ð !ð !ð !�Yñ !ô !ð !ð+ð +ð +ð +ð +�ñ +ô +ð +ð"ð "ð "ð "ð "ˆñ "ô "ð "ð$ð $ð $ð $ð $ˆ)ñ $ô $ð $ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ðKð Kð Kð Kð Kˆiñ Kô Kð Kð4ð 4ð 4ð 4ð 4ˆIñ 4ô 4ð 4ðð ð ð ð ˆ9ñ ô ð ð
/ð /ð /ð /ð /ˆYñ /ô /ð /ð2ð 2ð 2ð 2ð 2ˆ9ñ 2ô 2ð 2ðj)ð )ð )ð )ð )ˆ~˜yñ )ô )ð )ð.ð ð ð ð ˆIñ ô ð ð!ð !ð !ð !ð !�	ñ !ô !ð !ðð ð ð ð ˆYñ ô ð ð$ð $ð $ð $ð $ˆiñ $ô $ð $ð $ð $r   