U
    uiN                  
   @  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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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@dAdBdCdDZIdEdF ZJdGdGdGdHdIdJdKZKdGdGdLdMdNdOdPZLedQd@d@dGdRdSdTZMed=dUdVd@dWd@dGdXdYdTZMedZd@d@d[dRd\dTZMed]d@d@d^dRd_dTZMed`d@d@d^dRdadTZMedbd@d@dcdRdddTZMededfd@dgdRdhdTZMedidjd@dkdRdldTZMedmd@d@dndRdodTZMedpdqd@drdRdsdTZMedtdud@dudRdvdTZMedwdxd@dxdRdydTZMedzd{d@d|dRd}dTZMed=d~dzdxdWd@ddddTZMeddd@ddRddTZMeddd@ddRddTZMedd@d@d@dRddTZMddddddd@dddAdAd@d@dddTZMdVd@d@dGdRddZNd`dddddZOG dd dZPG dd dZQG dd dZRG dd dePZSG dd dePZTde#jUddfd@ddddddddZVG dd dePZWG dd dePZXG dd dePZYG dd dePZZG dd dePZ[G dd dePZ\G dd deTePZ]G dd de]ePZ^G dd dePZ_G dd deTePZ`G dd deXeTePZaG dd deXePZbG dd deWePZcG ddÄ deSePZdG ddń deXePZeG ddǄ deXeTePejfZgG ddɄ degePZhG dd˄ degePZiG dd̈́ deSePZjG ddτ dePZkG ddф deRePZlG ddӄ deQeXePZmG ddՄ deQeSePZnG ddׄ denZoG ddل dePZpG ddۄ de]ZqG dd݄ deZeXePZrG dd߄ dePZsG dd deXePZtG dd deWePZuG dd desZvG dd dePZwG dd dePZxG dd deZeWePZyG dd deyZzG dd dezZ{G dd deZeWePZ|G dd deWePZ}G dd deWePZ~i ZeeD ]JZeeeZedrNeddZee krNe e eZeee< qNeseej ZeeeefD ]Zeeeje < qd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)_OnlyColumnArgument)_DMLTableElement)BindParameter)ClauseElement)ColumnClause)ColumnElement)NamedColumn)SQLCoreOperations)
TextClause)Column)_ColumnsClauseElement)_JoinTargetProtocol)
FromClause)HasCTE)
SelectBase)Subquery)_TraverseCallableType_SR)bound_F._StringOnlyR_Tr   bool)elementreturnc                 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)r@    rF   R/home/lhs5088/backend/venv/lib/python3.8/site-packages/sqlalchemy/sql/coercions.py_is_literalO   s    
rH   c                 C  sr   t | tjr2t | ts2| D ]}t|s dS qdS t | ttjtt	t
jjf opt| d opt | t ppt| 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.

    FTrB   )rC   collections_abcr   str_deep_is_literalr   r"   rD   r   r   r   ZlanghelperssymbolrE   type
