o
    Š)f-ž  ã                   @  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& dd l'm(Z( ej�rZd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)lm1Z1 dd*l2m3Z3 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 dd9lmBZB ed:ejCd;�ZDed<e	d=ef d;�ZEed>ejFd;�ZGed?ed;�ZHd@dA„ ZIdBdC„ ZJ�ddJdK„ZK�ddQdR„ZLe�ddXdY„ƒZMed=dZœ�dd^dY„ƒZMe�ddadY„ƒZMe�ddddY„ƒZMe�d	dgdY„ƒZMe�d
djdY„ƒZMe�ddndY„ƒZMe�ddqdY„ƒZMe�ddtdY„ƒZMe�ddxdY„ƒZMe�dd{dY„ƒZMe�dd~dY„ƒZMe�dd‚dY„ƒZMed=dƒœ�dd†dY„ƒZMe�ddŠdY„ƒZMe�dd�dY„ƒZMe�dd�dY„ƒZMddd�d�d‘œ�dd™dY„ZM�ddšd›„ZN�ddŸd „ZOG d¡d¢„ d¢ƒZPG d£d¤„ d¤ƒZQG d¥d¦„ d¦ƒZRG d§d¨„ d¨ePƒZSG d©dª„ dªePƒZTde$jUddf�dd±d²„ZVG d³d´„ d´ePƒZWG dµd¶„ d¶ePƒZXG d·d¸„ d¸ePƒZYG d¹dº„ dºePƒZZG d»d¼„ d¼ePƒZ[G d½d¾„ d¾ePƒZ\G d¿dÀ„ dÀeTePƒZ]G dÁdÂ„ dÂe]ePƒZ^G dÃdÄ„ dÄePƒZ_G dÅdÆ„ dÆeTePƒZ`G dÇdÈ„ dÈeXeTePƒZaG dÉdÊ„ dÊeXePƒZbG dËdÌ„ dÌeWePƒZcG dÍdÎ„ dÎeSePƒZdG dÏdÐ„ dÐeXePƒZeG dÑdÒ„ dÒeXeTePejfƒZgG dÓdÔ„ dÔegePƒZhG dÕdÖ„ dÖegePƒZiG d×dØ„ dØeSePƒZjG dÙdÚ„ dÚePƒZkG dÛdÜ„ dÜeRePƒZlG dÝdÞ„ dÞeQeXePƒZmG dßdà„ dàeQeSePƒZnG dádâ„ dâenƒZoG dãdä„ däePƒZpG dådæ„ dæe]ƒZqG dçdè„ dèeZeXePƒZrG dédê„ dêePƒZsG dëdì„ dìeXePƒZtG dídî„ dîeWePƒZuG dïdð„ dðesƒZvG dñdò„ dòePƒZwG dódô„ dôePƒZxG dõdö„ döeZeWePƒZyG d÷dø„ døeyƒZzG dùdú„ dúezƒZ{G dûdü„ düeZeWePƒZ|G dýdþ„ dþeWePƒZ}G dÿ�d „ �d eWePƒ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é   )Ú	operators)Ú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)ÚDQLDMLClauseElement)ÚNamedColumn)ÚSQLCoreOperations)Ú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© rD   úU/var/www/html/flask-app/venv/lib/python3.12/site-packages/sqlalchemy/sql/coercions.pyÚ_is_literalO   s   þ
ýrF   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#   rA   r   r   r   ÚlanghelpersÚsymbolrB   ÚtypeÚ
issubclass)rC   ÚelemrD   rD   rE   rI   [   s,   
ÿÿûþ

ö
òrI   Ú	paramnamerH   Ú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)rO   rP   rQ   rD   rD   rE   Ú_document_text_coercion�   s   ùþrU   Ú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. rZ   )r@   ÚlistÚsetÚdictÚlenr   ÚArgumentErrorr   )rV   rW   rX   rD   rD   rE   Ú!_expression_collection_was_a_list‘   s   $ÿ
r`   ÚroleúType[roles.TruncatedLabelRole]rC   r   Úkwc                 K  ó   d S ©NrD   ©ra   rC   rc   rD   rD   rE   Úexpect£   ó   rg   )Úas_keyúType[roles.DMLColumnRole]ri   úLiteral[True]c                K  rd   re   rD   )ra   rC   ri   rc   rD   rD   rE   rg   «   ó   úType[roles.LiteralValueRole]úBindParameter[Any]c                 K  rd   re   rD   rf   rD   rD   rE   rg   µ   rh   ú!Type[roles.DDLReferredColumnRole]úColumn[Any]c                 K  rd   re   rD   rf   rD   rD   rE   rg   ½   rh   ú#Type[roles.DDLConstraintColumnRole]úUnion[Column[Any], str]c                 K  rd   re   rD   rf   rD   rD   rE   rg   Å   rh   úType[roles.StatementOptionRole]r/   c                 K  rd   re   rD   rf   rD   rD   rE   rg   Í   rh   ú&Type[roles.LabeledColumnExprRole[Any]]ú_ColumnExpressionArgument[_T]úNamedColumn[_T]c                 K  rd   re   rD   rf   rD   rD   rE   rg   Õ   rh   úgUnion[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole]]úColumnElement[_T]c                 K  rd   re   rD   rf   rD   rD   rE   rg   Ý   s   	ú¡Union[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole], Type[roles.OnClauseRole], Type[roles.ColumnArgumentRole]]úColumnElement[Any]c                 K  rd   re   rD   rf   rD   rD   rE   rg   é   s   úType[roles.DMLTableRole]r(   r*   c                 K  rd   re   rD   rf   rD   rD   rE   rg   ÷   rh   úType[roles.HasCTERole]r6   c                 K  rd   re   rD   rf   rD   rD   rE   rg   ÿ   rh   úType[roles.SelectStatementRole]r7   c                 K  rd   re   rD   rf   rD   rD   rE   rg     rh   úType[roles.FromClauseRole]r)   r5   c                 K  rd   re   rD   rf   rD   rD   rE   rg     rh   )Úexplicit_subqueryr   r8   c                K  rd   re   rD   )ra   rC   r   rc   rD   rD   rE   rg     rl   úType[roles.ColumnsClauseRole]ú_ColumnsClauseArgument[Any]r3   c                 K  rd   re   rD   rf   rD   rD   rE   rg   !  rh   úType[roles.JoinTargetRole]r4   c                 K  rd   re   rD   rf   rD   rD   rE   rg   )  rh   ú	Type[_SR]c                 K  rd   re   rD   rf   rD   rD   rE   rg   2  rh   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_elementrD   )$Úallows_lambdaÚcallablerB   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   r1   r,   rŽ   Ú_role_classÚ	__class__Ú__mro__Ú_post_coercionÚ_implicit_coercions)ra   rC   r„   r…   r†   r‡   rc   Úimplr�   ÚresolvedrŒ   ÚinsprD   rD   rE   rg   :  s²   ÿúù	ü	üþ	ÿþý


