o
    E6d                     @  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ddYZMed=ddddYZMedddYZMedddYZMedddYZMddddddddYZMdddZNdddZOG dd dZPG dd dZQG dd dZRG dd dePZSG dd dePZTde$jUddfd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 dd  d eWePZ~i ZeeD ](ZeeeZedreddZee v re e eZeee< qeseej ZeeeefD ]Zeeeje < qd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   oC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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   Z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   Zadd_parameter_text)rN   rO   rP   rD   rD   rE   _document_text_coercion   s   rS   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. rX   )r@   listsetdictlenr   ArgumentErrorr   )rT   rU   rV   rD   rD   rE   !_expression_collection_was_a_list   s   $
r^   roleType[roles.TruncatedLabelRole]rC   r   kwc                 K     d S NrD   r_   rC   ra   rD   rD   rE   expect      re   )as_keyType[roles.DMLColumnRole]rg   Literal[True]c                K  rb   rc   rD   )r_   rC   rg   ra   rD   rD   rE   re         Type[roles.LiteralValueRole]BindParameter[Any]c                 K  rb   rc   rD   rd   rD   rD   rE   re      rf   !Type[roles.DDLReferredColumnRole]Column[Any]c                 K  rb   rc   rD   rd   rD   rD   rE   re      rf   #Type[roles.DDLConstraintColumnRole]Union[Column[Any], str]c                 K  rb   rc   rD   rd   rD   rD   rE   re      rf   Type[roles.StatementOptionRole]r/   c                 K  rb   rc   rD   rd   rD   rD   rE   re      rf   &Type[roles.LabeledColumnExprRole[Any]]_ColumnExpressionArgument[_T]NamedColumn[_T]c                 K  rb   rc   rD   rd   rD   rD   rE   re      rf   gUnion[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole]]ColumnElement[_T]c                 K  rb   rc   rD   rd   rD   rD   rE   re      s   
Union[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole], Type[roles.OnClauseRole], Type[roles.ColumnArgumentRole]]ColumnElement[Any]c                 K  rb   rc   rD   rd   rD   rD   rE   re      s   Type[roles.DMLTableRole]r(   r*   c                 K  rb   rc   rD   rd   rD   rD   rE   re      rf   Type[roles.HasCTERole]r6   c                 K  rb   rc   rD   rd   rD   rD   rE   re   	  rf   Type[roles.SelectStatementRole]r7   c                 K  rb   rc   rD   rd   rD   rD   rE   re     rf   Type[roles.FromClauseRole]r)   r5   c                 K  rb   rc   rD   rd   rD   rD   rE   re     rf   )explicit_subqueryr}   r8   c                K  rb   rc   rD   )r_   rC   r}   ra   rD   rD   rE   re   $  rj   Type[roles.ColumnsClauseRole]_ColumnsClauseArgument[Any]r3   c                 K  rb   rc   rD   rd   rD   rD   rE   re   /  rf   Type[roles.JoinTargetRole]r4   c                 K  rb   rc   rD   rd   rD   rD   rE   re   8  rf   	Type[_SR]c                 K  rb   rc   rD   rd   rD   rD   rE   re   B  rf   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sd }	|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|st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rtjrt|	ttfsJ |jst|	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)Zraiseerrr   _propagate_attrs)r   original_elementrD   )$allows_lambdacallablerB   r"   ZLambdaElementZLambdaOptions_impl_lookupr@   r!   ZCompilerElementr#   Z
SchemaItemZFetchedValueZ	PyWrapper_resolve_literal_only_literal_coercion$_skip_clauseelement_for_target_matchgetattrr?   _use_inspectionr   inspectZ_post_inspectAttributeError_raise_for_expectedZ_sa__py_wrapper_literaltypingr   r1   r,   r   _role_class	__class____mro___post_coercion_implicit_coercions)r_   rC   r   r   r   r   ra   implr   resolvedr   ZinsprD   rD   rE   re   K  s   			