issubclass)r@   elemrF   rF   rG   rK   [   s,    
 


rK   rJ   zCallable[[_F], _F])	paramnamemeth_rst	param_rstrA   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   Zadd_parameter_text)rP   rQ   rR   rF   rF   rG   _document_text_coercion   s    rS   z+Union[Sequence[_T], Sequence[Sequence[_T]]]Sequence[_T])attrnamefnnameargsrA   c                 C  sb   |rXt |d tttfrXt|dkrXt |d trJt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. rT   )rC   listsetdictlenr   ArgumentErrorr   )rU   rV   rW   rF   rF   rG   !_expression_collection_was_a_list   s    $r]   zType[roles.TruncatedLabelRole])roler@   kwrA   c                 K  s   d S NrF   r^   r@   r_   rF   rF   rG   expect   s    rb   as_keyzType[roles.DMLColumnRole]zLiteral[True])r^   r@   rd   r_   rA   c                K  s   d S r`   rF   )r^   r@   rd   r_   rF   rF   rG   rb      s    zType[roles.LiteralValueRole]zBindParameter[Any]c                 K  s   d S r`   rF   ra   rF   rF   rG   rb      s    z!Type[roles.DDLReferredColumnRole]zUnion[Column[Any], str]c                 K  s   d S r`   rF   ra   rF   rF   rG   rb      s    z#Type[roles.DDLConstraintColumnRole]c                 K  s   d S r`   rF   ra   rF   rF   rG   rb      s    zType[roles.StatementOptionRole]z%Union[ColumnElement[Any], TextClause]c                 K  s   d S r`   rF   ra   rF   rF   rG   rb      s    z&Type[roles.LabeledColumnExprRole[Any]]z=Union[_ColumnExpressionArgument[_T], _OnlyColumnArgument[_T]]zNamedColumn[_T]c                 K  s   d S r`   rF   ra   rF   rF   rG   rb      s    zgUnion[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole]]z_ColumnExpressionArgument[_T]zColumnElement[_T]c                 K  s   d S r`   rF   ra   rF   rF   rG   rb      s    	zUnion[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole], Type[roles.OnClauseRole], Type[roles.ColumnArgumentRole]]zColumnElement[Any]c                 K  s   d S r`   rF   ra   rF   rF   rG   rb      s    zType[roles.DMLTableRole]r'   r*   c                 K  s   d S r`   rF   ra   rF   rF   rG   rb      s    zType[roles.HasCTERole]r6   c                 K  s   d S r`   rF   ra   rF   rF   rG   rb      s    zType[roles.SelectStatementRole]r7   c                 K  s   d S r`   rF   ra   rF   rF   rG   rb     s    zType[roles.FromClauseRole]r(   r5   c                 K  s   d S r`   rF   ra   rF   rF   rG   rb     s    )explicit_subqueryr8   )r^   r@   re   r_   rA   c                K  s   d S r`   rF   )r^   r@   re   r_   rF   rF   rG   rb     s    zType[roles.ColumnsClauseRole]z_ColumnsClauseArgument[Any]r3   c                 K  s   d S r`   rF   ra   rF   rF   rG   rb   !  s    zType[roles.JoinTargetRole]r4   c                 K  s   d S r`   rF   ra   rF   rF   rG   rb   )  s    z	Type[_SR]c                 K  s   d S r`   rF   ra   rF   rF   rG   rb   2  s    F)apply_propagate_attrsargnamepost_inspectdisable_inspectionzOptional[ClauseElement]Optional[str])r^   r@   rf   rg   rh   ri   r_   rA   c                K  s  | j r2t|r2t|dr2tj|| tjf ||dS t|  }|}t|tj	t
jt
jtjfsRd }	|jrt|j|f|}	n|}d}
|jrt|| rt|drd}
n(t|drd}
t|dds| }qqq|
sL|jr*|s*tj|dd}|d k	r*|r|j z| }	W n" tk
r(   ||| Y nX |	d krP|j|fd|i|}	n|}	n t|tjrn|jf |}	n|}	|d k	rtjrt|	ttfst|jst|	d	d r|	j|_|j |	j!j"kr|j#r|j#|	f||d
|}	|	S |j$||	fd|i|S d S )N__code__)rf   FrB   Tis_clause_element)Zraiseerrrg   _propagate_attrs)rg   original_element)%allows_lambdacallablerE   r!   ZLambdaElementZLambdaOptions_impl_lookuprC   r    ZCompilerElementr"   Z
SchemaItemZFetchedValueZ	PyWrapper_resolve_literal_only_literal_coercion$_skip_clauseelement_for_target_matchgetattrrB   _use_inspectionr   inspectZ_post_inspectAttributeError_raise_for_expectedZ_sa__py_wrapper_literaltypingr   r0   r,   AssertionErrorrm   _role_class	__class____mro___post_coercion_implicit_coercions)r^   r@   rf   rg   rh   ri   r_   implrn   resolvedrl   ZinsprF   rF   rG   rb   :  s    	
		





   c                 K  s"   | dd  t| |fddi|S )Nrd   T)poprb   ra   rF   rF   rG   expect_as_key  s    r   zIterable[_DDLColumnArgument]zwIterator[Tuple[Union[str, Column[Any]], Optional[ColumnClause[Any]], Optional[str], Optional[Union[Column[Any], str]]]])r^   expressionsrA   c           	      c  s   |D ]~}d }d }t | |}t|tr<t|ts2t| }}n(g }|j}t|i d|i |rd|d }|d k	rp|n|}||||fV  qd S )Ncolumnr   )rb   rC   rJ   r{   appendr   traverse)	r^   r   exprZstrnamer   r   colsZ
