o
    ŠågÍž  ã                   @  sü  d dl mZ d dlmZ d dlZd dlZd dlZd dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddl&m'Z' ej�rTdd lm(Z( dd!lm)Z) dd"lm*Z* dd#lm+Z+ dd$lm,Z, dd%lm-Z- dd&lm.Z. dd'lm/Z/ dd(lm0Z0 dd)l1m2Z2 dd*l(m3Z3 dd+l(m4Z4 dd,l(m5Z5 dd-l(m6Z6 dd.l(m7Z7 dd/l(m8Z8 dd0l(m9Z9 dd1l*m:Z: dd2l+m;Z; dd3l+m<Z< dd4l+m=Z= dd5l+m>Z> dd6l+m?Z? dd7l+m@Z@ dd8lmAZA ed9ejBd:�ZCed;e	d<ef d:�ZDed=ejEd:�ZFed>ed:�ZGd?d@„ ZHdAdB„ ZI�ddIdJ„ZJ�ddPdQ„ZKe�ddWdX„ƒZLed<dYœ�dd]dX„ƒZLe�dd`dX„ƒZLe�ddcdX„ƒZLe�ddedX„ƒZLe�ddhdX„ƒZLe�d	dldX„ƒZLe�d
dodX„ƒZLe�ddrdX„ƒZLe�ddvdX„ƒZLe�ddydX„ƒZLe�dd|dX„ƒZLe�dd€dX„ƒZLed<d�œ�dd„dX„ƒZLe�ddˆdX„ƒZLe�dd‹dX„ƒZLe�dd�dX„ƒZLdddŽdŽd�œ�dd—dX„ZL�dd˜d™„ZM�dd�dž„ZNG dŸd „ d ƒZOG d¡d¢„ d¢ƒZPG d£d¤„ d¤ƒZQG d¥d¦„ d¦eOƒZRG d§d¨„ d¨eOƒZSde#jTddf�dd¯d°„ZUG d±d²„ d²eOƒZVG d³d´„ d´eOƒZWG dµd¶„ d¶eOƒZXG d·d¸„ d¸eOƒZYG d¹dº„ dºeOƒZZG d»d¼„ d¼eOƒZ[G d½d¾„ d¾eSeOƒZ\G d¿dÀ„ dÀe\eOƒZ]G dÁdÂ„ dÂeOƒZ^G dÃdÄ„ dÄeSeOƒZ_G dÅdÆ„ dÆeWeSeOƒZ`G dÇdÈ„ dÈeWeOƒZaG dÉdÊ„ dÊeVeOƒZbG dËdÌ„ dÌeReOƒZcG dÍdÎ„ dÎeWeOƒZdG dÏdÐ„ dÐeWeSeOejeƒZfG dÑdÒ„ dÒefeOƒZgG dÓdÔ„ dÔefeOƒZhG dÕdÖ„ dÖeReOƒZiG d×dØ„ dØeOƒZjG dÙdÚ„ dÚeQeOƒZkG dÛdÜ„ dÜePeWeOƒZlG dÝdÞ„ dÞePeReOƒZmG dßdà„ dàemƒZnG dádâ„ dâeOƒZoG dãdä„ däe\ƒZpG dådæ„ dæeYeWeOƒZqG dçdè„ dèeOƒZrG dédê„ dêeWeOƒZsG dëdì„ dìeVeOƒZtG dídî„ dîerƒZuG dïdð„ dðeOƒZvG dñdò„ dòeOƒZwG dódô„ dôeYeVeOƒZxG dõdö„ döexƒZyG d÷dø„ døeyƒZzG dùdú„ dúeYeVeOƒZ{G dûdü„ düeVeOƒZ|G dýdþ„ dþeVeOƒZ}i Z~eeƒD ]&Z€e�ee€ƒZ‚e€ ƒdÿ¡�rße€ „dÿ�d ¡Z€e€e…ƒ v �rße…ƒ e€ e‚ƒZ†e†e~e‚< �qºe�súe~ej‡ Zˆe‰eŠe‹eŒfD ]Z�eˆe~ej‡e� < �qïdS dS (  é    )ÚannotationsN)ÚAny)ÚCallable)Úcast)ÚDict)ÚIterable)ÚIterator)ÚList)ÚNoReturn)ÚOptional)Úoverload)ÚSequence)ÚTuple)ÚType)ÚTYPE_CHECKING)ÚTypeVar)ÚUnioné   )Úroles)Úvisitors)Úis_from_clause)ÚExecutableOption)ÚOptions)ÚHasCacheKey)Ú	Visitableé   )Úexc)Ú
inspection)Úutil)ÚLiteral)Úelements)Úlambdas)Úschema)Ú
selectable)Ú_ColumnExpressionArgument)Ú_ColumnsClauseArgument)Ú_DDLColumnArgument)Ú_DMLTableArgument)Ú_FromClauseArgument)Ú_DMLTableElement)ÚBindParameter)ÚClauseElement)ÚColumnClause)ÚColumnElement)ÚNamedColumn)ÚSQLCoreOperations)Ú
TextClause)ÚColumn)Ú_ColumnsClauseElement)Ú_JoinTargetProtocol)Ú
FromClause)ÚHasCTE)Ú
SelectBase)ÚSubquery)Ú_TraverseCallableTypeÚ_SR)ÚboundÚ_F.Ú_StringOnlyRÚ_Tc                 C  s   t | ttjfƒ ot| dƒ S )zhReturn whether or not the element is a "literal" in the context
    of a SQL expression construct.

    Ú__clause_element__)Ú
