Ë
    �ïŒh$L  ã                   óÖ  — d Z ddlmZ ddlZddlmZ ddlmZm	Z	m
Z
 ddlmZmZ e
 G d„ de«      «       Ze
 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«      Z G d%„ d&e«      Z G d'„ d(e«      Zy))zFThis module contains classes representing syntactical elements of SQL.é    )Úprint_functionN©Útokens)Ústring_typesÚ	text_typeÚunicode_compatible)ÚimtÚremove_quotesc                   óR   — 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y)ÚTokenzÕBase class for all other classes in this module.

    It represents a single token and has two instance attributes:
    ``value`` is the unchange value of the token and ``ttype`` is
    the type of the token.
    )ÚvalueÚttypeÚparentÚ
normalizedÚ
is_keywordÚis_groupÚis_whitespacec                 ó  — t        |«      }|| _        || _        d | _        d| _        |t
        j                  v | _        | j                  t
        j                  v | _	        | j                  r|j                  «       | _        y || _        y )NF)r   r   r   r   r   ÚTÚKeywordr   Ú
Whitespacer   Úupperr   )Úselfr   r   s      úO/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/sqlparse/sql.pyÚ__init__zToken.__init__   sf   € Ü˜%Ó ˆØˆŒ
ØˆŒ
ØˆŒØˆŒØ¤1§9¡9Ð,ˆŒØ!ŸZ™Z¬1¯<©<Ð7ˆÔØ+/¯?ª?˜%Ÿ+™+›-ˆ�Àˆ�ó    c                 ó   — | j                   S ©N©r   ©r   s    r   Ú__str__zToken.__str__(   s   € Ø�z‰zÐr   c                 óØ   — | j                  «       }| j                  «       }|j                  d«      r|j                  d«      rdnd} dj                  ddt        | «      it        «       ¤ŽS )Nú'ú"z"<{cls} {q}{value}{q} at 0x{id:2X}>Úid© )Ú_get_repr_nameÚ_get_repr_valueÚ
startswithÚendswithÚformatr%   Úlocals)r   Úclsr   Úqs       r   Ú__repr__zToken.__repr__/   si   € Ø×!Ñ!Ó#ˆØ×$Ñ$Ó&ˆà×$Ñ$ SÔ)¨e¯n©n¸SÔ.A‰DÀtˆØ;Ð4×;Ñ;ñ %Ü�$‹xð%Ü!›8ñ%ð 	%r   c                 óP   — t        | j                  «      j                  d«      d   S )Nú.éÿÿÿÿ)Ústrr   Úsplitr    s    r   r'   zToken._get_repr_name7   s    € Ü�4—:‘:‹×$Ñ$ SÓ)¨"Ñ-Ð-r   c                 ór   — t        | «      }t        |«      dkD  r|d d dz   }t        j                  dd|«      S )Né   é   z...z\s+ú )r   ÚlenÚreÚsub)r   Úraws     r   r(   zToken._get_repr_value:   s8   € Ü˜‹oˆÜˆs‹8�aŠ<Ø�b�q�'˜E‘/ˆCÜ�v‰v�f˜c 3Ó'Ð'r   c              #   ó   K  — | –— y­w)zResolve subgroups.Nr&   r    s    r   ÚflattenzToken.flatten@   s   è ø€ à‹
ùs   ‚c                 ó8  ‡— | j                   |u }|r|€|S t        |t        «      r|f}|rN| j                  rt        j
                  ndŠˆfd„|D «       }|D ]  }|j                  | j                  «      sŒ y y| j                  r	d„ |D «       }| j                  |v S )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   óJ   •K  — | ]  }t        j                  |‰«      –— Œ y ­wr   )r:   Úcompile)Ú.0ÚvÚflags     €r   ú	<genexpr>zToken.match.<locals>.<genexpr>Z   s   øè ø€ Ò:¨a”b—j‘j  D×)Ñ:ùs   ƒ #TFc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr   )r   )rB   rC   s     r   rE   zToken.match.<locals>.<genexpr>b   s   è ø€ Ò0 A�a—g‘g—iÑ0ùs   ‚)r   Ú