col_appendZadd_elementrF   rF   rG    expect_col_expression_collection  s    


r   c                   @  sv   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
dddddZ
ddddddd
dd
d
ddddddZdS )RoleImpl)r|   namerv   c                 K  s
   t  d S r`   )NotImplementedErrorselfr@   r_   rF   rF   rG   rs     s    zRoleImpl._literal_coercionNr   r   Fc                 C  s    || _ |j| _t|tj| _d S r`   )r|   Z
_role_namer   rN   r   ZUsesInspectionrv   )r   Z
role_classrF   rF   rG   __init__  s    zRoleImpl.__init__rj   r@   r   rg   r_   rA   c                 K  s   |  ||| d S r`   ry   r   r@   r   rg   r_   rF   rF   rG   r     s    zRoleImpl._implicit_coercionsadvicecodeerrOptional[Any]Optional[Exception]r
   r@   rg   r   r   r   r   r_   rA   c          
      K  sn   |d k	r||k	rd||f }nt |}|r<d| j||f }	nd| j|f }	|rZ|	d| 7 }	tj|	|d|d S )Nz!%r object resolved from %r objectz$%s expected for argument %r; got %s.z%s expected, got %s. )r   )reprr   r   r\   )
r   r@   rg   r   r   r   r   r_   gotmsgrF   rF   rG   ry     s    zRoleImpl._raise_for_expected)N)NN)__name__
__module____qualname__	__slots__rs   r   __annotations__rr   rt   r   r   ry   rF   rF   rF   rG   r     s   
	   r   c                   @  s   e Zd ZdZdd ZdS )_DeannotaterF   c                 K  s   ddl m} ||S )Nr   )_deep_deannotate)r   r   )r   r   r_   r   rF   rF   rG   r     s    z_Deannotate._post_coercionNr   r   r   r   r   rF   rF   rF   rG   r   
  s   r   c                   @  s   e Zd ZdZdZdS )_StringOnlyrF   TN)r   r   r   r   rr   rF   rF   rF   rG   r     s   r   c                   @  s"   e Zd ZdZdddZdd ZdS )_ReturnsStringKeyrF   Nc                 K  s    t |tr|S | ||| d S r`   rC   rJ   ry   r   rF   rF   rG   r     s    
