
    ei                       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        rd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jC        ;          ZD ed<e	d=ef         ;          ZE ed>ejF        ;          ZG ed?e;          ZHd@ ZIdA ZJddHZKddNZLeddT            ZMed=dUddY            ZMedd\            ZMed d_            ZMeddb            ZMedde            ZMeddi            ZMeddl            ZMeddo            ZMedds            ZMeddv            ZMeddy            ZMed	d}            ZMed=d~d
d            ZMedd            ZMedd            ZMedd            ZMdddddddZMddZNddZO G d d          ZP G d d          ZQ G d d          ZR G d deP          ZS G d deP          ZTde$jU        ddfddZV G d deP          ZW G d deP          ZX G d deP          ZY G d deP          ZZ G d deP          Z[ G d deP          Z\ G d deTeP          Z] G d de]eP          Z^ G d deP          Z_ G d deTeP          Z` G d deXeTeP          Za G d deXeP          Zb G dÄ deWeP          Zc G dń deSeP          Zd G dǄ deXeP          Ze G dɄ deXeTePejf                  Zg G d˄ degeP          Zh G d̈́ degeP          Zi G dτ deSeP          Zj G dф deP          Zk G dӄ deReP          Zl G dՄ deQeXeP          Zm G dׄ deQeSeP          Zn G dل den          Zo G dۄ deP          Zp G d݄ de]          Zq G d߄ deZeXeP          Zr G d deP          Zs G d deXeP          Zt G d deWeP          Zu G d des          Zv G d deP          Zw G d deP          Zx G d deZeWeP          Zy G d dey          Zz G d dez          Z{ G d deZeWeP          Z| G d deWeP          Z} G d deWeP          Z~i Z ee          D ]cZ eee          Ze                    d          r@e                    dd          Ze e            v r  e            e         e          Zeee<   des&eej                 ZeeeefD ]Zeeej        e         <   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                h    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)elements    8lib/python3.11/site-packages/sqlalchemy/sql/coercions.py_is_literalrG   O   sA     	F,-   5 g344
45    c                   t          | t          j                  r.t          | t                    s| D ]}t	          |          s dS dS t          | t
          t          j        t          t          t          j        j        f           o<t          | d           o+t          | t                     pt          | 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.

    FTrA   )rB   collections_abcr   str_deep_is_literalr   r$   rC   r   r   r    langhelperssymbolrD   type
issubclass)rE   elems     rF   rL   rL   [   s     '?344 Z> >   	 	D#D)) uu 4 ( '	
 	
 		
 	
 !5666	
 7D))) 4g{333rH   	paramnamerK   meth_rst	param_rstreturnCallable[[_F], _F]c                :    t          j        | d|d|d          S )Nz.. warning:: The z argument to z 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)rR   rS   rT   s      rF   _document_text_coercionrY      s2     "	 99hhh	 
 
 
rH   attrnamefnnameargs+Union[Sequence[_T], Sequence[Sequence[_T]]]Sequence[_T]c                4   |rt          |d         t          t          t          f          r_t	          |          dk    rLt          |d         t                    rt          j        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. r^   )rB   listsetdictlenr   ArgumentErrorr   )rZ   r[   r\   s      rF   !_expression_collection_was_a_listre      s    
  -
47T3$566 -3t99>>d1gt$$ 	#4 4 4 4 4 4   NDG,,,%%%rH   roleType[roles.TruncatedLabelRole]rE   r   kwc                    d S N rf   rE   rh   s      rF   expectrm      	     CrH   )as_keyType[roles.DMLColumnRole]ro   Literal[True]c                   d S rj   rk   )rf   rE   ro   rh   s       rF   rm   rm      	     CrH   Type[roles.LiteralValueRole]BindParameter[Any]c                    d S rj   rk   rl   s      rF   rm   rm      rn   rH   !Type[roles.DDLReferredColumnRole]Column[Any]c                    d S rj   rk   rl   s      rF   rm   rm      rn   rH   #Type[roles.DDLConstraintColumnRole]Union[Column[Any], str]c                    d S rj   rk   rl   s      rF   rm   rm      rn   rH   Type[roles.StatementOptionRole]r0   c                    d S rj   rk   rl   s      rF   rm   rm      rn   rH   &Type[roles.LabeledColumnExprRole[Any]]_ColumnExpressionArgument[_T]NamedColumn[_T]c                    d S rj   rk   rl   s      rF   rm   rm      rn   rH   gUnion[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole]]ColumnElement[_T]c                    d S rj   rk   rl   s      rF   rm   rm      s	     CrH   Union[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole], Type[roles.OnClauseRole], Type[roles.ColumnArgumentRole]]ColumnElement[Any]c                    d S rj   rk   rl   s      rF   rm   rm      s	     CrH   Type[roles.DMLTableRole]r)   r+   c                    d S rj   rk   rl   s      rF   rm   rm      rn   rH   Type[roles.HasCTERole]r7   c                    d S rj   rk   rl   s      rF   rm   rm   	  rn   rH   Type[roles.SelectStatementRole]r8   c                    d S rj   rk   rl   s      rF   rm   rm     rn   rH   Type[roles.FromClauseRole]r*   r6   c                    d S rj   rk   rl   s      rF   rm   rm     rn   rH   )explicit_subqueryr   r9   c                   d S rj   rk   )rf   rE   r   rh   s       rF   rm   rm   $  rs   rH   Type[roles.ColumnsClauseRole]_ColumnsClauseArgument[Any]r4   c                    d S rj   rk   rl   s      rF   rm   rm   /  rn   rH   Type[roles.JoinTargetRole]r5   c                    d S rj   rk   rl   s      rF   rm   rm   8  rn   rH   	Type[_SR]c                    d S rj   rk   rl   s      rF   rm   rm   B  rn   rH   F)apply_propagate_attrsargnamepost_inspectdisable_inspectionr   Optional[ClauseElement]r   Optional[str]r   boolr   c          	        | j         rFt          |          r7t          |d          r't          j        || t          j        di ||          S t          |          }|}t          |t          j	        t          j        t          j        t          j        f          sd }	|j        r |j        |fi |}	n|}d}
|j        r#t          ||           rt          |d          rd}
nIt          |d          r9d}
t#          |dd          s|                                }nnt          |d          9|
sy|j        r_|s]t)          j        |d          }|E|r|j         	 |                                }	n&# t.          $ r |                    ||           Y nw xY w|	 |j        |fd|i|}	n-|}	n*t          |t          j                  r |j        di |}	n|}	|Nt4          j        rt          |	t8          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   FrA   Tis_clause_element)raiseerrr   _propagate_attrs)r   original_elementrk   )$allows_lambdacallablerD   r#   LambdaElementLambdaOptions_impl_lookuprB   r"   CompilerElementr$   
SchemaItemFetchedValue	PyWrapper_resolve_literal_only_literal_coercion$_skip_clauseelement_for_target_matchgetattrrA   _use_inspectionr   inspect_post_inspectAttributeError_raise_for_expected_sa__py_wrapper_literaltypingr   r2   r-   r   _role_class	__class____mro___post_coercion_implicit_coercions)rf   rE   r   r   r   r   rh   implr   resolvedr   insps               rF   rm   rm   K  s    	
 W
 GZ((
 $!''B''"7	
 
 
 	
 D$		
  : % +	#-t-g<<<<HH& % 9w-- G%9::
 %)!!g';<< (,%"7,?GG ")"<"<">"> g';<<  % #' P0B P%-gFFFD'' / ..P'+'>'>'@'@HH- P P P 445EwOOOOOP #5t5   )0 46   H #	GW.	/	/ 27288R88( 	Lh):M(JKKKKK$5 	O'($;
 ;
 	O 6>5N!28-555 	*t*!1  	 H 't'h
 
07
;=
 
 	
s   E, , FFc                N    |                     dd            t          | |fddi|S )Nro   T)poprm   rl   s      rF   expect_as_keyr     s5     FF8T$333333rH   expressionsIterable[_DDLColumnArgument]wIterator[Tuple[Union[str, Column[Any]], Optional[ColumnClause[Any]], Optional[str], Optional[Union[Column[Any], str]]]]c              #    K   |D ]}d }d }t          | |          }t          |t                    rt          |t                    sJ |x}}n+g }|j        }t	          j        |i d|i           |r|d         }||n|}||||fV  d S )Ncolumnr   )rm   rB   rK   appendr   traverse)	rf   r   exprstrnamer   r   cols
col_appendadd_elements	            rF    expect_col_expression_collectionr     s        5 5,24,>,>h$$ 	!dC(((((!%%Ghh&(D=A[JhXz,BCCC !a & 2ff44444!5 5rH   c                  V    e Zd ZU dZd ZdZded<   dZdZd Z		 dddZ
	 	 	 	 	 dddZdS )RoleImpl)r   namer   c                    t                      rj   )NotImplementedErrorselfrE   rh   s      rF   r   zRoleImpl._literal_coercion  s    !###rH   Nr   r   Fc                j    || _         |j        | _        t          |t          j                  | _        d S rj   )r   
_role_namer   rP   r   UsesInspectionr   )r   
role_classs     rF   __init__zRoleImpl.__init__  s/    %)	)*e6JKKrH   rE   r   r   r   rh   rU   c                4    |                      |||           d S rj   r   r   rE   r   r   rh   s        rF   r   zRoleImpl._implicit_coercions  s"     	  '8<<<<<rH   Optional[Any]advicecodeerrOptional[Exception]r   c                    |||ur	|d|d}nt          |          }|r| j        d|d|d}	n| j        d|d}	|r|	d|z   z  }	t          j        |	|          |)	Nz object resolved from z objectz expected for argument z; got .z expected, got  )r   )reprr   r   rd   )
r   rE   r   r   r   r   r   rh   gotmsgs
             rF   r   zRoleImpl._raise_for_expected  s     HG$;$;9A777KCCw--C 	<			CC -1IIIsss;C 	 3<C$///S8rH   rj   
rE   r   r   r   r   r   rh   r   rU   r   NNNNNrE   r   r   r   r   r   r   r   r   r   r   r   rh   r   rU   r   )__name__
__module____qualname__	__slots__r   r   __annotations__r   r   r   r   r   rk   rH   rF   r   r     s         :I$ $ $ N!+0(L L L "&	= = = = = "&"& $"#'9 9 9 9 9 9 9rH   r   c                      e Zd ZdZd ZdS )_Deannotaterk   c                $    ddl m}  ||          S )Nr   )_deep_deannotate)r    r   )r   r   rh   r   s       rF   r   z_Deannotate._post_coercion  s%    ******)))rH   Nr   r   r   r   r   rk   rH   rF   r   r     s(        I* * * * *rH   r   c                      e Zd ZdZdZdS )_StringOnlyrk   TN)r   r   r   r   r   rk   rH   rF   r   r   #  s        I rH   r   c                       e Zd ZdZddZd ZdS )_ReturnsStringKeyrk   Nc                b    t          |t                    r|S |                     |||           d S rj   rB   rK   r   r   s        rF   r   z%_ReturnsStringKey._implicit_coercions,  s8    gs## 	AN$$Wgx@@@@@rH   c                    |S rj   rk   r   s      rF   r   z#_ReturnsStringKey._literal_coercion2      rH   rj   r   r   r   r   r   r   rk   rH   rF   r   r   )  s@        IA A A A    rH   r   c                       e Zd ZdZd ZddZdS )_ColumnCoercionsrk   c                .    t          j        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   s    rF   "_warn_for_scalar_subquery_coercionz3_ColumnCoercions._warn_for_scalar_subquery_coercion9  s%    		
 	
 	
 	
 	
rH   Nc                   |}t          |dd          s|                     |||           d S |j        r(|                                  |                                S |j        rGt          |t          j                  r-|                                  |j	                                        S | j
        j        r	|j        r|S |                     |||           d S )Nr   F)r   r   _is_select_baser  scalar_subquery_is_from_clauserB   r%   r9   rE   r   r   _is_lambda_element)r   rE   r   r   rh   r   s         rF   r   z$_ColumnCoercions._implicit_coercions@  s    "x!4e<< 	J$$%5wIIIII% 	J33555++---% 	J*j)+
 +
 	J 33555#33555+ 	J0K 	JO$$%5wIIIIIrH   rj   )r   r   r   r   r  r   rk   rH   rF   r  r  6  sB        I
 
 
J J J J J JrH   r  exc_clsType[exc.SQLAlchemyError]extrar   r   r   c                h     |dt          j        |           |rd|nd|rd|z  nddz            |)Nzc%(extra)sTextual SQL expression %(expr)r %(argname)sshould be explicitly declared as text(%(expr)r)for argument  z%s )r   r   r  )r    ellipses_string)rE   r   r  r  r   s        rF   _no_text_coercionr  R  sf     '	0 (119@HHGG55b&+3UU]]
 
	
  rH   c                      e Zd ZdZddZdS )_NoTextCoercionrk   Nc                    t          |t                    r1t          t          j        | j                  rt          ||           d S |                     ||           d S rj   )rB   rK   rP   r"   
TextClauser   r  r   r   rE   r   rh   s       rF   r   z!_NoTextCoercion._literal_coerciong  sd    gs## 	7
!1)
 )
 	7 gw/////$$Wg66666rH   rj   r   r   r   r   r   rk   rH   rF   r  r  d  s-        I7 7 7 7 7 7rH   r  c                  .    e Zd ZdZdZdZdZddZddZdS )_CoerceLiteralsrk   FNc                "    t          ||          S rj   r  r   rE   r   s      rF   _text_coercionz_CoerceLiterals._text_coercionv       '222rH   c                   t          |t                    r2| j        r|dk    rt          j        dd          S  | j        ||fi |S | j        rC|t          j                    S |du rt          j                    S |du rt          j	                    S | j
        r=t          |t          j                  r#t          j        t          |          d          S |                     ||           d S )N*T)
is_literalF)rB   rK   _coerce_starr"   r.   r   _coerce_constsNullFalse_True__coerce_numericsnumbersNumberr   r  s       rF   r   z!_CoerceLiterals._literal_coerciony  s    gs## 	C  CW^^,STBBBB*t*7GBBrBBB 	(}&E!!(((D~'''  	HZ'.%J%J 	H(W$GGGG  '22222rH   rj   )	r   r   r   r   r&  r%  r*  r   r   rk   rH   rF   r  r  p  sQ        INL3 3 3 33 3 3 3 3 3rH   r  c                  &    e Zd ZdZ	 	 ddZddZdS )LiteralValueImplTNFc                t    t          |          s | j        |f||d| t          j        d ||d|          S )N)r   r   T)type_uniqueliteral_execute)rG   r   r"   r,   )r   rE   r   r   r0  r2  rh   s          rF   r   z$LiteralValueImpl._implicit_coercions  sp     8$$ 	$D$"*G ?A   %+
 
 
 	
rH   c                    |S rj   rk   )r   rE   r   r0  rh   s        rF   r   z"LiteralValueImpl._literal_coercion  r  rH   NFNN)r   r   r   r   r   r   rk   rH   rF   r.  r.    sJ          
 
 
 
,     rH   r.  c                  0     e Zd ZdZ	 	 	 	 	 dd fdZ xZS )_SelectIsNotFromrk   NrE   r   r   r   r   r   r   r   r   r   rh   rU   r   c           	         |st          |t          j                  st          |t          j                  rd||j        n|d}d}nd } t	                      j        |f|||||d| J )NzTo create a FROM clause from a z$ object, use the .subquery() method.89ve)r   r   r   r   r   )rB   r   SelectStatementRoler   superr   )	r   rE   r   r   r   r   r   rh   r   s	           rF   r   z$_SelectIsNotFrom._raise_for_expected  s     	7E$=>>	 (E$=>>	 *2)=8%%7JJM 
 DDD##	
	
 	
 	
 	
 	
 	rH   r   r   r   r   r   r   r   __classcell__r   s   @rF   r7  r7    sX        I
 "&"& $"#'" " " " " " " " " " "rH   r7  c                  $    e Zd ZdZ	 ddd
Zd ZdS )HasCacheKeyImplrk   NrE   r   r   r   r   rh   rU   c                b    t          |t                    r|S |                     |||           d S rj   )rB   r   r   r   s        rF   r   z#HasCacheKeyImpl._implicit_coercions  s:     g{++ 	AN$$Wgx@@@@@rH   c                    |S rj   rk   r   s      rF   r   z!HasCacheKeyImpl._literal_coercion  r  rH   rj   r   r  rk   rH   rF   r@  r@    K        I "&	
A 
A 
A 
A 
A    rH   r@  c                  $    e Zd ZdZ	 ddd
Zd ZdS )ExecutableOptionImplrk   NrE   r   r   r   r   rh   rU   c                b    t          |t                    r|S |                     |||           d S rj   )rB   r   r   r   s        rF   r   z(ExecutableOptionImpl._implicit_coercions  s;     g/00 	AN$$Wgx@@@@@rH   c                    |S rj   rk   r   s      rF   r   z&ExecutableOptionImpl._literal_coercion  r  rH   rj   r   r  rk   rH   rF   rE  rE    rC  rH   rE  c                  .     e Zd ZdZ	 ddZd fd	Z xZS )ExpressionElementImplrk   NFc                    ||s||j         st          j                    S 	 t          j        |||d|          S # t          j        $ r"}|                     ||           Y d }~d S d }~ww xY w)NT)r1  _is_crudr   )should_evaluate_noner"   r'  r,   r   rd   r   )r   rE   r   r0  r   is_crudrh   r   s           rF   r   z'ExpressionElementImpl._literal_coercion  s     O e&@
 =??";-'5    $ ; ; ;((c(:::::::::;s   ; A,
A''A,c                    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   )rB   r%   Valuesr   AnonymizedFromClauseRoler;  r   r   rE   r   r   rh   r   r   s         rF   r   z)ExpressionElementImpl._raise_for_expected  s    gz011 	3 F !?@@ 	> F
 F*uww*
$x
 
JL
 
 	
rH   NNNFr5  )r   r   r   r   r   r   r=  r>  s   @rF   rI  rI    s]        I EJ; ; ; ;(
 
 
 
 
 
 
 
 
 
rH   rI  c                  $    e Zd ZdZ	 ddZddZdS )BinaryElementImplrk   Nc                    	 |                     |||          S # t          j        $ r"}|                     ||           Y d }~d S d }~ww xY w)N)r0  rL  )_bind_paramr   rd   r   )r   rE   r   operatorbindparam_typer   rh   r   s           rF   r   z#BinaryElementImpl._literal_coercion'  so    	7##Hg^#LLL  	7 	7 	7$$W#$666666666	7s    AAAc                r    |j         j        r*|j         j        s|                    ||n|j                   }|S rj   )rO   _isnull_with_binary_element_type)r   r   r   rZ  rh   s        rF   r   z BinaryElementImpl._post_coercion/  sE    =  	): 	99"0"<$) H rH   r5  rj   )r   r   r   r   r   r   rk   rH   rF   rV  rV  $  sH        I EI7 7 7 7     rH   rV  c                  0    e Zd ZdZ	 ddd
Zd Zd Zd ZdS )InElementImplrk   NrE   r   r   r   r   rh   rU   c                H   |j         rt          |t          j                  r4|j        j        r(|                     |            | j        |j        fi |S |                     |            | j        |                                fi |S | 	                    |||           d S rj   )
r  rB   r%   AliasrE   r	  _warn_for_implicit_coercionr   selectr   r   s        rF   r   z!InElementImpl._implicit_coercions:  s     # 	A8Z%566D$4D 00:::*t*8+;BBrBBB00:::*t*8??+<+<CCCCC$$Wgx@@@@@rH   c                H    t          j        d|j        j        z             d S )Nz_Coercing %s object into a select() for use in IN(); please pass a select() construct explicitly)r    r  r   r   )r   rQ   s     rF   rb  z)InElementImpl._warn_for_implicit_coercionN  s2    	:~&(	
 	
 	
 	
 	
rH   c                   t          |t          j                  rt          |t                    si t	          |          }|D ]X}t          |          s/t          |t          j                  s | j        |fi | :||<   @|t          j
                    |<   Yrt          j        fd|D              S                     |d          S  | j        |fi | d S )Nc                T    g | ]$}|v r|         n                     |          %S rk   )rX  ).0or   non_literal_expressionsrY  s     rF   
<listcomp>z3InElementImpl._literal_coercion.<locals>.<listcomp>j  sT          777 022!--h::  rH   T)	expanding)rB   rJ   r   rK   r`   rG   r   ColumnOperatorsr   r"   r'  
ClauseListrX  )r   rE   r   rY  rh   rh  ri  s     ``  @rF   r   zInElementImpl._literal_coercionU  sN   g788 	4SB
 B
 	4  $ 7mmG A A"1~~ A%a)BCC 700??B???? 67/22Y19+A.& 