ú
ÿÿÿÿ€ÿÿýüÿÿÿc                 K  s"   |  dd ¡ t| |fddi|¤ŽS )Nri   T)Úpoprg   rf   rD   rD   rE   Ú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   )rg   r@   rH   Úappendr   Útraverse)	ra   r®   ÚexprÚstrnamer±   rª   ÚcolsÚ
col_appendÚadd_elementrD   rD   rE   Ú expect_col_expression_collectionµ  s    €


ðr¹   c                   @  sZ   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„ZdS )ÚRoleImpl)r¤   Únamer�   c                 K  s   t ƒ ‚re   )ÚNotImplementedError©ÚselfrC   rc   rD   rD   rE   rš   Ö  s   zRoleImpl._literal_coercionNr   r§   Fc                 C  s    || _ |j| _t|tjƒ| _d S re   )r¤   Ú
_role_namer»   rM   r   ÚUsesInspectionr�   )r¾   Ú
role_classrD   rD   rE   Ú__init__Ý  s   zRoleImpl.__init__rC   rª   r…   r‰   rc   rR   c                 K  s   |   |||¡ d S re   ©r¡   ©r¾   rC   rª   r…   rc   rD   rD   rE   r¨   â  s   zRoleImpl._implicit_coercionsúOptional[Any]ÚadviceÚcodeÚerrú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¾   rC   r…   rª   rÆ   rÇ   rÈ   rc   ÚgotÚmsgrD   rD   rE   r¡   ë  s   
ýzRoleImpl._raise_for_expectedre   ©
rC   r   rª   r   r…   r‰   rc   r   rR   r   ©NNNNN©rC   r   r…   r‰   rª   rÅ   rÆ   r‰   rÇ   r‰   rÈ   rÉ   rc   r   rR   r
   )Ú__name__Ú