z%_ReturnsStringKey._implicit_coercionsc                 K  s   |S r`   rF   r   rF   rF   rG   rs   "  s    z#_ReturnsStringKey._literal_coercion)Nr   r   r   r   r   rs   rF   rF   rF   rG   r     s   
r   c                   @  s"   e Zd ZdZdd ZdddZdS )_ColumnCoercionsrF   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   rF   rF   rG   "_warn_for_scalar_subquery_coercion)  s    z3_ColumnCoercions._warn_for_scalar_subquery_coercionNc                 K  s~   |}t |dds | ||| nZ|jr6|   | S |jrZt|tjrZ|   |j	 S | j
jrl|jrl|S | ||| d S )Nrl   F)ru   ry   _is_select_baser   scalar_subquery_is_from_clauserC   r#   r8   r@   r|   ro   _is_lambda_element)r   r@   r   rg   r_   rn   rF   rF   rG   r   0  s     
z$_ColumnCoercions._implicit_coercions)N)r   r   r   r   r   r   rF   rF   rF   rG   r   &  s   r   zType[exc.SQLAlchemyError]r   r
   )r@   rg   exc_clsextrar   rA   c                 C  s:   |dt | |rd|f nd|r(d| ndd |d S )Nzc%(extra)sTextual SQL expression %(expr)r %(argname)sshould be explicitly declared as text(%(expr)r)for argument %s z%s )r   rg   r   )r   ellipses_string)r@   rg   r   r   r   rF   rF   rG   _no_text_coercionB  s    r   c                   @  s   e Zd ZdZddddZdS )_NoTextCoercionrF   Nrg   c                K  s4   t |tr$ttj| jr$t|| n| || d S r`   )rC   rJ   rN   r    r1   r|   r   ry   r   r@   rg   r_   rF   rF   rG   rs   W  s     z!_NoTextCoercion._literal_coercionr   r   r   r   rs   rF   rF   rF   rG   r   T  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 )
_CoerceLiteralsrF   FNc                 C  s
   t ||S r`   r   r   r@   rg   rF   rF   rG   _text_coercionf  s    z_CoerceLiterals._text_coercionr   c                K  s   t |tr6| jr&|dkr&tjdddS | j||f|S | jrl|d krLt S |dkr\t S |dkrlt	 S | j
rt |tjrtjt|ddS | || d S )N*T)Z
is_literalF)rC   rJ   _coerce_starr    r-   r   _coerce_constsNullFalse_True__coerce_numericsnumbersNumberry   r   rF   rF   rG   rs   i  s    
z!_CoerceLiterals._literal_coercion)N)	r   r   r   r   r   r   r   r   rs   rF   rF   rF   rG   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   rg   T)r   uniquer   )rH   ry   r    r+   )r   r@   r   rg   r   r   r_   rF   rF   rG   r     s     
 z$LiteralValueImpl._implicit_coercionsc                 K  s   |S r`   rF   r   rF   rF   rG   rs     s    z"LiteralValueImpl._literal_coercion)N)r   r   r   rr   r   rs   rF   rF   rF   rG   r   ~  s    r   c                      s@   e Zd ZdZdddddddddddddd	 fd
dZ  ZS )_SelectIsNotFromrF   Nr   r   rj   r   r   r
   r   c                  sj   |st |tjst |tjr:d|d k	r,|jn|f }d}nd }t j|f|||||d| dsftd S )NzETo create a FROM clause from a %s object, use the .subquery() method.Z89ve)rg   r   r   r   r   F)rC   r   ZSelectStatementRoler}   superry   r{   )r   r@   rg   r   r   r   r   r_   r}   rF   rG   ry     s0    


z$_SelectIsNotFrom._raise_for_expected)NNr   r   r   r   ry   __classcell__rF   rF   r   rG   r     s     r   c                   @  s0   e Zd ZdZd
ddddddddZdd	 ZdS )HasCacheKeyImplrF   Nr   rj   r   c                 K  s    t |tr|S | ||| d S r`   )rC   r   ry   r   rF   rF   rG   r     s    
z#HasCacheKeyImpl._implicit_coercionsc                 K  s   |S r`   rF   r   rF   rF   rG   rs     s    z!HasCacheKeyImpl._literal_coercion)Nr   rF   rF   rF   rG   r     s    r   c                   @  s0   e Zd ZdZd
ddddddddZdd	 ZdS )ExecutableOptionImplrF   Nr   rj   r   c                 K  s    t |tr|S | ||| d S r`   )rC   r   ry   r   rF   rF   rG   r     s    
z(ExecutableOptionImpl._implicit_coercionsc                 K  s   |S r`   rF   r   rF   rF   rG   rs     s    z&ExecutableOptionImpl._literal_coercion)Nr   rF   rF   rF   rG   r     s    r   c                      s4   e Zd ZdZddddddZd	 fdd	Z  ZS )
ExpressionElementImplrF   NF)r   r   is_crudc             
   K  sp   |d kr"|s"|d ks|j s"t S ztj|||d|dW S  tjk