isinstancer   r"   ÚSchemaEventTargetÚhasattr)Úelement© rC   úT/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/sql/coercions.pyÚ_is_literalN   s   þ
ýrE   c                 C  sr   t | tjƒrt | tƒs| D ]	}t|ƒs dS qdS t | ttjtt	t
jjfƒ o8t| dƒ o8t | tƒ p8t| tƒ S )a  Return whether or not the element is a "literal" in the context
    of a SQL expression construct.

    does a deeper more esoteric check than _is_literal.   is used
    for lambda elements that have to distinguish values that would
    be bound vs. not without any context.

    FTr>   )r?   Úcollections_abcr   ÚstrÚ_deep_is_literalr   r"   r@   r   r   r   ÚlanghelpersÚsymbolrA   ÚtypeÚ
issubclass)rB   ÚelemrC   rC   rD   rH   Z   s,   
ÿÿûþ

ö
òrH   Ú	paramnamerG   Úmeth_rstÚ	param_rstÚreturnúCallable[[_F], _F]c                 C  s   t  | d||f ¡S )NzÆ.. warning:: The %s argument to %s can be passed as a Python string argument, which will be treated as **trusted SQL text** and rendered as given.  **DO NOT PASS UNTRUSTED INPUT TO THIS PARAMETER**.)r   Úadd_parameter_text)rN   rO   rP   rC   rC   rD   Ú_document_text_coercion€   s   ùþrT   ÚattrnameÚfnnameÚargsú+Union[Sequence[_T], Sequence[Sequence[_T]]]úSequence[_T]c                 C  sb   |r,t |d tttfƒr,t|ƒdkr,t |d tƒr%t d| › d|› d�¡‚td|d ƒS td|ƒS )Nr   r   zThe "z" argument to zt(), when referring to a sequence of items, is now passed as a series of positional elements, rather than as a list. rY   )r?   ÚlistÚsetÚdictÚlenr   ÚArgumentErrorr   )rU   rV   rW   rC   rC   rD   Ú!_expression_collection_was_a_list�   s   $ÿ
r_   ÚroleúType[roles.TruncatedLabelRole]rB   r   Úkwc                 K  ó   d S ©NrC   ©r`   rB   rb   rC   rC   rD   Úexpect¢   ó   rf   ©Úas_keyúType[roles.DMLColumnRole]ri   úLiteral[True]c                K  rc   rd   rC   )r`   rB   ri   rb   rC   rC   rD   rf   ª   ó   úType[roles.LiteralValueRole]úBindParameter[Any]c                 K  rc   rd   rC   re   rC   rC   rD   rf   ´   rg   ú!Type[roles.DDLReferredColumnRole]úUnion[Column[Any], str]c                 K  rc   rd   rC   re   rC   rC   rD   rf   ¼   rg   ú#Type[roles.DDLConstraintColumnRole]c                 K  rc   rd   rC   re   rC   rC   rD   rf   Ä   rg   úType[roles.StatementOptionRole]ú%Union[ColumnElement[Any], TextClause]c                 K  rc   rd   rC   re   rC   rC   rD   rf   Ì   rg   ú&Type[roles.LabeledColumnExprRole[Any]]ú_ColumnExpressionArgument[_T]úNamedColumn[_T]c                 K  rc   rd   rC   re   rC   rC   rD   rf   Ô   rg   úgUnion[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole]]úColumnElement[_T]c                 K  rc   rd   rC   re   rC   rC   rD   rf   Ü   s   	ú¡Union[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole], Type[roles.OnClauseRole], Type[roles.ColumnArgumentRole]]úColumnElement[Any]c                 K  rc   rd   rC   re   rC   rC   rD   rf   è   s   úType[roles.DMLTableRole]r'   r)   c                 K  rc   rd   rC   re   rC   rC   rD   rf   ö   rg   úType[roles.HasCTERole]r5   c                 K  rc   rd   rC   re   rC   rC   rD   rf   þ   rg   úType[roles.SelectStatementRole]r6   c                 K  rc   rd   rC   re   rC   rC   rD   rf     rg   úType[roles.FromClauseRole]r(   r4   c                 K  rc   rd   rC   re   rC   rC   rD   rf     rg   )Úexplicit_subqueryr   r7   c                K  rc   rd   rC   )r`   rB   r   rb   rC   rC   rD   rf     rl   úType[roles.ColumnsClauseRole]ú_ColumnsClauseArgument[Any]r2   c                 K  rc   rd   rC   re   rC   rC   rD   rf      rg   úType[roles.JoinTargetRole]r3   c                 K  rc   rd   rC   re   rC   rC   rD   rf   (  rg   ú	Type[_SR]c                 K  rc   rd   rC   re   rC   rC   rD   rf   1  rg   F)Úapply_propagate_attrsÚargnameÚpost_inspectÚdisable_inspectionr„   úOptional[ClauseElement]r…   úOptional[str]r†   Úboolr‡   c                K  sö  | j rt|ƒrt|dƒrtj|| tjdi |¤Ž|d�S t|  }|}t|tj	t
jt
jtjfƒs©d }	|jr=|j|fi |¤Ž}	n}|}d}
|jrQt|| ƒrQt|dƒrQd}
nt|dƒrid}
t|ddƒsc| ¡ }nnt|dƒsV|
s¦|jr–|s–tj|dd�}|d ur–|r€|j z| ¡ }	W n ty•   | ||¡ Y nw |	d u r¥|j|fd|i|¤Ž}	n|}	nt|tjƒr¸|jdi |¤Ž}	n|}	|d ur×tjrÊt|	ttfƒsÊJ ‚|js×t|	d	d ƒr×|	j|_|j|	j j!v rï|j"rí|j"|	f||d
œ|¤Ž}	|	S |j#||	fd|i|¤ŽS )NÚ__code__)r„   Fr>   TÚis_clause_element)Úraiseerrr…   Ú_propagate_attrs)r…   Úoriginal_elementrC   )$Úallows_lambdaÚcallablerA   r!   ÚLambdaElementÚLambdaOptionsÚ_impl_lookupr?   r    ÚCompilerElementr"   Ú
SchemaItemÚFetchedValueÚ	PyWrapperÚ_resolve_literal_onlyÚ_literal_coercionÚ$_skip_clauseelement_for_target_matchÚgetattrr>   Ú_use_inspectionr   ÚinspectÚ_post_inspectÚAttributeErrorÚ_raise_for_expectedÚ_sa__py_wrapper_literalÚtypingr   r/   r+   rŽ   Ú_role_classÚ	__class__Ú__mro__Ú_post_coercionÚ_implicit_coercions)r`   rB   r„   r…   r†   r‡   rb   Úimplr�   ÚresolvedrŒ   ÚinsprC   rC   rD   rf   9  s²   ÿúù	ü	üþ	ÿþý


ú
ÿÿÿÿ€ÿÿýüÿÿÿc                 K  s"   |  dd ¡ t| |fddi|¤ŽS )Nri   T)Úpoprf   re   rC   rC   rD   Úexpect_as_key­  s   r­   ÚexpressionsúIterable[_DDLColumnArgument]úwIterator[Tuple[Union[str, Column[Any]], Optional[ColumnClause[Any]], Optional[str], Optional[Union[Column[Any], str]]]]c           	      c  sŠ   � |D ]?}d }d }t | |ƒ}t|tƒrt|tƒsJ ‚| }}ng }|j}t |i d|i¡ |r3|d }|d ur9|n|}||||fV  qd S )NÚcolumnr   )rf   r?   rG   Úappendr   Útraverse)	r`   r®   ÚexprÚstrnamer±   rª   ÚcolsÚ
col_appendÚadd_elementrC   rC   rD   Ú expect_col_expression_collection´  s    €