isinstancer   r   r:   Ú
IGNORECASEÚsearchr   )r   r   ÚvaluesÚregexÚtype_matchedÚpatternrD   s         @r   ÚmatchzToken.matchD   s–   ø€ ð —z‘z UÐ*ˆÙ˜v˜~ØÐä�fœlÔ+Ø�YˆFáà$(§O¢O”2—=’=¸ˆDÛ:°6Ô:ˆFà!ò  �Ø—>‘> $§/¡/Õ2Ùð ð à�?Š?Ù0¨Ô0ˆFà�‰ &Ð(Ð(r   c                 óX   — | j                   }|rt        ||«      ry|j                   }|rŒy)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)r   rG   )r   Ú	group_clsr   s      r   ÚwithinzToken.withinf   s0   € ð —‘ˆÙÜ˜& )Ô,ØØ—]‘]ˆFò ð r   c                 ó    — | j                   |k(  S )z<Returns ``True`` if this token is a direct child of *other*.©r   )r   Úothers     r   Úis_child_ofzToken.is_child_ofs   s   € à�{‰{˜eÑ#Ð#r   c                 óJ   — | j                   }|r||k(  ry|j                   }|rŒy)z7Returns ``True`` if *other* is in this tokens ancestry.TFrS   )r   rT   r   s      r   Úhas_ancestorzToken.has_ancestorw   s+   € à—‘ˆÙØ˜ŠØØ—]‘]ˆFò ð r   N©F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r!   r/   r'   r(   r>   rN   rQ   rU   rW   r&   r   r   r   r      sB   „ ñð.€IòFòò%ò.ò(òó )òDò$ór   r   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   c                 ó¤   •— |xs g | _         |D �cg c]  }t        |d| «      ‘Œ c} t        t        | �  d t        | «      «       d| _        y c c}w )Nr   T)r   ÚsetattrÚsuperr_   r   r   r   )r   r   ÚtokenÚ	__class__s      €r   r   zTokenList.__init__‹   sF   ø€ Ø’l ˆŒØ5;Ö<¨EŒ�˜ $Õ	'Ó<ÜŒi˜Ñ'¨¬i¸«oÔ>Øˆ�ùò 	=s   ‘Ac                 óN   — dj                  d„ | j                  «       D «       «      S )NÚ c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   r   )rB   rc   s     r   rE   z$TokenList.__str__.<locals>.<genexpr>’   s   è ø€ Ò@¨˜Ÿ�Ñ@ùs   ‚)Újoinr>   r    s    r   r!   zTokenList.__str__‘   s   € Ø�x‰xÑ@°·±³Ô@Ó@Ð@r   c                 ó,   — t        | j                  «      S r   )Úiterr   r    s    r   Ú__iter__zTokenList.__iter__˜   s   € Ü�D—K‘KÓ Ð r   c                 ó    — | j                   |   S r   r   )r   Úitems     r   Ú__getitem__zTokenList.__getitem__›   s   € Ø�{‰{˜4Ñ Ð r   c                 ó,   — t        | «      j                  S r   )ÚtyperY   r    s    r   r'   zTokenList._get_repr_namež   s   € Ü�D‹z×"Ñ"Ð"r   c           	      ót  — d|z  }t        | j                  «      D ]›  \  }}|j                  «       }|j                  «       }|j	                  d«      r|j                  d«      rdnd}	t         dj                  di t        «       ¤Ž|¬«       |j                  sŒ~|�||k  sŒ†|j                  ||dz   |«       Œ� y)	zPretty-print the object tree.z | r#   r$   z${indent}{idx:2d} {cls} {q}{value}{q})ÚfileNé   r&   )Ú	enumerater   r'   r(   r)   r*   Úprintr+   r,   r   Ú_pprint_tree)
r   Ú	max_depthÚdepthÚfÚindentÚidxrc   r-   r   r.   s
             r   rv   zTokenList._pprint_tree¡   s´   € à˜%‘ˆÜ# D§K¡KÓ0ò 		<‰JˆC�Ø×&Ñ&Ó(ˆCØ×)Ñ)Ó+ˆEà×(Ñ(¨Ô-°%·.±.ÀÔ2E‘È4ˆAÜð Ð9ß‘6ñ&Ü"›Hñ&Ø,-õ/ð �~‹~ 9Ð#4¸À	Ó8IØ×"Ñ" 9¨e°a©i¸Õ;ñ		<r   c                 ó†   — d}| j                  «       D ],  }|t        |j                  «      z   }||cxk  r|k  r|c S  |}Œ. y)z-Returns the token that is on position offset.r   N)r>   r9   r   )r   Úoffsetr{   rc   Úends        r   Úget_token_at_offsetzTokenList.get_token_at_offset¯   sK   € àˆØ—\‘\“^ò 	ˆEØœ˜EŸK™KÓ(Ñ(ˆCØ�fÔ"˜sÒ"Ø’ð #à‰Cñ		r   c              #   ó‚   K  — | j                   D ],  }|j                  r|j                  «       D ]  }|–— Œ Œ)|–— Œ. y­w)znGenerator yielding ungrouped tokens.

        This method is recursively called for all child tokens.
        N)r   r   r>   )r   rc   rm   s      r   r>   zTokenList.flatten¸   sC   è ø€ ð
 —[‘[ò 	ˆEØ�~Š~Ø!ŸM™M›Oò �DØ“Jñð “ñ	ùs   ‚=?c              #   óP   K  — | j                   D ]  }|j                  sŒ|–— Œ y ­wr   )r   r   ©r   rc   s     r   Úget_sublistszTokenList.get_sublistsÄ   s%   è ø€ Ø—[‘[ò 	ˆEØ�~‹~Ø“ñ	ùs   ‚&Ÿ&c                 ó   — | j                   S r   r   r    s    r   Ú_groupable_tokenszTokenList._groupable_tokensÉ   s   € à�{‰{Ðr   c                 ó2  — |€yt        |t        t        f«      s|f}|r@|�J ‚t        |dz
  dd«      D ](  }| j                  |   }|D ]  } ||«      sŒ||fc c S  Œ* yt        | j                  || |¬«      D ]  \  }}|D ]  } ||«      sŒ||fc c S  Œ y)znext token that match functionsNé   r2   )Ústart©NN)rG   ÚlistÚtupleÚranger   rt   )r   Úfuncsrˆ   r~   Úreverser{   rc   Úfuncs           r   Ú_token_matchingzTokenList._token_matchingÍ   sÇ   € àˆ=Øä˜%¤$¬ Ô/Ø�HˆEáØ�;Ð�;Ü˜U Q™Y¨¨BÓ/ò *�ØŸ™ CÑ(�Ø!ò *�DÙ˜E•{Ø" E˜zÔ)ñ*ð*ð ô	 (¨¯©°E¸#Ð(>ÀeÔLò *‘
��UØ!ò *�DÙ˜E•{Ø" E˜zÔ)ñ*ð*ð r   c                 ó:   ‡‡— ˆˆfd„}| j                  |«      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   •— ‰xr | j                   xs$ ‰xr  t        | t        j                  t        ¬«       S ©N)ÚtÚi©r   r	   r   ÚComment©ÚtkÚskip_cmÚskip_wss    €€r   ú<lambda>z'TokenList.token_first.<locals>.<lambda>í   ó3   ø€  Ò!=¨R×-=Ñ-=ò !NØ!(Ò!L¬S°´q·y±yÄGÔ-LðO€ r   rs   ©r�   )r   r›   rš   r�   s    `` r   Útoken_firstzTokenList.token_firstã   s!   ù€ ôOˆà×#Ñ# EÓ*¨1Ñ-Ð-r   c                 óF   ‡‡‡— ˆˆˆfd„}|dz  }| j                  |||«      S )Nc                 ó    •— t        | ‰‰‰«      S r   )r	   )r™   r•   Úmr”   s    €€€r   rœ   z)TokenList.token_next_by.<locals>.<lambda>ò   s   ø€ œ3˜r 1 a¨Ó+€ r   rs   rž   )r   r•   r¢   r”   r{   r~   r�   s    ```   r   Útoken_next_byzTokenList.token_next_byñ   s&   ú€ Ý+ˆØˆq‰ˆØ×#Ñ# E¨3°Ó4Ð4r   c                 óŽ   ‡— t        |t        t        f«      s|fn|}|D �‡cg c]  Šˆfd„‘Œ	 }}| j                  ||«      S c c}w )Nc                 ó   •—  ‰| «       S r   r&   )r™   r�   s    €r   rœ   z.TokenList.token_not_matching.<locals>.<lambda>ø   s   ø€ ¡ R£˜L€ r   )rG   rŠ   r‹   r�   )r   r�   r{   r�   s      `r   Útoken_not_matchingzTokenList.token_not_matchingö   sE   ø€ Ü *¨5´4¼°-Ô @�‘ÀeˆØ5:×;¨TÕ(Ð;ˆÐ;Ø×#Ñ# E¨3Ó/Ð/ùò <s   ¢Ac                 ó,   — | j                  ||«      d   S )Nrs   rž   )r   r�   r{   s      r   Útoken_matchingzTokenList.token_matchingû   s   € Ø×#Ñ# E¨3Ó/°Ñ2Ð2r   c                 ó,   — | j                  |||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ÐDr   c                 óJ   ‡‡— |€y|dz  }ˆˆfd„}| j                  |||¬«      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.
        r‰   rs   c                 ór   •— ‰xr | j                   xs$ ‰xr  t        | t        j                  t        ¬«       S r“   r–   r˜   s    €€r   rœ   z&TokenList.token_next.<locals>.<lambda>  r�   r   ©rŽ   rž   )r   r{   r›   rš   rª   r�   s     ``  r   r«   zTokenList.token_next  s6   ù€ ð ˆ;ØØˆq‰ˆôOˆà×#Ñ# E¨3¸Ð#ÓAÐAr   c                 óŠ   — t        |t        «      r|n| j                  |«      }|| j                  |d j	                  |«      z   S )zReturn list index of token.N)rG   ÚintÚtoken_indexr   Úindex)r   rc   rˆ   s      r   r²   zTokenList.token_index  s>   € ä# E¬3Ô/‘°T×5EÑ5EÀeÓ5LˆØ�t—{‘{ 5 6Ð*×0Ñ0°Ó7Ñ7Ð7r   c                 ój  — |}| j                   |   }||z   }|r^t        ||«      rR| j                   |dz   | }|}	|	j                   j                  |«       | j                   |dz   |…= t        |«      |	_        n.| j                   || } ||«      }	|	g| j                   || | |	_        |D ]	  }
|	|
_        Œ |	S )z+Replace tokens by an instance of *grp_cls*.rs   )r   rG   Úextendr   r   r   )r   Úgrp_clsrˆ   r~   Úinclude_endrµ   Ú	start_idxÚend_idxÚ	subtokensÚgrprc   s              r   Úgroup_tokenszTokenList.group_tokens  sË   € ð ˆ	Ø—‘˜IÑ&ˆà˜Ñ#ˆñ ”j ¨Ô0ØŸ™ I°¡M°'Ð:ˆIàˆCØ�J‰J×Ñ˜iÔ(Ø—‘˜I¨™M¨'Ð1Ð2Ü! %Ó(ˆC�IàŸ™ I¨gÐ6ˆIÙ˜)Ó$ˆCØ.1¨UˆD�K‰K˜	 'Ð*ØˆCŒJàò 	ˆEØˆE�Lð	ð ˆ
r   c                 óŒ   — t        |t        «      s| j                  |«      }| |_        | j                  j                  ||«       y)zInserts *token* before *where*.N)rG   r±   r²   r   r   Úinsert)r   Úwhererc   s      r   Úinsert_beforezTokenList.insert_before9  s7   € ä˜%¤Ô%Ø×$Ñ$ UÓ+ˆEØˆŒØ�‰×Ñ˜5 %Õ(r   c                 óô   — t        |t        «      s| j                  |«      }| j                  ||¬«      \  }}| |_        |€| j
                  j                  |«       y| j
                  j                  ||«       y)zInserts *token* after *where*.©r›   N)rG   r±   r²   r«   r   r   Úappendr¾   )r   r¿   rc   r›   ÚnidxÚnext_s         r   Úinsert_afterzTokenList.insert_after@  sd   € ä˜%¤Ô%Ø×$Ñ$ UÓ+ˆEØ—o‘o e°W�oÓ=‰ˆˆeØˆŒØˆ=Ø�K‰K×Ñ˜uÕ%à�K‰K×Ñ˜t UÕ+r   c                 ó&   — | j                  «       duS )z(Returns ``True`` if an alias is present.N)Ú	get_aliasr    s    r   Ú	has_aliaszTokenList.has_aliasK  s   € à�~‰~Ó tÐ+Ð+r   c                 ó  — | j                  t        j                  df¬«      \  }}|�| j                  |dz   d¬«      S | j                  t        j                  ¬«      \  }}t        | j                  «      dkD  r|�| j                  d¬	«      S yy)