rj } z| j||d W 5 d }~X Y nX d S )NT)r   Z_is_crudr   )Zshould_evaluate_noner    r   r+   r   r\   ry   )r   r@   r   r   r   r_   r   rF   rF   rG   rs     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.rg   r   r   )rC   r#   Valuesr   ZAnonymizedFromClauseRoler   ry   r   r@   rg   r   r_   r   r   rF   rG   ry     s       z)ExpressionElementImpl._raise_for_expected)NN)r   r   r   r   rs   ry   r   rF   rF   r   rG   r     s     r   c                   @  s.   e Zd ZdZdddddZddddZdS )	BinaryElementImplrF   N)bindparam_typerg   c             
   K  sJ   z|j |||dW S  tjk
rD } z| j||d W 5 d }~X Y nX d S )N)r   r   )_bind_paramr   r\   ry   )r   r@   r   operatorr   rg   r_   r   rF   rF   rG   rs     s    
z#BinaryElementImpl._literal_coercion)r   c                K  s,   |j jr(|j js(||d k	r |n|j }|S r`   )rM   Z_isnullZ_with_binary_element_type)r   r   r   r   r_   rF   rF   rG   r   (  s
    z BinaryElementImpl._post_coercion)r   r   r   r   rs   r   rF   rF   rF   rG   r     s
   r   c                   @  sJ   e Zd ZdZdddddddddZdd	 Zed