c                 K  s"   | dd  t| |fddi|S )Nrg   T)popre   rd   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   )re   r@   rH   appendr   traverse)	r_   r   exprZstrnamer   r   colsZ
col_appendZ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  rc   )NotImplementedErrorselfrC   ra   rD   rD   rE   r     s   zRoleImpl._literal_coercionNr   r   Fc                 C  s    || _ |j| _t|tj| _d S rc   )r   Z
_role_namer   rL   r   ZUsesInspectionr   )r   Z
role_classrD   rD   rE   __init__  s   zRoleImpl.__init__rC   r   r   r   ra   rQ   c                 K  s   |  ||| d S rc   r   r   rC   r   r   ra   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   ra   gotmsgrD   rD   rE   r     s   
zRoleImpl._raise_for_expectedrc   
rC   r   r   r   r   r   ra   r   rQ   r   NNNNNrC   r   r   r   r   r   r   r   r   r   r   r   ra   r   rQ   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   ra   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 rc   r@   rH   r   r   rD   rD   rE   r   ,  s   
z%_ReturnsStringKey._implicit_coercionsc                 K     |S rc   rD   r   rD   rD   rE   r   2     z#_ReturnsStringKey._literal_coercionrc   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_coercion9  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   ra   r   rD   rD   rE   r   @  s   
z$_ColumnCoercions._implicit_coercionsrc   )r   r   r   r   r   r   rD   rD   rD   rE   r   6  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_coercionR  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 rc   )r@   rH   rL   r!   
TextClauser   r   r   r   rC   r   ra   rD   rD   rE   r   g  s
   z!_NoTextCoercion._literal_coercionrc   r   r   r   r   r   rD   rD   rD   rE   r   d      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 rc   r   r   rC   r   rD   rD   rE   _text_coercionv     
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)Z
is_literalF)r@   rH   _coerce_starr!   r-   r   _coerce_constsNullFalse_True__coerce_numericsnumbersNumberr   r   rD   rD   rE   r   y  s   
z!_CoerceLiterals._literal_coercionrc   )	r   r   r   r   r   r   r   r   r   rD   rD   rD   rE   r   p  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   ra   rD   rD   rE   r     s   	z$LiteralValueImpl._implicit_coercionsc                 K  r   rc   rD   )r   rC   r   r   ra   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   ra   rQ   r
   c                   sb   |st |tjst |tjrd|d ur|jn|f }d}nd }t j|f|||||d| J )NzETo create a FROM clause from a %s object, use the .subquery() method.Z89ve)r   r   r   r   r   )r@   r   ZSelectStatementRoler   superr   )r   rC   r   r   r   r   r   ra   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   ra   rQ   c                 K  r   rc   )r@   r   r   r   rD   rD   rE   r        
z#HasCacheKeyImpl._implicit_coercionsc                 K  r   rc   rD   r   rD   rD   rE   r     r   z!HasCacheKeyImpl._literal_coercionrc   r   r   rD   rD   rD   rE   r     
    r   c                   @  r   )ExecutableOptionImplrD   NrC   r   r   r   r   ra   rQ   c                 K  r   rc   )r@   r   r   r   rD   rD   rE   r     r   z(ExecutableOptionImpl._implicit_coercionsc                 K  r   rc   rD   r   rD   rD   rE   r     r   z&ExecutableOptionImpl._literal_coercionrc   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   Z_is_crudr   )Zshould_evaluate_noner!   r   r+   r   r]   r   )r   rC   r   r   r   is_crudra   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   ZAnonymizedFromClauseRoler   r   r   rC   r   r   ra   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   ra   r   rD   rD   rE   r   '  s   z#BinaryElementImpl._literal_coercionc                 K  s,   |j jr|j js||d ur|n|j }|S rc   )rK   Z_isnullZ_with_binary_element_type)r   r   r   r  ra   rD   rD   rE   r   /  s
   z BinaryElementImpl._post_coercionr   rc   )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   ra   rQ   c                 K  sj   |j r,t|tjr|jjr| | | j|jfi |S | | | j| fi |S | 	||| d S rc   )
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   rM   rD   rD   rE   r  N  s
   z)InElementImpl._warn_for_implicit_coercionc                   s   t |tjrQt |tsQi t|}|D ]%}t|s.t |tjs)| j|fi | q||< q|d u r8t	
 |< qrIt	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   Znon_literal_expressionsr  rD   rE   
