HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/sqlalchemy/sql/__pycache__/coercions.cpython-310.pyc
o

���g͞�@s�ddlmZddlmZddlZddlZddlZddlmZddlm	Z	ddlm
Z
ddlmZddlmZddlm
Z
dd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddl m!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddl&m'Z'ej�rTdd lm(Z(dd!lm)Z)dd"lm*Z*dd#lm+Z+dd$lm,Z,dd%lm-Z-dd&lm.Z.dd'lm/Z/dd(lm0Z0dd)l1m2Z2dd*l(m3Z3dd+l(m4Z4dd,l(m5Z5dd-l(m6Z6dd.l(m7Z7dd/l(m8Z8dd0l(m9Z9dd1l*m:Z:dd2l+m;Z;dd3l+m<Z<dd4l+m=Z=dd5l+m>Z>dd6l+m?Z?dd7l+m@Z@dd8lmAZAed9ejBd:�ZCed;e	d<efd:�ZDed=ejEd:�ZFed>ed:�ZGd?d@�ZHdAdB�ZI�ddIdJ�ZJ�ddPdQ�ZKe�ddWdX��ZLed<dY��dd]dX��ZLe�dd`dX��ZLe�ddcdX��ZLe�ddedX��ZLe�ddhdX��ZLe�d	dldX��ZLe�d
dodX��ZLe�ddrdX��ZLe�ddvdX��ZLe�d
dydX��ZLe�dd|dX��ZLe�dd�dX��ZLed<d���dd�dX��ZLe�dd�dX��ZLe�dd�dX��ZLe�dd�dX��ZLddd�d�d���dd�dX�ZL�dd�d��ZM�dd�d��ZNGd�d��d��ZOGd�d��d��ZPGd�d��d��ZQGd�d��d�eO�ZRGd�d��d�eO�ZSde#jTddf�dd�d��ZUGd�d��d�eO�ZVGd�d��d�eO�ZWGd�d��d�eO�ZXGd�d��d�eO�ZYGd�d��d�eO�ZZGd�d��d�eO�Z[Gd�d��d�eSeO�Z\Gd�d��d�e\eO�Z]Gd�d„d�eO�Z^Gd�dĄd�eSeO�Z_Gd�dƄd�eWeSeO�Z`Gd�dȄd�eWeO�ZaGd�dʄd�eVeO�ZbGd�d̄d�eReO�ZcGd�d΄d�eWeO�ZdGd�dЄd�eWeSeOeje�ZfGd�d҄d�efeO�ZgGd�dԄd�efeO�ZhGd�dքd�eReO�ZiGd�d؄d�eO�ZjGd�dڄd�eQeO�ZkGd�d܄d�ePeWeO�ZlGd�dބd�ePeReO�ZmGd�d�d�em�ZnGd�d�d�eO�ZoGd�d�d�e\�ZpGd�d�d�eYeWeO�ZqGd�d�d�eO�ZrGd�d�d�eWeO�ZsGd�d�d�eVeO�ZtGd�d�d�er�ZuGd�d�d�eO�ZvGd�d�d�eO�ZwGd�d�d�eYeVeO�ZxGd�d��d�ex�ZyGd�d��d�ey�ZzGd�d��d�eYeVeO�Z{Gd�d��d�eVeO�Z|Gd�d��d�eVeO�Z}iZ~ee�D]&Z�e�ee��Z�e���d���r�e���d��d�Z�e�e��v�r�e��e�e��Z�e�e~e�<�q�e�s�e~ej�Z�e�e�e�e�fD]Z�e�e~ej�e�<�q�dSdS(�)�annotationsN)�Any)�Callable)�cast)�Dict)�Iterable)�Iterator)�List)�NoReturn)�Optional)�overload)�Sequence)�Tuple)�Type)�
TYPE_CHECKING)�TypeVar)�Union�)�roles)�visitors)�is_from_clause)�ExecutableOption)�Options)�HasCacheKey)�	Visitable�)�exc)�
inspection)�util)�Literal)�elements)�lambdas)�schema)�
selectable)�_ColumnExpressionArgument)�_ColumnsClauseArgument)�_DDLColumnArgument)�_DMLTableArgument)�_FromClauseArgument)�_DMLTableElement)�
BindParameter)�
ClauseElement)�ColumnClause)�
ColumnElement)�NamedColumn)�SQLCoreOperations)�
TextClause)�Column)�_ColumnsClauseElement)�_JoinTargetProtocol)�
FromClause)�HasCTE)�
SelectBase)�Subquery)�_TraverseCallableType�_SR)�bound�_F.�_StringOnlyR�_TcCst|ttjf�ot|d�S)zhReturn whether or not the element is a "literal" in the context
    of a SQL expression construct.

    �__clause_element__)�
isinstancerr"�SchemaEventTarget�hasattr)�element�rC�C/usr/local/lib/python3.10/dist-packages/sqlalchemy/sql/coercions.py�_is_literalNs�
�rEcCsrt|tj�rt|t�s|D]	}t|�sdSq
dSt|ttjtt	t
jjf�o8t
|d�o8t|t�p8t|t�S)aReturn 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_literalrr"r@rrr�langhelpers�symbolrA�type�
issubclass)rB�elemrCrCrDrHZs,
����

�
�rH�	paramnamerG�meth_rst�	param_rst�return�Callable[[_F], _F]cCst�|d||f�S)Nz�.. warning:: The %s argument to %s can be passed as a Python string argument, which will be treated as **trusted SQL text** and rendered as given.  **DO NOT PASS UNTRUSTED INPUT TO THIS PARAMETER**.)r�add_parameter_text)rNrOrPrCrCrD�_document_text_coercion�s��rT�attrname�fnname�args�+Union[Sequence[_T], Sequence[Sequence[_T]]]�Sequence[_T]cCsb|r,t|dtttf�r,t|�dkr,t|dt�r%t�d|�d|�d���td|d�Std|�S)NrrzThe "z" argument to zt(), when referring to a sequence of items, is now passed as a series of positional elements, rather than as a list. rY)r?�list�set�dict�lenr�
ArgumentErrorr)rUrVrWrCrCrD�!_expression_collection_was_a_list�s$�
r_�role�Type[roles.TruncatedLabelRole]rBr�kwcK�dS�NrC�r`rBrbrCrCrD�expect��rf��as_key�Type[roles.DMLColumnRole]ri�
Literal[True]cKrcrdrC)r`rBrirbrCrCrDrf���Type[roles.LiteralValueRole]�BindParameter[Any]cKrcrdrCrerCrCrDrf�rg�!Type[roles.DDLReferredColumnRole]�Union[Column[Any], str]cKrcrdrCrerCrCrDrf�rg�#Type[roles.DDLConstraintColumnRole]cKrcrdrCrerCrCrDrf�rg�Type[roles.StatementOptionRole]�%Union[ColumnElement[Any], TextClause]cKrcrdrCrerCrCrDrf�rg�&Type[roles.LabeledColumnExprRole[Any]]�_ColumnExpressionArgument[_T]�NamedColumn[_T]cKrcrdrCrerCrCrDrf�rg�gUnion[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole]]�ColumnElement[_T]cKrcrdrCrerCrCrDrf�s	��Union[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole], Type[roles.OnClauseRole], Type[roles.ColumnArgumentRole]]�ColumnElement[Any]cKrcrdrCrerCrCrDrf�s�Type[roles.DMLTableRole]r'r)cKrcrdrCrerCrCrDrf�rg�Type[roles.HasCTERole]r5cKrcrdrCrerCrCrDrf�rg�Type[roles.SelectStatementRole]r6cKrcrdrCrerCrCrDrfrg�Type[roles.FromClauseRole]r(r4cKrcrdrCrerCrCrDrfrg)�explicit_subqueryrr7cKrcrdrC)r`rBrrbrCrCrDrfrl�Type[roles.ColumnsClauseRole]�_ColumnsClauseArgument[Any]r2cKrcrdrCrerCrCrDrf rg�Type[roles.JoinTargetRole]r3cKrcrdrCrerCrCrDrf(rg�	Type[_SR]cKrcrdrCrerCrCrDrf1rgF)�apply_propagate_attrs�argname�post_inspect�disable_inspectionr��Optional[ClauseElement]r��
Optional[str]r��boolr�cKs�|jrt|�rt|d�rtj||tjdi|��|d�St|}|}t|tj	t
jt
jtj
f�s�d}	|jr=|j|fi|��}	n}|}d}
|jrQt||�rQt|d�rQd}
nt|d�rid}
t|dd�sc|��}nnt|d�sV|
s�|jr�|s�tj|dd�}|dur�|r�|jz|��}	Wnty�|�||�Ynw|	dur�|j|fd|i|��}	n|}	nt|tj
�r�|jdi|��}	n|}	|dur�tjr�t|	ttf�s�J�|js�t|	d	d�r�|	j|_|j|	j j!vr�|j"r�|j"|	f||d
�|��}	|	S|j#||	fd|i|��S)N�__code__)r�Fr>T�is_clause_element)�raiseerrr��_propagate_attrs)r��original_elementrC)$�
allows_lambda�callablerAr!�
LambdaElement�
LambdaOptions�_impl_lookupr?r �CompilerElementr"�
SchemaItem�FetchedValue�	PyWrapper�_resolve_literal_only�_literal_coercion�$_skip_clauseelement_for_target_match�getattrr>�_use_inspectionr�inspect�
_post_inspect�AttributeError�_raise_for_expected�_sa__py_wrapper_literal�typingrr/r+r��_role_class�	__class__�__mro__�_post_coercion�_implicit_coercions)r`rBr�r�r�r�rb�implr��resolvedr��insprCrCrDrf9s����	�	��	���


�
������������cKs"|�dd�t||fddi|��S)NriT)�poprfrerCrCrD�
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	cs��|D]?}d}d}t||�}t|t�rt|t�sJ�|}}ng}|j}t�|id|i�|r3|d}|dur9|n|}||||fVqdS)N�columnr)rfr?rG�appendr�traverse)	r`r��expr�strnamer�r��cols�
col_append�add_elementrCrCrD� expect_col_expression_collection�s �


�r�c@s^eZdZUdZdd�ZdZded<dZdZdd	�Z		dddd�Z
		ddddd�ddd�ZdS)�RoleImpl)r��namer�cKst��rd)�NotImplementedError��selfrBrbrCrCrDr��szRoleImpl._literal_coercionNrr�FcCs ||_|j|_t|tj�|_dSrd)r��
_role_namer�rLr�UsesInspectionr�)r��
role_classrCrCrD�__init__�szRoleImpl.__init__rBr�r�r�rbrQcKs|�|||�dSrd�r��r�rBr�r�rbrCrCrDr��szRoleImpl._implicit_coercions��advice�code�err�
Optional[Any]r�r�r��Optional[Exception]r
c
Ksj|dur||urd||f}nt|�}|rd|j||f}	nd|j|f}	|r-|	d|7}	tj|	|d�|�)Nz!%r object resolved from %r objectz$%s expected for argument %r; got %s.z%s expected, got %s.� )r�)�reprr�rr^)
r�rBr�r�r�r�r�rb�got�msgrCrCrDr��s�zRoleImpl._raise_for_expectedrd�
rBrr�rr�r�rbrrQr�NN�rBrr�r�r�r�r�r�r�r�r�r�rbrrQr
)�__name__�
__module__�__qualname__�	__slots__r�r��__annotations__r�r�r�r�r�rCrCrCrDr��s 
	���r�c@�eZdZdZdd�ZdS)�_DeannotaterCcKsddlm}||�S)Nr)�_deep_deannotate)rr�)r�r�rbr�rCrCrDr�sz_Deannotate._post_coercionN�r�r�r�r�r�rCrCrCrDr�	�r�c@seZdZdZdZdS)�_StringOnlyrCTN)r�r�r�r�r�rCrCrCrDr�sr�c@s"eZdZdZddd�Zdd�ZdS)�_ReturnsStringKeyrCNcK� t|t�r|S|�|||�dSrd�r?rGr�r�rCrCrDr�s