dd Zdd Z	dS )InElementImplrF   Nr   rj   r   c                 K  sd   |j rRt|tjr4|jjr4| | | j|jf|S | | | j| f|S n| 	||| d S r`   )
r   rC   r#   Aliasr@   r   _warn_for_implicit_coercionr   selectry   r   rF   rF   rG   r   3  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   rO   rF   rF   rG   r   G  s
    z)InElementImpl._warn_for_implicit_coercionzsqlalchemy.sql.elementsc                  s   t |ri t|}|D ]>}t|st|t jjjsPt|dsP| j	|f| q||< qrzt
j fdd|D  S  j|ddS n| j	|f| d S )NrB   c                   s(   g | ] }|kr| n
  |qS rF   )r   ).0or   Znon_literal_expressionsr   rF   rG   
<listcomp>b  s   
z3InElementImpl._literal_coercion.<locals>.<listcomp>T)	expanding)r   Zis_non_string_iterablerX   rH   rC   Z	preloadedZsql_elementsr.   rE   ry   r    
ClauseListr   )r   r@   r   r   r_   r   rF   r   rG   rs   N  s,    
 
zInElementImpl._literal_coercionc                K  s|   |j r| S t|tjr8t|jdkr,t|j|dS t|tj	r`|j
dd}d|_||_|S t|tjrt| S |S d S )Nr   )ZagainstT)Zmaintain_key)r   r   rC   r    r   r[   Zclausesr{   Z
self_groupr+   Z_cloner   Z	expand_opr#   r   Zscalar_values)r   r@   r   r   r_   rF   rF   rG   r   q  s    zInElementImpl._post_coercion)N)
r   r   r   r   r   r   r   Zpreload_modulers   r   rF   rF   rF   rG   r   0  s    
"r   c                   @  s*   e Zd ZdZdZdd ZddddZdS )	OnClauseImplrF   Tc                 K  s   |  | d S r`   r   r   rF   rF   rG   rs     s    zOnClauseImpl._literal_coercionN)rn   c                K  s   t |tjr|S |S r`   )rC   r   JoinTargetRole)r   r   rn   r_   rF   rF   rG   r     s    zOnClauseImpl._post_coercion)r   r   r   r   r   rs   r   rF   rF   rF   rG   r     s   r   c                   @  s   e Zd ZdZdZdddZdS )WhereHavingImplrF   TNc                 C  s
   t ||S r`   r   r   rF   rF   rG   r     s    zWhereHavingImpl._text_coercion)Nr   r   r   r   r   r   rF   rF   rF   rG   r     s   r   c                   @  s   e Zd ZdZdZdddZdS )StatementOptionImplrF   TNc                 C  s
   t |S r`   r    r1   r   rF   rF   rG   r     s    z"StatementOptionImpl._text_coercion)Nr   rF   rF   rF   rG   r     s   r   c                   @  s   e Zd ZdZdS )ColumnArgumentImplrF   Nr   r   r   r   rF   rF   rF   rG   r     s   r   c                   @  s   e Zd ZdZdS )ColumnArgumentOrKeyImplrF   Nr   rF   rF   rF   rG   r     s   r   c                   @  s   e Zd ZdZdddZdS )StrAsPlainColumnImplrF   Nc                 C  s
   t |S r`   )r    r-   r   rF   rF   rG   r     s    z#StrAsPlainColumnImpl._text_coercion)N)r   r   r   r   r   rF   rF   rF   rG   r     s   r   c                   @  s   e Zd ZdZdZdddZdS )ByOfImplrF   TNc                 C  s
   t |S r`   )r    Z_textual_label_referencer   rF   rF   rG   r     s    zByOfImpl._text_coercion)Nr   rF   rF   rF   rG   r     s   r   c                   @  s   e Zd ZdZdd ZdS )OrderByImplrF   c                 K  s(   t || jr |jd k	r t|S |S d S r`   )rC   r|   Z_order_by_label_elementr    Z_label_reference)r   r   r_   rF   rF   rG   r     s    

zOrderByImpl._post_coercionNr   rF   rF   rF   rG   r     s   r   c                   @  s(   e Zd ZdZdddddddddZdS )	GroupByImplrF   Nr   rj   r   c                 K  s   t |rtj|j S |S d S r`   )r   r    r   cr   rF   rF   rG   r     s    zGroupByImpl._implicit_coercions)Nr   r   r   r   r   rF   rF   rF   rG   r     s    r   c                   @  s   e Zd ZdZddddZdS )DMLColumnImplrF   Frc   c                K  s   |r
|j S |S d S r`   )key)r   r@   rd   r_   rF   rF   rG   r     s    zDMLColumnImpl._post_coercionNr   rF   rF   rF   rG   r     s   r   c                   @  s   e Zd ZdZddddZdS )ConstExprImplrF   Nr   c                K  s@   |d krt  S |dkr t  S |dkr0t  S | || d S )NFT)r    r   r   r   ry   r   rF   rF   rG   rs     s    zConstExprImpl._literal_coercionr   rF   rF   rF   rG   r     s   r   c                   @  s0   e Zd ZdZd
ddddddddZdd	 ZdS )TruncatedLabelImplrF   Nr   rj   r   c                 K  s    t |tr|S | ||| d S r`   r   r   rF   rF   rG   r     s    
z&TruncatedLabelImpl._implicit_coercionsc                 K  s   t |tjr|S t|S dS )zcoerce the given value to :class:`._truncated_label`.

        Existing :class:`._truncated_label` and
        :class:`._anonymous_label` objects are passed
        unchanged.
        N)rC   r    Z_truncated_labelr   rF   rF   rG   rs     s    z$TruncatedLabelImpl._literal_coercion)Nr   rF   rF   rF   rG   r     s    r   c                   @  s   e Zd ZdZdZdddZdS )DDLExpressionImplrF   TNc                 C  s
   t |S r`   r   r   rF   rF   rG   r     s    z DDLExpressionImpl._text_coercion)Nr   rF   rF   rF   rG   r     s   r   c                   @  s   e Zd ZdZdS )DDLConstraintColumnImplrF   Nr   rF   rF   rF   rG   r   "  s   r   c                   @  s   e Zd ZdZdS )DDLReferredColumnImplrF   Nr   rF   rF   rF   rG   r   &  s   r   c                   @  s0   e Zd ZdZd
ddddddddZdd	 ZdS )LimitOffsetImplrF   Nr   rj   r   c                 K  s   |d krd S |  ||| d S r`   r   r   rF   rF   rG   r   -  s    z#LimitOffsetImpl._implicit_coercionsc                K  s,   |d krd S t |}tj|||ddS d S )NT)r   r   )r   Zasintr#   Z_OffsetLimitParam)r   r@   r   r   r_   valuerF   rF   rG   rs   9  s    
   z!LimitOffsetImpl._literal_coercion)Nr   rF   rF   rF   rG   r   *  s    r   c                      s0   e Zd ZdZddddddd fddZ  ZS )	LabeledColumnExprImplrF   Nr   rj   r   c                   sX   t |tjr|d S t j||fd|i|}t |tjrF|d S | ||| d S Nrg   )rC   r   ExpressionElementRolelabelr   r   ry   )r   r@   r   rg   r_   newr   rF   rG   r   H  s    
 
