U a@s:ddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z d d lm Z d d lm Z d d lm Z d d l mZdZdZdZdZdZdZddZddZddZddZdwddZddZddZGdddeZGdd d eZGd!d"d"eZGd#d$d$eZGd%d&d&eZ de j!ddfd'd(Z"Gd)d*d*eZ#Gd+d,d,eZ$Gd-d.d.eZ%Gd/d0d0eZ&Gd1d2d2eZ'Gd3d4d4e eZ(Gd5d6d6e(eZ)Gd7d8d8eZ*Gd9d:d:e$e eZ+Gd;d<dd>e$eZ-Gd?d@d@e#eZ.GdAdBdBeeZ/GdCdDdDe$eZ0GdEdFdFe$e eej1Z2GdGdHdHe2eZ3GdIdJdJe2eZ4GdKdLdLeeZ5GdMdNdNeZ6GdOdPdPeeZ7GdQdRdRee$eZ8GdSdTdTeeeZ9GdUdVdVe9Z:GdWdXdXeZ;GdYdZdZe(ZGd_d`d`e$eZ?Gdadbdbe#eZ@Gdcdddde>ZAGdedfdfeZBGdgdhdheZCGdidjdje&e#eZDGdkdldleDZEGdmdndneEZFGdodpdpe&e#eZGGdqdrdre#eZHGdsdtdte#eZIiZJeKeD]JZLeMeeLZNeLOdureLPdudvZLeLeQkreQeLeNZReReJeN<qdS)xN) operators)roles)visitors)Options) HasCacheKey) Visitable)exc) inspection)util)collections_abccCst|ttjf ot|d S)zhReturn whether or not the element is a "literal" in the context of a SQL expression construct. __clause_element__) isinstancerschemaSchemaEventTargethasattr)elementrYC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\sql\coercions.py _is_literals  rcCsrt|tjr2t|ts2|D]}t|sdSqdSt|ttjtt t j j f opt |d opt|t ppt|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)rr Sequencestr_deep_is_literalrrrrrr Z langhelpersZ_symbolrtype issubclass)relemrrrr.s,    rcCst|d||fS)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 Zadd_parameter_text)Z paramnameZmeth_rstZ param_rstrrr_document_text_coercionTs rcCsT|rLt|dtttfrLt|dkrLt|dtrDtd||f|dS|SdS)NrrzThe "%s" argument to %s(), when referring to a sequence of items, is now passed as a series of positional elements, rather than as a list. )rlistsetdictlenr warn_deprecated_20)attrnameZfnnameargsrrr!_expression_collection_was_a_listbs$r%Fc Ks|jr2t|r2t|dr2tj||tjf||dSt|}|}t|tj t j t j fsHd}|j rp|j|f|}n|}d} |jrt||rt|drd} n(t|drd} t|dds|}qqq| sB|jr tj|dd} | dk r |r| jz | }Wn"tk r|||YnX|dkrF|j|fd|i|}n|}n|}|dk rn|jsn|jrn|j|_|j|jjkr|jr|j|f||d |}|S|j||fd|i|SdS) N__code__)apply_propagate_attrsFrTis_clause_element)Zraiseerrargname)r)original_element) allows_lambdacallablerlambdasZ LambdaElementZ LambdaOptions _impl_lookuprelementsZ ClauseElementrZ SchemaItemZ FetchedValue_resolve_literal_only_literal_coercion$_skip_clauseelement_for_target_matchgetattrr_use_inspectionr inspectZ _post_inspectAttributeError_raise_for_expectedZ_propagate_attrs _role_class __class____mro___post_coercion_implicit_coercions) rolerr'r)Z post_inspectkwimplr*resolvedr(Zinsprrrexpectos          rAcKsd|d<t||f|S)NTas_key)rA)r=rr>rrr expect_as_keysrCccsx|D]n}d}d}t||}t|tjr0|}}n$g}t|id|ji|rT|d}|dk r`|n|}||||fVqdS)Ncolumnr)rArr string_typesrZtraverseappend)r=Z expressionsexprZstrnamerDr@colsZ add_elementrrr expect_col_expression_collections   rIc@s@eZdZdZddZdZdZdZddZd dd Z d d d Z dS)RoleImpl)r8namer4cKs tdSN)NotImplementedErrorselfrr>rrrr1szRoleImpl._literal_coercionNFcCs ||_|j|_t|tj|_dSrL)r8Z _role_namerKrrZUsesInspectionr4)rOZ role_classrrr__init__szRoleImpl.__init__cKs||||dSrLr7rOrr@r)r>rrrr<szRoleImpl._implicit_coercionsc Csv|dk r||k rd||f}nt|}|rrbrrrr;!s z_Deannotate._post_coercionNr]r^r_r`r;rrrrrasrac@seZdZdZdZdS) _StringOnlyrTN)r]r^r_r`r0rrrrrd'srdc@s"eZdZdZdddZddZdS)_ReturnsStringKeyrNcKs"t|tjr|S||||dSrLrr rEr7rOr*r@r)r>rrrr<0s z%_ReturnsStringKey._implicit_coercionscKs|SrLrrNrrrr18sz#_ReturnsStringKey._literal_coercion)Nr]r^r_r`r<r1rrrrre-s rec@s"eZdZdZddZdddZdS)_ColumnCoercionsrcCstddS)Nz|implicitly coercing SELECT object to scalar subquery; please use the .scalar_subquery() method to produce a scalar subquery.)r warn)rOrrr"_warn_for_scalar_subquery_coercion?sz3_ColumnCoercions._warn_for_scalar_subquery_coercionNcKszt|dds||||nZ|jr2||S|jrVt|tjrV||j S|j j rh|j rh|S||||dS)Nr(F) r3r7_is_select_statementrkscalar_subquery_is_from_clauser selectableZSubqueryrr8r+_is_lambda_elementrgrrrr<Fs  z$_ColumnCoercions._implicit_coercions)N)r]r^r_r`rkr<rrrrri<sricCsBtj|dt||rd|fnd|r,d|ndd|ddS)Nzc%(extra)sTextual SQL expression %(expr)r %(argname)sshould be explicitly declared as text(%(expr)r)for argument %sz%s )rGr)extrarU)r rWellipses_string)rr)Zexc_clsrsrZrrr_no_text_coercionYs ruc@seZdZdZdddZdS)_NoTextCoercionrNcKs6t|tjr&ttj|jr&t||n |||dSrL) rr rErr/ TextClauser8rur7rOrr)r>rrrr1ms  z!_NoTextCoercion._literal_coercion)Nr]r^r_r`r1rrrrrvjsrvc@s0eZdZdZdZdZdZdddZd ddZdS) _CoerceLiteralsrFNcCs t||SrLrurOrr)rrr_text_coercion|sz_CoerceLiterals._text_coercioncKst|tjr8|jr(|dkr(tjdddS|j||f|S|jrn|dkrNtS|dkr^t S|dkrnt S|j rt|t j rtjt|ddS|||dS)N*T)Z is_literalF)rr rE _coerce_starr/ ColumnClauser}_coerce_constsNullFalse_True__coerce_numericsnumbersNumberrr7rxrrrr1s z!_CoerceLiterals._literal_coercion)N)N) r]r^r_r`rrrr}r1rrrrrzvs  rzc@s$eZdZdZdddZdddZdS) LiteralValueImplTNcKs2t|s |j|f||d|tjd||ddS)N)r@r)Ttype_unique)rr7r/ BindParameter)rOrr@r)rr>rrrr<sz$LiteralValueImpl._implicit_coercionscKs|SrLr)rOrr)rr>rrrr1sz"LiteralValueImpl._literal_coercion)N)NN)r]r^r_r0r<r1rrrrrs rcs"eZdZdZdfdd ZZS)_SelectIsNotFromrNc s`t|tjst|tjr6d|dk r(|jn|f}d}nd}}tt|j|f||||d|S)NzETo create a FROM clause from a %s object, use the .subquery() method.Z89ve)r)r@rYrT)rrZSelectStatementRoler9superrr7)rOrr)r@r>rYrTr9rrr7s( z$_SelectIsNotFrom._raise_for_expected)NNr]r^r_r`r7 __classcell__rrrrrsrc@s"eZdZdZdddZddZdS)HasCacheKeyImplrNcKs"t|tjr|S||||dSrL)r traversalsrr7rgrrrr<s z#HasCacheKeyImpl._implicit_coercionscKs|SrLrrNrrrr1sz!HasCacheKeyImpl._literal_coercion)Nrhrrrrrs rcs,eZdZdZdddZd fdd ZZS) ExpressionElementImplrNFc Ksp|dkr"|s"|dks|js"tSztj|||d|dWStjk rj}z|j||dW5d}~XYnXdS)NT)rZ_is_crudrZ)Zshould_evaluate_noner/rrr rXr7)rOrrKrr)Zis_crudr>rZrrrr1s&z'ExpressionElementImpl._literal_coercionc s6t|tjrd}nd}tt|j|f|||d|S)Nz`To create a column expression from a FROM clause row as a whole, use the .table_valued() method.r)r@rY)rrZAnonymizedFromClauseRolerrr7rOrr)r@r>rYrrrr7s  z)ExpressionElementImpl._raise_for_expected)NNNF)NN)r]r^r_r`r1r7rrrrrrs rc@s"eZdZdZdddZddZdS)BinaryElementImplrNc KsJz|j|||dWStjk rD}z|j||dW5d}~XYnXdS)N)rr) _bind_paramr rXr7)rOrrGoperatorZbindparam_typer)r>rZrrrr1sz#BinaryElementImpl._literal_coercioncKs |jjr|jjs||j}|SrL)rZ_isnullZ_with_binary_element_type)rOr@rGr>rrrr;s z BinaryElementImpl._post_coercion)NN)r]r^r_r`r1r;rrrrrs  rc@s2eZdZdZd ddZddZddZd d ZdS) InElementImplrNcKsd|jrRt|tjr4|jjr4|||j|jf|S|||j|f|Sn| |||dSrL) rnrroAliasrrl_warn_for_implicit_coercionr;selectr7rgrrrr< s   z!InElementImpl._implicit_coercionscCstd|jjdS)Nz_Coercing %s object into a select() for use in IN(); please pass a select() construct explicitly)r rjr9r])rOrrrrrs z)InElementImpl._warn_for_implicit_coercionc st|tjrt|tjsit|}|D]F}t|sZt|tjsP|j |f|qn||<q(|dkr(t |<q(rt j fdd|DSj |ddSn|j |f|dS)Ncs(g|] }|kr|n |qSr)r).0orGZnon_literal_expressionsrrr 1s z3InElementImpl._literal_coercion..T) expanding)rr Iterabler rErrrZColumnOperatorsr7r/r ClauseListr)rOrrGrr>rrrrr1 s*   zInElementImpl._literal_coercioncKsh|jr|St|tjr8t|jdkr,t|j|dSt|tj r`|j dd}d|_ ||_ |S|SdS)Nr)ZagainstT)Z maintain_key) rlrmrr/rr!ZclausesAssertionErrorZ self_grouprZ_clonerZ expand_op)rOrrGrr>rrrr;>s    zInElementImpl._post_coercion)N)r]r^r_r`r<rr1r;rrrrrs  rcs>eZdZdZdZd fdd Zd fdd Zd d d ZZS) OnClauseImplrTNFc s6|rt|tr|Stt|j||f||d|SdS)N)r)legacy)rrrrr<rOr*r@r)rr>rrrr<Vs z OnClauseImpl._implicit_coercionscs.|rt|trtd|Stt|||S)NUsing strings to indicate relationship names in Query.join() is deprecated and will be removed in SQLAlchemy 2.0. Please use the class-bound attribute directly.)rrr r"rrr})rOrr)rrrrr}ds zOnClauseImpl._text_coercioncKst|tjr|S|SrL)rrJoinTargetRole)rOr@r*r>rrrr;ps zOnClauseImpl._post_coercion)NF)NF)N) r]r^r_r`rr<r}r;rrrrrrQs rc@seZdZdZdZdddZdS)WhereHavingImplrTNcCs t||SrLr{r|rrrr}szWhereHavingImpl._text_coercion)Nr]r^r_r`rr}rrrrr{src@seZdZdZdZdddZdS)StatementOptionImplrTNcCs t|SrLr/rwr|rrrr}sz"StatementOptionImpl._text_coercion)Nrrrrrrsrc@seZdZdZdS)ColumnArgumentImplrNr]r^r_r`rrrrrsrc@seZdZdZdS)ColumnArgumentOrKeyImplrNrrrrrrsrc@seZdZdZdddZdS)StrAsPlainColumnImplrNcCs t|SrL)r/rr|rrrr}sz#StrAsPlainColumnImpl._text_coercion)N)r]r^r_r`r}rrrrrsrc@seZdZdZdZdddZdS)ByOfImplrTNcCs t|SrL)r/Z_textual_label_referencer|rrrr}szByOfImpl._text_coercion)Nrrrrrrsrc@seZdZdZddZdS) OrderByImplrcKs(t||jr |jdk r t|S|SdSrL)rr8Z_order_by_label_elementr/Z_label_reference)rOr@r>rrrr;s   zOrderByImpl._post_coercionNrcrrrrrsrc@seZdZdZdddZdS) GroupByImplrNcKs t|tjrtj|jS|SdSrL)rrZStrictFromClauseRoler/rcrgrrrr<s  zGroupByImpl._implicit_coercions)Nr]r^r_r`r<rrrrrsrc@seZdZdZdddZdS) DMLColumnImplrFcKs|r |jS|SdSrL)key)rOrrBr>rrrr;szDMLColumnImpl._post_coercionN)Frcrrrrrsrc@seZdZdZdddZdS) ConstExprImplrNcKs@|dkrtS|dkr tS|dkr0tS|||dS)NFT)r/rrrr7rxrrrr1szConstExprImpl._literal_coercion)Nryrrrrrsrc@s$eZdZdZdddZdddZdS) TruncatedLabelImplrNcKs"t|tjr|S||||dSrLrfrgrrrr<s z&TruncatedLabelImpl._implicit_coercionscKst|tjr|St|SdS)zcoerce the given value to :class:`._truncated_label`. Existing :class:`._truncated_label` and :class:`._anonymous_label` objects are passed unchanged. N)rr/Z_truncated_labelrxrrrr1s z$TruncatedLabelImpl._literal_coercion)N)Nrhrrrrrs rc@seZdZdZdZdddZdS)DDLExpressionImplrTNcCs t|SrLrr|rrrr}sz DDLExpressionImpl._text_coercion)Nrrrrrrsrc@seZdZdZdS)DDLConstraintColumnImplrNrrrrrrsrc@seZdZdZdS)DDLReferredColumnImplrNrrrrrrsrc@s"eZdZdZdddZddZdS)LimitOffsetImplrNcKs|dkr dS||||dSrLrQrRrrrr< sz#LimitOffsetImpl._implicit_coercionscKs,|dkr dSt|}tj|||ddSdS)NTr)r ZasintroZ_OffsetLimitParam)rOrrKrr>valuerrrr1s z!LimitOffsetImpl._literal_coercion)Nrhrrrrrs rcs"eZdZdZdfdd ZZS)LabeledColumnExprImplrNc s\t|tjr|dStt|j||fd|i|}t|tjrJ|dS||||dSNr))rrZExpressionElementRolelabelrrr<r7)rOr*r@r)r>newrrrr<s     z)LabeledColumnExprImpl._implicit_coercions)N)r]r^r_r`r<rrrrrrsrc@s4eZdZdZdZdZdZedej Z dddZ dS)ColumnsClauseImplrTz^\w\S*$NcCsLt|}|j| }tdt||r2d|fnd|rrrrr1{s z JoinTargetImpl._literal_coercionNcKsnt|tjr|S|r,t|tr,td|S|r@t|tjr@|S|r\|jr\tjddd|S| |||dS)NrImplicit 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.1.4version) rrrrr r"ZWhereHavingRolerlwarn_deprecatedr7rrrrr<s    z"JoinTargetImpl._implicit_coercions)F)NF)r]r^r_r`r2r1r<rrrrrvs  rc@s$eZdZdZd ddZd ddZdS) FromClauseImplrNFTcKsH|jr,|r|S|rDtjddd|jSn|jr6|S||||dSNrrr)rlZsubqueryr r_implicit_subqueryrr7)rOr*r@r)Zexplicit_subquery allow_selectr>rrrr<s z"FromClauseImpl._implicit_coercionscKs|r |S|SdSrL)Z _deannotate)rOrZ deannotater>rrrr;szFromClauseImpl._post_coercion)NFT)F)r]r^r_r`r<r;rrrrrs  rc@seZdZdZdddZdS)StrictFromClauseImplrNFcKs0|jr|rtjddd|jS||||dSr)rlr rrr7)rOr*r@r)rr>rrrr<s z(StrictFromClauseImpl._implicit_coercions)NFrrrrrrsrc@seZdZdZdddZdS)AnonymizedFromClauseImplrFNcKs|dks t|j|dS)N)flat)rZ_anonymous_fromclause)rOrrrKr>rrrr;s z'AnonymizedFromClauseImpl._post_coercion)FNrcrrrrrsrc@seZdZdZddZdS) DMLTableImplrcKsd|jkr|jdS|SdS)NZ dml_table)Z _annotationsrNrrrr;s  zDMLTableImpl._post_coercionNrcrrrrrsrc@seZdZdZdddZdS) DMLSelectImplrNcKs<|jr*t|tjr |jjr |jS|Sn||||dSrL)rnrrorrrlrr7rgrrrr<s  z!DMLSelectImpl._implicit_coercions)Nrrrrrrsrcs"eZdZdZdfdd ZZS)CompoundElementImplrNc sBt|tjr|jrd}q"d}nd}tt|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)rrZFromClauseRoleZ _is_subqueryrrr7rrrrr7s   z'CompoundElementImpl._raise_for_expected)NNrrrrrrsrZRoleZImpl)NNF)Srrrrrrrbaserrrrr r r r r/r-rroZsqltypesrrrr%rArCrIobjectrJrardrerirXrurvrzrrrrrrrrrrrrZByOfRolerrrrrrrrrrrrrrrrrrrrrrrrr.dirrKr3clsendswithreplaceglobalsr?rrrrs          & j/   &K*       ,$