ðr¹   c                   @  s^   e Zd ZU dZdd„ ZdZded< dZdZdd	„ Z		dddd„Z
		dddddœddd„ZdS )ÚRoleImpl)r¤   Únamer�   c                 K  s   t ƒ ‚rd   )ÚNotImplementedError©ÚselfrB   rb   rC   rC   rD   rš   Õ  s   zRoleImpl._literal_coercionNr   r§   Fc                 C  s    || _ |j| _t|tjƒ| _d S rd   )r¤   Ú
_role_namer»   rL   r   ÚUsesInspectionr�   )r¾   Ú
role_classrC   rC   rD   Ú__init__Ü  s   zRoleImpl.__init__rB   rª   r…   r‰   rb   rQ   c                 K  s   |   |||¡ d S rd   ©r¡   ©r¾   rB   rª   r…   rb   rC   rC   rD   r¨   á  s   zRoleImpl._implicit_coercions©ÚadviceÚcodeÚerrúOptional[Any]rÆ   rÇ   rÈ   úOptional[Exception]r
   c          
      K  sj   |d ur||urd||f }nt |ƒ}|rd| j||f }	nd| j|f }	|r-|	d| 7 }	tj|	|d�|‚)Nz!%r object resolved from %r objectz$%s expected for argument %r; got %s.z%s expected, got %s.ú )rÇ   )Úreprr»   r   r^   )
r¾   rB   r…   rª   rÆ   rÇ   rÈ   rb   ÚgotÚmsgrC   rC   rD   r¡   ê  s   ýzRoleImpl._raise_for_expectedrd   ©
rB   r   rª   r   r…   r‰   rb   r   rQ   r   ©NN©rB   r   r…   r‰   rª   rÉ   rÆ   r‰   rÇ   r‰   rÈ   rÊ   rb   r   rQ   r
   )Ú__name__Ú
__module__Ú__qualname__Ú	__slots__rš   r§   Ú__annotations__r™   r›   rÂ   r¨   r¡   rC   rC   rC   rD   rº   Ò  s    
 	üüørº   c                   @  ó   e Zd ZdZdd„ ZdS )Ú_DeannotaterC   c                 K  s   ddl m} ||ƒS )Nr   )Ú_deep_deannotate)r   rÙ   )r¾   rª   rb   rÙ   rC   rC   rD   r§     s   z_Deannotate._post_coercionN©rÒ   rÓ   rÔ   rÕ   r§   rC   rC   rC   rD   rØ   	  ó    rØ   c                   @  s   e Zd ZdZdZdS )Ú_StringOnlyrC   TN)rÒ   rÓ   rÔ   rÕ   r™   rC   rC   rC   rD   rÜ     s    rÜ   c                   @  s"   e Zd ZdZddd„Zdd„ ZdS )Ú_ReturnsStringKeyrC   Nc                 K  ó    t |tƒr|S |  |||¡ d S rd   ©r?   rG   r¡   rÄ   rC   rC   rD   r¨     s   