<listcomp>j  s    
z3InElementImpl._literal_coercion.<locals>.<listcomp>T)	expanding)r@   rG   r   rH   rY   rF   r   ZColumnOperatorsr   r!   r   
ClauseListr  )r   rC   r   r  ra   r  rD   r  rE   r   U  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   )ZagainstT)Zmaintain_key)r   r   r@   r!   r  r\   ZclausesZ
self_groupr+   Z_cloner  Z	expand_opr$   r  Zscalar_values)r   rC   r   r  ra   rD   rD   rE   r   w  s   zInElementImpl._post_coercionrc   r   )r   r   r   r   r   r  r   r   rD   rD   rD   rE   r  7  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 rc   r   )r   rC   r   r   r   r  ra   rD   rD   rE   r     s   zOnClauseImpl._literal_coercionc                 K  s   t |tjr|S |S rc   )r@   r   JoinTargetRole)r   r   r   ra   rD   rD   rE   r     s   zOnClauseImpl._post_coercionr	  rc   )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   rc   r   r   rD   rD   rE   r     r   zWhereHavingImpl._text_coercionrc   r   r   r   r   r   r   rD   rD   rD   rE   r        r  c                   @  r  )StatementOptionImplrD   TNc                 C  
   t |S rc   r!   r   r   rD   rD   rE   r     r   z"StatementOptionImpl._text_coercionrc   r  rD   rD   rD   rE   r    r  r  c                   @     e Zd ZdZdS )ColumnArgumentImplrD   Nr   r   r   r   rD   rD   rD   rE   r"        r"  c                   @  r!  )ColumnArgumentOrKeyImplrD   Nr#  rD   rD   rD   rE   r%    r$  r%  c                   @  r   )StrAsPlainColumnImplrD   Nc                 C  r  rc   )r!   r-   r   rD   rD   rE   r     r   z#StrAsPlainColumnImpl._text_coercionrc   )r   r   r   r   r   rD   rD   rD   rE   r&    r   r&  c                   @  r  )ByOfImplrD   TNc                 C  r  rc   )r!   Z_textual_label_referencer   rD   rD   rE   r     r   zByOfImpl._text_coercionrc   r  rD   rD   rD   rE   r'    r  r'  c                   @  r   )OrderByImplrD   c                 K  s$   t || jr|jd urt|S |S rc   )r@   r   Z_order_by_label_elementr!   Z_label_reference)r   r   ra   rD   rD   rE   r     s
   


zOrderByImpl._post_coercionNr   rD   rD   rD   rE   r(    r   r(  c                   @     e Zd ZdZ	ddd
dZdS )GroupByImplrD   NrC   r   r   r   r   ra   rQ   c                 K  s   t |r
tj|j S |S rc   )r   r!   r  cr   rD   rD   rE   r     s   zGroupByImpl._implicit_coercionsrc   r   r   r   r   r   r   rD   rD   rD   rE   r*        r*  c                   @  s   e Zd ZdZdddZdS )DMLColumnImplrD   Fc                 K  s   |r|j S |S rc   )key)r   rC   rg   ra   rD   rD   rE   r     s   zDMLColumnImpl._post_coercionNFr   rD   rD   rD   rE   r.    r   r.  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_coercionrc   r   rD   rD   rD   rE   r1    r   r1  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   ra   rQ   c                 K  s    t |tr|S | ||| d S rc   r   r   rD   rD   rE   r     r   z&TruncatedLabelImpl._implicit_coercionsc                 K  s   t |tjr|S t|S )zcoerce the given value to :class:`._truncated_label`.

        Existing :class:`._truncated_label` and
        :class:`._anonymous_label` objects are passed
        unchanged.
        )r@   r!   Z_truncated_labelr   rD   rD   rE   r     s   
z$TruncatedLabelImpl._literal_coercionrc   r   r   rD   rD   rD   rE   r3     s
    r3  c                   @  r  )DDLExpressionImplrD   TNc                 C  r  rc   r   r   rD   rD   rE   r   "  s   