K*      ")	    '''T'JJJ %D$W3333333rH   c                   |j         r|                                S t          |t          j                  r0t          |j                  dk    rJ |                    |          S t          |t          j                  r&|	                    d          }d|_
        ||_        |S t          |t          j                  r|                                S |S )Nr   )againstT)maintain_key)r	  r
  rB   r"   rm  rc   clauses
self_groupr,   _clonerk  	expand_opr%   rQ  scalar_values)r   rE   r   rY  rh   s        rF   r   zInElementImpl._post_coercionw  s    " 	 **,,,!455 	7?++q0000%%h%777!788 		nn$n77G $G (GN!233 	((***NrH   rj   r   )r   r   r   r   r   rb  r   r   rk   rH   rF   r_  r_  7  sj        I "&	A A A A A(
 
 
 4  4  4D    rH   r_  c                  (    e Zd ZdZdZ	 ddZddZdS )	OnClauseImplrk   TNFc                0    |                      |           d S rj   r   )r   rE   r   r0  r   rN  rh   s          rF   r   zOnClauseImpl._literal_coercion  s     	  )))))rH   c                >    t          |t          j                  r|S |S rj   )rB   r   JoinTargetRole)r   r   r   rh   s       rF   r   zOnClauseImpl._post_coercion  s%     &(<== 	$##rH   rT  rj   )r   r   r   r   r&  r   r   rk   rH   rF   rw  rw    sM        IN EJ* * * *
     rH   rw  c                      e Zd ZdZdZddZdS )WhereHavingImplrk   TNc                "    t          ||          S rj   r  r  s      rF   r   zWhereHavingImpl._text_coercion  r!  rH   rj   r   r   r   r   r&  r   rk   rH   rF   r|  r|    s2        IN3 3 3 3 3 3rH   r|  c                      e Zd ZdZdZddZdS )StatementOptionImplrk   TNc                *    t          j        |          S rj   r"   r  r  s      rF   r   z"StatementOptionImpl._text_coercion  s    "7+++rH   rj   r~  rk   rH   rF   r  r    s2        IN, , , , , ,rH   r  c                      e Zd ZdZdS )ColumnArgumentImplrk   Nr   r   r   r   rk   rH   rF   r  r            IIIrH   r  c                      e Zd ZdZdS )ColumnArgumentOrKeyImplrk   Nr  rk   rH   rF   r  r    r  rH   r  c                      e Zd ZdZddZdS )StrAsPlainColumnImplrk   Nc                *    t          j        |          S rj   )r"   r.   r  s      rF   r   z#StrAsPlainColumnImpl._text_coercion  s    $W---rH   rj   )r   r   r   r   r   rk   rH   rF   r  r    s-        I. . . . . .rH   r  c                      e Zd ZdZdZddZdS )ByOfImplrk   TNc                *    t          j        |          S rj   )r"   _textual_label_referencer  s      rF   r   zByOfImpl._text_coercion  s    0999rH   rj   r~  rk   rH   rF   r  r    s2        IN: : : : : :rH   r  c                      e Zd ZdZd ZdS )OrderByImplrk   c                f    t          || j                  r|j        t          j        |          S |S rj   )rB   r   _order_by_label_elementr"   _label_reference)r   r   rh   s      rF   r   zOrderByImpl._post_coercion  s6    x!122	0<,X666OrH   Nr   rk   rH   rF   r  r    s(        I    rH   r  c                      e Zd ZdZ	 ddd