z%_ReturnsStringKey._implicit_coercionscK�|SrdrCr�rCrCrDr�!�z#_ReturnsStringKey._literal_coercionrd�r�r�r�r�r�r�rCrCrCrDr�s
r�c@s"eZdZdZdd�Zddd�ZdS)�_ColumnCoercionsrCcCst�d�dS)Nz|implicitly coercing SELECT object to scalar subquery; please use the .scalar_subquery() method to produce a scalar subquery.)r�warn)r�rCrCrD�"_warn_for_scalar_subquery_coercion(s�z3_ColumnCoercions._warn_for_scalar_subquery_coercionNcKs�|}t|dd�s|�|||�dS|jr|��|��S|jr.t|tj�r.|��|j	��S|j
jr7|jr7|S|�|||�dS)Nr�F)
r�r��_is_select_baser��scalar_subquery�_is_from_clauser?r#r7rBr�r��_is_lambda_element)r�rBr�r�rbr�rCrCrDr�/s�
z$_ColumnCoercions._implicit_coercionsrd)r�r�r�r�r�r�rCrCrCrDr�%sr��exc_cls�Type[exc.SQLAlchemyError]�extrar�r�r
cCs6|dt�|�|r
d|fnd|rd|ndd��|�)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)rBr�r�r�r�rCrCrD�_no_text_coercionAs����r�c@�eZdZdZdd�dd�ZdS)�_NoTextCoercionrCN�r�cKs6t|t�rttj|j�rt||�dS|�||�dSrd)r?rGrLr r0r�r�r��r�rBr�rbrCrCrDr�Vs
�z!_NoTextCoercion._literal_coercion�r�r�r�r�r�rCrCrCrDr�S�r�c@s4eZdZdZdZdZdZd	dd�Zdd�dd�ZdS)
�_CoerceLiteralsrCFNcC�
t||�Srd�r��r�rBr�rCrCrD�_text_coercione�
z_CoerceLiterals._text_coercionr�cKs�t|t�r|jr|dkrtjddd�S|j||fi|��S|jr8|dur(t��S|dur0t��S|dur8t�	�S|j
rJt|tj�rJtjt|�dd�S|�
||�dS)N�*T)�
is_literalF)r?rG�_coerce_starr r,r��_coerce_consts�Null�False_�True_�_coerce_numerics�numbers�Numberr�r�rCrCrDr�hs
z!_CoerceLiterals._literal_coercionrd)	r�r�r�r�rr�rr�r�rCrCrCrDr�_s
r�c@s,eZdZdZ	d	ddd�dd�Zdd�ZdS)
�LiteralValueImplTNF)�type_�literal_executecKs4t|�s|j|f||d�|��tjd||d|d�S)N)r�r�T)r�uniquer	)rEr�r r*)r�rBr�r�rr	rbrCrCrDr��s
����z$LiteralValueImpl._implicit_coercionscKr�rdrCr�rCrCrDr��r�z"LiteralValueImpl._literal_coercionrd)r�r�r�r�r�r�rCrCrCrDr}s��rcs2eZdZdZ		ddddd�d�fdd�Z�ZS)�_SelectIsNotFromrCNr�rBrr�r�r�r�r�r�r�r�rbrQr
csb|st|tj�st|tj�rd|dur|jn|f}d}nd}t�j|f|||||d�|��J�)NzETo create a FROM clause from a %s object, use the .subquery() method.�89ve)r�r�r�r�r�)r?r�SelectStatementRoler��superr�)r�rBr�r�r�r�r�rb�r�rCrDr��s0�
�
������
z$_SelectIsNotFrom._raise_for_expectedr�r��r�r�r�r�r��
__classcell__rCrCrrDr�s��rc@�&eZdZdZ	ddd
d�Zdd
�ZdS)�HasCacheKeyImplrCNrBrr�r�r�rbrQcKr�rd)r?rr�r�rCrCrDr���
z#HasCacheKeyImpl._implicit_coercionscKr�rdrCr�rCrCrDr��r�z!HasCacheKeyImpl._literal_coercionrdr�r�rCrCrCrDr��
�rc@r)�ExecutableOptionImplrCNrBrr�r�r�rbrQcKr�rd)r?rr�r�rCrCrDr��rz(ExecutableOptionImpl._implicit_coercionscKr�rdrCr�rCrCrDr��r�z&ExecutableOptionImpl._literal_coercionrdr�r�rCrCrCrDr�rrcs4eZdZdZdddd�dd�Zd	�fdd�	Z�ZS)
�ExpressionElementImplrCNF)r�r�is_crudc
Ksp|dur|s|dus
|jst��Sztj|||d|d�WStjy7}z|j||d�WYd}~dSd}~ww)NT)r
�_is_crud�r�)�should_evaluate_noner rr*rr^r�)r�rBr�rrrbr�rCrCrDr��s�
���z'ExpressionElementImpl._literal_coercioncsDt|tj�r	d}nt|tj�rd}nd}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�AnonymizedFromClauseRolerr��r�rBr�r�rbr�rrCrDr�s�����z)ExpressionElementImpl._raise_for_expectedr�)r�r�r�r�r�r�rrCrCrrDr�s
�rc@s.eZdZdZddd�dd�Zdd�dd�ZdS)	�BinaryElementImplrCN)�bindparam_typer�c
KsJz	|j|||d�WStjy$}z|j||d�WYd}~dSd}~ww)N)rr)�_bind_paramrr^r�)r�rBr��operatorr!r�rbr�rCrCrDr�s
��z#BinaryElementImpl._literal_coercion)r!cKs,|jjr|jjs|�|dur|n|j�}|Srd)rK�_isnull�_with_binary_element_type)r�r�r�r!rbrCrCrDr�'s
�z BinaryElementImpl._post_coercion)r�r�r�r�r�r�rCrCrCrDr s�r c@s@eZdZdZ	ddd
d�Zdd
�Ze�d�dd��Zdd�Z	dS)�
InElementImplrCNrBrr�r�r�rbrQcKsj|jr,t|tj�r|jjr|�|�|j|jfi|��S|�|�|j|��fi|��S|�	|||�dSrd)
r�r?r#�AliasrBr��_warn_for_implicit_coercionr��selectr�r�rCrCrDr�2s
��

z!InElementImpl._implicit_coercionscCst�d|jj�dS)Nz_Coercing %s object into a select() for use in IN(); please pass a select() construct explicitly)rr�r�r�)r�rMrCrCrDr(Fs
��z)InElementImpl._warn_for_implicit_coercionzsqlalchemy.sql.elementscs�t�|�rGi�t|�}|D]!}t|�s.t|tjjj�s*t|d�s*|j	|fi|��q
|�|<q
�r?t
j���fdd�|D��S�j�|dd�S|j	|fi|��dS)Nr>cs(g|]}|�vr�|n���|��qSrC)r")�.0�o�r��non_literal_expressionsr#rCrD�
<listcomp>as��
�z3InElementImpl._literal_coercion.<locals>.<listcomp>T)�	expanding)
r�is_non_string_iterablerZrEr?�	preloaded�sql_elementsr-rAr�r �
ClauseListr")r�rBr�r#rbr+rCr,rDr�Ms,
�
�����zInElementImpl._literal_coercioncKsx|jr|��St|tj�rt|j�dkrJ�|j|d�St|tj�r0|j	dd�}d|_
||_|St|tj
�r:|��S|S)Nr)�againstT)�maintain_key)r�r�r?r r3r]�clauses�
self_groupr*�_cloner/�	expand_opr#r�
scalar_values)r�rBr�r#rbrCrCrDr�pszInElementImpl._post_coercionrdr�)
r�r�r�r�r�r(r�preload_moduler�r�rCrCrCrDr&/s�
"r&c@s*eZdZdZdZdd�Zdd�dd�ZdS)	�OnClauseImplrCTcKs|�|�dSrdr�r�rCrCrDr��szOnClauseImpl._literal_coercionN)r�cKst|tj�r|S|Srd)r?r�JoinTargetRole)r�r�r�rbrCrCrDr��szOnClauseImpl._post_coercion)r�r�r�r�rr�r�rCrCrCrDr<�s
r<c@�eZdZdZdZddd�ZdS)�WhereHavingImplrCTNcCr�rdr�r�rCrCrDr��r�zWhereHavingImpl._text_coercionrd�r�r�r�r�rr�rCrCrCrDr?��r?c@r>)�StatementOptionImplrCTNcC�
t�|�Srd�r r0r�rCrCrDr��r�z"StatementOptionImpl._text_coercionrdr@rCrCrCrDrB�rArBc@�eZdZdZdS)�ColumnArgumentImplrCN�r�r�r�r�rCrCrCrDrF��rFc@rE)�ColumnArgumentOrKeyImplrCNrGrCrCrCrDrI�rHrIc@seZdZdZddd�ZdS)�StrAsPlainColumnImplrCNcCrCrd)r r,r�rCrCrDr��r�z#StrAsPlainColumnImpl._text_coercionrd)r�r�r�r�r�rCrCrCrDrJ�srJc@r>)�ByOfImplrCTNcCrCrd)r �_textual_label_referencer�rCrCrDr��r�zByOfImpl._text_coercionrdr@rCrCrCrDrK�rArKc@r�)�OrderByImplrCcKs$t||j�r|jdurt�|�S|Srd)r?r��_order_by_label_elementr �_label_reference)r�r�rbrCrCrDr��s