__module__Ú__qualname__Ú	__slots__rš   r§   Ú__annotations__r™   r›   rÂ   r¨   r¡   rD   rD   rD   rE   rº   Ó  s   
 	üùrº   c                   @  ó   e Zd ZdZdd„ ZdS )Ú_DeannotaterD   c                 K  s   ddl m} ||ƒS )Nr   )Ú_deep_deannotate)r   rØ   )r¾   rª   rc   rØ   rD   rD   rE   r§     s   z_Deannotate._post_coercionN©rÑ   rÒ   rÓ   rÔ   r§   rD   rD   rD   rE   r×   	  ó    r×   c                   @  s   e Zd ZdZdZdS )Ú_StringOnlyrD   TN)rÑ   rÒ   rÓ   rÔ   r™   rD   rD   rD   rE   rÛ     s    rÛ   c                   @  s"   e Zd ZdZddd„Zdd„ ZdS )Ú_ReturnsStringKeyrD   Nc                 K  ó    t |tƒr|S |  |||¡ d S re   ©r@   rH   r¡   rÄ   rD   rD   rE   r¨     s   
z%_ReturnsStringKey._implicit_coercionsc                 K  ó   |S re   rD   r½   rD   rD   rE   rš   !  ó   z#_ReturnsStringKey._literal_coercionre   ©rÑ   rÒ   rÓ   rÔ   r¨   rš   rD   rD   rD   rE   rÜ     s    
rÜ   c                   @  s"   e Zd ZdZdd„ Zddd„ZdS )Ú_ColumnCoercionsrD   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¾   rD   rD   rE   Ú"_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$   r8   rC   r¤   r�   Ú_is_lambda_element)r¾   rC   rª   r…   rc   r�   rD   rD   rE   r¨   /  s   ÿ
z$_ColumnCoercions._implicit_coercionsre   )rÑ   rÒ   rÓ   rÔ   rä   r¨   rD   rD   rD   rE   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)rC   r…   ré   rë   rÈ   rD   rD   rE   Ú_no_text_coercionA  s   ýþÿørï   c                   @  ó   e Zd ZdZddd„ZdS )Ú_NoTextCoercionrD   Nc                 K  s6   t |tƒrttj| jƒrt||ƒ d S |  ||¡ d S re   )r@   rH   rM   r!   Ú
TextClauser¤   rï   r¡   ©r¾   rC   r…   rc   rD   rD   rE   rš   V  s
   ÿz!_NoTextCoercion._literal_coercionre   ©rÑ   rÒ   rÓ   rÔ   rš   rD   rD   rD   rE   rñ   S  ó    rñ   c                   @  s0   e Zd ZdZdZdZdZddd„Zddd„ZdS )	Ú_CoerceLiteralsrD   FNc                 C  ó
   t ||ƒS re   ©rï   ©r¾   rC   r…   rD   rD   rE   Ú_text_coercione  ó   