z%_ReturnsStringKey._implicit_coercionsc                 K  ó   |S rd   rC   r½   rC   rC   rD   rš   !  ó   z#_ReturnsStringKey._literal_coercionrd   ©rÒ   rÓ   rÔ   rÕ   r¨   rš   rC   rC   rC   rD   rÝ     s    
rÝ   c                   @  s"   e Zd ZdZdd„ Zddd„ZdS )Ú_ColumnCoercionsrC   c                 C  s   t  d¡ d S )Nz|implicitly coercing SELECT object to scalar subquery; please use the .scalar_subquery() method to produce a scalar subquery.)r   Úwarn)r¾   rC   rC   rD   Ú"_warn_for_scalar_subquery_coercion(  s   ÿz3_ColumnCoercions._warn_for_scalar_subquery_coercionNc                 K  s€   |}t |ddƒs|  |||¡ d S |jr|  ¡  | ¡ S |jr.t|tjƒr.|  ¡  |j	 ¡ S | j
jr7|jr7|S |  |||¡ d S )NrŒ   F)rœ   r¡   Ú_is_select_baserå   Úscalar_subqueryÚ_is_from_clauser?   r#   r7   rB   r¤   r�   Ú_is_lambda_element)r¾   rB   rª   r…   rb   r�   rC   rC   rD   r¨   /  s   ÿ
z$_ColumnCoercions._implicit_coercionsrd   )rÒ   rÓ   rÔ   rÕ   rå   r¨   rC   rC   rC   rD   rã   %  s    rã   Úexc_clsúType[exc.SQLAlchemyError]ÚextrarÈ   rÊ   r
   c                 C  s6   |dt  | ¡|rd|f nd|rd| nddœ ƒ|‚)Nzc%(extra)sTextual SQL expression %(expr)r %(argname)sshould be explicitly declared as text(%(expr)r)úfor argument %sÚ z%s )r´   r…   rì   )r   Úellipses_string)rB   r…   rê   rì   rÈ   rC   rC   rD   Ú_no_text_coercionA  s   ýþÿørð   c                   @  ó   e Zd ZdZddœdd„ZdS )Ú_NoTextCoercionrC   N©r…   c                K  s6   t |tƒrttj| jƒrt||ƒ d S |  ||¡ d S rd   )r?   rG   rL   r    r0   r¤   rð   r¡   ©r¾   rB   r…   rb   rC   rC   rD   rš   V  s
   ÿz!_NoTextCoercion._literal_coercion©rÒ   rÓ   rÔ   rÕ   rš   rC   rC   rC   rD   rò   S  ó    rò   c                   @  s4   e Zd ZdZdZdZdZd	dd„Zddœdd„ZdS )
Ú_CoerceLiteralsrC   FNc                 C  ó
   t ||ƒS rd   ©rð   ©r¾   rB   r…   rC   rC   rD   Ú_text_coercione  ó   
z_CoerceLiterals._text_coercionró   c                K  s¤   t |tƒr| jr|dkrtjddd�S | j||fi |¤ŽS | jr8|d u r(t ¡ S |du r0t ¡ S |du r8t 	¡ S | j
rJt |tjƒrJtjt|ƒdd�S |  ||¡ d S )NÚ*T)Ú
is_literalF)r?   rG   Ú_coerce_starr    r,   rû   Ú_coerce_constsÚNullÚFalse_ÚTrue_Ú_coerce_numericsÚnumbersÚNumberr¡   rô   rC   rC   rD   rš   h  s   
z!_CoerceLiterals._literal_coercionrd   )	rÒ   rÓ   rÔ   rÕ   r   rÿ   r  rû   rš   rC   rC   rC   rD   r÷   _  s    
r÷   c                   @  s,   e Zd ZdZ	d	dddœdd„Zdd„ ZdS )
ÚLiteralValueImplTNF)Útype_Úliteral_executec                K  s4   t |ƒs| j|f||dœ|¤Ž tjd ||d|d�S )N)rª   r…   T)r  Úuniquer	  )rE   r¡   r    r*   )r¾   rB   rª   r…   r  r	  rb   rC   rC   rD   r¨   €  s   
ÿÿÿûz$LiteralValueImpl._implicit_coercionsc                 K  rà   rd   rC   r½   rC   rC   rD   rš   —  rá   z"LiteralValueImpl._literal_coercionrd   )rÒ   rÓ   rÔ   r™   r¨   rš   rC   rC   rC   rD   r  }  s    üùr  c                      s2   e Zd ZdZ		dddddœd‡ fdd„Z‡  ZS )Ú_SelectIsNotFromrC   NrÅ   rB   r   r…   r‰   rª   rÉ   rÆ   rÇ   rÈ   rÊ   rb   rQ   r
   c                  sb   |st |tjƒst |tjƒrd|d ur|jn|f }d}nd }tƒ j|f|||||dœ|¤Ž J ‚)NzETo create a FROM clause from a %s object, use the .subquery() method.Ú89ve)r…   rª   rÆ   rÇ   rÈ   )r?   r   ÚSelectStatementRoler¥   Úsuperr¡   )r¾   rB   r…   rª   rÆ   rÇ   rÈ   rb   ©r¥   rC   rD   r¡   ž  s0   ÿ
þ
ýþÿÿúù
z$_SelectIsNotFrom._raise_for_expectedrÐ   rÑ   ©rÒ   rÓ   rÔ   rÕ   r¡   Ú__classcell__rC   rC   r  rD   r  ›  s    üør  c                   @  ó&   e Zd ZdZ	ddd
d„Zdd„ ZdS )ÚHasCacheKeyImplrC   NrB   r   rª   r…   r‰   rb   rQ   c                 K  rÞ   rd   )r?   r   r¡   rÄ   rC   rC   rD   r¨   Ç  ó   
z#HasCacheKeyImpl._implicit_coercionsc                 K  rà   rd   rC   r½   rC   rC   rD   rš   Ó  rá   z!HasCacheKeyImpl._literal_coercionrd   rÏ   râ   rC   rC   rC   rD   r  Ä  ó
    ür  c                   @  r  )ÚExecutableOptionImplrC   NrB   r   rª   r…   r‰   rb   rQ   c                 K  rÞ   rd   )r?   r   r¡   rÄ   rC   rC   rD   r¨   Ú  r  z(ExecutableOptionImpl._implicit_coercionsc                 K  rà   rd   rC   r½   rC   rC   rD   rš   æ  rá   z&ExecutableOptionImpl._literal_coercionrd   rÏ   râ   rC   rC   rC   rD   r  ×  r  r  c                      s4   e Zd ZdZddddœdd„Zd	‡ fdd„	Z‡  ZS )