�

zOrderByImpl._post_coercionNr�rCrCrCrDrM�r�rMc@�eZdZdZ	dd
d
d�ZdS)�GroupByImplrCNrBrr�r�r�rbrQcKst|�r
tj|j�S|Srd)rr r3�cr�rCrCrDr��szGroupByImpl._implicit_coercionsrdr��r�r�r�r�r�rCrCrCrDrQ���rQc@seZdZdZdd�dd�ZdS)�
DMLColumnImplrCFrhcKs|r|jS|Srd)�key)r�rBrirbrCrCrDr��szDMLColumnImpl._post_coercionNr�rCrCrCrDrU�r�rUc@r�)�
ConstExprImplrCNr�cKs@|durt��S|durt��S|durt��S|�||�dS)NFT)r rrrr�r�rCrCrDr��szConstExprImpl._literal_coercionr�rCrCrCrDrW�r�rWc@r)�TruncatedLabelImplrCNrBrr�r�r�rbrQcKs t|t�r|S|�|||�dSrdr�r�rCrCrDr��rz&TruncatedLabelImpl._implicit_coercionscKst|tj�r|St�|�S)z�coerce the given value to :class:`._truncated_label`.

        Existing :class:`._truncated_label` and
        :class:`._anonymous_label` objects are passed
        unchanged.
        )r?r �_truncated_labelr�rCrCrDr�s
z$TruncatedLabelImpl._literal_coercionrdr�r�rCrCrCrDrX�rrXc@r>)�DDLExpressionImplrCTNcCrCrdrDr�rCrCrDr�s
z DDLExpressionImpl._text_coercionrdr@rCrCrCrDrZrArZc@rE)�DDLConstraintColumnImplrCNrGrCrCrCrDr[!rHr[c@rE)�DDLReferredColumnImplrCNrGrCrCrCrDr\%rHr\c@r)�LimitOffsetImplrCNrBrr�r�r�rbrQcKs|durdS|�|||�dSrdr�r�rCrCrDr�,sz#LimitOffsetImpl._implicit_coercionscKs(|durdSt�|�}tj|||dd�S)NT)rr
)r�asintr#�_OffsetLimitParam)r�rBr�rrb�valuerCrCrDr�8s
�z!LimitOffsetImpl._literal_coercionrdr�r�rCrCrCrDr])rr]cs&eZdZdZ	dd
�fd
d�
Z�ZS)�LabeledColumnExprImplrCNrBrr�r�r�rbrQcsXt|tj�r|�d�St�j||fd|i|��}t|tj�r#|�d�S|�|||�dS�Nr�)r?r�ExpressionElementRole�labelrr�r�)r�rBr�r�rb�newrrCrDr�Gs
���
z)LabeledColumnExprImpl._implicit_coercionsrdr�)r�r�r�r�r�rrCrCrrDraDs�racsNeZdZdZdZdZdZe�dej	�Z
	d
