L i ddlmZddlmZddlZddlZddlZddlmZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z dd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddl m!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddl&m'Z'ej*rdd 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+mZ>dd6l+m?Z?dd7l+m@Z@dd8lmAZAed9ej:ZCed;e de:ZGdd?ZHd@ZI ddAZJ ddBZKe ddCZLed D#D)   ((  ''    !56 6 7D) ) 4g{33rGc<tj|d|d|dS)Nz.. warning:: The z argument to z can be passed as a Python string argument, which will be treated as **trusted SQL text** and rendered as given. **DO NOT PASS UNTRUSTED INPUT TO THIS PARAMETER**.)radd_parameter_text) paramnamemeth_rst param_rsts rE_document_text_coercionrVs&  " " h   rGc|rjt|dtttfrLt |dk(r>t|dtrt j d|d|dtd|dStd|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. Sequence[_T])rAlistsetdictlenr ArgumentErrorr)attrnamefnnameargss rE!_expression_collection_was_a_listras}  47T3$563t9> d1gt $##zx844  NDG,,  %%rGc yNrolerDkws rEexpectrh rGas_keyc yrcrd)rfrDrkrgs rErhrhs rGc yrcrdres rErhrhs rGc yrcrdres rErhrh "rGc yrcrdres rErhrhrorGc yrcrdres rErhrhs -0rGc yrcrdres rErhrhs rGc yrcrdres rErhrhsrGc yrcrdres rErhrhsrGc yrcrdres rErhrhs rGc yrcrdres rErhrhs rGc yrcrdres rErhrh rGc yrcrdres rErhrhrxrG)explicit_subqueryc yrcrd)rfrDrzrgs rErhrhsrGc yrcrdres rErhrh s  rGc yrcrdres rErhrh(s rGc yrcrdres rErhrh1rirGF)apply_propagate_attrsargname post_inspectdisable_inspectionc |jrCt|r8t|dr,tj||tj d i||St |}|}t|tjtjtjtjfsd} |jr|j|fi|} n|}d} |j rt||rt|drd} n:t|dr.d} t#|dds|j%}nn t|dr.| s^|j&r:|s8t)j*|d} | |r | j, | j%} | H|j|fd|i|} n2|} n/t|tjr|j2d i|} n|} |Rt4j6rt| t8t:fsJ|j<st#| d dr| j<|_|j>| j@jBvr$|jDr|jD| f||d |} | S|jF|| fd|i|S#t.$r|j1||YwxYw) N__code__)rFr@Tis_clause_element)raiseerrr_propagate_attrs)roriginal_elementrd)$ allows_lambdacallablerCr" LambdaElement LambdaOptions _impl_lookuprAr!CompilerElementr# SchemaItem FetchedValue PyWrapper_resolve_literal_only_literal_coercion$_skip_clauseelement_for_target_matchgetattrr@_use_inspectionrinspect _post_inspectAttributeError_raise_for_expected_sa__py_wrapper_literaltypingrr0r,r _role_class __class____mro___post_coercion_implicit_coercions) rfrDrrrrrgimplrresolvedrinsps rErhrh9s  W  GZ ($$    ! ! 'B '"7     D   $ $              % %-t--g< g';<%''0B%--gFD'' ..P'+'>'>'@H#5t55 )0 46 H# GW.. /27228R8(   h):M(JK KK$55' ($; 6>5N5N ! 2 8--555   *t**!1 H 't'' h 07 ;=  C .P 445EwOPs"I,,J  J c D|jddt||fddi|S)NrkT)poprhres rE expect_as_keyrs)FF8T $ 3 3 33rGc#K|D]u}d}d}t||}t|trt|tsJ|x}}n.g}|j}t j |id|i|r|d}||n|}||||fwyw)Ncolumnr)rhrArJappendrtraverse) rf expressionsexprstrnamerrcols col_append add_elements rE expect_col_expression_collectionrs5,24,> h $dC( ((!% %Gh&(D=A[[J   hXz,B Ca & 2f 44!5sAceZdZUdZdZdZded<dZdZdZ d d dZ d dddd  dd Z y)RoleImpl)rnamerc trc)NotImplementedErrorselfrDrgs rErzRoleImpl._literal_coercions !##rGNrrFcr||_|j|_t|tj |_yrc)r _role_namerrOrUsesInspectionr)r role_classs rE__init__zRoleImpl.__init__s,%)) )*e6J6JKrGc *|j|||yrcrrrDrrrgs rErzRoleImpl._implicit_coercionss   '8(E$=$=> *2)=8%%7JM  DD #      urGrrrrrrr __classcell__rs@rErrsxI "&"& # !%"#'### #  ##!## ##rGrc4eZdZdZ d ddZdZy)HasCacheKeyImplrdNc Nt|tr|S|j|||yrc)rArrrs rErz#HasCacheKeyImpl._implicit_coercionss% g{ +N  $ $Wgx @rGc |Srcrdrs rErz!HasCacheKeyImpl._literal_coercionrrGrcrrrdrGrErrLI "& A A A A  A ArGrc4eZdZdZ d ddZdZy)ExecutableOptionImplrdNc Nt|tr|S|j|||yrc)rArrrs rErz(ExecutableOptionImpl._implicit_coercionss& g/ 0N  $ $Wgx @rGc |Srcrdrs rErz&ExecutableOptionImpl._literal_coercionrrGrcrrrdrGrEr$r$r"rGr$c4eZdZdZdddddZdfd ZxZS)ExpressionElementImplrdNF)rris_crudc |$|s"| |jstjS tj|||d|S#tj $r}|j ||Yd}~yd}~wwxYw)NT)r_is_crudr)should_evaluate_noner!rr+rr]r)rrDrrr)rgrs rErz'ExpressionElementImpl._literal_coercionsx Oe&@&@ ==? " ;--'5$$ ;((c(:: ;sAA2A--A2c t|tjrd}nt|tjrd}nd}t ||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.rrr)rAr$ValuesrAnonymizedFromClauseRolerrrrDrrrgrrs rErz)ExpressionElementImpl._raise_for_expectedsi gz00 13 !?!? @>  Fw*  $x JL  rGr)rrrrrrrrs@rEr(r(s I $4;(  rGr(c*eZdZdZddddZdddZy)BinaryElementImplrdN)bindparam_typerc  |j|||S#tj$r}|j||Yd}~yd}~wwxYw)N)rr,) _bind_paramrr]r)rrDroperatorr5rrgrs rErz#BinaryElementImpl._literal_coercionsK 7##Hg^#L L   7  $ $W# $ 6 6 7sAAA)r5c |jjr5|jjs|j||n |j}|Src)rN_isnull_with_binary_element_type)rrrr5rgs rErz BinaryElementImpl._post_coercion's@ == ):):99"0"<$))HrG)rrrrrrrdrGrEr4r4s I 7@DrGr4cjeZdZdZ d d dZdZejddZdZ y) InElementImplrdNc b|jrt|tjrD|jj r.|j ||j|jfi|S|j ||j|jfi|S|j|||yrc) rrAr$AliasrDr_warn_for_implicit_coercionrselectrrs rErz!InElementImpl._implicit_coercions2s  # #8Z%5%56$$4400:*t**8+;+;BrBB00:*t**8??+<CCC  $ $Wgx @rGc\tjd|jjzy)Nz_Coercing %s object into a select() for use in IN(); please pass a select() construct explicitly)rrrr)rrPs rEr@z)InElementImpl._warn_for_implicit_coercionFs%  :~~&& ( rGzsqlalchemy.sql.elementsc tj|ri}t|}|D]a}t|rt |tj j js t|ds|j|fi|]|||<c|r9tj|Dcgc]}||vr||n|j||c}S|j||dS|j|fi|ycc}w)Nr@T) expanding) ris_non_string_iterablerYrFrA preloaded sql_elementsr.rCrr! ClauseListr7)rrDrr8rgnon_literal_expressionsos rErzInElementImpl._literal_coercionMs  & &w / $7mG 7"1~%4>>66DD%a)=>000?B?67/2 7'**")   !$;;4A6!%!1!1(A!>?  '''T'JJ %D $ $W 3 3s"C,c |jr|jSt|tjr,t |j dk(rJ|j|St|tjr"|jd}d|_ ||_ |St|tjr|jS|S)Nr)againstT) maintain_key)rrrAr!rHr\clauses self_groupr+_clonerD expand_opr$r0 scalar_values)rrDrr8rgs rErzInElementImpl._post_coercionps  " "**, , !4!4 57??+q0 00%%h%7 7 !7!7 8nn$n7G $G  (G N !2!2 3((* *NrGrcr) rrrrrr@rpreload_modulerrrdrGrEr=r=/stI "& AAA A  A A( T23 44 4DrGr=c&eZdZdZdZdZdddZy) OnClauseImplrdTc &|j|yrcrrs rErzOnClauseImpl._literal_coercions   )rGN)rc >t|tjr|S|Src)rArJoinTargetRole)rrrrgs rErzOnClauseImpl._post_coercions &(<(< =# #rG)rrrrrrrrdrGrErUrUsIN*<@rGrUceZdZdZdZddZy)WhereHavingImplrdTNct||Srcrrs rErzWhereHavingImpl._text_coercionrrGrcrrrrrrrdrGrErZrZsIN3rGrZceZdZdZdZddZy)StatementOptionImplrdTNc,tj|Srcr!r1rs rErz"StatementOptionImpl._text_coercions""7++rGrcr\rdrGrEr^r^sIN,rGr^ceZdZdZy)ColumnArgumentImplrdNrrrrrdrGrErbrbIrGrbceZdZdZy)ColumnArgumentOrKeyImplrdNrcrdrGrErfrfrdrGrfceZdZdZddZy)StrAsPlainColumnImplrdNc,tj|Src)r!r-rs rErz#StrAsPlainColumnImpl._text_coercions$$W--rGrc)rrrrrrdrGrErhrhs I.rGrhceZdZdZdZddZy)ByOfImplrdTNc,tj|Src)r!_textual_label_referencers rErzByOfImpl._text_coercions0099rGrcr\rdrGrErkrksIN:rGrkceZdZdZdZy) OrderByImplrdc tt||jr!|jtj|S|Src)rAr_order_by_label_elementr!_label_reference)rrrgs rErzOrderByImpl._post_coercions4 x!1!1 200<,,X6 6OrGNrrdrGrEroros IrGroc.eZdZdZ d ddZy) GroupByImplrdNc Tt|rtj|jS|Src)rr!rHcrs rErzGroupByImpl._implicit_coercionss& ( #&& 3 3OrGrcrrrrrrrdrGrErtrtsAI "&       rGrtceZdZdZdddZy) DMLColumnImplrdFrjc "|r |jS|Src)key)rrDrkrgs rErzDMLColumnImpl._post_coercions ;; NrGNrrdrGrEryrysI05rGryceZdZdZdddZy) ConstExprImplrdNrc |tjS|durtjS|durtjS|j ||y)NFT)r!rr r rrs rErzConstExprImpl._literal_coercionsL ?==? "  ??$ $ _>># #  $ $Wg 6rGrrdrGrEr}r}sI487rGr}c4eZdZdZ d ddZdZy)TruncatedLabelImplrdNc Nt|tr|S|j|||yrcrrs rErz&TruncatedLabelImpl._implicit_coercionss% gs #O  $ $Wgx @rGc dt|tjr|Stj|S)zcoerce the given value to :class:`._truncated_label`. Existing :class:`._truncated_label` and :class:`._anonymous_label` objects are passed unchanged. )rAr!_truncated_labelrs rErz$TruncatedLabelImpl._literal_coercions* gx88 9N,,W5 5rGrcrrrdrGrErrsLI "& A A A A  A A 6rGrceZdZdZdZddZy)DDLExpressionImplrdTNc,tj|Srcr`rs rErz DDLExpressionImpl._text_coercions ""7++rGrcr\rdrGrErrsIN,rGrceZdZdZy)DDLConstraintColumnImplrdNrcrdrGrErr!rdrGrceZdZdZy)DDLReferredColumnImplrdNrcrdrGrErr%rdrGrc4eZdZdZ d ddZdZy)LimitOffsetImplrdNc 0|y|j|||yrcrrs rErz#LimitOffsetImpl._implicit_coercions,s    $ $Wgx @rGc d|ytj|}tj|||dS)NT)rr)rasintr$_OffsetLimitParam)rrDrrrgvalues rErz!LimitOffsetImpl._literal_coercion8s6 ?JJw'E//e5 rGrcrrrdrGrErr)sLI "& A A A A  A A rGrc:eZdZdZ d dfd ZxZS)LabeledColumnExprImplrdc t|tjr|jdSt |||fd|i|}t|tjr|jdS|j |||yNr)rArExpressionElementRolelabelrrr)rrDrrrgnewrs rErz)LabeledColumnExprImpl._implicit_coercionsGsz h ; ; <>>$' ''-+268C#u::;yy&(('8DrGrcr)rrrrrrrs@rErrDsNI "& EEE E  E EErGrczeZdZdZdZdZdZejdejZ dddfd Z d dZ xZ S) ColumnsClauseImplrdTz^\w\S*$N)rc |s,t|trddjd|Dd}t||f|||d|S)NzDid you mean to say select(z, c32K|]}t|ywrc)r).0es rE z8ColumnsClauseImpl._raise_for_expected..is6T!W6sz)?r/)rArYjoinrr)rrDrrrrgrs rErz%ColumnsClauseImpl._raise_for_expectedcs`*Wd3-996g667r;  w*  $x JL  rGct|}|jj| }tjdt j ||rd|nd|rdnddz)NzTextual column expression %(column)r %(argname)sshould be explicitly declared with text(%(column)r), or use %(literal_column)s(%(column)r) for more specificityrrliteral_columnr)rrr)rJ_guess_straight_columnmatchrr]rr)rrDrguess_is_literals rErz ColumnsClauseImpl._text_coercionpsig,#::@@II # ..w7=D9"(8$h    rGrrc)rrrrrr rrecompileIrrrrrs@rErrZsFINL'RZZ BDD9/3  >B   rGrceZdZdZy)ReturnsRowsImplrdNrcrdrGrErrrdrGrcFeZdZdZdddZ d dfd ZxZS) StatementImplrdNrc ||urt|ts |j|S|S#t$rt j d|zdY|SwxYw)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)rArJ_execute_on_connectionrrwarn_deprecated)rrrrrgs rErzStatementImpl._post_coercionsl + +J c5  77x" $$ "2 2  s &"A  A c F|jr|St|||fd|i|Sr)rrr)rrDrrrgrs rErz!StatementImpl._implicit_coercionss:  & &O7.+268 rGrcr)rrrrrrrrs@rErrsQI6:8"&        rGrc.eZdZdZ d ddZy)SelectStatementImplrdNc b|jr|jS|j|||yrc)_is_text_clausecolumnsrrs rErz'SelectStatementImpl._implicit_coercionss.  # ###% %  $ $Wgx @rGrcrrwrdrGrErrsGI "& A A A A  A ArGrceZdZdZy) HasCTEImplrdNrcrdrGrErrrdrGrceZdZdZy) IsCTEImplrdNrcrdrGrErrrdrGrcHeZdZdZdZdddZ d dd d dZy) JoinTargetImplrdTNrc (|j||yrcrrs rErz JoinTargetImpl._literal_coercions   '2rGF)legacyc t|tjr|S|r%|jrt j dd|S|j |||yNzImplicit 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)rArrXrrrr)rrDrrrrgs rErz"JoinTargetImpl._implicit_coercionssW gu33 4N 00  6  O  $ $Wgx @rGrc) rDrrrrrrboolrgrrr)rrrrrrrrdrGrErrskI+/(483"& A  AAA A  AA ArGrcJeZdZdZ d ddd d dZdddZy) FromClauseImplrdNFT)rz allow_selectc |jr8|r|jS|r#tjdd|jSy|j r|S|j |||yr)rsubqueryrr_implicit_subqueryrr)rrDrrrzrrgs rErz"FromClauseImpl._implicit_coercionsso  # # ((**$$:"  222 % %O  $ $Wgx @rG) deannotatec *|r|jS|Src) _deannotate)rrDrrgs rErzFromClauseImpl._post_coercions &&( (NrGrc)rDrrrrrrzrrrrgrrr)rrrrrrrdrGrErrsuI "& A #(!AAA A  AAA A65:rGrc8eZdZdZ ddd ddZy)StrictFromClauseImplrdNF)rc |jr%|r#tjdd|jS|j |||yr)rrrrr)rrDrrrrgs rErz(StrictFromClauseImpl._implicit_coercionssG  # #  #  .. .  $ $Wgx @rGrc) rDrrrrrrrrgrrrrwrdrGrErrs]I "& A # AAA A  AA ArGrceZdZdZddddZy)AnonymizedFromClauseImplrdFN)flatrc .|J|j|S)N)r)_anonymous_fromclause)rrDrrrgs rErz'AnonymizedFromClauseImpl._post_coercion1s ||,,$,77rGrrdrGrErr.sI.3$8rGrceZdZdZdZy) DMLTableImplrdc @d|jvr|jdS|S)N dml_table) _annotationsrs rErzDMLTableImpl._post_coercion:s& '.. .'' 4 4NrGNrrdrGrErr7s IrGrc.eZdZdZ d ddZy) DMLSelectImplrdNc |jrLt|tjr"|jj r |jS|j S|j|||yrc)rrAr$r?rDrrArrs rErz!DMLSelectImpl._implicit_coercionsDsW  # #8Z%5%56$$44'''((  $ $Wgx @rGrcrrwrdrGrErrAsGI "& AAA A  A ArGrc$eZdZdZdfd ZxZS)CompoundElementImplrdc t|tjr|jrd}nd}nd}t ||f|||d|S)NzFUse the plain select() object without calling .subquery() or .alias().z9To SELECT from any FROM clause, use the .select() method.r/)rArFromClauseRole _is_subqueryrrr2s rErz'CompoundElementImpl._raise_for_expectedZsa gu33 4##7 PFw*  $x JL  rGrrrs@rErrWsI  rGrRoleImpl)rDrrr)rSrJrTrJrUrJrzCallable[[_F], _F])r^rJr_rJr`z+Union[Sequence[_T], Sequence[Sequence[_T]]]rrX)rfzType[roles.TruncatedLabelRole]rDrrgrrrJ) rfType[roles.DMLColumnRole]rDrrk Literal[True]rgrrrJ)rfzType[roles.LiteralValueRole]rDrrgrrzBindParameter[Any])rfz!Type[roles.DDLReferredColumnRole]rDrrgrrUnion[Column[Any], str])rf#Type[roles.DDLConstraintColumnRole]rDrrgrrr)rfzType[roles.StatementOptionRole]rDrrgrrz%Union[ColumnElement[Any], TextClause])rfz&Type[roles.LabeledColumnExprRole[Any]]rD_ColumnExpressionArgument[_T]rgrrzNamedColumn[_T])rfzgUnion[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole]]rDrrgrrzColumnElement[_T])rfzUnion[Type[roles.ExpressionElementRole[Any]], Type[roles.LimitOffsetRole], Type[roles.WhereHavingRole], Type[roles.OnClauseRole], Type[roles.ColumnArgumentRole]]rDrrgrrzColumnElement[Any])rfzType[roles.DMLTableRole]rDr(rgrrr*)rfzType[roles.HasCTERole]rDr6rgrrr6)rfzType[roles.SelectStatementRole]rDr7rgrrr7)rfType[roles.FromClauseRole]rDr)rgrrr5) rfrrDr7rzrrgrrr8)rfzType[roles.ColumnsClauseRole]rDz_ColumnsClauseArgument[Any]rgrrr3)rfzType[roles.JoinTargetRole]rDr4rgrrr4)rf Type[_SR]rDrrgrrr)rfrrDrrzOptional[ClauseElement]rrrrrrrgrrr)rfrrDrrgrrrJ)rfrrzIterable[_DDLColumnArgument]rzwIterator[Tuple[Union[str, Column[Any]], Optional[ColumnClause[Any]], Optional[str], Optional[Union[Column[Any], str]]]]) rDrrrrzType[exc.SQLAlchemyError]rrrrrr ) __future__rcollections.abcabcrIr rrrrrrrr r r r r rrrrrrrrr_typingrbaserr cache_keyrrrrr util.typingr r!r"r#r$r%r&r'r(r)dmlr*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9SQLRoler:r< StringRoler=r>rFrKrVrarhrrrrrrrr]rrrrrrr$r(r4r=rUrZr^rbrfrhByOfRolerkrortryr}rrrrrrrrrrrrrrrrrrrrdirrrclsendswithreplaceglobalsrree_implintrrJfloatpy_typerdrGrErsT #)  #""! 2/+*,%''&'%+$1/&"&$/ e5==) T#s(+,~U-=-=>  T 5#L  ! .1   && & 6& &$  (       #          &     " +" " " " " " -" " " " " 0 )0 0 0+ 0 0  0 *      +               "            )      $     (+  $ %        ' (         $          6:!$q q q 3 q  q  q q  q  q h4 #4.149<445 -5-55<4949n**!!  JxJ<"),):):#   '      $ 7h 73h3<x<&x&Rh&8&( ,h( V-x4SHSl#X&3o'73,/8,(/.?H.: 0(ENN: (H  (H  %x 7H 76h6: , _h ,k+A2838#_hAOXA, /8 *  J%D % C }}V||FF+ 79 "79T?3'D $L  %5667GsE*E=D U009:ErG