z2Returns the alias for this identifier or ``None``.ÚAS©r¢   Nrs   T)Úkeywords©r”   r‡   r¯   )r£   r   r   Ú_get_first_namer   r9   r   )r   Úkw_idxÚkwÚ_Úwss        r   rÈ   zTokenList.get_aliasO  s‘   € ð ×'Ñ'¬1¯9©9°dÐ*;Ð'Ó<‰
ˆ�Øˆ>Ø×'Ñ'¨°©
¸TÐ'ÓBÐBð ×"Ñ"¤Q§\¡\Ð"Ó2‰ˆˆ2Üˆt�{‰{Ó˜aÒ B NØ×'Ñ'°Ð'Ó5Ð5ð %3Ðr   c                 óF   — | j                  «       xs | j                  «       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È   Úget_real_namer    s    r   Úget_namezTokenList.get_name\  s   € ð �~‰~ÓÒ7 4×#5Ñ#5Ó#7Ð7r   c                 ón   — | j                  t        j                  df¬«      \  }}| j                  |«      S )z7Returns the real name (object name) of this identifier.r1   rÌ   )r£   r   ÚPunctuationrÏ   )r   Údot_idxrÒ   s      r   rÕ   zTokenList.get_real_namee  s5   € ð ×'Ñ'¬1¯=©=¸#Ð*>Ð'Ó?‰
ˆ�Ø×#Ñ# GÓ,Ð,r   c                 ó¦   — | j                  t        j                  df¬«      \  }}| j                  |«      \  }}|�t	        |j
                  «      S dS )zsReturn name of the parent object if any.

        A parent object is identified by the first occuring dot.
        r1   rÌ   N)r£   r   rØ   r¬   r
   r   )r   rÙ   rÒ   Úprev_s       r   Úget_parent_namezTokenList.get_parent_namek  sO   € ð
 ×'Ñ'¬1¯=©=¸#Ð*>Ð'Ó?‰