z_CoerceLiterals._text_coercionc                 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@   rH   Ú_coerce_starr!   r-   rú   Ú_coerce_constsÚNullÚFalse_ÚTrue_Ú_coerce_numericsÚnumbersÚNumberr¡   ró   rD   rD   rE   rš   h  s   
z!_CoerceLiterals._literal_coercionre   )	rÑ   rÒ   rÓ   rÔ   rÿ   rþ   r  rú   rš   rD   rD   rD   rE   rö   _  s    
rö   c                   @  s(   e Zd ZdZ		ddd„Zd	dd„ZdS )
ÚLiteralValueImplTNFc                 K  s4   t |ƒs| j|f||dœ|¤Ž tjd ||d|d�S )N)rª   r…   T)Útype_ÚuniqueÚliteral_execute)rF   r¡   r!   r+   )r¾   rC   rª   r…   r  r	  rc   rD   rD   rE   r¨   €  s   	ÿÿÿûz$LiteralValueImpl._implicit_coercionsc                 K  rß   re   rD   )r¾   rC   r…   r  rc   rD   rD   rE   rš   –  rà   z"LiteralValueImpl._literal_coercion©NF©NN)rÑ   rÒ   rÓ   r™   r¨   rš   rD   rD   rD   rE   r  }  s    
úr  c                      s.   e Zd ZdZ					dd‡ fdd„Z‡  ZS )Ú_SelectIsNotFromrD   NrC   r   r…   r‰   rª   rÅ   rÆ   rÇ   rÈ   rÉ   rc   rR   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¾   rC   r…   rª   rÆ   rÇ   rÈ   rc   ©r¥   rD   rE   r¡   �  s0   ÿ
þ
ýþÿÿúù
z$_SelectIsNotFrom._raise_for_expectedrÏ   rÐ   ©rÑ   rÒ   rÓ   rÔ   r¡   Ú__classcell__rD   rD   r  rE   r  š  s    ùr  c                   @  ó&   e Zd ZdZ	ddd
d„Zdd„ ZdS )ÚHasCacheKeyImplrD   NrC   r   rª   r…   r‰   rc   rR   c                 K  rÝ   re   )r@   r   r¡   rÄ   rD   rD   rE   r¨   Å  ó   
z#HasCacheKeyImpl._implicit_coercionsc                 K  rß   re   rD   r½   rD   rD   rE   rš   Ñ  rà   z!HasCacheKeyImpl._literal_coercionre   rÎ   rá   rD   rD   rD   rE   r  Â  ó
    ür  c                   @  r  )ÚExecutableOptionImplrD   NrC   r   rª   r…   r‰   rc   rR   c                 K  rÝ   re   )r@   r   r¡   rÄ   rD   rD   rE   r¨   Ø  r  z(ExecutableOptionImpl._implicit_coercionsc                 K  rß   re   rD   r½   rD   rD   rE   rš   ä  rà   z&ExecutableOptionImpl._literal_coercionre   rÎ   rá   rD   rD   rD   rE   r  Õ  r  r  c                      s.   e Zd ZdZ	ddd„Zd	‡ fdd„	Z‡  ZS )
ÚExpressionElementImplrD   NFc              
   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¾   rC   r»   r  r…   Úis_crudrc   rÈ   rD   rD   rE   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¾   rC   r…   rª   rc   rÆ   r  rD   rE   r¡   ÿ  s   ÿÿÿÿÿz)ExpressionElementImpl._raise_for_expected©NNNFr  )rÑ   rÒ   rÓ   rÔ   rš   r¡   r  rD   rD   r  rE   r  è  s
    
ÿr  c                   @  s&   e Zd ZdZ	ddd„Zddd„ZdS )	ÚBinaryElementImplrD   Nc              
   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¾   rC   r´   ÚoperatorÚbindparam_typer…   rc   rÈ   rD   rD   rE   rš     s   €ÿz#BinaryElementImpl._literal_coercionc                 K  s,   |j jr|j js| |d ur|n|j ¡}|S re   )rL   Ú_isnullÚ_with_binary_element_type)r¾   rª   r´   r%  rc   rD   rD   rE   r§     s
   ÿz BinaryElementImpl._post_coercionr  re   )rÑ   rÒ   rÓ   rÔ   rš   r§   rD   rD   rD   rE   r"    s
    