z DDLExpressionImpl._text_coercionrc   r  rD   rD   rD   rE   r4    r  r4  c                   @  r!  )DDLConstraintColumnImplrD   Nr#  rD   rD   rD   rE   r5  *  r$  r5  c                   @  r!  )DDLReferredColumnImplrD   Nr#  rD   rD   rD   rE   r6  .  r$  r6  c                   @  r   )LimitOffsetImplrD   NrC   r   r   r   r   ra   rQ   c                 K  s   |d u rd S |  ||| d S rc   r   r   rD   rD   rE   r   5  s   z#LimitOffsetImpl._implicit_coercionsc                 K  s(   |d u rd S t |}tj|||ddS )NT)r   r   )r   Zasintr$   Z_OffsetLimitParam)r   rC   r   r   ra   valuerD   rD   rE   r   A  s   
z!LimitOffsetImpl._literal_coercionrc   r   r   rD   rD   rD   rE   r7  2  r  r7  c                      s&   e Zd ZdZ	dd fd
dZ  ZS )LabeledColumnExprImplrD   NrC   r   r   r   r   ra   rQ   c                   sX   t |tjr|d S t j||fd|i|}t |tjr#|d S | ||| d S Nr   )r@   r   ExpressionElementRolelabelr   r   r   )r   rC   r   r   ra   newr   rD   rE   r   N  s   

z)LabeledColumnExprImpl._implicit_coercionsrc   r   )r   r   r   r   r   r   rD   rD   r   rE   r9  K  s    r9  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 rc   )r   )r  erD   rD   rE   	<genexpr>p  s    z8ColumnsClauseImpl._raise_for_expected.<locals>.<genexpr>z)?r  )r@   rY   joinr   r   )r   rC   r   r   r   ra   r   rD   rE   r   j  s   z%ColumnsClauseImpl._raise_for_expectedc                 C  sH   t |}| j| }tdt||rd|f nd|rdndd )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   rB  )rH   _guess_straight_columnmatchr   r]   r   r   )r   rC   r   Zguess_is_literalrD   rD   rE   r   w  s   z ColumnsClauseImpl._text_coercion)NNNrc   )r   r   r   r   r   r   r   recompileIrC  r   r   r   rD   rD   r   rE   r>  a  s    r>  c                   @  r!  )ReturnsRowsImplrD   Nr#  rD   rD   rD   rE   rH    r$  rH  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   Z_execute_on_connectionr   r   warn_deprecated)r   r   r   r   ra   rD   rD   rE   r     s    
zStatementImpl._post_coercionrC   r   r   r   r   ra   rQ   c                   s$   |j r|S t j||fd|i|S r:  )r   r   r   r   r   rD   rE   r     s   z!StatementImpl._implicit_coercionsrc   r   )r   r   r   r   r   r   r   rD   rD   r   rE   rI    s
    
rI  c                   @  r)  )SelectStatementImplrD   NrC   r   r   r   r   ra   rQ   c                 K  s    |j r| S | ||| d S rc   )_is_text_clausecolumnsr   r   rD   rD   rE   r     s   z'SelectStatementImpl._implicit_coercionsrc   r   r,  rD   rD   rD   rE   rL    r-  rL  c                   @  r!  )
HasCTEImplrD   Nr#  rD   rD   rD   rE   rO    r$  rO  c                   @  r!  )	IsCTEImplrD   Nr#  rD   rD   rD   rE   rP    r$  rP  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 rc   r   r   rD   rD   rE   r     s   z JoinTargetImpl._literal_coercionFrC   r   r   r   r   legacyr   ra   rQ   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.rJ  )version)r@   r   r  r   r   rK  r   )r   rC   r   r   rR  ra   rD   rD   rE   r     s   
z"JoinTargetImpl._implicit_coercionsrc   r   )rC   r   r   r   r   r   rR  r   ra   r   rQ   r   )r   r   r   r   r   r   r   rD   rD   rD   rE   rQ    s    
rQ  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_selectra   rQ   c                 K  sJ   |j r|r	| S |rtjddd |jS d S |jr|S | ||| d S rS  )r   Zsubqueryr   rK  _implicit_subqueryrM  r   r   rC   r   r   r}   rV  ra   rD   rD   rE   r     s   		z"FromClauseImpl._implicit_coercionsc                 K  s   |r|  S |S rc   )Z_deannotate)r   rC   Z
deannotatera   rD   rD   rE   r     s   zFromClauseImpl._post_coercionr2  rC   r   r   r   r   r   r}   r   rV  r   ra   r   rQ   r   r0  )r   r   r   r   r   r   rD   rD   rD   rE   rU    s    rU  c                   @  s"   e Zd ZdZ			ddddZdS )StrictFromClauseImplrD   NFrC   r   r   r   r   r}   r   rV  ra   rQ   c                 K  s0   |j r|rtjddd |jS | ||| d S rS  )r   r   rK  rW  r   rX  rD   rD   rE   r     s   
	z(StrictFromClauseImpl._implicit_coercions)NFFrY  r,  rD   rD   rD   rE   rZ    s    rZ  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)Z_anonymous_fromclause)r   rC   r\  r   ra   rD   rD   rE   r   4  s   z'AnonymizedFromClauseImpl._post_coercion)FNr   rD   rD   rD   rE   r[  1  r   r[  c                   @  r   )DMLTableImplrD   c                 K  s   d|j v r