ˆ�Ø—?‘? 7Ó+‰ˆˆ5Ø-2Ð->Œ}˜UŸ[™[Ó)ÐHÀDÐHr   c                 ó¸  — |r| j                   |d n| j                   }|rt        |«      n|}t        j                  t        j                  t        j
                  j                  g}|r|j                  t        j                  «       |D ]O  }|j                  |v rt        |j                  «      c S t        |t        t        f«      sŒ?|j                  «       c S  y)z/Returns the name of the first token with a nameN)r   Úreversedr   ÚNameÚWildcardÚStringÚSymbolrÃ   r   r   r
   r   rG   Ú
IdentifierÚFunctionrÖ   )r   r{   rŽ   rÍ   r   Útypesrc   s          r   rÏ   zTokenList._get_first_namet  sŸ   € ñ '*�—‘˜S˜TÑ"¨t¯{©{ˆÙ%,”˜&Ô!°&ˆÜ—‘œŸ™¤Q§X¡X§_¡_Ð5ˆáØ�L‰LœŸ™Ô#àò 	(ˆEØ�{‰{˜eÑ#Ü$ U§[¡[Ó1Ò1Ü˜E¤J´Ð#9Õ:Ø—~‘~Ó'Ò'ñ		(r   r   )Nr   N)r   NF)TF)NNNr2   N)TFF)r   )T)NFF)"rY   rZ   r[   r\   r]   r   r!   rk   rn   r'   rv   r   r>   rƒ   Úpropertyr…   r�   rŸ   r£   r¦   r¨   r¬   r«   r²   r¼   rÀ   rÆ   rÉ   rÈ   rÖ   rÕ   rÜ   rÏ   Ú__classcell__)rd   s   @r   r_   r_   �   s²   ø„ ñð €IõòAò!ò!ò#ó<òò
òð
 ñó ðóó,.ó5ò