ÚExpressionElementImplrC   NF)r»   r  Úis_crudc             
   K  sp   |d u r|s|d u s|j st ¡ S ztj|||d|d�W S  tjy7 } z| j||d� W Y d }~d S d }~ww )NT)r
  Ú_is_crud©rÈ   )Úshould_evaluate_noner    r  r*   r   r^   r¡   )r¾   rB   r»   r  r  rb   rÈ   rC   rC   rD   rš   í  s   ÿ
ÿ€ÿz'ExpressionElementImpl._literal_coercionc                   sD   t |tjƒr	d}nt |tjƒrd}nd }tƒ j|f|||dœ|¤ŽS )NzTTo create a column expression from a VALUES clause, use the .scalar_values() method.z`To create a column expression from a FROM clause row as a whole, use the .table_valued() method.©r…   rª   rÆ   )r?   r#   ÚValuesr   ÚAnonymizedFromClauseRoler  r¡   ©r¾   rB   r…   rª   rb   rÆ   r  rC   rD   r¡     s   ÿÿÿÿÿz)ExpressionElementImpl._raise_for_expectedrÐ   )rÒ   rÓ   rÔ   rÕ   rš   r¡   r  rC   rC   r  rD   r  ê  s
    ÿr  c                   @  s.   e Zd ZdZdddœdd„Zddœdd„ZdS )	ÚBinaryElementImplrC   N)Úbindparam_typer…   c             
   K  sJ   z	|j |||d�W S  tjy$ } z| j||d� W Y d }~d S d }~ww )N)r  r  )Ú_bind_paramr   r^   r¡   )r¾   rB   r´   Úoperatorr!  r…   rb   rÈ   rC   rC   rD   rš     s   
€ÿz#BinaryElementImpl._literal_coercion)r!  c                K  s,   |j jr|j js| |d ur|n|j ¡}|S rd   )rK   Ú_isnullÚ_with_binary_element_type)r¾   rª   r´   r!  rb   rC   rC   rD   r§   '  s
   ÿz BinaryElementImpl._post_coercion)rÒ   rÓ   rÔ   rÕ   rš   r§   rC   rC   rC   rD   r     s    ùr   c                   @  s@   e Zd ZdZ	ddd
d„Zdd„ Ze d¡dd„ ƒZdd„ Z	dS )ÚInElementImplrC   NrB   r   rª   r…   r‰   rb   rQ   c                 K  sj   |j r,t|tjƒr|jjr|  |¡ | j|jfi |¤ŽS |  |¡ | j| ¡ fi |¤ŽS |  	|||¡ d S rd   )
rè   r?   r#   ÚAliasrB   ræ   Ú_warn_for_implicit_coercionr§   Úselectr¡   rÄ   rC   rC   rD   r¨   2  s   
ÿþ

z!InElementImpl._implicit_coercionsc                 C  s   t  d|jj ¡ d S )Nz_Coercing %s object into a select() for use in IN(); please pass a select() construct explicitly)r   rä   r¥   rÒ   )r¾   rM   rC   rC   rD   r(  F  s
   þÿz)InElementImpl._warn_for_implicit_coercionzsqlalchemy.sql.elementsc                  s¤   t  |¡rGi ‰t|ƒ}|D ]!}t|ƒs.t|t jjjƒs*t|dƒs*| j	|fi |¤Ž q|ˆ|< qˆr?t
j‡ ‡‡fdd„|D ƒŽ S ˆ jˆ|dd�S | j	|fi |¤Ž d S )Nr>   c                   s(   g | ]}|ˆv rˆ| nˆ   ˆ|¡‘qS rC   )r"  )Ú.0Úo©r´   Únon_literal_expressionsr#  rC   rD   Ú
<listcomp>a  s    ýÿ
üz3InElementImpl._literal_coercion.<locals>.<listcomp>T)Ú	expanding)r   Úis_non_string_iterablerZ   rE   r?   Ú	preloadedÚsql_elementsr-   rA   r¡   r    Ú
ClauseListr"  )r¾   rB   r´   r#  rb   r+  rC   r,  rD   rš   M  s,   
ý
ÿþ€úÿzInElementImpl._literal_coercionc                K  sx   |j r| ¡ S t|tjƒrt|jƒdkrJ ‚|j|d�S t|tjƒr0|j	dd�}d|_
||_|S t|tjƒr:| ¡ S |S )Nr   )ÚagainstT)Úmaintain_key)ræ   rç   r?   r    r3  r]   ÚclausesÚ
self_groupr*   Ú_cloner/  Ú	expand_opr#   r  Úscalar_values)r¾   rB   r´   r#  rb   rC   rC   rD   r§   p  s   zInElementImpl._post_coercionrd   rÏ   )
rÒ   rÓ   rÔ   rÕ   r¨   r(  r   Úpreload_modulerš   r§   rC   rC   rC   rD   r&  /  s    ü
"r&  c                   @  s*   e Zd ZdZdZdd„ Zddœdd„ZdS )	ÚOnClauseImplrC   Tc                 K  s   |   |¡ d S rd   rÃ   r½   rC   rC   rD   rš   Š  s   zOnClauseImpl._literal_coercionN)r�   c                K  s   t |tjƒr|S |S rd   )r?   r   ÚJoinTargetRole)r¾   rª   r�   rb   rC   rC   rD   r§   �  s   zOnClauseImpl._post_coercion)rÒ   rÓ   rÔ   rÕ   r   rš   r§   rC   rC   rC   rD   r<  …  s
    r<  c                   @  ó   e Zd ZdZdZddd„ZdS )ÚWhereHavingImplrC   TNc                 C  rø   rd   rù   rú   rC   rC   rD   rû   �  rü   zWhereHavingImpl._text_coercionrd   ©rÒ   rÓ   rÔ   rÕ   r   rû   rC   rC   rC   rD   r?  ˜  ó    r?  c                   @  r>  )ÚStatementOptionImplrC   TNc                 C  ó
   t  |¡S rd   ©r    r0   rú   rC   rC   rD   rû   ¦  rü   z"StatementOptionImpl._text_coercionrd   r@  rC   rC   rC   rD   rB  ¡  rA  rB  c                   @  ó   e Zd ZdZdS )ÚColumnArgumentImplrC   N©rÒ   rÓ   rÔ   rÕ   rC   rC   rC   rD   rF  ª  ó    rF  c                   @  rE  )ÚColumnArgumentOrKeyImplrC   NrG  rC   rC   rC   rD   rI  ®  rH  rI  c                   @  s   e Zd ZdZddd„ZdS )ÚStrAsPlainColumnImplrC   Nc                 C  rC  rd   )r    r,   rú   rC   rC   rD   rû   µ  rü   z#StrAsPlainColumnImpl._text_coercionrd   )rÒ   rÓ   rÔ   rÕ   rû   rC   rC   rC   rD   rJ  ²  s    rJ  c                   @  r>  )ÚByOfImplrC   TNc                 C  rC  rd   )r    Ú_textual_label_referencerú   rC   rC   rD   rû   ¾  rü   zByOfImpl._text_coercionrd   r@  rC   rC   rC   rD   rK  ¹  rA  rK  c                   @  r×   )ÚOrderByImplrC   c                 K  s$   t || jƒr|jd urt |¡S |S rd   )r?   r¤   Ú_order_by_label_elementr    Ú_label_reference)r¾   rª   rb   rC   rC   rD   r§   Å  s
   
