
    -hI                        S r SSKJr  SSKJr  SSKrSSKJr  SSKJr  SSKJr	  SS	KJ
r
  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  SSK J"r"  SSK J#r#  SSK$J%r%  SSK&J'r'  S  r(S! r)SDS" jr*S# r+S$ r,S% r-S& r.S' r/   SES( jr0 SDS) jr1S* r2S+ r3 SFS, jr4 SFS- jr5S. r6S/ r7S0 r8S1 r9S2 r:S3 r;S4 r<S5 r=\R|                  " 5       r? " S6 S7\5      r@ " S8 S95      rA\R                  " S:S;5       " S< S=\A\"5      5       rC\R                  " S:S>5       " S? S@\A\#\@5      5       rD\R                  " S:SA5       " SB SC\A\!\@5      5       rEg)Gzprivate module containing functions used to emit INSERT, UPDATE
and DELETE statements on behalf of a :class:`_orm.Mapper` and its descending
mappers.

The functions here are called only by the unit of work functions
in unitofwork.py.

    )chain)groupbyN   )
attributes)	evaluator)exc)loading)sync)NO_VALUE)	state_str   )future)sql)util)result)	coercions)
expression)	operators)roles)select)sqltypes)_entity_namespace_key)CompileState)Options)DeleteDMLState)InsertDMLState)UpdateDMLState)BooleanClauseList)LABEL_STYLE_TABLENAME_PLUS_COLc           
      P  ^ ^ T R                   nUR                  R                  (       a  [        S5      eU(       aW  U(       a4  U Vs/ s H  owUR                  4PM     nnU VV	s/ s H  u  pyU	PM	     nnn	O'U Vs/ s H  owR                  PM     nnO[        U5      nUR                  U5      mUR                  R                  5        HN  u  pT R                  U5      (       d  M  UU 4S j[        U
UU 4S jU 5       SUUS9 5       n[        US UU
UUS9  MP     U(       ak  U(       ac  T R                  nT R                   Vs/ s H  oR                  PM     nnW H+  u  pyU[        U Vs/ s H  nU	U   PM
     sn5      4Ul        M-     g g g s  snf s  sn	nf s  snf s  snf s  snf )NzJconnection_callable / per-instance sharding not supported in bulk_insert()c           	   3   J   >#    U  H  u  nnnnnnnnS UUT
T	UUU4v   M     g 7fN ).0state
state_dictparamsmpconnvalue_paramshas_all_pkshas_all_defaults
connectionmappers            oC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/orm/persistence.py	<genexpr>_bulk_insert.<locals>.<genexpr>O   sQ      
(	 #  	&s    #c              3   0   >#    U  H  nS UTT4v   M     g 7fr"   r#   r$   mappingr-   r.   s     r/   r0   r1   e   s     MH$4Hs   T)bulkreturn_defaultsrender_nullsbookkeeping)base_mappersessionconnection_callableNotImplementedErrordictlistr-   _sorted_tablesitemsisa_collect_insert_commands_emit_insert_statements_identity_class_identity_key_propskeytuple)r.   mappingssession_transactionisstatesr6   r7   r:   r%   statesdict_tablesuper_mapperrecordsidentity_clspidentity_propsrG   r-   s   `                @r/   _bulk_insertrT   1   s    $$K""66!-
 	

 7?@xeejj)xF@4:;F.5FH;H089u

H9H>$//<J*99??Azz,''
( *MHM /))
8 	 '	
A  BR 8--)/)C)CD)CA%%)CD"LE^<^cuSz^<=EI # $c A;9` E =s   F%F;FF+F#c           
        ^ ^^ T R                   nT R                  mT R                  (       a&  T R                  R                  1R	                  T5      mU4S jnU(       a<  U(       a  U Vs/ s H  ov" T U5      PM     nnO'U Vs/ s H  owR
                  PM     nnO[        U5      nUR                  R                  (       a  [        S5      eUR                  U5      mUR                  R                  5        HB  u  pT R                  U	5      (       d  M  [        S UUU 4S jU 5       SS9n
[        US U	UU
SS9  MD     g s  snf s  snf )Nc                 b   >^ [        UU4S jTR                   R                  5        5       5      $ )Nc              3   ^   >#    U  H"  u  pUTR                   ;   d  UT;   d  M  X4v   M$     g 7fr"   )committed_state)r$   kvsearch_keysr%   s      r/   r0   6_bulk_update.<locals>._changed_dict.<locals>.<genexpr>   s3      
*E)))Q+-= QF*s   -
-)r>   rA   )r.   r%   r[   s    `r/   _changed_dict#_bulk_update.<locals>._changed_dict   s*     


((*
 
 	
    zJconnection_callable / per-instance sharding not supported in bulk_update()c              3      >#    U  H6  nS UTTTR                   (       a  UTR                   R                     OS 4v   M8     g 7fr"   )_version_id_proprG   r3   s     r/   r0   _bulk_update.<locals>.<genexpr>   sN        (G  "22   7 7 ; ;<!
  (s   >AT)r5   Fr8   )r:   _primary_key_propkeysra   rG   unionr>   r?   r;   r<   r=   r-   r@   rA   rB   _collect_update_commands_emit_update_statements)r.   rI   rJ   rK   update_changed_onlyr:   r]   r%   rN   rO   rP   r-   r[   s   `          @@r/   _bulk_updaterh   ~   s9    $$K..K..22399+F
 BJK(fe4(HKH089u

H9H>""66!-
 	

 %//<J*99??Azz,''*  ( #
( 	 	
1  B L9s   +D?Ec           	      :   U(       d0  U R                   (       d  [        X5       H  n[        X/USS9  M     g/ n/ n[        XU5       HB  u  nnnn	n
nnU
(       d  U(       a  UR	                  XGXU45        M/  UR	                  XGX45        MD     U R
                  R                  5        HK  u  pXR                  ;  a  M  [        X5      n[        X-U5      n[        U UUUU5        [        U UUUU5        MM     [        U U[        S U 5       S U 5       5      5        g)a#  Issue ``INSERT`` and/or ``UPDATE`` statements for a list
of objects.

This is called within the context of a UOWTransaction during a
flush operation, given a list of states to be flushed.  The
base mapper in an inheritance hierarchy handles the inserts/
updates for all descendant mappers.

T)singleNc              3   2   #    U  H  u  pp4XX4S 4v   M     g7f)FNr#   )r$   r%   r&   r.   r-   s        r/   r0   save_obj.<locals>.<genexpr>  s#      ?O;U F>?Os   c              3   8   #    U  H  u  nnnnnXX4S 4v   M     g7f)TNr#   )r$   r%   r&   r.   r-   update_version_ids         r/   r0   rl     s4      	 &% F= &s   )batch_sort_statessave_obj_organize_states_for_saveappendr@   rA   _pks_by_tablerC   re   rf   rD    _finalize_insert_update_commandsr   )r:   rL   uowtransactionrj   r%   states_to_updatestates_to_insertrM   r.   r-   has_identity
row_switchrn   rN   insertupdates                   r/   rq   rq      sF    +++!+6E['>$G 7 
#;	G	:##v3DE ##U6$FG 
H %3399;,,,)%B)#3
 	 	
 	 	
# <2 %?O	 &		
r_   c                    ^^ [        [        XU5      5      nU R                  R                  5        HA  u  mmTTR                  ;  a  M  UU4S jU 5       n[        XTXS5      n[        U UTTU5        MC     g)zTIssue UPDATE statements on behalf of a relationship() which
specifies post_update.

c           
   3      >#    U  HJ  u  pp4TUR                   ;   d  M  UUUUTR                  b  TR                  XTR                  5      OS 4v   ML     g 7fr"   )rt   version_id_col#_get_committed_state_attr_by_column)r$   r%   r&   
sub_mapperr-   r.   rN   s        r/   r0   post_update.<locals>.<genexpr>!  sp      
 >N9:
000
 ((4 ::v'<'< 
 >Ns
   A7AN)r?    _organize_states_for_post_updater@   rA   rt   _collect_post_update_commands_emit_post_update_statements)r:   rL   rv   post_update_colsrw   r|   r.   rN   s         @@r/   post_updater     s     (nM %3399;v,,,
 >N
  /
 	%	
1 <r_   c                    [        [        XU5      5      nU R                  n[        [        UR	                  5       5      5       HW  nXE   nXVR
                  ;  a  M  UR                  (       a  UR                  (       a  M<  [        XXS5      n[        U UUUU5        MY     U H%  u  nn	nn
nUR                  R                  XjU5        M'     g)zIssue ``DELETE`` statements for a list of objects.

This is called within the context of a UOWTransaction during a
flush operation.

N)r?   _organize_states_for_deleter@   reversedkeysrt   inheritspassive_deletes_collect_delete_commands_emit_delete_statementsdispatchafter_delete)r:   rL   rv   states_to_deletetable_to_mapperrN   r.   deleter%   r&   r-   rn   s               r/   
delete_objr   >  s     #KH "00O$33567 ',,,__!7!7)
 	 	
 82 
	$$V? 
r_   c              #   
  #    [        XU5       GH  u  p4pV[        UR                  5      nUR                  =(       d    UR                  U5      nS=pU(       d  UR                  R                  XVU5        OUR                  R                  XVU5        UR                  (       a  UR                  XSU5        U(       d  XR                  R                  ;   a  UR                  R                  U   n[        R                  " U5      nUR                  U5      (       d  UR                  U5      (       d5  [        R                  " S[!        U5      < SU< S[!        U5      < 35        O9U R#                  SU[!        U5      [!        U5      5        UR%                  U5        Un	U(       d  U	(       aF  UR&                  b9  UR)                  U	(       a  U	OUU	(       a  U	R*                  OUUR&                  5      n
UUUUUU	U
4v   GM     g7f)a8  Make an initial pass across a set of states for INSERT or
UPDATE.

This includes splitting out into distinct lists for
each, calling before_insert/before_update, obtaining
key information for each state including its dictionary,
mapper, the connection to use for the execution per state,
and the identity flag.

NzNew instance z with identity key z$ conflicts with persistent instance zPdetected row switch for identity %s.  will update %s, remove %s from transaction)_connections_for_statesboolrG   _identity_key_from_stater   before_insertbefore_update_validate_polymorphic_identityr;   identity_mapr   instance_statewas_already_deleted
is_deletedr   warnr   
_log_debugremove_state_actionsr   r   r>   )r:   rL   rv   r%   rM   r.   r-   ry   instance_keyrz   rn   instanceexistings                r/   rr   rr   i  s     -DV-(f EIIyyJF$C$CE$J)--
 OO))&eDOO))&eD0011&G  6 6 C CC%--::<HH!00:H!55h??%00::II %U+\9X;NP  **& %!%(!(+ #77A!)JJF,A,A,M & J J(
e#-
5%%! 
 	
u-s   HHc                     [        XU5      $ )zMake an initial pass across a set of states for UPDATE
corresponding to post_update.

This includes obtaining key information for each state
including its dictionary, mapper, the connection to use for
the execution per state.

)r   )r:   rL   rv   s      r/   r   r     s     #;GGr_   c              #      #    [        XU5       HU  u  p4pVUR                  R                  XVU5        UR                  b  UR	                  X4UR                  5      nOSnX4XVU4v   MW     g7f)zMake an initial pass across a set of states for DELETE.

This includes calling out before_delete and obtaining
key information for each state including its dictionary,
mapper, the connection to use for the execution per state.

N)r   r   before_deleter   r   )r:   rL   rv   r%   rM   r.   r-   rn   s           r/   r   r     su      -DV-(f 	%%f%@  , & J Jf33! !%V1BCC-s   A'A)c           	   #   L  #    U GH  u  pVpxXR                   ;  a  M  0 n	0 n
UR                  U    nUR                  U    n[        U5      R	                  U5       H  nXm   nX   nUc  X;  a	  U(       d  M  U(       dW  [        US5      (       d  [        U[        R                  5      (       a'  [        US5      (       a  UR                  5       OUX'   Mz  XUR                  '   M     U(       dT  UR                  U    R                  U	5      R                  U
 Vs/ s H  nUR                  PM     sn5       H  nSU	U'   M
     U(       a  U(       a[  UR                  U    R                  U	5      nUR                  R                   (       a  UR"                  U    R                  U	5      nOSnOS=nnUR$                  SLaQ  UR&                  bD  UR&                  UR(                  U    ;   a'  UR%                  S5      XR&                  R                  '   UUU	UUU
UU4v   GM     gs  snf 7f)zKIdentify sets of values to use in INSERT statements for a
list of states.

N__clause_element__TF)rt   _propkey_to_col_insert_cols_evaluating_nonesetintersectionhasattr
isinstancer   ClauseElementr   rG   _insert_cols_as_none
difference_pk_keys_by_tableissubsetr:   eager_defaults_server_default_colsversion_id_generatorr   _cols_by_table)rN   rx   r5   r6   r7   r%   r&   r.   r-   r'   r*   propkey_to_col	eval_nonepropkeyvaluecolccolkeyr+   r,   s                       r/   rC   rC     s"     2B-6,,,//677>	>*77
CG'E )C}!5l344eS%6%677 u&:;; ,,. ! #(sww D"  ++E2F#L9LqQUUL9:; 
 "&v	;  !2259BB6JK!!00#)#>#>u#E#N#N$  $( -11{ ''u4%%1%%)>)>u)EE060K0K1F((,,-
 	
 		
C 2BL :s   DH$H
-C7H$c              #   
  ^^#    U GH  u  nmnnnXR                   ;  a  M  UR                   U   n0 n	UR                  U   mU(       aN  [        UU4S j[        T5      R	                  T5      R                  UR                  U   5       5       5      n
SnGO0 n
[        T5      R	                  UR                  5       H  nTU   nTU   n[        US5      (       d  [        U[        R                  5      (       a'  [        US5      (       a  UR                  5       OUX'   Md  UR                  U   R                  R                  XR                  U   5      SLd  M  XUR                   '   M     UR"                  R$                  (       a  UR&                  U   R)                  U
5      nOSnUGbF  UR*                  UR,                  U   ;   Ga(  U(       d  U
(       d  U	(       dy  UR.                  R1                  5        HX  nUR                  UR                      R                  R3                  UT[4        R6                  5      nUR8                  (       d  MX    O   GMR  UR*                  nU
(       + =(       a    U	(       + nXzUR:                  '   U(       d  UR                   U
;  a/  UR<                  SLa   UR=                  U5      nUXR                   '   O6UR<                  SL a  U(       a  XzUR                   '   OU
(       d
  U	(       d  GM  SnSnU(       a=  [        UU4S j[        T5      R	                  UR                  U   5       5       5      nGO;0 nU GH2  nUR.                  U   R                   nUR                  U   R                  R3                  UT[4        R>                  5      nUR8                  (       a  UR@                  (       a  SXN4U R4                  ;   a;  SnUR8                  S   UUR:                  '   U
RC                  UR                   S5        O@UR@                  S   UUR:                  '   X;   a  SnOURD                  S   UUR:                  '   UUR:                     b  GM  [F        RH                  " S	U< S
U< 35      e   U
(       d  U	(       a   U
RK                  U5        UTU
UUU	UU4v   GM  U(       d  GM  URL                  U    H,  u  nn[N        RP                  " UUUUUU URR                  5        M.     GM     g7f)aX  Identify sets of values to use in UPDATE statements for a
list of states.

This function works intricately with the history system
to determine exactly what values should be updated
as well as how the row should be matched within an UPDATE
statement.  Includes some tricky scenarios where the primary
key of an object might have been changed.

c              3   L   >#    U  H  nTU   R                   TU   4v   M     g 7fr"   rG   r$   r   r   r&   s     r/   r0   +_collect_update_commands.<locals>.<genexpr>X  s3       BG  (,,j.AB Bs   !$Tr   NFc              3   d   >#    U  H%  nTU   R                   TR                  U5      4v   M'     g 7fr"   )_labelgetr   s     r/   r0   r     s5       G  (//1HI s   -0pk_cascadedr   zCan't update table , using NULL for primary key value on column )*rt   r   r>   r   r   r   _pk_attr_keys_by_tablerX   r   r   r   r   r   managerimplis_equalrG   r:   r   _server_onupdate_default_colsr   r   r   _columntopropertyvaluesget_historyr   PASSIVE_NO_INITIALIZEaddedr   r   PASSIVE_OFFdeletedpop	unchangedorm_exc
FlushErrorr|   _table_to_equatedr
   populatepassive_updates)rv   rN   rw   r5   r%   r.   r-   rn   pksr*   r'   r,   r   r   r   prophistory	no_paramsvalr+   expect_pk_cascaded	pk_paramsmequated_pairsr   r&   s                           @@r/   re   re   6  s    ( 
	 ,,,""5)//6  ">2j)F99%@A B F  $F~.;;%% #7+$W-5"677:3,,< <
 #5*>?? 002" !% MM'*//8844W=   
 ',377O-0 !!0088?(6" ! $(  )%%)>)>u)EE <
 #44;;=D#mmDHH5::FFz:+K+KG }}} > ''C"
7<'7I!23:: v---U:112CD"%ww,,5)
 #4swwL"  ">2??11%8  I I 2237;;--055AA:z'='= ==#OO)56)445 .2*07a0@	#**-

377D1 180B	#**-.*/K,3,=,=a,@Icjj)SZZ(0!,,493@ 1 : \MM)$ 	 	   %+$<$<U$C =!"** %Ds 
s"   ETC3THT'AT?ATc           	   #   V  #    U GH  u  nnnnn	UR                   U   n
0 nSnUR                  U    H  nX;   a-  UR                  XVU[        R                  S9XR
                  '   M5  X;   d  UR                  c  MI  UR                  U   nUR                  UR                     R                  R                  XV[        R                  5      nUR                  (       d  M  UR                  S   nUXR                  '   SnM     U(       d  GM  U	b  UR                  UR                  U   ;   ar  UR                  nXUR
                  '   [        UR                  5      (       a>  UR                  U;  a.  UR                   SLa  UR!                  U	5      nUXR                  '   XVXxU4v   GM     g7f)zjIdentify sets of values to use in UPDATE statements for a
list of states within a post_update operation.

F)passiveNr   T)rt   r   _get_state_attr_by_columnr   r   r   onupdater   r   rG   r   r   r   r   r   r   r   )r:   rv   rN   rw   r   r%   r&   r.   r-   rn   r   r'   hasdatar   r   r   r   r   s                     r/   r   r     s     
	
 ""5)((/Cz%+%E%EsJ4J4J &F &zz" (CLL,D//4--166BBz'G'G ===#MM!,E&+F77O"G 0 7!-))V-B-B5-II ++%6szz" OOv-335@ 556GHC&)F77OV??O 
s   A4F):AF)(F)
BF)c              #   z  #    U H  u  nnnnnX&R                   ;  a  M  0 n	UR                   U    HE  n
UR                  XEU
5      =U	U
R                  '   nUb  M)  [        R                  " SU< SU
< 35      e   Ub5  UR
                  UR                  U   ;   a  XUR
                  R                  '   X4v   M     g7f)zOIdentify values to use in DELETE statements for a list of
states to be deleted.NzCan't delete from table r   )rt   r   rG   r   r   r   r   )r:   rv   rN   r   r%   r&   r.   r-   rn   r'   r   r   s               r/   r   r   '  s      
	 ,,,''.C BB3F }(( 16s<  / )%%)>)>u)EE0A6((,,-  1 
s   AB;A"B;c                 l  ^^^ TR                   SL=(       a    TR                   TR                  T   ;   mSU R                  0nUUU4S jnU R                  ST4U5      n[	        US 5       GH?  u  u  ppnnSn[        U5      nUnSnU(       d  UR                  5       nSnOfU(       a5  U(       d.  TR                  R                  (       a  UR                  5       nSnO*TR                   b  UR                  TR                   5      nSnU(       d  U	R                  R                  OU	R                  R                  nU=(       a    U	R                  R                  nU=(       a    T(       + nU(       a  U Hy  u  nnnmn	nnnU	R                  UR                  U5      UUS	9nU(       a5  [        TUTUUUUR                   R"                  S   USUR$                  5
        UUR&                  -  nUnM{     GO:U(       dq  UnU Hh  u  nnnmn	nnnU	R                  UUUS	9nU(       a5  [        TUTUUUUR                   R"                  S   USUR$                  5
        UUR&                  -  nMj     OU Vs/ s H  nUS
   PM
     nnU=(       d    U=(       a    [)        U5      S:H  nU	R                  UUUS	9nUUR&                  -  nU Hg  u  nnnmn	nnnU(       d  M  [        TUTUUUUR                   R"                  S   USUR                   R*                  (       d  UR$                  OS5
        Mi     W(       aA  U[)        U5      :w  a/  [,        R.                  " STR0                  [)        U5      U4-  5      eGM  T(       d  GM  [2        R4                  " SWR                  R6                  -  5        GMB     gs  snf )z\Emit UPDATE statements corresponding to value lists collected
by _collect_update_commands().Ncompiled_cachec            	        > [         R                  " [        R                  5      n TR                  T    HH  nU R
                  R                  U[        R                  " UR                  UR                  S9:H  5        MJ     T(       ac  U R
                  R                  TR                  [        R                  " TR                  R                  TR                  R                  S9:H  5        TR                  5       R                  U 5      nU$ N)type_)r   _construct_rawr   and_rt   clausesrs   r   	bindparamr   typer   r|   wherer   r   stmtr.   needs_version_idrN   s      r/   update_stmt,_emit_update_statements.<locals>.update_stmt`  s    #229>>B''.COO""s}}SZZsxx@@ /
 OO""%%==))00 //44 ||~##G,r_   r|   c                 R    U S   [        U S   5      [        U S   5      U S   U S   4$ N   r            r   r   recs    r/   <lambda>)_emit_update_statements.<locals>.<lambda>{  2    FAKQLFF
r_   r   FTexecution_optionsr   r   MUPDATE statement on table '%s' expected to update %d row(s); %d were matched.MDialect %s does not support updated rowcount - versioning cannot be verified.)r   r   _compiled_cache_memor   r?   r6   r:   r   dialectsupports_sane_rowcount supports_sane_rowcount_returningsupports_sane_multi_rowcount_execute_20r   
_postfetchcontextcompiled_parametersreturned_defaultsrowcountlenexecutemanyr   StaleDataErrordescriptionr   r   dialect_description)r:   rv   r.   rN   r|   r9   r  r   cached_stmtr-   	paramkeyshasvaluer,   r+   rP   rows	statementr6   assert_singlerowassert_multirowallow_multirowr%   r&   r'   r*   r   check_rowcountr  multiparamsr   s     ``                         @r/   rf   rf   N  s    	T) 	B!!V%:%:5%AA 
 *;+F+FG( ##Xu$5{CK
 
	
	
	HK w-	!113I"O$""11!113I"O"".!11&2G2GHI"O # 55##DD 	  @""?? 	 *B2B.B 	 **$$\2&7 + 
 &"		55a8$++ 

"!1) , "!1 	 $"..!6=N / A
 #""*!!&II99!<( // AJJ&D' * 299#s1v9!0 "$>[)9Q)>  **{>O +  

" 	 $"{""*!!&II99!<( #$99#8#8 //!% " s7|#,,9((#g,=>  $ II3))//0s	
T :s   .N1c                 @	   U R                  SU4UR                  5      nSU R                  0n[        US 5       GHV  u  u  ppnnUnU(       aA  U(       d,  U R                  (       a  UR
                  R                  (       d  U(       a  U
(       d  [        U5      nU Vs/ s H  oS   PM	     nnUR                  UUUS9nU(       a  [        UUR                  R                  5       H`  u  u  nnnnnnnnnU(       a=  [        UUUUUUUUSUR                  R                  (       d  UR                  OS5
        MS  [        UUU5        Mb     GM  GM  [        U5      nU
(       d-  UR
                  R                   (       a  [#        U5      S:  a  S	nOSnU(       d"  U R                  (       a  UR%                  5       nOIUR&                  b  UR%                  UR&                  5      nO U(       a  UR$                  " UR(                  6 nU(       Ga7  U Vs/ s H  oS   PM	     nnUR                  UUUS9nU(       Ga  [*        R,                  " UUR                  R                  UR.                  UR0                  =(       d    S
5       H  u  u  nnnnnnnnnnnUc  [2        R4                  " SU-  5      e[        UUR6                  U   5       HB  u  nnUR8                  U   nUR;                  UR<                  5      b  M3  UUUR<                  '   MD     U(       a  [        UUUUUUUUSU5
        M  [        UUU5        M     GM  GM  U GHG  u  nnnnnnnnU(       a!  UR                  UR?                  U5      UUS9nOUR                  UUUS9nUR@                  n U c  [2        R4                  " SU< S35      e[        U UR6                  U   5       HH  u  nnUR8                  U   nUU;   d  UR;                  UR<                  5      b  M9  UUUR<                  '   MJ     U(       d  M  U(       aU  [        UUUUUUUR                  R                  S   USUR                  R                  (       d  UR                  OS5
        GM:  [        UUU5        GMJ     GMY     gs  snf s  snf )z\Emit INSERT statements corresponding to value lists collected
by _collect_insert_commands().r{   r   c                 R    U S   [        U S   5      [        U S   5      U S   U S   4$ r   r  r  s    r/   r  )_emit_insert_statements.<locals>.<lambda>-  r	  r_   r   r
  FNr   Tr#   zMulti-row INSERT statement for %s did not produce the correct number of INSERTed rows for RETURNING.  Ensure there are no triggers or special driver issues preventing INSERT from functioning properly.z Single-row INSERT statement for z did not produce a new primary key result being invoked.  Ensure there are no triggers or special driver issues preventing INSERT from functioning properly.r   )!r  r{   r  r   r   r  implicit_returningr?   r  zipr  r  r  r  r  _postfetch_bulk_saveinsert_executemany_returningr  r6   r   primary_keyr   zip_longestinserted_primary_key_rowsreturned_defaults_rowsr   r   rt   r   r   rG   r   inserted_primary_key)!r:   rv   r.   rN   r{   r9   r  r  r-   pkeysr!  r+   r,   rP   r#  r  r(  r   r%   r&   r'   
mapper_recr)   r*   last_inserted_paramsdo_executemanyr4  r  pkr   r   r   r0  s!                                    r/   rD   rD     s    ##Xu$5u||DK);+F+FG
 
	
	
	DH3C  	  "11!))<< 7mG-45Wcq6WK5&&;:K ' A  !))"?"?@	""$#(("&*!!&0(!#$99#8#8 //!% -ZUK# A F 7mG&&CCL1$!%!&#(B(B%557	&&2%55f6K6KL	%55u7H7HI	189#1v9**{>O +   ))		5533006B		!&"& (',,,) 07 #*"4"4!8
 ;E!E#  (+0"007(GB $.#?#?#DD)~~dhh7?79
488 4( !& * . % % * ! 4 , % 1 1ZOY L 	 $#!+!7!7%,,\:".? "8 " ",!7!7%".? "8 " #)"="=K"*%00 8BD  $'#V%9%9%%@$C  *;;C@</)~~dhh7?35Jtxx0$ #{ & * . % % * & & B B1 E , %'-~~'A'A !' 8 8%) 1ZOe G	
8 6v :s   RRc                   ^^^ SU R                   0nTR                  SL=(       a    TR                  TR                  T   ;   mUUU4S jnU R                  ST4U5      n[	        US 5       GH  u  pSn
[        U	5      n	US   nTR                  c  UR                  R                  OUR                  R                  nU=(       a    UR                  R                  nT(       + =(       d    UnU(       dZ  UnU	 HQ  u  nnnnnUR                  UUUS9n[        UUTUUUUR                  R                  S   5        U
UR                  -  n
MS     OU	 VVVVVs/ s H  u  nnnnnUPM     nnnnnnU=(       d    U=(       a    [        U5      S:H  nUR                  UUUS9nU
UR                  -  n
U	 H1  u  nnnnn[        UUTUUUUR                  R                  S   5        M3     U(       aA  U
[        U	5      :w  a/  [         R"                  " S	TR$                  [        U	5      U
4-  5      eGM  T(       d  GM  [&        R(                  " S
WR                  R*                  -  5        GM     gs  snnnnnf )zaEmit UPDATE statements corresponding to value lists collected
by _collect_post_update_commands().r   Nc            	      h  > [         R                  " [        R                  5      n TR                  T    HH  nU R
                  R                  U[        R                  " UR                  UR                  S9:H  5        MJ     T(       ac  U R
                  R                  TR                  [        R                  " TR                  R                  TR                  R                  S9:H  5        TR                  5       R                  U 5      nTR                  b  UR                  TR                  5      nU$ r   )r   r   r   r   rt   r   rs   r   r   r   r   r   r|   r   r6   r   s      r/   r   1_emit_post_update_statements.<locals>.update_stmt  s    #229>>B''.COO""s}}SZZsxx@@ /
 OO""%%==))00 //44 ||~##G,  ,''(=(=>Dr_   r   c                 (    U S   [        U S   5      4$ )N   r   )r   r  s    r/   r  ._emit_post_update_statements.<locals>.<lambda>0  s    SVSQ[)r_   r   r
  r   r  r  )r  r   r   r  r   r?   r  r  r  r  r  _postfetch_post_updater  r  r  r  r   r  r  r   r   r  )r:   rv   r.   rN   r|   r  r   r#  rG   rP   r"  r-   r$  r%  r&  r'  r%   r&   r6  r'   r   r)   r(  r   s     ``                   @r/   r   r     s    *;+F+FG 	T) 	B!!V%:%:5%AA 
0 !!=%"8+FI  ) w-V
 $$, 55##DD 	  @""?? 	 .-@-NELAz:z6**v9J +  '"II11!4 

" FM& DKCJ?E:z4 CJ  
 -  :S%5%:  &&;:K ' A AJJDELAz:z6&"II11!4 FM s7|#,,9((#g,=>  $ II3))//0SNs   I)c                    ^^^ TR                   SL=(       a    TR                   TR                  T   ;   mUUU4S jnU R                  ST4U5      n[        US 5       GH  u  pxU V	Vs/ s H  u  pU	PM	     n
n	nSU R                  0n[        U
5      nSnSnT(       a  WR                  R                  (       d  UR                  R                  (       a*  SnU
 H!  n	UR                  XiUS	9nXR                  -  nM#     Oc[        R                  " S
UR                  R                  -  5        UR                  XjUS	9  O%WR                  XjUS	9nT(       d  SnUR                  nU R                  (       d  GM  US:  d  GM   X:w  d  GM(  UR                  R                  (       d  [        U
5      S:X  d  GMU  U(       a(  [        R                  " STR                  X4-  5        GM  [         R"                  " STR                  X4-  5      e   gs  snn	f )z\Emit DELETE statements corresponding to value lists collected
by _collect_delete_commands().Nc            	        > [         R                  " [        R                  5      n TR                  T    HH  nU R
                  R                  U[        R                  " UR                  UR                  S9:H  5        MJ     T(       ac  U R
                  R                  TR                  [        R                  " TR                  R                  TR                  R                  S9:H  5        TR                  5       R                  U 5      $ r   )r   r   r   r   rt   r   rs   r   r   rG   r   r   r   r   )r   r   r.   need_version_idrN   s     r/   delete_stmt,_emit_delete_statements.<locals>.delete_stmt  s    #229>>B''.COO""s}}SWWCHH== /
 OO""%%==))--V5J5J5O5O ||~##G,,r_   r   c                     U S   $ )Nr   r#   r  s    r/   r  )_emit_delete_statements.<locals>.<lambda>  s    Ar_   r   Fr   r
  zMDialect %s does not support deleted rowcount - versioning cannot be verified.Tr   zDELETE statement on table '%s' expected to delete %d row(s); %d were matched.  Please set confirm_deleted_rows=False within the mapper configuration to prevent this warning.)r   r   r  r   r  r  r  r  r  r  r  r   r   r  confirm_deleted_rowsr  r   r  )r:   rv   r.   rN   r   rD  r#  r-   recsr'   del_objectsr  expectedrows_matched	only_warnr   rC  s     ``            @r/   r   r   ~  s    	T) 	B!!V%:%:5%AA 
-$ !!8U"3[AI#F,>?
8<="4&v=-{/J/JK{#	 &&CC!!88  *F"..!=N / A !JJ.L * 		7 ((<<=
 &&>O '  &&:K ' A # 	::L ,,,r!(""??{#q(
 		= (((A	B ,,= (((A	B { @=s   )H
c           	      \   U GH  u  p4pVnUR                   (       a  UR                  UR                    Vs/ s H  nUR                  (       a+  UR                  (       a\  UR                  UR
                  ;   dB  UR                  (       a  MR  UR                  (       a  Me  UR                  UR
                  ;  d  M  UR                  PM     sn5      n	U	(       a  UR                  UR
                  U	5        / n
U R                  (       a4  U
R                  UR                  R                  UR                  5      5        UR                  bY  UR                  SL aJ  UR                  R                  UR                  ;   a&  U
R                  UR                  R                  /5        U
(       ak  U R!                  U5      Ul        ["        R$                  " U5      R'                  [(        5      n[*        R,                  " UR.                  UUR                  UU
S9  U(       d  UR0                  R3                  XVU5        OUR0                  R5                  XVU5        UR                  SL d  GMa  UR                  c  GMq  XER                  R                     b  GM  [6        R8                  " S5      e   gs  snf )zrfinalize state on states that have been inserted or updated,
including calling after_insert/after_update events.

NF)refresh_stateonly_load_propsz2Instance does not contain a non-NULL version value)_readonly_propsunmodified_intersectionexpire_on_flushdeferredrG   r>   _expire_attributesr   extend_unloaded_non_objectr   &_server_default_plus_onupdate_propkeysr   r   ra   unloadedr   r   r   set_label_styler   r	   load_on_identr;   r   after_insertafter_updater   r   )r:   rv   rL   r%   r&   r.   r-   ry   rR   readonly
toload_nowr   s               r/   ru   ru     s#   
 @F;6|!!44 $333))!"quu

/B --  !"

  EE3 AEE3H ((X>
 
%%**77AA !!-++u4&&**enn<!!6#:#:#>#>"?@#<<UCEI==(88.D !!&&		# * OO((UCOO((UC ''50%%111556>((H A @Fs   AJ)

J)
J)
9J)
c                    UR                  U5      (       a  g UR                  R                  R                  nUR                  R                  R                  nU R
                  b6  U R
                  U R                  U   ;   a  [        U5      U R
                  /-   n[        U R                  R                  R                  5      n	U	(       a  / n
U H~  nUR                  U;   d  M  XR                  ;   d  M&  XkR                     X@R                  U   R                  '   U	(       d  MV  W
R                  U R                  U   R                  5        M     U	(       a-  W
(       a&  U R                  R                  R                  X1U
5        U(       aV  UR                  UR                   U Vs/ s H-  nXR                  ;   d  M  U R                  U   R                  PM/     sn5        g g s  snf r"   )r   r  compiledprefetch	postfetchr   r   r?   r   class_managerr   refresh_flushrG   r   rs   rV  r>   )r.   rv   rN   r%   rM   r   r'   prefetch_colspostfetch_colsrf  load_evt_attrsr   s               r/   r@  r@  ,  s      ''NN++44M^^,,66N 	)!!V%:%:5%AA]+v/D/D.EE--66DDEM55F?q$<$<<5;EE]E**1-112}%%f&>&>q&A&E&EF	  %%33>	
   JJ ('A000 0((+//'	
 s   &G#
=G#
c
           
      P   UR                   R                  R                  n
UR                   R                  R                  nUR                   R                  R                  nU R
                  b6  U R
                  U R                  U   ;   a  [        U
5      U R
                  /-   n
[        U R                  R                  R                  5      nU(       a  / nU(       a  U	nUb  [        X5       H  u  nnUR                  (       a  UR                   R                  (       a  M4  U R                  R!                  U5      nU(       d  MX  UUUR"                  '   U(       d  Mp  WR%                  UR"                  5        M     U
 H  nUR"                  U;   d  M  UU R                  ;   d  M'  UUR"                     X@R                  U   R"                  '   U(       d  MX  WR%                  U R                  U   R"                  5        M     U(       a-  W(       a&  U R                  R                  R                  X1U5        U(       aD  U(       a=  UR'                  U Vs/ s H   nUR                  (       d  M  UU;  d  M  UPM"     sn5        U(       aV  UR)                  UR*                  U Vs/ s H.  nUU R                  ;   d  M  U R                  U   R"                  PM0     sn5        U R,                  U    H,  u  nn[.        R0                  " UUUUUUU R2                  5        M.     gs  snf s  snf )z~Expire attributes in need of newly persisted database state,
after an INSERT or UPDATE statement has proceeded for that
state.N)r  rb  rc  rd  	returningr   r   r?   r   re  r   rf  r-  r0  isinsertr   r   rG   rs   rW  rV  r>   r   r
   r   r   )r.   rv   rN   r%   rM   r   r'   r*   isupdater  rg  rh  returning_colsrf  ri  row	row_valuer   r   r   r   r   s                         r/   r  r  U  s     NN++44M^^,,66N^^,,66N 	)!!V%:%:5%AA]+v/D/D.EE--66DDEM?"%c":	3 ??v~~'>'> //33C84&/E$((O$}&--dhh7 #;  55F?qF$<$<<5;AEE]E**1-112}%%f&>&>q&A&E&EF	  %%33>	
 L 	 ('C?? '*.'@ '	
   JJ ('A000 0((+//'	
 #44U;=""	
 <)s   L,L4L"L#
:L#
c                 b    U R                   U    H  u  p4[        R                  " XU5        M     g r"   )r   r
   bulk_populate_inherit_keys)r.   rM   rN   r   r   s        r/   r.  r.    s*    "44U;''-@ <r_   c              #   V  #    UR                   R                  (       a  UR                   R                  nOUR                  R                  U 5      nSn[	        X5       HG  nU(       a  U" XR                  5       5      nUR                  R                  nXUR                  UW4v   MI     g7f)zReturn an iterator of (state, state.dict, mapper, connection).

The states are sorted according to _sort_states, then paired
with the connection they should be using for the given
unit of work transaction.

N)	r;   r<   transactionr-   rp   objr   r.   r>   )r:   rv   rL   r<   r-   r%   r.   s          r/   r   r     s      11,44HH#//::;G
"k2,[))+FJ%%ZZ33 3s   B'B)c                 N   [        U5      n[        S U 5       5      nUR                  U5         [        X0R                  S9n[        U[        R                  " S5      S9W-   $ ! [         a6  n[
        R                  " [        R                  " SU-  5      US9   S nAN\S nAff = f)Nc              3   B   #    U  H  oR                   c  M  Uv   M     g 7fr"   r   )r$   ss     r/   r0   _sort_states.<locals>.<genexpr>  s     =155QQs   	r   z^Could not sort objects by primary key; primary key values must be sortable in Python (was: %s))replace_contextinsert_order)r   difference_updatesorted_persistent_sortkey_fn	TypeErrorr   raise_sa_excInvalidRequestErroroperator
attrgetter)r.   rL   pending
persistentpersistent_sortederrs         r/   rp   rp     s    &kG===Jj)
"99
 	wH//?@
	  
&&>@CD  	

s   A$ $
B$.,BB$c                       \ rS rSr " S S\5      r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       rSrg)BulkUDCompileStatei  c                   8    \ rS rSrSrSrSr\r\r	\r
SrSrSrSrg))BulkUDCompileState.default_update_optionsi  evaluateTNr#   )__name__
__module____qualname____firstlineno___synchronize_session
_autoflush_subject_mapper_EMPTY_DICT_resolved_values_resolved_keys_as_propnames_value_evaluators_matched_objects_matched_rows_refresh_identity_token__static_attributes__r#   r_   r/   default_update_optionsr    s5    )
&&1#'"&r_   r  c                    U(       a  X$4$ [         R                  R                  SS1UUR                  5      u  nnUR                  nUb  US;  a  [
        R                  " S5      eX%S'    UR                  S   n	U	R                  US'   US	U	R                  0-  nUR                  (       a  UR                  5         UR                  SUR                  05      nUR                  S
:X  a  U R                  UUUUUU5      nO&UR                  S:X  a  U R                  UUUUUU5      nU[        R                  " U5      R!                  SU05      4$ ! [         a     S5       ef = f)N_sa_orm_update_optionssynchronize_session)r  fetchFzKValid strategies for session synchronization are 'evaluate', 'fetch', Falseclauseplugin_subjectr.   0statement had 'orm' plugin but no plugin_subjectr  r  r  )r  r  from_execution_options_execution_optionsr  r  ArgumentError_propagate_attrsr.   KeyErrorr  	_annotate_do_pre_synchronize_evaluate_do_pre_synchronize_fetchr   immutabledictrd   )
clsr;   r#  r'   r  bind_argumentsis_reentrant_invokeupdate_optionsr
   r  s
             r/   orm_pre_session_exec'BulkUDCompileState.orm_pre_session_exec  s    //
 55LL$"#((	
	
 2277**5 
 $-x 	=&778HIN (6'<'<N8$,n.C.CDD$$ ''"N$G$GH
	 ..*< ==!N 00G; ::!N 0177)>:
 	
Q  	MLLL5	Ms   +E E c                     US   nUR                   S:X  a  U R                  XU5        U$ UR                   S:X  a  U R                  XU5        U$ )Nr  r  r  )r  _do_post_synchronize_evaluate_do_post_synchronize_fetch)r  r;   r#  r'   r  r  r   r  s           r/   orm_setup_cursor_result*BulkUDCompileState.orm_setup_cursor_resultL  sY    & ++CD..*<--g~N  00G;**7NKr_   c                 X  ^^ SnTR                   (       a  TR                  OSmSTR                  4U;   a'  U[        U4S jUSTR                  4    5       5      -  nTR                  R                  b  UTR                  R                  4-  nT(       a  [        U4S jU 5       5      nU$ )a]  Apply 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#   Nadditional_entity_criteriac              3      >#    U  H8  nUR                   (       d  UR                  TL d  M%  UR                  T5      v   M:     g 7fr"   )include_aliasesentity_resolve_where_criteria)r$   aeext_infos     r/   r0   @BulkUDCompileState._adjust_for_extra_criteria.<locals>.<genexpr>|  sB      !B %%h)>	 5**844s
   $AAc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr"   )traverse)r$   critadapters     r/   r0   r    s     O;4 0 0 6 6;s   !)is_aliased_class_adapterr.   rH   _single_table_criterion)r  global_attributesr  return_critr  s     ` @r/   _adjust_for_extra_criteria-BulkUDCompileState._adjust_for_extra_criteriag  s     '/'@'@(##d )OO
  5 !+18??C!  K ??22>HOOCCEEKO;OOKr_   c                    UR                   nUR                  n[        =p [        R                  " U5      nSnUR
                  (       a  XR
                  -  n0 nUR                   H'  nUR                  (       d  M  UR                  U5        M)     U(       a  XR                  X5      -  nU(       a  UR                  " U6 nOS n UR                   S:X  a  UR"                  nOUnUR                   S:X  al  U R%                  UU5      n0 n	U R'                  UU5      n
U
 H@  u  nn WR                  [(        R*                  " [,        R.                  U5      5      nUU	U'   MB     UR0                  R3                  5        Vs/ s H  nUR4                  R7                  U5      (       d  M%  UR8                  (       a  M8  W" UR;                  5       5      (       d  MU  UR<                  b  UR>                  UR<                  :X  d  M~  UR;                  5       PM     nnUUU	U
S.-   $ ! [        R                   a7  n[        R                  " [        R                  " SU-  5      US9   S nAGNS nAff = f! [        R                   a     GMf  f = fs  snf )Nr#   c                     g)NTr#   )ru  s    r/   eval_conditionGBulkUDCompileState._do_pre_synchronize_evaluate.<locals>.eval_condition  s    r_   z{Could not evaluate current criteria in Python: "%s". Specify 'fetch' or False for the synchronize_session execution option.)from_lambda_elementr|   )r  r  r  ) r  class_r  r   EvaluatorCompiler_where_criteria_with_options_is_criteria_optionget_global_criteriar  processUnevaluatableErrorr   r  r  r  __visit_name__	_resolved_get_resolved_valuesr  r   expectr   ExpressionElementRoler   
all_statesr.   rB   expiredru  r  identity_token)r  r;   r#  r'   r  r  r  r.   
target_clsvalue_evaluatorsresolved_keys_as_propnamesevaluator_compilerr  r  optr  r  effective_statementresolved_valuesrG   r   
_evaluatorr%   matched_objectss                           r/   r  /BulkUDCompileState._do_pre_synchronize_evaluate  s     //]]
8CC	!*!<!<Z!HD((111 " ..***++,=> / !66%  !3!;!;T!B  ##'77 #,"5"5"+--9!66+O  "),)H)H*& 9
U7!3!;!;!(()D)DeL"J -7$S) 9 !--88:
:||'  MM  uyy{+	  66> ''!99: EIIK: 	 
  /!1+E!
 
 	
i ++ 	KK**<>AB
  	> !33 
sU   AH <AH H $4I+=$J%J8J%J>JI(1,I##I(+JJc                     UR                   (       a  / $ UR                  (       a  [        UR                  5      $ UR                  (       a#  [        UR                  R	                  5       5      $ / $ r"   )_multi_values_ordered_valuesr?   _valuesrA   )r  r.   r#  s      r/   r  'BulkUDCompileState._get_resolved_values  sR    ""I&&	1122	))//122Ir_   c                    / nU H  u  pE[        U[        R                  5      (       a  UR                  UR                  U45        MC  [        US5      (       a  UR                  5       nU(       aN  [        U[        R                  5      (       a/   UR                  U   nUR                  UR                  U45        M  [        R                  " SU-  5      e   U$ ! [        R                   a     M  f = f)Nr   zInvalid expression type: %r)r   r   QueryableAttributers   rG   r   r   r   ColumnElementr   r   UnmappedColumnErrorr  r  )r  r.   r  r   rY   rZ   attrs          r/   r  .BulkUDCompileState._resolved_keys_as_propnames  s    #DA!Z::;;quuaj)011((**Q
(@(@AA1!33A6D MM488Q-0001A5  $$  22 s   CC32C3c                    UR                   n[        UR                  UR                  4-   6 R	                  U5      R
                  " UR                  6 nUR                  Ul        S n	UR                  UUUUU	S9n
U
R                  5       n[        nUR                  S:X  a  UR                  nOUnUR                  S:X  a  UR                  n[        R                  " U5      nU R!                  X}5      nU R#                  UU5      nU R#                  UU5      n0 nU H@  u  nn UR%                  [&        R(                  " [*        R,                  U5      5      nUUU'   MB     O[        nUUUUS.-   $ ! [        R.                   a     Mk  f = f)Nc                     U R                   R                  " S0 U R                  D6nUR                  R                  (       a  [
        R                  " 5       $ g )Nr#   )r;   get_bindr  r  full_returning_resultnull_result)orm_contextbinds     r/   skip_for_full_returningMBulkUDCompileState._do_pre_synchronize_fetch.<locals>.skip_for_full_returning!  s@    &&//M+2L2LMD||****,,r_   )
_add_eventr  r|   )r  r  r  )r  r   r0  select_identity_tokenselect_fromoptionsr  r  executefetchallr  r  r  r  r   r  r  r  r  r   r  r   r  r  )r  r;   r#  r'   r  r  r  r.   select_stmtr   r   matched_rowsr  r  r  r  r  r  rG   r   r  s                        r/   r  ,BulkUDCompileState._do_pre_synchronize_fetch  s     // V''6+G+G*IIK[ W--/ 	
 '0&?&?#	 . ! 
 (&##'77 #,"5"5"+--9J!*!<!<Z!H!66O *-)H)H*& *-)H)H*&  "8
U7!3!;!;!(()D)DeL"J -7$S) 9 *5&!1)+E!
 
 	
 !33 s   !4E..FFr#   N)r  r  r  r  r   r  classmethodr  r  r  r  r  r  r  r  r#   r_   r/   r  r    s    	' 	' N
 N
`  4 " "H ]
 ]
~    , K
 K
r_   r  c                   4    \ rS rSr\S 5       r\S 5       rSrg)ORMDMLStatei]  c                    UR                   R                  S   nUR                  nUR                  (       a  UR                  nOUR
                  R                  nUUR
                  UR                  UR                  UR                  S.$ )Nparententity)namer   exprr  rN   )	rN   _annotationsr.   r  r  r  r  r  local_table)r  r#  r  r.   _label_names        r/   get_entity_description"ORMDMLState.get_entity_description^  sm    ??//?$$"--K --00K  MMOOoo''
 	
r_   c           
          S nS nUR                    Vs/ s H  oDU" U5      4PM     sn VVs/ s H;  u  pEUR                  UR                  U" XE5      UR                  UR                  S.PM=     snn$ s  snf s  snnf )Nc                 :    U R                   R                  SS 5      $ )Nr  )r  r   )r   s    r/   _ent_for_colCORMDMLState.get_returning_column_descriptions.<locals>._ent_for_colq  s    >>%%nd;;r_   c                     Uc  U $ U R                   R                  SS 5      nU(       d  U $ [        UR                  X 5      $ )N	proxy_key)r  r   getattrr  )r   entr  s      r/   _attr_for_colDORMDMLState.get_returning_column_descriptions.<locals>._attr_for_colt  s;    {**;=Iszz988r_   )r  r   r  aliasedr  )_all_selected_columnsrG   r   r  r  )r  r#  r  r  r   r  s         r/   !get_returning_column_descriptions-ORMDMLState.get_returning_column_descriptionso  s    	<	9$ /8.M.M.MLO$.M
 %a-//**
 	

s   A4AA9r#   N)r  r  r  r  r  r  r#  r  r#   r_   r/   r  r  ]  s(    
 
  
 
r_   r  ormr{   c                   4    \ rS rSr\S 5       r\S 5       rSrg)	ORMInserti  c                     X%S'    UR                   S   nUR                  US'   U[        R                  " U5      4$ ! [         a     S5       ef = f)Nr  r  r.   r  )r  r.   r  r   r  )r  r;   r#  r'   r  r  r  r  s           r/   r  ORMInsert.orm_pre_session_exec  sp     $-x 	=&778HIN (6'<'<N8$ 01
 	
  	MLLL5	Ms	   < Ac                     U$ r"   r#   )r  r;   r#  r'   r  r  r   s          r/   r  !ORMInsert.orm_setup_cursor_result  s	     r_   r#   N)r  r  r  r  r  r  r  r  r#   r_   r/   r'  r'    s(    
 
, 	 	r_   r'  r|   c                   T    \ rS rSr\S 5       r\S 5       r\S 5       r\S 5       rSr	g)BulkORMUpdatei  c                 h   U R                  U 5      nUR                  R                  S   nUR                  =Ul        n0 Ul        U R                  Xa5      Ul        0 nUR                   H'  nUR                  (       d  M  UR                  U5        M)     UR                  (       d+  UR                  (       a  [        UR                  5      Ul        [        R                  R                  [        R                  5      n	U	R                  R!                  UR                  5        UR"                  U	l        UR$                  (       a  UR                  U	l        O"UR                  (       a  UR                  U	l        U R'                  Xv5      n
U
(       a  U	R(                  " U
6 n	UR                  R+                  SS 5      S:X  a[  UR,                  R.                  (       a@  U	R0                  (       a  [2        R4                  " S5      eU	R6                  " UR8                  6 n	[:        R<                  " XIU40 UD6  U$ )Nr  r  r  z?Can't use synchronize_session='fetch' with explicit returning())__new__rN   r  r.   extra_criteria_entitiesr  r  r  r  r  _preserve_parameter_orderr  r>   r   Update__dict__r|   r  r  r  r   r   r  r  
_returningr  r  rk  r0  r   __init__)r  r#  compilerkwselfr  r.   extra_criteria_attributesr  new_stmtnew_crits              r/   create_for_statement"BulkORMUpdate.create_for_statement  s    {{3??//?'.f')$ # 8 8 K$&!**C&&&''(AB + 22y7H7H$()>)>$?D!::%%cjj1  !3!34++ $$'+'<'<H$#44H11%
 ~~x0H !!%%&;TBgM  //""000   ))6+=+=>H?B?r_   c                    UR                   S   n[        R                  nU(       a  UR                  (       d  U" X5      $ UR                  n/ nU GHt  u  px[        R
                  " [        R                  U5      n[        U[        R                  5      (       a  [        XW[        S9n	U	[        L aK  UR                  U[        R
                  " [        R                  U[        R                   " 5       SS945        M  UR#                  U" XR%                  U5      5      5        M  SUR&                  ;   aG  UR&                  n
[        U
S   U
S   5      nUR#                  U" XR%                  U5      5      5        GM+  UR                  U[        R
                  " [        R                  U[        R                   " 5       SS945        GMw     U$ )Nr  )defaultT)r   is_crudentity_namespacer  )r  r   _get_crud_kv_pairsr.   r   r  r   DMLColumnRoler   r   string_typesr   r   rs   r  r   NullTyperW  _bulk_update_tuplesr  )r  r#  kv_iteratorr  core_get_crud_kv_pairsr.   r   rY   rZ   desck_annor  s               r/   rB   BulkORMUpdate._get_crud_kv_pairs  s   "334DE!/!B!B^%:%:))AA&&DA  !4!4a8A!T..//,VI8#MM%,, % ; ; !&.&7&7&9(,	
 MM.%'?'?'B
 $q~~5,-.{0C *!#;#;A#> !((!77"*"3"3"5$(	
E  Z r_   c                 (   [        5       n[        UR                  R                  5       5      nUR                  n[        S U 5       5      nUR
                   GH%  n[        R                  " U5      [        R                  " U5      pUR                  b  U	R                  UR                  :w  a  MX  U	R                  R                  U5      nU H!  nX;   d  M
  UR                  U   " U5      X'   M#     U	R                  R                  R                  U	S U5        U	R!                  U
[        U5      5        UR                  U
5      R#                  U5      nU(       a  U	R%                  X5        UR'                  U	5        GM(     UR)                  U5        g )Nc              3   *   #    U  H	  u  pUv   M     g 7fr"   r#   r$   rY   rZ   s      r/   r0   >BulkORMUpdate._do_post_synchronize_evaluate.<locals>.<genexpr>0	       *641Q6   )r   r?   r  r   r  r  r   r   instance_dictr  r  
unmodifiedr   r   r   refresh_commitr   rV  add_register_altered)r  r;   r   r  rL   evaluated_keysr   attribru  r%   rM   to_evaluaterG   	to_expires                 r/   r  +BulkORMUpdate._do_post_synchronize_evaluate*	  sT    n>>CCEF;;*6**!22C ))#.((-  66B((!99:   **77GK"<!/!A!A#!Fs!KEJ # MM""**5$DMM%k!23++E2==kJI((:JJu? 3@ 	!!&)r_   c           	         UR                   n[        5       n[        UR                  R	                  5       5      nUR
                  (       a8  UR                  5        Vs/ s H  n[        U5      UR                  4-   PM     nnOUR                  nU Vs/ s H  owSS US   4PM     sn V	V
s/ s H<  u  pUR                  b  XR                  :X  d  M#  UR                  [        U	5      U
S9PM>     sn
n	 Vs/ s H#  nXR                  ;   d  M  UR                  U   PM%     nnUR                  n[        S U 5       5      nU GH   n[        R                  " U5      [        R                  " U5      nnUR                   R#                  U5      nU H#  nUU;   d  M  UR                  U   " U5      UU'   M%     UR$                  R&                  R)                  US U5        UR+                  U[        U5      5        UR#                  U5      R-                  U5      nU(       a  UR/                  UU5        UR1                  U5        GM     UR3                  U5        g s  snf s  snf s  sn
n	f s  snf )Nr   rH  r  c              3   *   #    U  H	  u  pUv   M     g 7fr"   r#   rN  s      r/   r0   ;BulkORMUpdate._do_post_synchronize_fetch.<locals>.<genexpr>s	  rP  rQ  )r  r   r?   r  r   returns_rowsallrH   r  r  identity_key_from_primary_keyr   r  r   r   rR  rS  r   r   r   rT  rU  r   rV  rV  rW  )r  r;   r   r  target_mapperrL   rX  ro  r	  r0  r  identity_keyobjsr   rY  ru  r%   rM   rZ  rG   r[  s                        r/   r  (BulkORMUpdate._do_post_synchronize_fetchS	  sT   &66n>>CCEF "::<'C c
nDDFF'  L
 *77L 5A44@S2YB(L4
!
4/K "99A!%K%KK;;%#1 < 4
!

! 333 /G  .
! 	 
   ;;*6**C))#.((- E
  **77GK"%<!/!A!A#!Fs!KE#J # MM""**5$DMM%k!23++E2==kJI((	:JJu% & 	!!&)[4
!
s$   #II,"I"I"5I(I()r  r0  r.   N)
r  r  r  r  r  r<  rB  r  r  r  r#   r_   r/   r-  r-    sS    8 8t 9 9v &* &*P 4* 4*r_   r-  r   c                   D    \ rS rSr\S 5       r\S 5       r\S 5       rSrg)BulkORMDeletei	  c                 4   U R                  U 5      nUR                  R                  S   nUR                  =Ul        n0 Ul        0 nUR
                   H'  nUR                  (       d  M  UR                  U5        M)     U R                  Xv5      n	U	(       a  UR                  " U	6 nU(       aT  UR                  R                  SS 5      S:X  a4  UR                  R                  (       a  UR                  " UR                  6 n[        R                   " XAU40 UD6  U$ )Nr  r  r  )r/  rN   r  r.   r0  r  r  r  r  r   r   r  r  rk  r0  r   r5  )
r  r#  r6  r7  r8  r  r.   r9  r  r;  s
             r/   r<  "BulkORMDelete.create_for_statement	  s    {{3??//?'.f')$$&!**C&&&''(AB + 11%
 !2I %%))*?F  //!++V-?-?@I@R@r_   c                     UR                  UR                   Vs/ s H  n[        R                  " U5      PM     sn5        g s  snf r"   )_remove_newly_deletedr  r   r   )r  r;   r   r  ru  s        r/   r  +BulkORMDelete._do_post_synchronize_evaluate	  sE     	%% *:::C ))#.:	
s    Ac                    UR                   nUR                  (       a8  UR                  5        Vs/ s H  n[        U5      UR                  4-   PM     nnOUR
                  nU Hj  nUSS nUS   nUR                  [        U5      US9n	XR                  ;   d  M7  UR                  [        R                  " UR                  U	   5      /5        Ml     g s  snf )Nr   rH  r^  )r  ra  rb  rH   r  r  rc  r?   r   rm  r   r   )
r  r;   r   r  rd  ro  r	  r0  r  re  s
             r/   r  (BulkORMDelete._do_post_synchronize_fetch	  s    &66 "::<'C c
nDDFF'  L
 *77LCa)K WN )FF[!- G L 333--"11#00>  s   #C)r0  r.   N)	r  r  r  r  r  r<  r  r  r  r#   r_   r/   ri  ri  	  s=     @ 
 
  r_   ri  )F)FFF)T)F__doc__	itertoolsr   r   r   r   r   r   r   r	   r
   baser   r   r  r   r   r   enginer   r  r   r   r   r   r   r   sql.baser   r   r   sql.dmlr   r   r   sql.elementsr   sql.selectabler   rT   rh   rq   r   r   rr   r   r   rC   re   r   r   rf   rD   r   r   ru   r@  r  r.  r   rp   r  r  r  r  
plugin_forr'  r-  ri  r#   r_   r/   <module>r{     s                 &       , #  $ $ $ , ;JZ?
DPf(
V(@VN
b	HD6 
U
r 38vr5@p$!Z Hb gPTxvaHGT&
R^
BA
44.   "k
 k
\+
 +
\ )"^ " *"J )V*K1C V* *V*r )IK1C I *Ir_   