0ò
3óEóBó8ð
 =AØ!óò<)ó	,ò,ò6ò8ò-òI÷(r   r_   c                   ó   — e Zd ZdZd„ Zy)Ú	StatementzRepresents a SQL statement.c                 ó   — | j                  d¬«      }|€y|j                  t        j                  j                  t        j                  j
                  fv r|j                  S |j                  t        j                  j                  k(  r†| j                  |«      }| j                  |d¬«      \  }}t        |t        t        f«      rI| j                  |d¬«      \  }}|j                  t        j                  j                  k(  r|j                  S y)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š   ÚUNKNOWNrÂ   )rŸ   r   r   r   ÚDMLÚDDLr   ÚCTEr²   r«   rG   rã   ÚIdentifierList)r   Úfirst_tokenÚfidxÚtidxrc   rÒ   Údml_keywords          r   Úget_typezStatement.get_typeˆ  sÛ   € ð ×&Ñ&¨tÐ&Ó4ˆØÐð à×Ñ¤1§9¡9§=¡=´!·)±)·-±-Ð"@Ñ@Ø×)Ñ)Ð)à×Ñ¤!§)¡)§-¡-Ò/ð ×#Ñ# KÓ0ˆDØŸ/™/¨$¸˜/Ó=‰KˆD�%Ü˜%¤*¬nÐ!=Ô>Ø!%§¡°¸t Ó!D‘��;à×$Ñ$¬¯	©	¯©Ò5Ø&×1Ñ1Ð1ð r   N)rY   rZ   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y)rã   zNRepresents an identifier.

    Identifiers may have aliases or typecasts.
    c                 óP   — | j                  t        j                  ¬«      \  }}|duS )z7Return ``True`` if this identifier contains a wildcard.rÎ   N)r£   r   rà   )r   rÒ   rc   s      r   Úis_wildcardzIdentifier.is_wildcard±  s(   € à×%Ñ%¬¯
©
Ð%Ó3‰ˆˆ5Ø˜DÐ Ð r   c                 ó˜   — | j                  t        j                  df¬«      \  }}| j                  |d¬«      \  }}|r|j                  S dS )z<Returns the typecast or ``None`` of this object as a string.z::rÌ   FrÂ   N)r£   r   rØ   r«   r   )r   ÚmidxÚmarkerrÄ   rÅ   s        r   Úget_typecastzIdentifier.get_typecast¶  sI   € à×)Ñ)¬Q¯]©]¸DÐ,AÐ)ÓB‰ˆˆfØ—o‘o d°E�oÓ:‰ˆˆeÙ#ˆu�{‰{Ð-¨Ð-r   c                 ó|   — | j                  t        j                  j                  ¬«      \  }}|r|j                  S dS )z5Returns the ordering or ``None`` as uppercase string.rÎ   N)r£   r   r   ÚOrderr   )r   rÒ   Úorderings      r   Úget_orderingzIdentifier.get_ordering¼  s4   € à×(Ñ(¬1¯9©9¯?©?Ð(Ó;‰ˆˆ8Ù&.ˆx×"Ñ"Ð8°DÐ8r   c              #   ór   K  — | j                   D ]$  }t        |t        «      sŒ|j                   dd –— Œ& y­w)z(Returns an iterator of index token listsrs   r2   N)r   rG   ÚSquareBracketsr‚   s     r   Úget_array_indiceszIdentifier.get_array_indicesÁ  s6   è ø€ ð —[‘[ò 	)ˆEÜ˜%¤Õ0à—l‘l 1 RÐ(Ó(ñ	)ùs   ‚ 7£7N)rY   rZ   r[   r\   r÷   rû   rÿ   r  r&   r   r   rã   rã   «  s   „ ñò
!ò
.ò9ó
)r   rã   c                   ó   — e Zd ZdZd„ Zy)rï   z.A list of :class:`~sqlparse.sql.Identifier`'s.c              #   ó’   K  — | j                   D ]4  }|j                  rŒ|j                  t        j                  d«      rŒ1|–— Œ6 y­w)zkReturns the identifiers.

        Whitespaces and punctuations are not included in this generator.
        ú,N)r   r   rN   r   rØ   r‚   s     r   Úget_identifierszIdentifierList.get_identifiersÍ  s:   è ø€ ð
 —[‘[ò 	ˆEØ×'Ó'¨5¯;©;´q·}±}ÀcÕ+JØ“ñ	ùs   ‚AŸ AÁ AN)rY   rZ   r[   r\   r  r&   r   r   rï   rï   Ê  s
   „ Ù9ór   rï   c                   óX   — e Zd ZdZej
                  dfZej
                  dfZed„ «       Z	y)ÚParenthesiszTokens between parenthesis.ú(ú)c                 ó    — | j                   dd S ©Nrs   r2   r   r    s    r   r…   zParenthesis._groupable_tokensÜ  ó   € à�{‰{˜1˜RÐ Ð r   N©
rY   rZ   r[   r\   r   rØ   ÚM_OPENÚM_CLOSEræ   r…   r&   r   r   r  r  ×  s3   „ Ù%Ø�]‰]˜CÐ€FØ�m‰m˜SÐ €Gàñ!ó ñ!r   r  c                   óX   — e Zd ZdZej
                  dfZej
                  dfZed„ «       Z	y)r  zTokens between square bracketsú[ú]c                 ó    — | j                   dd S r  r   r    s    r   r…   z SquareBrackets._groupable_tokensæ  r  r   Nr  r&   r   r   r  r  á  s3   „ Ù(Ø�]‰]˜CÐ€FØ�m‰m˜SÐ €Gàñ!ó ñ!r   r  c                   ó   — e Zd ZdZy)Ú
