L idZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z d d l mZd dl mZd dl mZd dl mZd dl mZd dl mZd dlmZd dlmZd dlmZd dlmZd dlmZddl mZddl mZddlmZddlmZ ddl!m"Z"ddl!m#Z#ddl!m$Z$ddl!m%Z%dd l!m&Z&dd!l!m'Z'dd"l(m)Z)dd#l(m*Z*dd$l(m+Z+dd%l,m-Z-dd&l,m.Z.dd'l,m/Z/dd(lm0Z0dd)l1m2Z2e rHd d*l3m4Z4d d+l3m5Z5d d,l3m6Z6d d-l7m8Z8d d.l9m:Z:d d/l9m;Z;d d0l9mm?Z?dd3lm@Z@dd4lmAZAdd5lBmCZCe d6eD7ZEe d8d8d9 dRd:ZFe d8d8d9 dSd;ZFdd? dUd@ZGe d8d>d? dVdAZGdd? dWdBZGdCZHGdDdEeZIGdFdGeIZJe*jdHdIGdJdKeIe.ZLe*jdHdLGdMdNeJe/ZMe*jdHdOGdPdQeJe-ZNy<)Xzoadditional ORM persistence classes related to "bulk" operations, specifically outside of the flush() process. ) annotations)Any)cast)Dict)Iterable)Optional)overload) TYPE_CHECKING)TypeVar)Union) attributes)context) evaluator)exc)loading) persistence)NO_VALUE)AbstractORMCompileState) FromStatement)ORMFromStatementCompileState) QueryContext)util)Dialect)result) coercions)dml) expression)roles)select)sqltypes)_entity_namespace_key) CompileState)Options)DeleteDMLState)InsertDMLState)UpdateDMLState) EMPTY_DICT)Literal)DMLStrategyArgument)OrmExecuteOptionsParameter)SynchronizeSessionArgument)Mapper)_BindArguments)ORMExecuteState)Session)SessionTransaction) InstanceState) Connection)cursor)_CoreAnyExecuteParams_O)bound.)use_orm_insert_stmtexecution_optionscyNmappermappingssession_transactionisstatesreturn_defaults render_nullsr9r:s e/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/orm/bulk_persistence.py _bulk_insertrFJs cyr<r=r>s rErFrFXs #rGNc j}|jjr td|rptrt t tt|}|r0|D cgc]} | | jf} } | D cgc]\} } |  }} } nv|D cgc]} | j}} n\tr$t t tttf|}|r t|}n|D cgc] } t| }} t||j|d} |j j#Dcgc]\}}|j$vr||f}}}|rd}nt'|dkDrd}nd}|D]\}}|9|j)Dcgc]}|j*|dvr |j*!c}nd}fdt-j.|fd|Dd||| D}t-j0|d|||||| }||j2r| |} |j4s|sJ| j7|} |r_|r]j8}j:Dcgc]}|j*}} D])\} } |t=|Dcgc]}| | c}df| _+|| J| Sycc} wcc} } wcc} wcc} wcc}}wcc}wcc}wcc}w) NzJconnection_callable / per-instance sharding not supported in bulk_insert()Tr Frr=c 3DK|]\}}}}}}}}d|| |||fywr<r=) .0state state_dictparamsmpconn value_params has_all_pkshas_all_defaults connectionr?s rE z_bulk_insert..sM   #   s c3*K|] }d|f ywr<r=rKmappingrTr?s rErUz_bulk_insert..sM$4Ms)bulkrCrDinclude_bulk_keys) bookkeepingr9r:) base_mappersessionconnection_callableNotImplementedErrorr rrr3r7dictrstrrlist_expand_compositesrT_sorted_tablesitems _pks_by_tablelen_get_embedded_bindparamskeyr_collect_insert_commands_emit_insert_statements _returning returns_rowssplice_horizontally_identity_class_identity_key_propstuple)r?r@rArBrCrDr9r:r\rLstatesdict_m return_resulttablerOmappers_to_runr[ super_mapperbextra_bp_namesrecordsr identity_clspidentity_propsrirTs` @rErFrFfs $$K""66! -   H]2%67BH 7?@euejj)@F@4:;.5%;H;089u 9H9 HT#s(^4h?H H~H*22AQ2H268,$// |D cgc]} | j }} n$|D cgc] } t | }} t ||jjr td|j||9|jD cgc]} | j|dvr | j!c} nd} |jjD]g\} }j|r| jvr&t!j"d| fd|Dd|| }t!j$|d|| |d|| i|t'j(Sycc} wcc} wcc} wcc} w) Nc|jjDcic]\}}||jvs|vr||c}}Scc}}wr<)r`recommitted_state)r?rLkv search_keyss rE _changed_dictz#_bulk_update.._changed_dict(sO ((* 1E)))Q+-= qD   sAzJconnection_callable / per-instance sharding not supported in bulk_update()rr=c3vK|]0}d|jr|jjndf2ywr<)_version_id_proprirWs rErUz_bulk_update..SsM "22  7 7 ; ;<!  s69T)rYrrZF)r[rr)r\_primary_key_propkeysrriunionr`rcr]r^r_rTrhrdreisarfr_collect_update_commands_emit_update_statements_result null_result)r?r@rArBrrrr\rrLrtryrzrvrxr{rTrs` @@rErrs$$K..K ..22399+F   BJK fe4KHK089u 9H9%-.DG..68,""66! -  %// NO!((--.>?@rGc |j|}|stj||S|Dcgc]7}t|j |j ||j d9c}Scc}w)NF)rr(_get_multi_crud_kv_pairsr`rr?re)rrrr value_dicts rErz$ORMDMLState._get_multi_crud_kv_pairss|44Y?!::; *   **"))9j6F6F6H%    s = > !44Y?!44;(=   & &%%%    rGc |jjd}|j}|jr |j}n|j j }||j |j|j|jdS)N parententity)nametypeexprentityrv) rvrr?is_aliased_classrclass___name__r local_table)rrext_infor? _label_names rEget_entity_descriptionz"ORMDMLState.get_entity_descriptionsm??//?  $ $"--K --00K MMOOoo''   rGc d}d}|jDcgc] }|||fc}Dcgc]<\}}|j|j||||j|jd>c}}Scc}wcc}}w)Nc:|jjddS)Nr)rr)cs rE _ent_for_colzCORMDMLState.get_returning_column_descriptions.._ent_for_cols>>%%nd; ;rGcx||S|jjdd}|s|St|j||S)Nr)rrgetattrr)rentrs rE _attr_for_colzDORMDMLState.get_returning_column_descriptions.._attr_for_col s={**;=Iszz9a88rG)rrraliasedr)_all_selected_columnsrirrr)rrrrrrs rE!get_returning_column_descriptionsz-ORMDMLState.get_returning_column_descriptionss < 9$/8.M.M)*LO$  3 %a-//**      s A1AA6)use_supplemental_colsc,|jrt|j|d}|jdi|j}|j|j }||_tj||x|_ }|j||j}d|_|jDcgc]}|| } }| s| j|j|r|j|jd| i}|S|j | }|Scc}w)alestablish ORM column handlers for an INSERT, UPDATE, or DELETE which uses explicit returning(). called within compilation level create_for_statement. The _return_orm_returning() method then receives the Result after the statement was executed, and applies ORM loading to the state that we first established here. F)_adapt_on_namesr=supplemental_cols)rlrr:_execution_optionsoptions _with_optionsselect_statementrcreate_for_statementr!setup_dml_returning_compile_state _generateprimary_columnsextend primary_keyrC returning) selfcompilerorm_level_statementdml_level_statement dml_mapperrfsfscrcols_to_returns rE_setup_orm_returningz ORMDMLState._setup_orm_returnings9(  ) )#..# %B &%%O(;(N(NOB0>>?B$&D !,AA"hO D #c  1 1* ="5"?"?"A -/  *),)<)<NA aNNN"%%j&<&<=$&I&9&I&I ++''5'#(#" 'D&9&C&C#'##"9Os 5D=Dc Z|j}|jj}|jr||jjj s\|j dtj} t|j|j|||| ||} tj|| S|S)N_sa_orm_load_options) rcompiled compile_statercompile_options_is_starrrdefault_load_optionsrr instances) rr]rrNr:bind_argumentsrexecution_contextr load_options querycontexts rE_return_orm_returningz!ORMDMLState._return_orm_returningbs#NN)22@@   , ,!44DDMM,00& (I(IL(00..! L$$V\: :MrG)r __module__ __qualname__is_dml_returningr__annotations__ classmethodrrrrrrrrr=rGrErrsAE>E55n    "  (    B#A#F  rGrc eZdZGddeZeddddd ddZedZedZedZ ed Z ed Z ed Z ed Z ed ZedZedZedZy)BulkUDCompileStateceZdZUdZded<dZded<dZded<dZded <dZded <d Z ded <d Z ded<e Z d Z d Zd ZdZded<y ))BulkUDCompileState.default_update_optionsautor+ _dml_strategyr-_synchronize_sessionFbool_can_use_returning_is_delete_using_is_update_fromT _autoflushNOptional[Mapper[Any]]_subject_mapper_populate_existing)rrrr rr r r rrrr)_resolved_values_eval_condition _matched_rows_identity_tokenrr=rGrEdefault_update_optionsrsn-3 *3;A8A#(D(!&$& %% D15.5% #(D(rGrF is_multitableis_update_fromis_delete_usingis_executemanyctr<)r_)rdialectr?rrrrs rEcan_use_returningz$BulkUDCompileState.can_use_returnings "##rGc tjjdhd||j\}}||d< |jd}|r!|j |d<|d|j iz } d|jjvr|d d iz }nat|ts;|jd k(r|d d iz }n:|jd k(r+tjd|jd k(r|d d iz }|j} | B| dvrtjd|jd k(r| dk(rtjd|s |j r|j!|jd k(rr|jd k(r|j#||||||}nq|jdk(r|j%||||||}nK|jdk(r<|j'||||||}n%|jd k(r|jd k(r|ddiz }|j)|j|j*|j,|j|j.d}|t1j2|j5d|ifS#t $rJdwxYw)N_sa_orm_update_options> autoflush dml_strategyidentity_tokenrrpopulate_existingsynchronize_sessionclauserr?r0statement had 'orm' plugin but no plugin_subjectrr  core_onlyrormrYHCan't use "bulk" ORM insert strategy without passing separate parameters)revaluatefetchFzSValid strategies for session synchronization are 'auto', 'evaluate', 'fetch', Falser-zkThe 'fetch' synchronization strategy is not available for 'bulk' ORM updates (i.e. multiple parameter sets)r,r )r&rrr#r)rrfrom_execution_optionsrrr?KeyErrorrvrrrbr sa_excInvalidRequestErrorr  ArgumentErrorr_do_pre_synchronize_auto_do_pre_synchronize_evaluate_do_pre_synchronize_fetch _annotater rr r immutabledictr) rr]rrNr:r is_pre_eventupdate_optionsrsyncs rEorm_pre_session_execz'BulkUDCompileState.orm_pre_session_execs  5 5 L L $    ( (   $-x  M&778HIN+9+@+@x(#4n6K6K"LL !=!= =  < :   i M LL L5 Ms I11JcN|d}|jdk(rH|jdk(r|j||||nX|jdk(rI|j||||n4|jdk(r%|jdk(r|j |||||S|j ||||||S)Nr!r*r,r-rY)r r _do_post_synchronize_evaluate_do_post_synchronize_fetch"_do_post_synchronize_bulk_evaluater)rr]rrNr:rrr9s rEorm_setup_cursor_resultz*BulkUDCompileState.orm_setup_cursor_results$++CD  ' '5 022j@11Y 44?..Y ) )V 322j@66VV^M((         rGc:d}jr jnddjf|vr&|tfd|djfDz }jj|jjfz }rtfd|D}|S)aApply extra criteria filtering. For all distinct single-table-inheritance mappers represented in the table being updated or deleted, produce additional WHERE criteria such that only the appropriate subtypes are selected from the total results. Additionally, add WHERE criteria originating from LoaderCriteriaOptions collected from the statement. r=Nadditional_entity_criteriac3tK|]/}|js|jur|j1ywr<)include_aliasesr_resolve_where_criteria)rKaers rErUz@BulkUDCompileState._adjust_for_extra_criteria..\s:!%%h)> **84!s58c3@K|]}j|ywr<)traverse)rKcritadapters rErUz@BulkUDCompileState._adjust_for_extra_criteria..hsO4 0 0 6Os)r_adapterr?rq_single_table_criterion)rglobal_attributesr return_critrJs ` @rE_adjust_for_extra_criteriaz-BulkUDCompileState._adjust_for_extra_criteriaGs '/'@'@(##d ) OO   5!+18??C! K ?? 2 2 > HOOCCE EK O;OOKrGc" |j|jjur&|j|jj}n|j|j}|Dcgc] }|| c}S#t$rgcYSwxYwcc}w)areturn rows that indicate PK cols in mapper.primary_key position for RETURNING rows. Prior to 2.0.36, this method seemed to be written for some kind of inheritance scenario but the scenario was unused for actual joined inheritance, and the function instead seemed to perform some kind of partial translation that would remove non-PK cols if the PK cols happened to be first in the row, but not otherwise. The joined inheritance walk feature here seems to have never been used as it was always skipped by the "local_table" check. As of 2.0.36 the function strips away non-PK cols and provides the PK cols for the table in mapper PK order. )rr\ _tuple_getterrr/)rrr?rowspk_keysrows rE_interpret_returning_rowsz,BulkUDCompileState._interpret_returning_rowsls$ !!););)G)GG !..v/A/A/M/MN ..v/A/AB)-- --  I   .sA#A;)B ; B B c|j}|j}|Dcgc]F}|jj|r)|js|j ||j fH}}|j}|)|D cgc]\}}} |j|k(r||| f}}}} g} |D]J\}}} ||} | dus| tjus&| j||| | tjufL| Scc}wcc} }}wNT) rrr?rexpiredobjr`rr$r_EXPIRED_OBJECTappend) rr9rrr?eval_conditionrLraw_datar$rYrsrevaled_conditions rE _get_matched_objects_on_criteriaz3BulkUDCompileState._get_matched_objects_on_criterias,//'77  ||' YY[% ,  (77  %*2%C''>9eU#H !)  C-c2  !D(#y'@'@@ (I,E,EE  " A s A C4>C9cZ|j}|j}tj|}d}|jr||jz }i}|j D] }|j s|j|"|r||j||z }|r|j|} | Sd} | } | S)Nr=cyrWr=)rYs rErzJBulkUDCompileState._eval_condition_from_statement.._eval_conditionsrG) rrr_EvaluatorCompiler_where_criteriar_is_criteria_optionget_global_criteriarOprocess) rr9rr? target_clsevaluator_compilerrIrMoptr\rs rE_eval_condition_from_statementz1BulkUDCompileState._eval_condition_from_statements//]] &99*E  $ $ I-- -D** ;C&&''(9: ;  C223DfM MD 7/77>N  -NrGc |j||}||ddzS#tj$rYnwxYw|ddiz }|j||||||S)asetup auto sync strategy "auto" checks if we can use "evaluate" first, then falls back to "fetch" evaluate is vastly more efficient for the common case where session is empty, only has a few objects, and the UPDATE statement can potentially match thousands/millions of rows. OTOH more complex criteria that fails to work with "evaluate" we would hope usually correlates with fewer net rows. r,)rr r r-)rjrUnevaluatableErrorr5)rr]rrNr:rr9r\s rEr3z+BulkUDCompileState._do_pre_synchronize_autos2  ?? N"#1(2% ++    17;;,,         s 22c |j||}|d|izS#tj$r}tjd|z|d}~wwxYw)Nz{Could not evaluate current criteria in Python: "%s". Specify 'fetch' or False for the synchronize_session execution option.r)rjrrlr0r1) rr]rrNr:rr9r\errs rEr4z/BulkUDCompileState._do_pre_synchronize_evaluatesr  ?? N ~!   ++ ,,8:=>   sA AA c|jrgS|jrt|jS|jr#t|jj SgSr<) _multi_values_ordered_valuesrb_valuesre)rr?rs rE_get_resolved_valuesz'BulkUDCompileState._get_resolved_valuessR  " "I  & & 112 2    ))//12 2IrGcg}|D]f\}}|rHt|tjr. |j|}|j |j |fPtjd|z|S#t j$rYwxYw)NzCAttribute name not found, can't be synchronized back to objects: %r) rr ColumnElement_columntopropertyr[riorm_excUnmappedColumnErrorr0r1)rr?resolved_valuesvaluesrrrs rE_resolved_keys_as_propnamesz.BulkUDCompileState._resolved_keys_as_propnames(s# DAq*Q (@(@A1!33A6DMM488Q-00079:;  22sA00BBcB j t j jfzj j |j }|j|_d d fd }|j|||||} | j} | dzS)Nc||jjdi|j}j|jj j |j}|k7r:tjd|jr|stjd||rtjSy)N)rrrzjFor synchronize_session='fetch', can't mix multiple backends where some support RETURNING and others don'tzFor synchronize_session='fetch', can't use multiple parameter sets in ORM mode, which this backend does not support with RETURNINGr=) r]get_bindrrrrr rr0r1rr) orm_contextbindper_bind_resultrrr?r9s rEskip_for_returningzHBulkUDCompileState._do_pre_synchronize_fetch..skip_for_returning\s/;&&//M+2L2LMD"33 -== . ? ?*99 4O!,$7 44  ++O00- %4!**,,rG)r:r _add_event)rr )rr0returnr) rr!rselect_identity_token select_fromrrrcexecutefetchall) rr]rrNr:rr9 select_stmtrr matched_rowsrr?s ` ` @@rEr5z,BulkUDCompileState._do_pre_synchronize_fetch:s // FV''6+G+G*II K [ Wi-- /  '0&?&? #!  B  /)) ! ( )"3!   rGNrrr? Mapper[Any]rr rr rr rr rr )rrrr%rrrr;r@rOrUr_rjr3r4rsr{r5r=rGrErrsZ ) ) $$ %$ $ $ $  $  $ $ $  $ $v v p) ) V""H . .D$$L8- - ^  2"N N rGrr*insertceZdZUGddeZdZded<edZe d dZ ed fd Z ed Z d Z d Z xZS) BulkORMInsertcbeZdZUdZded<dZded<dZded<dZd ed <d Zded <dZ ded <y)$BulkORMInsert.default_insert_optionsrr+r Fr  _render_nulls_return_defaultsNrrTrr) rrrr rrrrrrr=rGrEdefault_insert_optionsrsB-3 *3# t#!&$&15.5 D#(D(rGrNzOptional[FromStatement]rctjjdhd||j\}}||d< |jd}|r!|j |d<|d|j iz } |s;|jdk(r|d d iz }n:|jd k(r+tjd |jdk(r|d d iz }|jd k7r2|stj}n|jtj}|s|jr|j|jd|ji}|tj |jd|ifS#t $rJdwxYw)N_sa_orm_insert_options>r"r#rDr%r'rr?rr(rr r*rYr+rawr#)rrr.rrr?r/r r0r1r_orm_load_exec_optionsrrr6rr7) rr]rrNr:rr8insert_optionsrs rEr;z"BulkORMInsert.orm_pre_session_execs  0 0 G G $ N   ( (    $-x  M&778HIN+9+@+@x(#4n6K6K"LL++v5?E"::--7002 ++v5?F";;  ' '5 0 %$+$B$B!$5$;$;22%! 9 9    '' ^99 :    0 1 7 7)>:   O M LL L5 Ms E!!E2c t|jd|j}|jdvrtjd|jdk(r|j ||xsi|}|S|jdk(r|j } |j$| jrtjd| | J|jJt| tdt|tr|gn||jd |j|j || }n2|jd k(r|j ||xsi|}n t#t%|j&s|S|j(r:|jd t*j,} | d diz } |j/d | i}|j1||||||S)Nr)rrYr*rzHValid strategies for ORM insert strategy are 'raw', 'orm', 'bulk', 'autor)r:rYz`bulk INSERT with a 'post values' clause (typically upsert) not supported for multi-table mapper Iterable[Dict[str, Any]]F)rBrCrDr9r:r*rrT)rrr r0r2rr_post_values_clause_multiple_persistence_tablesr1 _transactionrFrrr`rrAssertionErrorr rlrrrrr) rr]rrNr:rrPrrr?rs rEorm_execute_statementz#BulkORMInsert.orm_execute_statements+.. $c&@&@   ' '0  &&2   ' '5 0\\6>)HHK++,<= --11.%H 6 !  ' ' 1 U "  & &x 8 rGcfd|jDDcic]\}}}| |jn||c}}}Scc}}}w)Nc3`K|]%\}}jj|||f'ywr<)rr)rKrrr?s rErUz;BulkORMInsert._resolved_keys_as_col_keys..Ps-,0Aqa!Q's+.)reri)rr?resolved_value_dictcolrrs ` rE_resolved_keys_as_col_keysz(BulkORMInsert._resolved_keys_as_col_keysLsP4G4M4M4O  QCGGAq 0   sActtj|jx}}|j ||||d}||_y)NFrr)rrInsertrr)rrr?rrs rErz#BulkORMInsert._setup_for_orm_insertUsI*.szz4>>*JJ '--   "' . #rGc ttj|jx}}|j}|d|d}}|j }||_|jrA|jjDcic]\}}|j |ur||c}}|_|j||||d}|j5|jjjrtjd||_ycc}}w)zestablish an INSERT statement within the context of bulk insert. This method will be within the "conn.execute()" call that is invoked by persistence._emit_insert_statement(). _emit_insert_table_emit_insert_mapperTrNzCan't use RETURNING * with bulk ORM INSERT. Please use a different INSERT form, such as INSERT..VALUES or INSERT with a Core Connection)rrrrr_clonerv_dict_parametersrerrrrr0 CompileError) rrrranemit_insert_tableemit_insert_mapperrvals rErz$BulkORMInsert._setup_for_bulk_insertas+/szz4>>*JJ '  # # # $ $ %. $$& +   !% 5 5 ; ; =%C99 11S%D ! --   )"& .   # # /''77@@%%3  #1%s=D)r]r1rz dml.InsertrNr6r:r,rr/rPr4r_result.Result)rr)rrrr%rrrrr;rrrrr __classcell__rs@rErrs))15-4A A FV V V & V 6 V ' V V  V V p,   #,#rGrupdateceZdZedZdZdZe d fd Zeddddd d dZedZ ed Z ed Z ed Z xZ S) BulkORMUpdatec X|j|}|jjdd}|j }|r|dk(r|j |||S|dk(s|dk(r2d|j jvrt j|||fi||S|r|dvr|j|||S)Nr# unspecifiedrYr)r)r*r) __new__rrr_setup_for_bulk_updatervr(__init___setup_for_orm_update)rrrrrr#rs rErz"BulkORMUpdate.create_for_statements{{3 --11 M  ~~%  .  ' ' 8 <  K '},ioo&B&BB  # #D)X D D \-CC  & &y( ; rGc |}|j }|jjd}|jx|_}|j |||_|j |||||jrt|j |_|j}|jjd|ur|j|_|jr|j |_ n|jr|j |_|j|j|} | r|j| }tj |||fi|d} |sd} n|jj#dd} |jj#dd} | dur/| dk(xr(|j%|j&||j(} | dk(r'| r%d} |j*|jj,}|r|j/||||| }||_y) Nrrprocess_criteria_for_toplevelFr&rr-)rTr)rrvrr?rsr_init_global_attributesrrr`rrrqrOrMwherer(rrrrrrCrrr) rrrrrrrr?new_stmtnew_critrr&rs rErz#BulkORMUpdate._setup_for_orm_updates#'~~%??//?'. f $ 9 9&) L $$  *2 %    $()>)>$?D !##% >> & &~ 6& @#//HN  $ $'+'<'*EE rGc|sy|j}|jDcgc]}|j}}|j}|D]|j fd|D|j } |j | } | s=tj|} | j} | jj| } | D]}|| vs|| |<| jjj| d| | j| t!| | j| j| }|s| j#| | ycc}w)Nc3(K|] }| ywr<r=)rKriparams rErUzCBulkORMUpdate._do_post_synchronize_bulk_evaluate..s/s/s)rrpri identity_mapidentity_key_from_primary_keyrfast_get_stater differencer` unmodifiedrmanagerdispatchrefresh_commitrb_expire_attributes)rr]rNrr9r?proprSr identity_keyrLevaluated_keysrs to_evaluateri to_expirers @rEr?z0BulkORMUpdate._do_post_synchronize_bulk_evaluatesH //(.(B(BC488CC++  ;E!??/w/..L!// =E Z227;NJJE**77GK" ,%>   + + -  //    NN . .q 1=L M M%9S%c5% M  "  ! ! # NsBc|j}|j}|r:|j|||}|Dcgc]}t||jfz} }n |j } | Dcgc] }|dd|dfc}D cgc]<\} } |j| |jk(r|j t| | >c} } D cgc]} | |jvr|j| !} } | sy|j||||jjd| Dcgc]-}|tj|tj|f/c}|j|j!ycc}wcc}wcc} } wcc} wcc}wNr)r$)rreturned_defaults_rowsrUrqrrrrbrrrrrinstance_state instance_dictrr)rr]rrr9 target_mapperrpk_rowsrTrrr$robjsrYs rEr>z(BulkORMUpdate._do_post_synchronize_fetchs'66 !'!>!> !33 '=G #c n<<>>L *77L5A4-0S2YB(4 ! 0K"119!^%C%CC;;%#1< ! w333   .    //    NN . .q 1    --c2,,S1   "  ! ! # 54 ! 0 s E.%E32Fc |j}|j} tj| } |j ||} |j || } i} | D]>\}} | j tjtj|}|| |<@t| j}| Dchc]\}}| }}}t}|Dchc].}|j|vr||j vr|j|vr|0}}|Dchc])}||j vr|j |j+c}j#|}|Dcgc]'}|j |j|jf)}}|D]\}}}|j%|Dcic] \}}||| c}}|j'|j(||j*j-|}|D]}||vs| ||||<|j.j0j3|d||j5|t||j-|j#|}|r|j'|||j7| |j9|y#tj$rY\wxYwcc}}wcc}wcc}wcc}wcc}}w)zeapply values to objects derived from an update statement, e.g. UPDATE..SET N)rrrrbrsr{rfrrr rrlrbrrrirvrrrr`rrrrrradd_register_altered) rr]r9reffective_paramsrrrr?rgrhryresolved_keys_as_propnamesvalue_evaluatorsrivalue _evaluatorrrrattribrrr to_prefetchrprefetch_transferrYrLrs col_to_propc_keyrs rErz1BulkORMUpdate._apply_update_set_values_to_objectss  //]] &99*E2269E%(%D%D O& "4 3JC 3/77$$U%@%@%H )3 % 3.3356 :;1!;;# uu((V---^+   $ F,,,  $ $Q ' + +  *^ $ ?J 9:V % %a ( , ,aee 4  "1  C LL/@* U !1%!88   $ $UZZ ;**77GK" <%rrrs@rErrs?,`"D"#HSSS& S 6 S ' SS SSj $$ %$"""  "  """ ""H(;(;T  $3 3 jU*U*rGrdeleteceZdZedZe dfd Zeddddd d dZedZedZxZ S) BulkORMDeletec  |j|}|jjdd}|dk(s|dk(r2d|jjvrt j |||fi||S|j }|}|jjd}|jx|_} |j|||||j} | jjd| ur| j| _|j|j| } | r| j| } t j || |fi|d} |sd} n|jjdd} |jjdd}|durJ| d k(xrC|j|j| |j |jjd d }|r%d } | j"| jj$} |r|j'||| | | } | |_|S)Nr#rr)rrFr&rr-r)rrTr)rrrrvr&rrr?rrrrOrMrrrrrCrrr)rrrrrr#rrrr?rrrr&rs rErz"BulkORMDelete.create_for_statementysA{{3 --11 M K '},ioo&B&BB  # #D)X D DK~~%'??//?'. f $$  *2 % ##% >> & &~ 6& @#//HN11  " "F  %x~~x0H h?B? %"& "*"7"7";";%t# %1155   E )$w.**$$"&"4"4$,$9$9$=$=)5% +  $( !/x//1K1KLH 00#!&; 1H" rGc|jd|j}|jdk(rtjd|jdvrtj dt |||||||S)Nr!rYzBulk ORM DELETE not supported right now. Statement may be invoked at the Core level using session.connection().execute(stmt, parameters))r*rr)zGValid strategies for ORM DELETE strategy are 'orm', 'auto', 'core_only')rrr r0r1r2rr) rr]rrNr:rrPr9rs rErz#BulkORMDelete.orm_execute_statements+.. $c&@&@   ' '6 1,,A   ' '/K K&&  w, Y(9>4  rGFrc|jxr|jj}|sy|r |jS|r/|js#t j d|j dy)NFrz" does not support RETURNING with DELETE..USING; for synchronize_session='fetch', please add the additional execution option 'is_delete_using=True' to the statement to indicate that a separate SELECT should be used for this backend.T)delete_returningrrdelete_returning_multifromr0rrrs rErzBulkORMDelete.can_use_returningsz  $ $ N););)N)N  55 5 7#E#E %%GLL>*EE rGc|j||jj}g}|D]A\}}} } | r'|j| |jj1|j |C|r|j |yyr<)r_rr_expire _modifiedr[_remove_newly_deleted) rr]rrr9r to_deleterrLrsis_partially_expireds rEr=z+BulkORMDelete._do_post_synchronize_evaluates>>   + + -   5D ( 1Aue1# eW%9%9%C%CD  '  (   ) )) 4 rGc|j}|j}|r:|j|||}|Dcgc]}t||jfz} }n |j } | D]i}|dd} |d} |j t| | } | |jvs8|jtj|j| gkycc}wr) rrrUrqrrrrbrrrr) rr]rrr9rrrrTrrr$rs rEr>z(BulkORMDelete._do_post_synchronize_fetch2s'66 !'!>!> !33 '=G #c n<<>>L *77L Ca)K WN)FF[!-GLw333--"11#00> s C)r]r1rz dml.DeleterNr6r:r,rr/rPr4rrr) rrrrrrrr=r>rrs@rErrwsYYv   &  6  '      > $$ %$&&&  &  &&& &&P55&$$rGr)r? Mapper[_O]r@r0s # ,"1!&,#$$$!,33'( +$#9 T  *->A   J ,      ' <      14>A #  #J #, #  #  # #. #< # #  #*15>BU UJU,U  U  UU.U<U(Up *-"&   J ,     '        14"&   J ,     .      &15"&Y% Y%JY%,Y%  Y%  Y%.Y% Y%#Y%x %@)@FC C L)@#K@#*@#F)c*&c**c*L)_&_*_rG