ZdS )GroupByImplrk   NrE   r   r   r   r   rh   rU   c                J    t          |          rt          j        |j         S |S rj   )r   r"   rm  cr   s        rF   r   zGroupByImpl._implicit_coercions  s)     (## 	&
33OrH   rj   r   r   r   r   r   r   rk   rH   rF   r  r    s7        I "&	
 
 
 
 
 
 
rH   r  c                      e Zd ZdZddZdS )DMLColumnImplrk   Fc                    |r|j         S |S rj   )key)r   rE   ro   rh   s       rF   r   zDMLColumnImpl._post_coercion  s     	;NrH   NFr   rk   rH   rF   r  r    s-        I     rH   r  c                      e Zd ZdZddZdS )ConstExprImplrk   Nc                    |t          j                    S |du rt          j                    S |du rt          j                    S |                     ||           d S NFT)r"   r'  r(  r)  r   r  s       rF   r   zConstExprImpl._literal_coercion  s_    ?=??"?$$$__>###$$Wg66666rH   rj   r  rk   rH   rF   r  r    s-        I7 7 7 7 7 7rH   r  c                  &    e Zd ZdZ	 ddd
ZddZdS )TruncatedLabelImplrk   NrE   r   r   r   r   rh   rU   c                b    t          |t                    r|S |                     |||           d S rj   r   r   s        rF   r   z&TruncatedLabelImpl._implicit_coercions  s:     gs## 	AO$$Wgx@@@@@rH   c                b    t          |t          j                  r|S t          j        |          S )zcoerce the given value to :class:`._truncated_label`.

        Existing :class:`._truncated_label` and
        :class:`._anonymous_label` objects are passed
        unchanged.
        )rB   r"   _truncated_labelr  s       rF   r   z$TruncatedLabelImpl._literal_coercion  s/     gx899 	6N,W555rH   rj   r   r  rk   rH   rF   r  r     sP        I "&	