dd��fdd�Zddd	�Z�Z
S)�ColumnsClauseImplrCTz^\w\S*$N)r�csF|st|t�rdd�dd�|D���d�}t�j|f|||d�|��S)NzDid you mean to say select(z, css�|]}t|�VqdSrd)r�)r*�erCrCrD�	<genexpr>is�z8ColumnsClauseImpl._raise_for_expected.<locals>.<genexpr>z)?r)r?rZ�joinrr�)r�rBr�r�r�rbrrCrDr�cs�����z%ColumnsClauseImpl._raise_for_expectedcCsHt|�}|j�|�}t�dt�|�|rd|fnd|rdndd���)Nz�Textual column expression %(column)r %(argname)sshould be explicitly declared with text(%(column)r), or use %(literal_column)s(%(column)r) for more specificityr�r��literal_columnr�)r�r�rj)rG�_guess_straight_column�matchrr^rr�)r�rBr��guess_is_literalrCrCrDr�ps
���z ColumnsClauseImpl._text_coercionr�rd)r�r�r�r�rrr��re�compile�Irkr�r�rrCrCrrDrfZs��
rfc@rE)�ReturnsRowsImplrCNrGrCrCrCrDrq�rHrqcs4eZdZdZdd�dd�Z	dd�fd
d�
Z�ZS)�
StatementImplrCNr�cKsH||ur"t|t�s"z|jW|Sty!t�d|d�Y|Sw|S)NaObject %r should not be used directly in a SQL statement context, such as passing to methods such as session.execute().  This usage will be disallowed in a future release.  Please use Core select() / update() / delete() etc. with Session.execute() and other statement execution methods.�1.4)r?rG�_execute_on_connectionr�r�warn_deprecated)r�r�r�r�rbrCrCrDr��s 
�
����zStatementImpl._post_coercionrBrr�r�r�rbrQcs$|jr|St�j||fd|i|��Srb)r�rr�r�rrCrDr��s���z!StatementImpl._implicit_coercionsrdr�)r�r�r�r�r�r�rrCrCrrDrr�s��rrc@rP)�SelectStatementImplrCNrBrr�r�r�rbrQcKs |jr|��S|�|||�dSrd)�_is_text_clause�columnsr�r�rCrCrDr��sz'SelectStatementImpl._implicit_coercionsrdr�rSrCrCrCrDrv�rTrvc@rE)�
HasCTEImplrCNrGrCrCrCrDry�rHryc@rE)�	IsCTEImplrCNrGrCrCrCrDrz�rHrzc@s6eZdZdZdZdd�dd�Z	ddd�ddd�ZdS)�JoinTargetImplrCTNr�cKs|�||�dSrdr�r�rCrCrDr��sz JoinTargetImpl._literal_coercionF)�legacyrBrr�r�r�r|r�rbrQcKs>t|tj�r|S|r|jrtjddd�|S|�|||�dS�Nz�Implicit coercion of SELECT and textual SELECT constructs into FROM clauses is deprecated; please call .subquery() on any Core select or ORM Query object in order to produce a subquery object.rs)�version)r?rr=r�rrur�)r�rBr�r�r|rbrCrCrDr��s	
�z"JoinTargetImpl._implicit_coercionsrd)rBrr�rr�r�r|r�rbrrQr)r�r�r�r�r�r�r�rCrCrCrDr{�s��r{c@s4eZdZdZ	dddd�ddd�Zdd�dd�ZdS)�FromClauseImplrCNFT)r�allow_selectrBrr�r�r�rr�r�rbrQcKsJ|jr|r	|��S|rtjddd�|jSdS|jr|S|�|||�dSr})r��subqueryrru�_implicit_subqueryrwr�)r�rBr�r�rr�rbrCrCrDr��s
��	z"FromClauseImpl._implicit_coercions)�
deannotatecKs|r|��S|Srd)�_deannotate)r�rBr�rbrCrCrDr�szFromClauseImpl._post_coercionrd)rBrr�rr�r�rr�r�r�rbrrQr)r�r�r�r�r�r�rCrCrCrDr�s��rc@s$eZdZdZ	ddd�ddd�ZdS)�StrictFromClauseImplrCNF)r�rBrr�r�r�r�r�rbrQcKs0|jr|rtjddd�|jS|�|||�dSr})r�rrur�r�)r�rBr�r�r�rbrCrCrDr�s
	�z(StrictFromClauseImpl._implicit_coercionsrd)rBrr�rr�r�r�r�rbrrQrrSrCrCrCrDr�s��r�c@s eZdZdZddd�dd�ZdS)�AnonymizedFromClauseImplrCFN)�flatr�cKs|dusJ�|j|d�S)N)r�)�_anonymous_fromclause)r�rBr�r�rbrCrCrDr�1sz'AnonymizedFromClauseImpl._post_coercionr�rCrCrCrDr�.sr�c@r�)�DMLTableImplrCcKsd|jvr