ÿr"  c                   @  s6   e Zd ZdZ	ddd
d„Zdd„ Zdd„ Zdd„ ZdS )ÚInElementImplrD   NrC   r   rª   r…   r‰   rc   rR   c                 K  sj   |j r,t|tjƒr|jjr|  |¡ | j|jfi |¤ŽS |  |¡ | j| ¡ fi |¤ŽS |  	|||¡ d S re   )
rç   r@   r$   ÚAliasrC   rå   Ú_warn_for_implicit_coercionr§   Úselectr¡   rÄ   rD   rD   rE   r¨   )  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¾   rN   rD   rD   rE   r*  =  s
   þÿz)InElementImpl._warn_for_implicit_coercionc                   s¬   t  |¡rKi ‰t|ƒ}|D ]%}t|ƒs(t|tjƒs#| j|fi |¤Ž q|ˆ|< q|d u r2t 	¡ ˆ|< qˆrCtj
‡ ‡‡fdd„|D ƒŽ S ˆ jˆ|dd�S | j|fi |¤Ž d S )Nc                   s(   g | ]}|ˆv rˆ| nˆ   ˆ|¡‘qS rD   )r#  )Ú.0Úo©r´   Únon_literal_expressionsr$  rD   rE   Ú
<listcomp>W  s    ýÿ
üz3InElementImpl._literal_coercion.<locals>.<listcomp>T)Ú	expanding)r   Úis_non_string_iterabler[   rF   r@   r   ÚColumnOperatorsr¡   r!   r   Ú
ClauseListr#  )r¾   rC   r´   r$  rc   r-  rD   r.  rE   rš   D  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!   r4  r^   ÚclausesÚ
self_groupr+   Ú_cloner1  Ú	expand_opr$   r  Úscalar_values)r¾   rC   r´   r$  rc   rD   rD   rE   r§   f  s   zInElementImpl._post_coercionre   rÎ   )rÑ   rÒ   rÓ   rÔ   r¨   r*  rš   r§   rD   rD   rD   rE   r(  &  s    ü"r(  c                   @  s*   e Zd ZdZdZ	d	dd„Zd
dd„ZdS )ÚOnClauseImplrD   TNFc                 K  s   |   |¡ d S re   rÃ   )r¾   rC   r»   r  r…   r  rc   rD   rD   rE   rš   €  s   zOnClauseImpl._literal_coercionc                 K  s   t |tjƒr|S |S re   )r@   r   ÚJoinTargetRole)r¾   rª   r�   rc   rD   rD   rE   r§   …  s   zOnClauseImpl._post_coercionr!  re   )rÑ   rÒ   rÓ   rÔ   rÿ   rš   r§   rD   rD   rD   rE   r<  {  s    
ÿr<  c                   @  ó   e Zd ZdZdZddd„ZdS )ÚWhereHavingImplrD   TNc                 C  r÷   re   rø   rù   rD   rD   rE   rú   •  rû   zWhereHavingImpl._text_coercionre   ©rÑ   rÒ   rÓ   rÔ   rÿ   rú   rD   rD   rD   rE   r?  �  ó    r?  c                   @  r>  )ÚStatementOptionImplrD   TNc                 C  ó
   t  |¡S re   ©r!   rò   rù   rD   rD   rE   rú   ž  rû   z"StatementOptionImpl._text_coercionre   r@  rD   rD   rD   rE   rB  ™  rA  rB  c                   @  ó   e Zd ZdZdS )ÚColumnArgumentImplrD   N©rÑ   rÒ   rÓ   rÔ   rD   rD   rD   rE   rF  ¢  ó    rF  c                   @  rE  )ÚColumnArgumentOrKeyImplrD   NrG  rD   rD   rD   rE   rI  ¦  rH  rI  c                   @  rð   )ÚStrAsPlainColumnImplrD   Nc                 C  rC  re   )r!   r-   rù   rD   rD   rE   rú   ­  rû   z#StrAsPlainColumnImpl._text_coercionre   )rÑ   rÒ   rÓ   rÔ   rú   rD   rD   rD   rE   rJ  ª  rõ   rJ  c                   @  r>  )ÚByOfImplrD   TNc                 C  rC  re   )r!   Ú_textual_label_referencerù   rD   rD   rE   rú   ¶  rû   zByOfImpl._text_coercionre   r@  rD   rD   rD   rE   rK  ±  rA  rK  c                   @  rÖ   )ÚOrderByImplrD   c                 K  s$   t || jƒr|jd urt |¡S |S re   )r@   r¤   Ú_order_by_label_elementr!   Ú_label_reference)r¾   rª   rc   rD   rD   rE   r§   ½  s
   
ÿ

zOrderByImpl._post_coercionNrÙ   rD   rD   rD   rE   rM  º  rÚ   rM  c                   @  ó   e Zd ZdZ	ddd
d„ZdS )ÚGroupByImplrD   NrC   r   rª   r…   r‰   rc   rR   c                 K  s   t |ƒr
tj|jŽ S |S re   )r   r!   r4  ÚcrÄ   rD   rD   rE   r¨   Ê  s   zGroupByImpl._implicit_coercionsre   rÎ   ©rÑ   rÒ   rÓ   rÔ   r¨   rD   rD   rD   rE   rQ  Ç  ó    ürQ  c                   @  s   e Zd ZdZddd„ZdS )ÚDMLColumnImplrD   Fc                 K  s   |r|j S |S re   )Úkey)r¾   rC   ri   rc   rD   rD   rE   r§   Ú  s   zDMLColumnImpl._post_coercionN©FrÙ   rD   rD   rD   rE   rU  ×  rõ   rU  c                   @  rð   )ÚConstExprImplrD   Nc                 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ó   rD   rD   rE   rš   ä  s   zConstExprImpl._literal_coercionre   rô   rD   rD   rD   rE   rX  á  rõ   rX  c                   @  s(   e Zd ZdZ	ddd
d„Zddd„ZdS )ÚTruncatedLabelImplrD   NrC   r   rª   r…   r‰   rc   rR   c                 K  s    t |tƒr|S |  |||¡ d S re   rÞ   rÄ   rD   rD   rE   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ó   rD   rD   rE   rš   þ  s   
z$TruncatedLabelImpl._literal_coercionre   rÎ   rá   rD   rD   rD   rE   rZ  ï  s
    ürZ  c                   @  r>  )ÚDDLExpressionImplrD   TNc                 C  rC  re   rD  rù   rD   rD   rE   rú     s   
z DDLExpressionImpl._text_coercionre   r@  rD   rD   rD   rE   r\    rA  r\  c                   @  rE  )ÚDDLConstraintColumnImplrD   NrG  rD   rD   rD   rE   r]    rH  r]  c                   @  rE  )ÚDDLReferredColumnImplrD   NrG  rD   rD   rD   rE   r^    rH  r^  c                   @  r  )ÚLimitOffsetImplrD   NrC   r   rª   r…   r‰   rc   rR   c                 K  s   |d u rd S |   |||¡ d S re   rÃ   rÄ   rD   rD   rE   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¾   rC   r»   r  rc   ÚvaluerD   rD   rE   rš   0  s   
ÿz!LimitOffsetImpl._literal_coercionre   rÎ   rá   rD   rD   rD   rE   r_  !  r  r_  c                      s&   e Zd ZdZ	dd‡ fd
d„Z‡  ZS )ÚLabeledColumnExprImplrD   NrC   r   rª   r…   r‰   rc   rR   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¾   rC   rª   r…   rc   Únewr  rD   rE   r¨   =  s   
ÿÿÿ
z)LabeledColumnExprImpl._implicit_coercionsre   rÎ   )rÑ   rÒ   rÓ   rÔ   r¨   r  rD   rD   r  rE   rc  :  s    ürc  c                      sH   e Zd ZdZdZdZdZe dej	¡Z
	d	‡ fdd„	Zd