Assignmentz An assignment like 'var := val;'N©rY   rZ   r[   r\   r&   r   r   r  r  ë  s   „ Ú*r   r  c                   óH   — e Zd ZdZej
                  dfZej
                  dfZy)ÚIfz7An 'if' clause with possible 'else if' or 'else' parts.ÚIFzEND IFN©rY   rZ   r[   r\   r   r   r  r  r&   r   r   r  r  ï  s    „ ÙAØ�Y‰Y˜ˆ_€FØ�i‰i˜Ð!�Gr   r  c                   óH   — e Zd ZdZej
                  dfZej
                  dfZy)ÚForzA 'FOR' loop.)ÚFORÚFOREACHzEND LOOPNr  r&   r   r   r  r  õ  s"   „ ÙØ�Y‰YÐ*Ð*€FØ�i‰i˜Ð#�Gr   r  c                   ó0   — e Zd ZdZed„ «       Zed„ «       Zy)Ú
Comparisonz/A comparison used for example in WHERE clauses.c                 ó    — | j                   d   S ©Nr   r   r    s    r   ÚleftzComparison.leftþ  s   € à�{‰{˜1‰~Ðr   c                 ó    — | j                   d   S )Nr2   r   r    s    r   ÚrightzComparison.right  s   € à�{‰{˜2‰Ðr   N)rY   rZ   r[   r\   ræ   r$  r&  r&   r   r   r!  r!  û  s+   „ Ù9àñó ðð ñó ñr   r!  c                   ó   — e Zd ZdZd„ Zy)r—   z
A comment.c                 ó†   — | j                   xr4 | j                   d   j                  t        j                  j                  k(  S r#  )r   r   r   r—   Ú	Multiliner    s    r   Úis_multilinezComment.is_multiline
  s.   € Ø�{‰{ÒJ˜tŸ{™{¨1™~×3Ñ3´q·y±y×7JÑ7JÑJÐJr   N)rY   rZ   r[   r\   r*  r&   r   r   r—   r—     s   „ ÙóKr   r—   c                   óH   — e Zd ZdZej
                  dfZej
                  dfZy)ÚWherezA WHERE clause.ÚWHERE)	ÚORDERÚGROUPÚLIMITÚUNIONz	UNION ALLÚEXCEPTÚHAVINGÚ	RETURNINGÚINTONr  r&   r   r   r,  r,    s&   „ ÙØ�Y‰Y˜Ð€FØ�i‰ið 'ð '�Gr   r,  c                   óP   — e Zd ZdZej
                  dfZej
                  dfZdd„Zy)ÚCasezAA CASE statement with one or more WHEN and possibly an ELSE part.ÚCASEÚENDc                 óÄ  — d}d}g }|}| j                   D �]G  }|j                  t        j                  d«      rŒ%|r|j                  t        j
                  v rŒD|j                  t        j                  d«      r|j                  g g f«       |}n{|j                  t        j                  d«      r|}nX|j                  t        j                  d«      r|j                  dg f«       |}n"|j                  t        j                  d«      rd}|r|s|j                  g g f«       ||k(  r|d	   d
   j                  |«       �Œ*||k(  s�Œ1|d	   d   j                  |«       �ŒJ |S )zeReturns a list of 2-tuples (condition, value).

        If an ELSE exists condition is None.
        rs   r‡   r8  ÚWHENÚTHENÚELSENr9  r2   r   )r   rN   r   r   r   r   rÃ   )r   r›   Ú	CONDITIONÚVALUEÚretÚmoderc   s          r   Ú	get_caseszCase.get_cases  s-  € ð
 ˆ	ØˆàˆØˆà—[‘[ó 	)ˆEà�{‰{œ1Ÿ9™9 fÔ-Øá˜UŸ[™[¬A¯L©LÑ8Øà—‘œQŸY™Y¨Ô/Ø—
‘
˜B ˜8Ô$Ø ‘à—‘œQŸY™Y¨Ô/Ø‘à—‘œQŸY™Y¨Ô/Ø—
‘
˜D "˜:Ô&Ø‘à—‘œQŸY™Y¨Ô.Ø�ñ ™CØ—
‘
˜B ˜8Ô$ð �yÒ Ø�B‘˜‘
×!Ñ! %Ö(à˜”Ø�B‘˜‘
×!Ñ! %Ö(ð?	)ðD ˆ
r   NrX   )	rY   rZ   r[   r\   r   r   r  r  rB  r&   r   r   r7  r7    s&   „ ÙKØ�Y‰Y˜Ð€FØ�i‰i˜Ð€Gô-r   r7  c                   ó   — e Zd ZdZd„ Zy)rä   zA function or procedure call.c                 óà   — | j                   d   }|j                   D ]O  }t        |t        «      r|j                  «       c S t	        |t
        t        ft        j                  ¬«      sŒL|gc S  g S )zReturn a list of parameters.r2   )r•   r”   )	r   rG   rï   r  r	   rä   rã   r   ÚLiteral)r   Úparenthesisrc   s      r   Úget_parameterszFunction.get_parametersN  sa   € à—k‘k "‘oˆØ ×'Ñ'ò 	!ˆEÜ˜%¤Ô0Ø×,Ñ,Ó.Ò.Ü�Uœx¬Ð4¼¿	¹	ÖBØ�yÒ ð		!ð
 ˆ	r   N)rY   rZ   r[   r\   rG  r&   r   r   rä   rä   K  s
   „ Ù'ór   rä   c                   óH   — e Zd ZdZej
                  dfZej
                  dfZy)ÚBeginzA BEGIN/END block.ÚBEGINr9  Nr  r&   r   r   rI  rI  Y  s!   „ ÙØ�Y‰Y˜Ð€FØ�i‰i˜Ð�Gr   rI  c                   ó   — e Zd ZdZy)Ú	OperationzGrouping of operationsNr  r&   r   r   rL  rL  _  s   „ Ú r   rL  ) r\   Ú
__future__r   r:   Úsqlparser   r   Úsqlparse.compatr   r   r   Úsqlparse.utilsr	   r
   Úobjectr   r_   ré   rã   rï   r  r  r  r  r  r!  r—   r,  r7  rä   rI  rL  r&   r   r   ú<module>rR     s  ðñ MÝ %ã 	å  ß GÑ Gß -ð ôkˆFó kó ðkð\ ô@(�ó @(ó ð@(ôF#�	ô #ôL)�ô )ô>
�Yô 
ô!�)ô !ô!�Yô !ô+�ô +ô"ˆô "ô$ˆ)ô $ô	�ô 	ôKˆiô Kô'ˆIô 'ô2ˆ9ô 2ôjˆyô ôˆIô ô!�	õ !r   