A 
A 
A 
A 
A6 6 6 6 6 6rH   r  c                      e Zd ZdZdZddZdS )DDLExpressionImplrk   TNc                *    t          j        |          S rj   r  r  s      rF   r   z DDLExpressionImpl._text_coercion"  s    
 "7+++rH   rj   r~  rk   rH   rF   r  r    s2        IN, , , , , ,rH   r  c                      e Zd ZdZdS )DDLConstraintColumnImplrk   Nr  rk   rH   rF   r  r  *  r  rH   r  c                      e Zd ZdZdS )DDLReferredColumnImplrk   Nr  rk   rH   rF   r  r  .  r  rH   r  c                  $    e Zd ZdZ	 ddd
Zd ZdS )LimitOffsetImplrk   NrE   r   r   r   r   rh   rU   c                <    |d S |                      |||           d S rj   r   r   s        rF   r   z#LimitOffsetImpl._implicit_coercions5  s-     4$$Wgx@@@@@rH   c                b    |d S t          j        |          }t          j        |||d          S )NT)r0  r1  )r    asintr%   _OffsetLimitParam)r   rE   r   r0  rh   values         rF   r   z!LimitOffsetImpl._literal_coercionA  s>    ?4Jw''E/e5   rH   rj   r   r  rk   rH   rF   r  r  2  sK        I "&	
A 
A 
A 
A 
A    rH   r  c                  (     e Zd ZdZ	 dd fd
Z xZS )LabeledColumnExprImplrk   NrE   r   r   r   r   rh   rU   c                ,   t          |t          j                  r|                    d           S  t	                      j        ||fd|i|}t          |t          j                  r|                    d           S |                     |||           d S Nr   )rB   r   ExpressionElementRolelabelr;  r   r   )r   rE   r   r   rh   newr   s         rF   r   z)LabeledColumnExprImpl._implicit_coercionsN  s     h ;<< 		E>>$'''-%''- +268 C #u:;; Eyy&(('8DDDDDrH   rj   r   )r   r   r   r   r   r=  r>  s   @rF   r  r  K  sW        I "&	E E E E E E E E E E ErH   r  c                  f     e Zd ZdZdZdZdZ ej        dej	                  Z
	 d fd	ZddZ xZS )	ColumnsClauseImplrk   Tz^\w\S*$Nc                    |s8t          |t                    r#dd                    d |D                        d} t                      j        |f|||d|S )NzDid you mean to say select(z, c              3  4   K   | ]}t          |          V  d S rj   )r   )rg  es     rF   	<genexpr>z8ColumnsClauseImpl._raise_for_expected.<locals>.<genexpr>p  s(      66T!WW666666rH   z)?rP  )rB   r`   joinr;  r   )r   rE   r   r   r   rh   r   s         rF   r   z%ColumnsClauseImpl._raise_for_expectedj  s      	*Wd33 	;9966g66666; ; ; 
 +uww*
$x
 
JL
 
 	
rH   c                    t          |          }| j                            |           }t          j        dt          j        |          |rd|nd|rdnddz            )NzTextual 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   r  )rK   _guess_straight_columnmatchr   rd   r    r  )r   rE   r   guess_is_literals       rF   r   z ColumnsClauseImpl._text_coercionw  s    g,,#:@@III#
 .w77=DLL99"##"2"2 	

 
 	
rH   )NNNrj   )r   r   r   r   r&  r*  r%  recompileIr  r   r   r=  r>  s   @rF   r  r  a  s        INL'RZ
BD99 <@
 
 
 
 
 

 
 
 
 
 
 
 
rH   r  c                      e Zd ZdZdS )ReturnsRowsImplrk   Nr  rk   rH   rF   r  r    r  rH   r  c                  0     e Zd ZdZddZ	 dd fdZ xZS )StatementImplrk   Nc                    ||urFt          |t                    s1	 |j         n(# t          $ r t	          j        d|z  d           Y nw xY 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)rB   rK   _execute_on_connectionr   r    warn_deprecated)r   r   r   r   rh   s        rF   r   zStatementImpl._post_coercion  s    +++Jc5
 5
+
 777! 
 
 
$ "22 	 	 	 	 	
 s   # "AArE   r   r   r   r   rh   rU   c                P    |j         r|S  t                      j        ||fd|i|S r  )r  r;  r   )r   rE   r   r   rh   r   s        rF   r   z!StatementImpl._implicit_coercions  sJ     & 	O.577. +268  rH   rj   r   )r   r   r   r   r   r   r=  r>  s   @rF   r  r    s`        I   4 "&	          rH   r  c                      e Zd ZdZ	 ddd
ZdS )SelectStatementImplrk   NrE   r   r   r   r   rh   rU   c                j    |j         r|                                S |                     |||           d S rj   )_is_text_clausecolumnsr   r   s        rF   r   z'SelectStatementImpl._implicit_coercions  s@     # 	A##%%%$$Wgx@@@@@rH   rj   r   r  rk   rH   rF   r  r    s>        I "&	
A 
A 
A 
A 
A 
A 
ArH   r  c                      e Zd ZdZdS )
HasCTEImplrk   Nr  rk   rH   rF   r  r    r  rH   r  c                      e Zd ZdZdS )	IsCTEImplrk   Nr  rk   rH   rF   r  r    r  rH   r  c                  ,    e Zd ZdZdZddZ	 	 dddZdS )JoinTargetImplrk   TNc                2    |                      ||           d S rj   r   r  s       rF   r   z JoinTargetImpl._literal_coercion  s      '22222rH   FrE   r   r   r   r   legacyr   rh   rU   c                    t          |t          j                  r|S |r|j        rt	          j        dd           |S |                     |||           d S NzImplicit 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.r  )version)rB   r   rz  r	  r    r  r   )r   rE   r   r   r  rh   s         rF   r   z"JoinTargetImpl._implicit_coercions  s~     gu344 	A N 	A0 	A 6     O$$Wgx@@@@@rH   rj   r4  )rE   r   r   r   r   r   r  r   rh   r   rU   r   )r   r   r   r   r   r   r   rk   rH   rF   r  r    s[        I+/(3 3 3 3 "&A A A A A A ArH   r  c                  *    e Zd ZdZ	 	 	 dddZddZdS )FromClauseImplrk   NFTrE   r   r   r   r   r   r   allow_selectrh   rU   c                    |j         r7|r|                                S |rt          j        dd           |j        S d S |j        r|S |                     |||           d S r  )r	  subqueryr    r  _implicit_subqueryr  r   r   rE   r   r   r   r  rh   s          rF   r   z"FromClauseImpl._implicit_coercions  s     # 	A  
3((*** 3$: "     223 3 % 	AO$$Wgx@@@@@rH   c                2    |r|                                 S |S rj   )_deannotate)r   rE   
deannotaterh   s       rF   r   zFromClauseImpl._post_coercion  s!     	&&(((NrH   r  rE   r   r   r   r   r   r   r   r  r   rh   r   rU   r   r  )r   r   r   r   r   r   rk   rH   rF   r  r    sV        I "&"'!A A A A A4     rH   r  c                  "    e Zd ZdZ	 	 	 dddZdS )StrictFromClauseImplrk   NFrE   r   r   r   r   r   r   r  rh   rU   c                    |j         r|rt          j        dd           |j        S |                     |||           d S r  )r	  r    r  r  r   r  s          rF   r   z(StrictFromClauseImpl._implicit_coercions  se     # 
	A 
	A #     ..$$Wgx@@@@@rH   )NFFr  r  rk   rH   rF   r  r    sD        I "&"'"A A A A A A ArH   r  c                      e Zd ZdZddZdS )AnonymizedFromClauseImplrk   FNc                6    |J |                     |          S )N)flat)_anonymous_fromclause)r   rE   r  r   rh   s        rF   r   z'AnonymizedFromClauseImpl._post_coercion4  s"    |||,,$,777rH   )FNr   rk   rH   rF   r  r  1  s-        I8 8 8 8 8 8rH   r  c                      e Zd ZdZd ZdS )DMLTableImplrk   c                2    d|j         v r|j         d         S |S )N	dml_table)_annotationsr   s      rF   r   zDMLTableImpl._post_coercion=  s#    '...'44NrH   Nr   rk   rH   rF   r  r  :  s(        I    rH   r  c                      e Zd ZdZ	 ddd
ZdS )DMLSelectImplrk   NrE   r   r   r   r   rh   rU   c                    |j         rAt          |t          j                  r|j        j        r|j        S |                                S |                     |||           d S rj   )r  rB   r%   ra  rE   r	  rc  r   r   s        rF   r   z!DMLSelectImpl._implicit_coercionsG  sl     # 		A8Z%566)$4)  ''((($$Wgx@@@@@rH   rj   r   r  rk   rH   rF   r  r  D  s>        I "&	A A A A A A ArH   r  c                  $     e Zd ZdZd fd	Z xZS )CompoundElementImplrk   Nc                    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.rP  )rB   r   FromClauseRole_is_subqueryr;  r   rS  s         rF   r   z'CompoundElementImpl._raise_for_expected]  sz    gu344 	# 7  P  F*uww*
$x
 
JL
 
 	
rH   r5  r<  r>  s   @rF   r  r  Z  sB        I
 
 
 
 
 
 
 
 
 
rH   r  RoleImpl)rR   rK   rS   rK   rT   rK   rU   rV   )rZ   rK   r[   rK   r\   r]   rU   r^   )rf   rg   rE   r   rh   r   rU   rK   )
rf   rp   rE   r   ro   rq   rh   r   rU   rK   )rf   rt   rE   r   rh   r   rU   ru   )rf   rw   rE   r   rh   r   rU   rx   )rf   rz   rE   r   rh   r   rU   r{   )rf   r}   rE   r   rh   r   rU   r0   )rf   r   rE   r   rh   r   rU   r   )rf   r   rE   r   rh   r   rU   r   )rf   r   rE   r   rh   r   rU   r   )rf   r   rE   r)   rh   r   rU   r+   )rf   r   rE   r7   rh   r   rU   r7   )rf   r   rE   r8   rh   r   rU   r8   )rf   r   rE   r*   rh   r   rU   r6   )
rf   r   rE   r8   r   rq   rh   r   rU   r9   )rf   r   rE   r   rh   r   rU   r4   )rf   r   rE   r5   rh   r   rU   r5   )rf   r   rE   r   rh   r   rU   r   )rf   r   rE   r   r   r   r   r   r   r   r   r   rh   r   rU   r   )rf   rp   rE   r   rh   r   rU   rK   )rf   rz   r   r   rU   r   )rE   r   r   r   r  r  r  r   r   r   rU   r   )
__future__r   collections.abcabcrJ   r+  r  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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   SQLRoler;   r=   
StringRoler>   r?   rG   rL   rY   re   rm   r   r   r   r   r   r   r  rd   r  r  r  r.  r7  r@  rE  rI  rV  r_  rw  r|  r  r  r  r  ByOfRoler  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   dirr   r   clsendswithreplaceglobalsr   r  ee_implintr   rK   floatpy_typerk   rH   rF   <module>r     s   # " " " " " ) ) ) ) ) )  				                                                                                                                          # # # # # # " " " " " "       " " " " " "                         ! ! ! ! ! !	 0222222//////++++++******,,,,,,%%%%%%''''''''''''&&&&&&''''''------%%%%%%++++++111111//////&&&&&&""""""&&&&&&$$$$$$//////ge5=)))WT#s(+,,,w~U-=>>>WT	5 	5 	5# # #L    & & & &$ 
   
 

  	     
 
   
 
   
 
   
 
   
 
   
 
	 	 	 
	 
   
 
   
 
   
 
   
 
   
 

 (+	     
 
   
 
   
 
   
 6:!$q
 q
 q
 q
 q
 q
h4 4 4 45 5 5 5<39 39 39 39 39 39 39 39l* * * * * * * *! ! ! ! ! ! ! !
 
 
 
 
 
 
 
J J J J Jx J J J< "),):#    $	7 	7 	7 	7 	7h 	7 	7 	73 3 3 3 3h 3 3 3<    x   :% % % % %x % % %P    h   &    8   &(
 (
 (
 (
 (
,h (
 (
 (
V    -x   &R R R R RH R R Rj    #X   *3 3 3 3 3o'7 3 3 3, , , , ,/8 , , ,    (       /   . . . . .?H . . .: : : : : 0(EN : : :
 
 
 
 
(H 
 
 
    (H        %x   7 7 7 7 7H 7 7 76 6 6 6 6h 6 6 6:
, 
, 
, 
, 
,_h 
, 
, 
,    k+<h       3       h   2E E E E E1 E E E,&
 &
 &
 &
 &
(/8 &
 &
 &
R    h   % % % % %OX % % %PA A A A A/8 A A A               #A #A #A #A #AX #A #A #AL! ! ! ! !% ! ! !HA A A A A> A A A28 8 8 8 83 8 8 8    #_h   A A A A AOX A A A,
 
 
 
 
/8 
 
 
*  CJJ % %D
'%

C}}V %||FF++7799"7799T?3''D $L E567GsE* E E=DU09::	E EE ErH   