dd„Z‡  ZS )ÚColumnsClauseImplrD   Tz^\w\S*$Nc                   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 re   )rË   )r,  ÚerD   rD   rE   Ú	<genexpr>_  s   € z8ColumnsClauseImpl._raise_for_expected.<locals>.<genexpr>z)?r  )r@   r[   Újoinr  r¡   )r¾   rC   r…   rª   rÆ   rc   r  rD   rE   r¡   Y  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…   rl  )rH   Ú_guess_straight_columnÚmatchr   r_   r   rî   )r¾   rC   r…   Úguess_is_literalrD   rD   rE   rú   f  s   
üüÿz ColumnsClauseImpl._text_coercion)NNNre   )rÑ   rÒ   rÓ   rÔ   rÿ   r  rþ   ÚreÚcompileÚIrm  r¡   rú   r  rD   rD   r  rE   rh  P  s    ÿrh  c                   @  rE  )ÚReturnsRowsImplrD   NrG  rD   rD   rD   rE   rs  y  rH  rs  c                      s0   e Zd ZdZddd„Z	dd‡ fdd„Z‡  ZS )ÚStatementImplrD   Nc                 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@   rH   Ú_execute_on_connectionr    r   Úwarn_deprecated)r¾   rª   r�   r…   rc   rD   rD   rE   r§   €  s    
ÿôúøôzStatementImpl._post_coercionrC   r   rª   r…   r‰   rc   rR   c                   s$   |j r|S tƒ j||fd|i|¤ŽS rd  )rè   r  r¨   rÄ   r  rD   rE   r¨   –  s   ÿÿÿz!StatementImpl._implicit_coercionsre   rÎ   )rÑ   rÒ   rÓ   rÔ   r§   r¨   r  rD   rD   r  rE   rt  }  s
    
ürt  c                   @  rP  )ÚSelectStatementImplrD   NrC   r   rª   r…   r‰   rc   rR   c                 K  s    |j r| ¡ S |  |||¡ d S re   )Ú_is_text_clauseÚcolumnsr¡   rÄ   rD   rD   rE   r¨   ¨  s   z'SelectStatementImpl._implicit_coercionsre   rÎ   rS  rD   rD   rD   rE   rx  ¥  rT  rx  c                   @  rE  )Ú
HasCTEImplrD   NrG  rD   rD   rD   rE   r{  µ  rH  r{  c                   @  rE  )Ú	IsCTEImplrD   NrG  rD   rD   rD   rE   r|  ¹  rH  r|  c                   @  s.   e Zd ZdZdZddd„Z		dddd„ZdS )ÚJoinTargetImplrD   TNc                 K  s   |   ||¡ d S re   rÃ   ró   rD   rD   rE   rš   Â  s   z JoinTargetImpl._literal_coercionFrC   r   rª   r…   r‰   ÚlegacyrŠ   rc   rR   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.ru  )Úversion)r@   r   r=  rå   r   rw  r¡   )r¾   rC   rª   r…   r~  rc   rD   rD   rE   r¨   Å  s   
ûz"JoinTargetImpl._implicit_coercionsre   r
  )rC   r   rª   r   r…   r‰   r~  rŠ   rc   r   rR   r   )rÑ   rÒ   rÓ   rÔ   r›   rš   r¨   rD   rD   rD   rE   r}  ½  s    
ûr}  c                   @  s,   e Zd ZdZ			dddd„Zddd„ZdS )ÚFromClauseImplrD   NFTrC   r   rª   r…   r‰   r   rŠ   Úallow_selectrc   rR   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   rw  Ú_implicit_subqueryry  r¡   ©r¾   rC   rª   r…   r   r‚  rc   rD   rD   rE   r¨   æ  s   	ûø	z"FromClauseImpl._implicit_coercionsc                 K  s   |r|  ¡ S |S re   )Ú_deannotate)r¾   rC   Ú
deannotaterc   rD   rD   rE   r§      s   zFromClauseImpl._post_coercionrY  ©rC   r   rª   r   r…   r‰   r   rŠ   r‚  rŠ   rc   r   rR   r   rW  )rÑ   rÒ   rÓ   rÔ   r¨   r§   rD   rD   rD   rE   r�  ã  s    úr�  c                   @  s"   e Zd ZdZ			dddd„ZdS )ÚStrictFromClauseImplrD   NFrC   r   rª   r…   r‰   r   rŠ   r‚  rc   rR   c                 K  s0   |j r|rtjddd� |jS |  |||¡ d S r  )rå   r   rw  r„  r¡   r…  rD   rD   rE   r¨   
  s   
	ûz(StrictFromClauseImpl._implicit_coercions)NFFrˆ  rS  rD   rD   rD   rE   r‰    s    úr‰  c                   @  s   e Zd ZdZddd„ZdS )ÚAnonymizedFromClauseImplrD   FNc                 K  s   |d u sJ ‚|j |d�S )N)Úflat)Ú_anonymous_fromclause)r¾   rC   r‹  r»   rc   rD   rD   rE   r§   #  s   z'AnonymizedFromClauseImpl._post_coercion)FNrÙ   rD   rD   rD   rE   rŠ     rõ   rŠ  c                   @  rÖ   )ÚDMLTableImplrD   c                 K  s   d|j v r
