L i?,dZddlmZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddl"m#Z#ddl"m$Z$dd lm%Z%dd!lm&Z&dd"l'm(Z(er6dd#l)m*Z*dd$l)m+Z+dd%lm,Z,dd&lm-Z-dd'lm.Z.dd(lm/Z/dd)lm0Z0dd*lm1Z1dd+lm2Z2e&jfd,d-Z4dRd0Z5ed.e6eee6d1fe e6fZ7ed2e6e6e e6fZ8ed/e6d1e e6fZ9e e7Z:Gd3d4e Z; dSd5Z dYd:Z?d;Z@d<ZAd=ZBd>ZCd?ZDd@ZEdAZF dZdBZGdCZHe d[ d\dDZIe d]dEZI d^ d_dFZIe d[ d\dGZJe d]dHZJ d^ d_dIZJGdJdKej^eZK d`dLZLdMZM dadNZNdOZOdPZPdQZQy)bziFunctions used by compiler.py to determine the parameters rendered within INSERT and UPDATE statements. ) annotationsN)Any)Callable)cast)Dict)Iterable)List)MutableMapping) NamedTuple)Optional)overload)Sequence)Set)Tuple) TYPE_CHECKING)Union) coercions)dml)elements)roles)_DefaultDescriptionTuple)isinsert) ColumnClause)default_is_clause_element)default_is_sequence)Select) TableClause)exc)util)Literal)_BindNameForColProtocol) SQLCompiler)_DMLColumnElement)DMLState) ValuesBase) ColumnElement)KeyedColumnElement)_SQLExprDefault)ColumnREQUIREDa8 Placeholder for the value within a :class:`.BindParameter` which is required to be present when the statement is passed to :meth:`_engine.Connection.execute`. This symbol is typically used when a :func:`_expression.insert` or :func:`_expression.update` statement is compiled without parameter values present. ColumnElement[Any]ColumnClause[Any]cVt|tstjd||S)Nz5Can't create DML statement against column expression ) isinstancerr CompileError)cs Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/sql/crud.py_as_dml_columnr4Js0 a &CA5 I   Hr*KeyedColumnElement[Any]cLeZdZUded<ded<dZded<dZded<d Zd ed <y ) _CrudParams_CrudParamSequence single_params$List[Sequence[_CrudParamElementStr]]all_multi_paramsFboolis_default_metavalue_onlyuse_insertmanyvaluesNzOptional[Sequence[Column[Any]]]use_sentinel_columns)__name__ __module__ __qualname____annotations__r>r?r@r5r3r8r8js0%%::&+t+!&$&<@9@r5r8c J g|_g|_g|_g|_|j dd}||j ddd|vsJdt |||\}}||_|jr!|jrtjd|jr!t|||d||dd|| tggS|j{|j rot|j"j$Dcgc]E}|j&s7||j(j+|t-||dd|j.ffGc}gSt1|rP|j2rD|j4} | J| d } t7| j9} | D chc] } |  } } n|j:r2|j<} |j:} | J| D chc] } |  } } nK|j<r;|j<} t7| j9} | D chc] } |  } } ndx} } |ji}nS| r-| J|jD cic]} | | vr | t>}} n$|jD cic]} | t>}} g}| tA|||| ||i}tCjD|r|jFrtI|||| ||||| t1|r4|jJr(|j2rJtM|||||||||| d }d}ntO|||||||||| \}}|r\| rYtQ|jSfd | DjU|}|r$tCjD|rtQd | DjU|jVg}|jU|jX}|rZ|jFr |jZsB|jZsd }nd}tj|ddj]d|Dd|r<|jZsJtjddj]d|Dtjddj]d|Dzd }t1|rJ|j2r>|jJrJt_|||tad|tad|}t||S|s|jbr|jdjfrmti|j"j$d |j(j+|j"j$d |jdjjdfg}d}t|g|||Scc}wcc} wcc} wcc} wcc} wcc} w)aQcreate a set of tuples representing column/string pairs for use in an INSERT or UPDATE statement. Also generates the Compiled object's postfetch, prefetch, and returning column collections, used for default handling and ultimately populating the CursorResult's prefetch_cols() and postfetch_cols() collections. visiting_cteNaccumulate_bind_namesz;Don't know how to handle insert within insert without a CTEzVCan't compile statement that includes returning() and return_defaults() simultaneouslyrET)requiredrFc34K|]\}}|ywNrE).0kv_column_as_keys r3 z#_get_crud_params..KsN1.+Nsc3rK|]/\}}t|tr|j|j1ywrK)r0rtable)rLr2rNs r3rPz#_get_crud_params..Qs3'1!!\2qww7JGG's57z.ls'&A*+)*!--&:&Az in SET clausez7Multi-table UPDATE statement does not include table(s) c3<K|]}d|jdywrUrWrYs r3rPz#_get_crud_params..ws%&8 !#$AMM?! 4&8r[zUnconsumed column names: %sc3"K|]}| ywrKrE)rLr2s r3rPz#_get_crud_params..s8QQ[8s Sequence[_CrudParamElementStr]Callable[..., str])r>r?r@)6 postfetchinsert_prefetchupdate_prefetchimplicit_returninggetpop_key_getters_for_crud_column_get_bind_name_for_col _returning_return_defaultsr r1isdelete_setup_delete_return_defaultsr8 column_keys_no_parametersrRcolumns_omit_from_statementspreparer format_column_create_bind_paramkey_compile_state_isinsert_has_multi_parameters_multi_parameterslistitems_ordered_values_dict_parametersr,!_get_stmt_parameter_tuples_paramsrisupdate is_multitable_get_update_multitable_params _select_names_scan_insert_from_select_cols _scan_colsset intersection difference dml_table _extra_froms'render_table_with_column_in_update_fromjoin_extend_values_for_multiparamsrfor_executemanydialectsupports_default_metavaluer4default_metavalue_token)compilerstmt compile_statetoplevelkwrG_getattr_col_key_col_bind_namer2mpspdstmt_parameter_tuplesrs spd_str_key parametersvalues check_columnsr?r@checktables_mentionedmulti_not_in_frompreambler>multi_extended_valuesrOs @r3_get_crud_paramsrrsPH!H!H"$H66.$/L &-r)EDE) %Xt]C '5H# 400 /  %            2r""# (D(D++ .. %%33A6&xD4HUUH     ( .  / /  , ,~~e $SYY[ 169:s~c*: :  & &,, - = =69:s~c*: :  ' ',, $SYY[ 169:s~c*: :.22 # &&& ++ +% 3  )  6>5I5I .1N3  )  ')F()    !    35M ||M"}'B'B%    !      }-$2D2D!6666%             %#5?            6 22+  O \N8MN N Z &  ||M*#&' 5'$*m5567 ! %5$?$?!..%!$%33#KK#KK7! N!**#*%; II&A/?&AA;( +'#KKKK**$!II&8%6&88""-998%88:  !& .  / /%%%% >    0  %~ 6  ! 6#899   $ $    7 7tzz11!45!!// 0B0B10EF  88   %)!  ";11  u 4; ;;  s%6A VV VVV8V c yrKrE)rcolvalueprocessrInameforce_anonymousrs r3rrrrs r5c yrKrE)rrrrs r3rrrr r5c |rd}n| |j}tj|||j|}d|_|r|j |fi|S|S)N)type_rIT)rsr BindParametertype_is_crud_compiler_dispatch) rrrrrIrrr bindparams r3rrrrsb ww&& e388hII+y++H;;;r5c ,d|v}|sK|jr?t|jtjr||j d|jf<|j jr|j|j }|j|fi|S)NrGr) uniquer0rsr_truncated_labeltruncated_namesr_isnull_with_binary_element_typer)rrrrris_ctes r3_handle_values_anonymous_paramrs(r !F  LL uyy(";"; <=A  +uyy!9: zz//9 #5 # #H 3 33r5ctj|ro|jrct|jt j t jtj dfd } dfd }dfd }nIt j t jtj}tjdx}}|||fS)Nrsc||}t|dr&|jvr|jj|fS|S)NrR)hasattrrRr)rsstr_key_et c_key_roles r3rOz4_key_getters_for_crud_column.._column_as_keys;!oGsG$c)9 00r5c||jvr"|jj|jfS|jSrK)rRrrsrrs r3rz6_key_getters_for_crud_column.._getattr_col_key$s1yyC 00wwr5c|jvrGtrt|jtsJ|jjd|j S|j S)N_)rRrr0rrrsrs r3rz4_key_getters_for_crud_column.._col_bind_name,sFyyC %cii==="%))..#''::wwr5)rszUnion[ColumnClause[Any], str]returnUnion[str, Tuple[str, str]])rr.rr)rr.rstr) rr|rr functoolspartialr expect_as_keyr DMLColumnRoleoperator attrgetter)rrrrOrrrrs @@r3rfrfs ||M"}'A'A-,,-&&  # #U%8%8  .  (  "  (  #**  # #U%8%8 -5,?,?,FF> +^ ;;r5c |jD cgc]!} |jj|| #} } |jdd|usJ|j|jdd<g} |j r`t | }|jjD]<}||vs|js|jjr,| j|>| D]a}||}||vrD||vr@|j||j||jj|ddfSt|||| | c| r|j| |jdd}t!|t"s/t%j&ddj)d| Dd|j+}t-|j.| Dcgc] \}}}}| c}}z|_||jdd<yycc} wcc}}w) N selectableinsert_from_selectrEz_Can't extend statement for INSERT..FROM SELECT to include additional default-holding column(s) rSc3<K|]\}}}}t|ywrK)repr)rLrrss r3rPz0_scan_insert_from_select_cols..usLLAsAqd3iLr[z~. Convert the selectable to a subquery() first, or pass include_defaults=False to Insert.from_select() to skip these columns.)rrRr2stackselect#include_insert_from_select_defaultsrrndefault is_sentinelappendrerprq&_append_param_insert_select_hasdefaultextendr0rr r1r _generaterw _raw_columns)rrrrrrOrrrrrrcolsadd_select_colscol_setrr2col_keyins_from_selectrexprs r3rr=s<@;M;M N4DJJLL- . ND N >>" l +t 33 3/3{{HNN2+,68O //d)::%% !C7"KK // C  ! "1% j WM%A NN7 # MM1h//==a@$K L 2$?B   o&"..,-AB/62""8IILOLL  *335'+O,H,H'I&5M "Q4DM ( $4Cr/0%G OdM s &G7 G<c t|||| \} } } }}}|js|jsJ|jr|jDcgc] }|| }}t |}|Dcgc]C}t |t r1||jjvr|jj|Ec}|jjDcgc]}|j|vs|c}z}n|jj}t|}|r9|js-|jj}|jj}ndx}}|j rt |j }n t }|j"}|D]p}||}||vr||vrt%|||||||| | ||||| n&|r|j&r%| r#| rt)||||| nt+||||| n|j,)|j,j.r|t1|||| || n|j2@| r|| vr|j5|n|j&s|j6j5|nq| r|| vr|j5|nY|j&rM||jjur5|j8s)t;|n|jrt=||||| || ||vsZ||vs`|j5|s|r5|j?||jAfd|j D||fScc}wcc}wcc}w)Nc3*K|] }|vr| ywrKrE)rLr2remaining_supplementals r3rPz_scan_cols..0s"+ ** + s)!_get_returning_modifiersr|r_parameter_orderingrr0rrRr2rsrnrtru_autoincrement_columnr#insert_null_pk_still_autoincrements_supplemental_returningrc_append_param_parameter primary_key!_append_param_insert_pk_returning$_append_param_insert_pk_no_returningrr_append_param_insert_hasdefaultserver_defaultrr`nullable"_warn_pk_with_no_anticipated_value_append_param_updaterr)rrrrrrOrrrrrneed_pksrcimplicit_return_defaultspostfetch_lastrowidr?r@rsparameter_ordering ordered_keysr2rrautoincrement_colrsupplemental_returningcompiler_implicit_returningrrs @r3rrsz( !4I   ! !]%;%;; ;((+8+L+L $'N3   -. * #s#tzz||(; JJLL   B1\(AQ B Czz!!&}5H ;;!JJ<<    @ @ ,CGF? ##!$T%A%A!B!$"*"="= i2#1% j WM%A $"(#!3 (}} & 6 $629 $62&yy,,(43 $+CVR!!-,5M0M/66q9&&--a0)a3K.K+2215 TZZ=== 215  # # !(  ' '44 ' . .q 1Si2V"8!B!B '"  $**+ 11+  & !"6 77Q   Cs L4+AL9 L>!L>c  t|||| ^} } } } | sy|jr|jj| |jrDt |j |jj fd|jDyy)Nc3,K|] }|vs| ywrKrE)rLr2ir_sets r3rPz0_setup_delete_return_defaults.._s+ qA+ s )r_return_defaults_columnsrcrrr)rrrrrrOrrrrrrrrs @r3rkrkFs,D$ x,(Q #a $ $$##**+CD ##X001##**+ 33+  $r5c|j|}| jddu}|jj||j}t }t j|r|| r7|jr+|| ur'| rd|_ n|r|jj|t|||f|tut|r |js||n d||z||d| }n|j r| rW|j"K|jr?|| ur;|r|jj|n|j$jrd|_ t'|||ft|r |js||n d||z|d| }n|j(|j+fd|i| }|j,r>|r ||vr|jj|n|j.j|n|jr<|r|jj|n[|j$jrEd|_ n=|r ||vr|jj|n|j.j|| j||||fy)NrG use_tableTz%s_m0)rIrrHr)rrHrH)rerdrprqinclude_table_with_column_exprsrr _is_literalrrrcrrrr,rtru_is_bind_parameterrrrr self_groupr|r`)rrrr2rrrrcrrrrrrrhas_visiting_cte col_valueaccumulated_bind_namess r3rrds NN7 #Evvn-T9!!// ]BB0I(+uU# / && #/3,#++2215"   h&/}=$::q!~a00"8,    ! ! / # &&"++2215!!55/3,.    /}=$::q!~a00"8    !      "8    ! !'A1I,I++2215""))!,}}%//66q9%%9937H0)q4L/L++2215""))!, MM1i(>?@r5c (|j|jjr|jjr|jjr|jj sUt }|j||jj||j|jfd|i||f|jj|y|jjrt }|j||jj||j|jjjfd|i||f|jj|y|j||jj|t||fi||j ffy||j"j$us |j&|jj|y|j(s t+|yy)zCreate a primary key expression in the INSERT statement where we want to populate result.inserted_primary_key and RETURNING is available. NrH)r is_sequencersupports_sequencesoptionalsequences_optionalrrrprqrrcis_clause_elementargr"_create_insert_prefetch_bind_paramrsrRrrrr)rrr2rrrs r3rrs  yy 99 22II&&''::365&  ))77:(((II2H! /    ' ' . .q 1 YY ( (%(U " MM%%33A6$H$$ 002.D +    ' ' . .q 1 MM%%33A66xIbIUUH   djj.. .!2B2B2N##**1- ZZ +1-r5c 2|jX|jjr|jjr,|jjr|jj r||j jur|jjs|j,|jjr|jjs"|j[|jjrE|j||jj|t||fi||jffy|j<|j0|j s$||j jur t#|y|jjrd|_yy)aoCreate a primary key expression in the INSERT statement where we want to populate result.inserted_primary_key and we cannot use RETURNING. Depending on the kind of default here we may create a bound parameter in the INSERT statement and pre-execute a default generation function, or we may use cursor.lastrowid if supported by the dialect. NT)rr rr r r rRrr"preexecute_autoincrement_sequencesrrprqrrsrrrrrr2rrs r3rrsK  %%  33 **#++>> TZZ - --  44II) -- ((;;II% ((KK  !!//228QE"E       $ TZZ55 5 +1-    - - (,$ .r5c |jjr|jjr|jjr|jj st }|j||jj||j|jfd|i||f|r ||vr|jj|y|js|jj|yyyy|jjrt }|j||jj||j|jjj!fd|i||f|r ||vr|jj|y|js|jj|yy|j||jj|t#||fi||j$ffy)NrH)rr rr r r rrrprqrrcrr`rrrrrs)rrr2rrrrs r3rrcs yy    . . ""(*:*:*M*M/2u " MM%%33A6$H$$ .D +  (A1I,I++2215]]""))!,##+N /(  $ $!$ !!//2   IIMM,,.*@ '   $-E(E  ' ' . .q 1    % %a (  !!//228QE"E   r5c t|jr|jjrt|jjr|jj sG|j ||jj||jjdfyyyt|jrQ|j ||jj||jjjdfy|j ||jj|t||fddi||jffy)NrErF)rrrr r r rrprq next_valuerrrrrsrs r3rrs199%    . . ""(*:*:*M*M MM%%33A6II((*  +N / #199 - !!//2 ((*     !!//22a).24   r5c j|j}|j|jjs|jjr|j ||j j |||j|jjjfi|df|r ||vr|jj |y|jj |y|j ||j j ||t||fi||jffy|j>|r ||vr|jj |y|jj |y|r:|js |j s!||vr|jj |yyyy)NrrE)ronupdater rrrprqrrrrcr`"_create_update_prefetch_bind_paramrsserver_onupdaterri)rrrr2rrr include_tables r3rrs"AAMzzajj&<&< :: ' ' MM%%33"/4%H$$QZZ^^%>%>%@GBG (A1I,I++2215""))!, MM%%33"/47xIbIUUH    & #-E(E  ' ' . .q 1    % %a (  * *$2G2G ) )##**1- *3H !r5c yrKrErr2rrs r3rrrr5c yrKrErs r3rr #&r5c ^t||df||d|}|jj||SN)rr)rrrarrr2rrrparams r3rrB !T #* 9; E ##A& Lr5c yrKrErs r3rrrr5c yrKrErs r3rrrr5c ^t||df||d|}|jj||Sr!)rrrbrr"s r3rr#r$r5cteZdZdZdZdZdZdZejd dZ ejd dZ y) _multiparam_columnTc||_d|j|dzfz|_||_|j|_|j|_y)N%s_m%dr)indexrsoriginalrr)selfr-r,s r3__init__z_multiparam_column.__init__4sA x||UQY77  '' MM r5c trKNotImplementedError)r.otherrs r3comparez_multiparam_column.compare; !##r5c trKr1)r.rs r3_copy_internalsz"_multiparam_column._copy_internals>r5r5ct|txr4|j|jk(xr|j|jk(SrK)r0r)rsr-)r.r3s r3__eq__z_multiparam_column.__eq__As< u0 1 0 TXX% 0$--/ r5c@tj|jSz1used by default.py -> _process_execute_defaults())r_from_column_defaultrr.s r3_default_description_tuplez-_multiparam_column._default_description_tupleHs(<r@rEr5r3r)r)1sT "$$  KK  LLr5r)c|jstjd|zt|jr5|j|jj j fi|S|jjr|j|jfi|St||}t|tjsJt||fddi|S)NzINSERT value for column %s is explicitly rendered as a boundparameter in the VALUES clause; a Python-side value or SQL expression is requiredrT) rr r1rrrrr r)r0rInsertr)rrr2r,rrs r3 _process_multiparam_default_bindrEUs 99 @BC D  #199 -x 8 8 :AbAA    x 0R00 E*$ +++1 c #' +-  r5c |xsdD cic]*\} } tjtj| | ,} } } |j} t } |j D]P}| xr|jj| }|jD]} | | vs |r#tjd|jd| j|| ||| <| | }|j| | }tj|r+t!|| |f|t"u|| d|}| j$f}nf|j&r|| }t)|| |fd|i|}|f}n>|j*j-| |j|j/fi|}d}|j-| |||fS| D]6}|jD]#} | | vr | j0| j0j2s| j0j4ru|j-| |j| | |j| j0j6j/fi|df|j*j-| |j-| |j| | t9|| fd|| i|| j$ff| j: |j*j-| &9ycc} } w)NrEzdBackend does not support additional tables in the SET clause; cannot include columns from table(s) 'z' in SET clauser)rIrr)rexpectrrrrrris_derived_fromr2r r1rXaddrrrrr,rsrrr`rrrr rrrr)rrrrrrrrrr2r#normalized_paramsraffected_tablesrZ$we_shouldnt_be_here_if_columns_foundrrrcbns r3r~r~vsC.3 Au ,,a0%7 "AAMeO  ' '/M   ?!++;;A>> - & MA%%7**MM?+%% ##A&56 .q12)!,$,,Qm,L ((/. "'(!2+A.   E>?UUH*--(+C: !U148:E/2V*&&--a0,H,,U-=-=-?F2FE-/* q)U4JKLM& M/Mf- -A%%' 0F0F:://MM$,,Qm,L,H,, !  9 9 ;?A  &&--a0MM$,,Qm,L> (!2@2CGIUUH  "".""))!,9 --ws/K/c b|}|g}|jddu}|j} | Jt| ddD]\} } g} | jD cic]\} }|| |} } }|D]\}}}}|j| vrp|j} t j | | r't||| | fd|j| dzfz|d|}n4|j| | jfi|}nt|||| |}| j||||f|j| |Scc}} w)NrGrr+)rr) rdrv enumeraterxrsrrrrrrrEr)rrrinitial_valuesrOrvalues_0rrrirow extensionrsrNrcol_exprr#accumulated_names new_params r3rrsuH Fvvn-T9  ( (B >>BqrF#!302 47IIK@&#q~c"A%@@7? L 3C5"3ww#~gg((S2 2 C!'#''1q5)99(8 !  !I!1 0 0S1D1D1F M" MI<dCB    c8Y8IJ K) L,  i 7!: M5AsD+c|D]\}}||} | |j| |#|j||j} tj|r4|jt j d||jfi|}n^|jr1|jjr|j|j}|j|jfi|}|j|| |dfy)NrG)rrE) setdefaultrrrrrrrrrrrr) rrrrrOrrrMrNcolkeyrVs r3r{r{ s&01"    ! !&! , ''!N!N(H$$Q'$H$$**4!&&AEG''AFFNN33AFF;A$H$$Q\\^:r: MM1h2. /=0r5c0|j}|xrct|xrV|j xrG|j xs|jxr |j xr|j xr |j }|xr&|jxr|jjdu}|xra|jxrS|jjxr;|jxr-| xs |jxs|jxs |j }|rd}t|r|xr |j }|xs|j xs |j } |xr,|jxr|j"xr| xs |j$} d} | r| r|j&r|j)|j} n|j*rE|j xr2|jjxr|jxr |j,}d} d} nW|j.rE|j xr2|jjxr|jxr |j0}d} d} nd}d} d} |rB|j2s t5|jj6} nt5|j2} nd} ||xs|| || | fS)zdetermines RETURNING strategy, if any, for the statement. This is where it's determined what we need to fetch from the INSERT or UPDATE statement after it's invoked. NF)rrt_inlinerinsert_executemany_returningrirhrurrRrinsert_returning_primary_tablerc_supports_implicit_returningfavor_returning_over_lastrowidrr?!use_insertmanyvalues_wo_returning_sort_by_parameter_order_get_sentinel_column_for_tabler|update_returningrjdelete_returningrrr2) rrrrrrrrcshould_implicit_return_defaultsexplicit_returningr?r@rs r3rr4sG  4 #M 2 4  4(( ( P44N9N9N 4  433 3  9  ' ' 9 JJ , ,D 8    $ $  ( ( ; ;    6 6 $% $ N(N(N %22 %$$-2#}-  84#8#8 ( , , ,++   (( ,, #Og&O&O  $ "--#+#J#J $      ! ! ),,?? ):: )(( ( %#     ! ! ),,?? ):: )(( ( %#*/'$#&,,(+4::<<'8 $'*4+H+H'I $#'  ==   r5cd|jjd|jd|jjd}t|jjdkDr|dz }t j |y)NzColumn '.z6' is marked as a member of the primary key for table 'z', but has no Python-side or server-side default generator indicated, nor does it indicate 'autoincrement=True' or 'nullable=True', and no explicit value is passed. Primary key columns typically may not store NULL.ra0 Note that as of SQLAlchemy 1.1, 'autoincrement=True' must be indicated explicitly for composite (e.g. multicolumn) primary keys if AUTO_INCREMENT/SERIAL/IDENTITY behavior is expected for one of the columns in the primary key. CREATE TABLE statements are impacted by this change as well on most backends.)rRfullnamerlenrr!warn)r2msgs r3rrsb 77  QVVQWW%5%5  7 177  !#    IIcNr5)r2r-rr.) rr$rr'rr&rr=rrrr8).FNF)rr$rr-rrr Literal[True]rIr=r Optional[str]rr=rrrr) rr$rr-rrrrrr)TFNF)rr$rr-rrrr=rIr=rrqrr=rrrz'Union[str, elements.BindParameter[Any]])rr$rr'rr&rzTuple[Callable[[Union[str, ColumnClause[Any]]], Union[str, Tuple[str, str]]], Callable[[ColumnClause[Any]], Union[str, Tuple[str, str]]], _BindNameForColProtocol]) rr$rr'r2r.rzList[_CrudParamElementSQLExpr]rDict[str, Any]rNone).) rr$r2r-rrprrrr) rr$r2r-rzLiteral[False]rrrzelements.BindParameter[Any])TN) rr$r2r-rr=rrqrrrz'Union[elements.BindParameter[Any], str]) rr$rr'r2r6r,intrrrrr)rr$rr'rr&rQr^rOr_rrrrr;)R__doc__ __future__rrrtypingrrrrrr r r r r rrrrrrrrrbaserrrtrschemarrrrrr r! util.typingr"rr#r$r%r&r'r(r)r*r+symbolr,r4r_CrudParamElement_CrudParamElementStr_CrudParamElementSQLExprr9r8rrrrrfrrrkrrrrrrrrr)rEr~rr{rrrEr5r3rs#! *4"-'#!1%&',' 4;;     c$$% SM  SM ! SM+,A*A}} }} }  }  }@  !!                          !        -2#4L3<3