z)LabeledColumnExprImpl._implicit_coercions)N)r   r   r   r   r   r   rF   rF   r   rG   r  E  s    r  c                      sL   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 )ColumnsClauseImplrF   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 r`   )r   )r   erF   rF   rG   	<genexpr>i  s     z8ColumnsClauseImpl._raise_for_expected.<locals>.<genexpr>z)?r   )rC   rX   joinr   ry   )r   r@   rg   r   r   r_   r   rF   rG   ry   d  s      z%ColumnsClauseImpl._raise_for_expectedc                 C  sL   t |}| j| }tdt||r2d|f nd|r<dndd d S )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   rg   r
  )rJ   _guess_straight_columnmatchr   r\   r   r   )r   r@   rg   Zguess_is_literalrF   rF   rG   r   q  s    
z ColumnsClauseImpl._text_coercion)NN)N)r   r   r   r   r   r   r   recompileIr  ry   r   r   rF   rF   r   rG   r  [  s      r  c                   @  s   e Zd ZdZdS )ReturnsRowsImplrF   Nr   rF   rF   rF   rG   r    s   r  c                      s>   e Zd ZdZddddZddddddd fd	d
Z  ZS )StatementImplrF   Nr   c                K  sF   ||k	rBt |tsBz
|j W n$ tk
r@   td| d Y nX |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)rC   rJ   Z_execute_on_connectionrx   r   warn_deprecated)r   r   rn   rg   r_   rF   rF   rG   r     s    
 

zStatementImpl._post_coercionr   rj   r   c                   s(   |j r
|S t j||fd|i|S d S r  )r   r   r   r   r   rF   rG   r     s     z!StatementImpl._implicit_coercions)N)r   r   r   r   r   r   r   rF   rF   r   rG   r    s
    r  c                   @  s(   e Zd ZdZdddddddddZdS )	SelectStatementImplrF   Nr   rj   r   c                 K  s    |j r| S | ||| d S r`   )_is_text_clausecolumnsry   r   rF   rF   rG   r     s    z'SelectStatementImpl._implicit_coercions)Nr   rF   rF   rF   rG   r    s    r  c                   @  s   e Zd ZdZdS )