|j d S |S )NÚ	dml_table)Ú_annotationsr½   rD   rD   rE   r§   ,  s   

zDMLTableImpl._post_coercionNrÙ   rD   rD   rD   rE   r�  )  rÚ   r�  c                   @  rP  )ÚDMLSelectImplrD   NrC   r   rª   r…   r‰   rc   rR   c                 K  s:   |j rt|tjƒr|jjr|jS | ¡ S |  |||¡ d S re   )rç   r@   r$   r)  rC   rå   r+  r¡   rÄ   rD   rD   rE   r¨   6  s   
ÿþz!DMLSelectImpl._implicit_coercionsre   rÎ   rS  rD   rD   rD   rE   r�  3  rT  r�  c                      s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚCompoundElementImplrD   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  rD   rE   r¡   L  s   ÿÿÿÿÿz'CompoundElementImpl._raise_for_expectedr  r  rD   rD   r  rE   r‘  I  s    r‘  ÚRoleÚImpl)rO   rH   rP   rH   rQ   rH   rR   rS   )rV   rH   rW   rH   rX   rY   rR   rZ   )ra   rb   rC   r   rc   r   rR   rH   )
ra   rj   rC   r   ri   rk   rc   r   rR   rH   )ra   rm   rC   r   rc   r   rR   rn   )ra   ro   rC   r   rc   r   rR   rp   )ra   rq   rC   r   rc   r   rR   rr   )ra   rs   rC   r   rc   r   rR   r/   )ra   rt   rC   ru   rc   r   rR   rv   )ra   rw   rC   ru   rc   r   rR   rx   )ra   ry   rC   r   rc   r   rR   rz   )ra   r{   rC   r(   rc   r   rR   r*   )ra   r|   rC   r6   rc   r   rR   r6   )ra   r}   rC   r7   rc   r   rR   r7   )ra   r~   rC   r)   rc   r   rR   r5   )
ra   r~   rC   r7   r   rk   rc   r   rR   r8   )ra   r€   rC   r�   rc   r   rR   r3   )ra   r‚   rC   r4   rc   r   rR   r4   )ra   rƒ   rC   r   rc   r   rR   r   )ra   rƒ   rC   r   r„   rˆ   r…   r‰   r†   rŠ   r‡   rŠ   rc   r   rR   r   )ra   rj   rC   r   rc   r   rR   rH   )ra   rq   r®   r¯   rR   r°   )rC   r   r…   r‰   ré   rê   rë   r‰   rÈ   rÉ   rR   r
   )�Ú
__future__r   Úcollections.abcÚabcrG   r  rp  r£   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   ÚSQLRoler:   r<   Ú
StringRoler=   r>   rF   rI   rU   r`   rg   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  rX  rZ  r\  r]  r^  r_  rc  rh  rs  rt  rx  r{  r|  r}  r�  r‰  rŠ  r�  r�  r‘  r”   Údirr»   rœ   ÚclsÚendswithÚreplaceÚglobalsr©   re  Úee_implÚintrŠ   rH   ÚfloatÚpy_typerD   rD   rD   rE   Ú<module>   s\  &ü	ü	ùt6	û(+U			
)(&$	

€
ü