ÿ

zOrderByImpl._post_coercionNrÚ   rC   rC   rC   rD   rM  Â  rÛ   rM  c                   @  ó   e Zd ZdZ	ddd
d„ZdS )ÚGroupByImplrC   NrB   r   rª   r…   r‰   rb   rQ   c                 K  s   t |ƒr
tj|jŽ S |S rd   )r   r    r3  ÚcrÄ   rC   rC   rD   r¨   Ò  s   zGroupByImpl._implicit_coercionsrd   rÏ   ©rÒ   rÓ   rÔ   rÕ   r¨   rC   rC   rC   rD   rQ  Ï  ó    ürQ  c                   @  s   e Zd ZdZddœdd„ZdS )ÚDMLColumnImplrC   Frh   c                K  s   |r|j S |S rd   )Úkey)r¾   rB   ri   rb   rC   rC   rD   r§   â  s   zDMLColumnImpl._post_coercionNrÚ   rC   rC   rC   rD   rU  ß  rö   rU  c                   @  rñ   )ÚConstExprImplrC   Nró   c                K  s@   |d u rt  ¡ S |du rt  ¡ S |du rt  ¡ S |  ||¡ d S )NFT)r    r  r  r  r¡   rô   rC   rC   rD   rš   ì  s   zConstExprImpl._literal_coercionrõ   rC   rC   rC   rD   rW  é  rö   rW  c                   @  r  )ÚTruncatedLabelImplrC   NrB   r   rª   r…   r‰   rb   rQ   c                 K  s    t |tƒr|S |  |||¡ d S rd   rß   rÄ   rC   rC   rD   r¨   ú  r  z&TruncatedLabelImpl._implicit_coercionsc                 K  s   t |tjƒr|S t |¡S )z¸coerce the given value to :class:`._truncated_label`.

        Existing :class:`._truncated_label` and
        :class:`._anonymous_label` objects are passed
        unchanged.
        )r?   r    Ú_truncated_labelr½   rC   rC   rD   rš     s   
z$TruncatedLabelImpl._literal_coercionrd   rÏ   râ   rC   rC   rC   rD   rX  ÷  r  rX  c                   @  r>  )ÚDDLExpressionImplrC   TNc                 C  rC  rd   rD  rú   rC   rC   rD   rû     s   
z DDLExpressionImpl._text_coercionrd   r@  rC   rC   rC   rD   rZ    rA  rZ  c                   @  rE  )ÚDDLConstraintColumnImplrC   NrG  rC   rC   rC   rD   r[  !  rH  r[  c                   @  rE  )ÚDDLReferredColumnImplrC   NrG  rC   rC   rC   rD   r\  %  rH  r\  c                   @  r  )ÚLimitOffsetImplrC   NrB   r   rª   r…   r‰   rb   rQ   c                 K  s   |d u rd S |   |||¡ d S rd   rÃ   rÄ   rC   rC   rD   r¨   ,  s   z#LimitOffsetImpl._implicit_coercionsc                K  s(   |d u rd S t  |¡}tj|||dd�S )NT)r  r
  )r   Úasintr#   Ú_OffsetLimitParam)r¾   rB   r»   r  rb   ÚvaluerC   rC   rD   rš   8  s   
ÿz!LimitOffsetImpl._literal_coercionrd   rÏ   râ   rC   rC   rC   rD   r]  )  r  r]  c                      s&   e Zd ZdZ	dd‡ fd
d„Z‡  ZS )ÚLabeledColumnExprImplrC   NrB   r   rª   r…   r‰   rb   rQ   c                   sX   t |tjƒr| d ¡S tƒ j||fd|i|¤Ž}t |tjƒr#| d ¡S |  |||¡ d S ©Nr…   )r?   r   ÚExpressionElementRoleÚlabelr  r¨   r¡   )r¾   rB   rª   r…   rb   Únewr  rC   rD   r¨   G  s   
ÿÿÿ
z)LabeledColumnExprImpl._implicit_coercionsrd   rÏ   )rÒ   rÓ   rÔ   rÕ   r¨   r  rC   rC   r  rD   ra  D  s    üra  c                      sN   e Zd ZdZdZdZdZe dej	¡Z
	d