HasCTEImplrF   Nr   rF   rF   rF   rG   r    s   r  c                   @  s   e Zd ZdZdS )	IsCTEImplrF   Nr   rF   rF   rF   rG   r    s   r  c                	   @  sB   e Zd ZdZdZddddZdddd	d	d
dd	d	dddZdS )JoinTargetImplrF   TNr   c                K  s   |  || d S r`   r   r   rF   rF   rG   rs     s    z JoinTargetImpl._literal_coercionF)legacyr   rj   r?   )r@   r   rg   r  r_   rA   c                K  s>   t |tjr|S |r,|jr,tjd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)rC   r   r   r   r   r  ry   )r   r@   r   rg   r  r_   rF   rF   rG   r     s    	
z"JoinTargetImpl._implicit_coercions)N)r   r   r   r   rt   rs   r   rF   rF   rF   rG   r    s    r  c                
   @  sB   e Zd ZdZdddddddddddd	d
dZddddZdS )FromClauseImplrF   NFT)re   allow_selectr   rj   r?   )r@   r   rg   re   r  r_   rA   c                K  sH   |j r,|r| S |rDtjddd |jS n|jr6|S | ||| d S r  )r   Zsubqueryr   r  _implicit_subqueryr  ry   )r   r@   r   rg   re   r  r_   rF   rF   rG   r     s    
z"FromClauseImpl._implicit_coercions)
deannotatec                K  s   |r|  S |S d S r`   )Z_deannotate)r   r@   r   r_   rF   rF   rG   r     s    zFromClauseImpl._post_coercion)N)r   r   r   r   r   r   rF   rF   rF   rG   r    s    r  c                	   @  s0   e Zd ZdZddddddddddd	d
ZdS )StrictFromClauseImplrF   NF)r  r   rj   r?   )r@   r   rg   r  r_   rA   c                K  s0   |j r|rtjddd |jS | ||| d S r  )r   r   r  r  ry   )r   r@   r   rg   r  r_   rF   rF   rG   r     s    	
z(StrictFromClauseImpl._implicit_coercions)Nr   rF   rF   rF   rG   r!    s
    r!  c                   @  s    e Zd ZdZdddddZdS )AnonymizedFromClauseImplrF   FN)flatr   c                K  s   |d kst |j|dS )N)r#  )r{   Z_anonymous_fromclause)r   r@   r#  r   r_   rF   rF   rG   r   2  s    z'AnonymizedFromClauseImpl._post_coercionr   rF   rF   rF   rG   r"  /  s   r"  c                   @  s   e Zd ZdZdd ZdS )DMLTableImplrF   c                 K  s   d|j kr|j d S |S d S )NZ	dml_table)Z_annotationsr   rF   rF   rG   r   ;  s    

zDMLTableImpl._post_coercionNr   rF   rF   rF   rG   r$  8  s   r$  c                   @  s(   e Zd ZdZdddddddddZdS )	DMLSelectImplrF   Nr   rj   r   c                 K  s<   |j r*t|tjr |jjr |jS | S n| ||| d S r`   )r   rC   r#   r   r@   r   r   ry   r   rF   rF   rG   r   E  s    

z!DMLSelectImpl._implicit_coercions)Nr   rF   rF   rF   rG   r%  B  s    r%  c                      s"   e Zd ZdZd fdd	Z  ZS )CompoundElementImplrF   Nc                   s>   t |tjr|jrd}q"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   )rC   r   ZFromClauseRoleZ_is_subqueryr   ry   r   r   rF   rG   ry   [  s       z'CompoundElementImpl._raise_for_expected)NNr   rF   rF   r   rG   r&  X  s   r&  ZRoleZImpl)
__future__r   collections.abcabcrI   r   r  rz   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Z_typingr   baser   r   	cache_keyr   r   r   r   r   Zutil.typingr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   Zdmlr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   ZSQLRoler:   r<   Z
StringRoler=   r>   rH   rK   rS   r]   rb   r   r   r   r   r   r   r   r\   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZByOfRoler   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r!  r"  r$  r%  r&  rq   dirr   ru   clsendswithreplaceglobalsr   r  Zee_implintr?   rJ   floatZpy_typerF   rF   rF   rG   <module>	   sT  &		 t7	)+V			
)*'%	