|j d S |S )NZ	dml_table)Z_annotationsr   rD   rD   rE   r   =  s   

zDMLTableImpl._post_coercionNr   rD   rD   rD   rE   r]  :  r   r]  c                   @  r)  )DMLSelectImplrD   NrC   r   r   r   r   ra   rQ   c                 K  s:   |j rt|tjr|jjr|jS | S | ||| d S rc   )r   r@   r$   r  rC   r   r  r   r   rD   rD   rE   r   G  s   
z!DMLSelectImpl._implicit_coercionsrc   r   r,  rD   rD   rD   rE   r^  D  r-  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   ZFromClauseRoleZ_is_subqueryr   r   r  r   rD   rE   r   ]  s   z'CompoundElementImpl._raise_for_expectedr   r   rD   rD   r   rE   r_  Z  s    r_  ZRoleZImpl)rN   rH   rO   rH   rP   rH   rQ   rR   )rT   rH   rU   rH   rV   rW   rQ   rX   )r_   r`   rC   r   ra   r   rQ   rH   )
r_   rh   rC   r   rg   ri   ra   r   rQ   rH   )r_   rk   rC   r   ra   r   rQ   rl   )r_   rm   rC   r   ra   r   rQ   rn   )r_   ro   rC   r   ra   r   rQ   rp   )r_   rq   rC   r   ra   r   rQ   r/   )r_   rr   rC   rs   ra   r   rQ   rt   )r_   ru   rC   rs   ra   r   rQ   rv   )r_   rw   rC   r   ra   r   rQ   rx   )r_   ry   rC   r(   ra   r   rQ   r*   )r_   rz   rC   r6   ra   r   rQ   r6   )r_   r{   rC   r7   ra   r   rQ   r7   )r_   r|   rC   r)   ra   r   rQ   r5   )
r_   r|   rC   r7   r}   ri   ra   r   rQ   r8   )r_   r~   rC   r   ra   r   rQ   r3   )r_   r   rC   r4   ra   r   rQ   r4   )r_   r   rC   r   ra   r   rQ   r   )r_   r   rC   r   r   r   r   r   r   r   r   r   ra   r   rQ   r   )r_   rh   rC   r   ra   r   rQ   rH   )r_   ro   r   r   rQ   r   )rC   r   r   r   r   r   r   r   r   r   rQ   r
   )
__future__r   collections.abcabcrG   r   rE  r   r   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)   Zdmlr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   ZSQLRoler:   r<   Z
StringRoler=   r>   rF   rI   rS   r^   re   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.  r1  r3  r4  r5  r6  r7  r9  r>  rH  rI  rL  rO  rP  rQ  rU  rZ  r[  r]  r^  r_  r   dirr   r   clsendswithreplaceglobalsr   r;  Zee_implintr   rH   floatZpy_typerD   rD   rD   rE   <module>   s\  &

	t6	(+U			
)(&$	