ddœ‡ fdd„Zddd	„Z‡  ZS )ÚColumnsClauseImplrC   Tz^\w\S*$N)rÆ   c                  sF   |st |tƒrdd dd„ |D ƒ¡› d�}tƒ j|f|||dœ|¤ŽS )NzDid you mean to say select(z, c                 s  s   � | ]}t |ƒV  qd S rd   )rÌ   )r*  ÚerC   rC   rD   Ú	<genexpr>i  s   € z8ColumnsClauseImpl._raise_for_expected.<locals>.<genexpr>z)?r  )r?   rZ   Újoinr  r¡   )r¾   rB   r…   rª   rÆ   rb   r  rC   rD   r¡   c  s   ÿÿÿÿÿz%ColumnsClauseImpl._raise_for_expectedc                 C  sH   t |ƒ}| j |¡ }t dt |¡|rd|f nd|rdnddœ ¡‚)NzŸTextual column expression %(column)r %(argname)sshould be explicitly declared with text(%(column)r), or use %(literal_column)s(%(column)r) for more specificityrí   rî   Úliteral_columnr±   )r±   r…   rj  )rG   Ú_guess_straight_columnÚmatchr   r^   r   rï   )r¾   rB   r…   Úguess_is_literalrC   rC   rD   rû   p  s   
üüÿz ColumnsClauseImpl._text_coercionrÐ   rd   )rÒ   rÓ   rÔ   rÕ   r   r  rÿ   ÚreÚcompileÚIrk  r¡   rû   r  rC   rC   r  rD   rf  Z  s    ÿÿrf  c                   @  rE  )ÚReturnsRowsImplrC   NrG  rC   rC   rC   rD   rq  ƒ  rH  rq  c                      s4   e Zd ZdZddœdd„Z	dd‡ fdd„Z‡  ZS )ÚStatementImplrC   Nró   c                K  sH   ||ur"t |tƒs"z|j W |S  ty!   t d| d¡ Y |S w |S )Na  Object %r should not be used directly in a SQL statement context, such as passing to methods such as session.execute().  This usage will be disallowed in a future release.  Please use Core select() / update() / delete() etc. with Session.execute() and other statement execution methods.ú1.4)r?   rG   Ú_execute_on_connectionr    r   Úwarn_deprecated)r¾   rª   r�   r…   rb   rC   rC   rD   r§   Š  s    
ÿôúøôzStatementImpl._post_coercionrB   r   rª   r…   r‰   rb   rQ   c                   s$   |j r|S tƒ j||fd|i|¤ŽS rb  )ré   r  r¨   rÄ   r  rC   rD   r¨   ¢  s   ÿÿÿz!StatementImpl._implicit_coercionsrd   rÏ   )rÒ   rÓ   rÔ   rÕ   r§   r¨   r  rC   rC   r  rD   rr  ‡  s    ÿürr  c                   @  rP  )ÚSelectStatementImplrC   NrB   r   rª   r…   r‰   rb   rQ   c                 K  s    |j r| ¡ S |  |||¡ d S rd   )Ú_is_text_clauseÚcolumnsr¡   rÄ   rC   rC   rD   r¨   ´  s   z'SelectStatementImpl._implicit_coercionsrd   rÏ   rS  rC   rC   rC   rD   rv  ±  rT  rv  c                   @  rE  )Ú
HasCTEImplrC   NrG  rC   rC   rC   rD   ry  Á  rH  ry  c                   @  rE  )Ú	IsCTEImplrC   NrG  rC   rC   rC   rD   rz  Å  rH  rz  c                   @  s6   e Zd ZdZdZddœdd„Z	dddœddd„ZdS )ÚJoinTargetImplrC   TNró   c                K  s   |   ||¡ d S rd   rÃ   rô   rC   rC   rD   rš   Î  s   z JoinTargetImpl._literal_coercionF)ÚlegacyrB   r   rª   r…   r‰   r|  rŠ   rb   rQ   c                K  s>   t |tjƒr|S |r|jrtjddd� |S |  |||¡ d S ©NzÀImplicit coercion of SELECT and textual SELECT constructs into FROM clauses is deprecated; please call .subquery() on any Core select or ORM Query object in order to produce a subquery object.rs  )Úversion)r?   r   r=  ræ   r   ru  r¡   )r¾   rB   rª   r…   r|  rb   rC   rC   rD   r¨   Ñ  s   	
ûz"JoinTargetImpl._implicit_coercionsrd   )rB   r   rª   r   r…   r‰   r|  rŠ   rb   r   rQ   r   )rÒ   rÓ   rÔ   rÕ   r›   rš   r¨   rC   rC   rC   rD   r{  É  s    üúr{  c                   @  s4   e Zd ZdZ	ddddœddd„Zddœdd„ZdS )ÚFromClauseImplrC   NFT)r   Úallow_selectrB   r   rª   r…   r‰   r   rŠ   r€  rb   rQ   c                K  sJ   |j r|r	| ¡ S |rtjddd� |jS d S |jr|S |  |||¡ d S r}  )ræ   Úsubqueryr   ru  Ú_implicit_subqueryrw  r¡   )r¾   rB   rª   r…   r   r€  rb   rC   rC   rD   r¨   ó  s   
ûø	z"FromClauseImpl._implicit_coercions)Ú
deannotatec                K  s   |r|  ¡ S |S rd   )Ú_deannotate)r¾   rB   rƒ  rb   rC   rC   rD   r§     s   zFromClauseImpl._post_coercionrd   )rB   r   rª   r   r…   r‰   r   rŠ   r€  rŠ   rb   r   rQ   r   )rÒ   rÓ   rÔ   rÕ   r¨   r§   rC   rC   rC   rD   r  ð  s    üùr  c                   @  s$   e Zd ZdZ	dddœddd„ZdS )ÚStrictFromClauseImplrC   NF)r€  rB   r   rª   r…   r‰   r€  rŠ   rb   rQ   c                K  s0   |j r|rtjddd� |jS |  |||¡ d S r}  )ræ   r   ru  r‚  r¡   )r¾   rB   rª   r…   r€  rb   rC   rC   rD   r¨     s   
	ûz(StrictFromClauseImpl._implicit_coercionsrd   )rB   r   rª   r   r…   r‰   r€  rŠ   rb   r   rQ   r   rS  rC   rC   rC   rD   r…    s    üúr…  c                   @  s    e Zd ZdZdddœdd„ZdS )ÚAnonymizedFromClauseImplrC   FN)Úflatr»   c                K  s   |d u sJ ‚|j |d�S )N)r‡  )Ú_anonymous_fromclause)r¾   rB   r‡  r»   rb   rC   rC   rD   r§   1  s   z'AnonymizedFromClauseImpl._post_coercionrÚ   rC   rC   rC   rD   r†  .  s    r†  c                   @  r×   )ÚDMLTableImplrC   c                 K  s   d|j v r
|j d S |S )NÚ	dml_table)Ú_annotationsr½   rC   rC   rD   r§   :  s   

zDMLTableImpl._post_coercionNrÚ   rC   rC   rC   rD   r‰  7  rÛ   r‰  c                   @  rP  )ÚDMLSelectImplrC   NrB   r   rª   r…   r‰   rb   rQ   c                 K  s:   |j rt|tjƒr|jjr|jS | ¡ S |  |||¡ d S rd   )rè   r?   r#   r'  rB   ræ   r)  r¡   rÄ   rC   rC   rD   r¨   D  s   
ÿþz!DMLSelectImpl._implicit_coercionsrd   rÏ   rS  rC   rC   rC   rD   rŒ  A  rT  rŒ  c                      s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚCompoundElementImplrC   Nc                   s>   t |tjƒr|jrd}nd}nd }tƒ j|f|||dœ|¤ŽS )NzFUse the plain select() object without calling .subquery() or .alias().z9To SELECT from any FROM clause, use the .select() method.r  )r?   r   ÚFromClauseRoleÚ_is_subqueryr  r¡   r  r  rC   rD   r¡   Z  s   ÿÿÿÿÿz'CompoundElementImpl._raise_for_expectedrÐ   r  rC   rC   r  rD   r�  W  s    r�  ÚRoleÚImpl)rN   rG   rO   rG   rP   rG   rQ   rR   )rU   rG   rV   rG   rW   rX   rQ   rY   )r`   ra   rB   r   rb   r   rQ   rG   )
r`   rj   rB   r   ri   rk   rb   r   rQ   rG   )r`   rm   rB   r   rb   r   rQ   rn   )r`   ro   rB   r   rb   r   rQ   rp   )r`   rq   rB   r   rb   r   rQ   rp   )r`   rr   rB   r   rb   r   rQ   rs   )r`   rt   rB   ru   rb   r   rQ   rv   )r`   rw   rB   ru   rb   r   rQ   rx   )r`   ry   rB   r   rb   r   rQ   rz   )r`   r{   rB   r'   rb   r   rQ   r)   )r`   r|   rB   r5   rb   r   rQ   r5   )r`   r}   rB   r6   rb   r   rQ   r6   )r`   r~   rB   r(   rb   r   rQ   r4   )
r`   r~   rB   r6   r   rk   rb   r   rQ   r7   )r`   r€   rB   r�   rb   r   rQ   r2   )r`   r‚   rB   r3   rb   r   rQ   r3   )r`   rƒ   rB   r   rb   r   rQ   r   )r`   rƒ   rB   r   r„   rˆ   r…   r‰   r†   rŠ   r‡   rŠ   rb   r   rQ   r   )r`   rj   rB   r   rb   r   rQ   rG   )r`   rq   r®   r¯   rQ   r°   )rB   r   r…   r‰   rê   rë   rì   r‰   rÈ   rÊ   rQ   r
   )ŽÚ
__future__r   Úcollections.abcÚabcrF   r  rn  r£   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   rî   r   r   Ú_typingr   Úbaser   r   Ú	cache_keyr   r   r   r   r   Úutil.typingr   r    r!   r"   r#   r$   r%   r&   r'   r(   Údmlr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   ÚSQLRoler9   r;   Ú
StringRoler<   r=   rE   rH   rT   r_   rf   r­   r¹   rº   rØ   rÜ   rÝ   rã   r^   rð   rò   r÷   r  r  r  r  r  r   r&  r<  r?  rB  rF  rI  rJ  ÚByOfRolerK  rM  rQ  rU  rW  rX  rZ  r[  r\  r]  ra  rf  rq  rr  rv  ry  rz  r{  r  r…  r†  r‰  rŒ  r�  r”   Údirr»   rœ   ÚclsÚendswithÚreplaceÚglobalsr©   rc  Úee_implÚintrŠ   rG   ÚfloatÚpy_typerC   rC   rC   rD   Ú<module>   sZ  &ü	ü	ùt7	û)+V			
)*'%	

€
ü