|jdS|S)N�	dml_table)�_annotationsr�rCrCrDr�:s

zDMLTableImpl._post_coercionNr�rCrCrCrDr�7r�r�c@rP)�
DMLSelectImplrCNrBrr�r�r�rbrQcKs:|jrt|tj�r|jjr|jS|��S|�|||�dSrd)r�r?r#r'rBr�r)r�r�rCrCrDr�Ds
��z!DMLSelectImpl._implicit_coercionsrdr�rSrCrCrCrDr�ArTr�cs"eZdZdZd�fdd�	Z�ZS)�CompoundElementImplrCNcs>t|tj�r|jrd}nd}nd}t�j|f|||d�|��S)NzFUse the plain select() object without calling .subquery() or .alias().z9To SELECT from any FROM clause, use the .select() method.r)r?r�FromClauseRole�_is_subqueryrr�rrrCrDr�Zs�����z'CompoundElementImpl._raise_for_expectedr�rrCrCrrDr�Wsr��Role�Impl)rNrGrOrGrPrGrQrR)rUrGrVrGrWrXrQrY)r`rarBrrbrrQrG)
r`rjrBrrirkrbrrQrG)r`rmrBrrbrrQrn)r`rorBrrbrrQrp)r`rqrBrrbrrQrp)r`rrrBrrbrrQrs)r`rtrBrurbrrQrv)r`rwrBrurbrrQrx)r`ryrBrrbrrQrz)r`r{rBr'rbrrQr))r`r|rBr5rbrrQr5)r`r}rBr6rbrrQr6)r`r~rBr(rbrrQr4)
r`r~rBr6rrkrbrrQr7)r`r�rBr�rbrrQr2)r`r�rBr3rbrrQr3)r`r�rBrrbrrQr)r`r�rBrr�r�r�r�r�r�r�r�rbrrQr)r`rjrBrrbrrQrG)r`rqr�r�rQr�)rBrr�r�r�r�r�r�r�r�rQr
)��
__future__r�collections.abc�abcrFrrnr�rrrrrrr	r
rrr
rrrrrr�rr�_typingr�baserr�	cache_keyrrrrr�util.typingrr r!r"r#r$r%r&r'r(�dmlr)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8�SQLRoler9r;�
StringRoler<r=rErHrTr_rfr�r�r�r�r�r�r�r^r�r�r�rrrrrr r&r<r?rBrFrIrJ�ByOfRolerKrMrQrUrWrXrZr[r\r]rarfrqrrrvryrzr{rr�r�r�r�r�r��dirr�r��cls�endswith�replace�globalsr�rc�ee_impl�intr�rG�float�py_typerCrCrCrD�<module>sZ&�	
�	�t7	
�)+V			


)*'%	

�
