ó
    Ñ]j ã                  óæ  • S 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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J0r0  SS)K1J2r2  \
(       aH  SS*K3J4r4  SS+K3J5r5  SS,K3J6r6  SS-K7J8r8  SS.K9J:r:  SS/K9J;r;  SS0K9J<r<  SS1K9J=r=  SS2K>J?r?  SS3KJ@r@  SS4KJArA  SS5KBJCrC  \" S6\DS79rE\	S8S8S9.                 SRS: jj5       rF\	S8S8S9.                 SSS; jj5       rFS<S<S9.                 STS= jjrF\	S8S>S?.               SUS@ jj5       rG\	S8S>S?.               SVSA jj5       rGS<S>S?.               SWSB jjrGSC rH " SD SE\5      rI " SF SG\I5      rJ\*R–                  " SHSI5       " SJ SK\I\.5      5       rL\*R–                  " SHSL5       " SM SN\J\/5      5       rM\*R–                  " SHSO5       " SP SQ\J\-5      5       rNg<)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_stmtÚexecution_optionsc               ó   • g ©N© ©ÚmapperÚmappingsÚsession_transactionÚisstatesÚreturn_defaultsÚrender_nullsr9   r:   s           Ú\/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sqlalchemy/orm/bulk_persistence.pyÚ_bulk_insertrF   J   s   € ð ó    c               ó   • g r<   r=   r>   s           rE   rF   rF   X   s   € ð  #rG   Nc               óF  ^ ^• T R                   nUR                  R                  (       a  [        S5      eU(       a€  [        (       a  [        [        [        [              U5      nU(       a4  U V	s/ s H  o™U	R                  4PM     n
n	U
 V	Vs/ s H  u  p›UPM	     nn	nO…U V	s/ s H  o™R                  PM     nn	Oi[        (       a$  [        [        [        [        [        4      U5      nU(       a  [        U5      nOU Vs/ s H  n[        U5      PM     nn[        T U5        UR                  U5      mS nUR                   R#                  5        VVs/ s H  u  pïUT R$                  ;   d  M  Xï4PM     nnnU(       a  SnO['        U5      S:”  a  SnOSnU Hß  u  nnUb@  UR)                  5        Vs/ s H$  nUR*                  US   ;   d  M  UR*                  PM&     snOSnUU 4S j[,        R.                  " UUU 4S jU 5       SUUUS	9 5       n[,        R0                  " US UUUUUUS
9nUc  Mš  UR2                  (       a  Uc  UnM²  UR4                  (       d  MÅ  U(       d   eUR7                  U5      nMá     U(       ak  U(       ad  T R8                  nT R:                   Vs/ s H  nUR*                  PM     nnW
 H,  u  p›U[=        U Vs/ s H  nUU   PM
     sn5      S 4U	l        M.     Ub  Uc   eU$ g s  sn	f s  snn	f s  sn	f 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()Tr   Fr   r=   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r<   r=   )Ú.0ÚstateÚ
state_dictÚparamsÚmpÚconnÚvalue_paramsÚhas_all_pksÚhas_all_defaultsÚ
connectionr?   s            €€rE   Ú	<genexpr>Ú_bulk_insert.<locals>.<genexpr>À   sQ   øé € ð 
ò(ñ	ØØØØØØØØ ð# ØØØØØØØ õ	ò&ùs   ƒ #c              3  ó0   >#   • U  H  nS UTT4v •  M     g 7fr<   r=   ©rK   ÚmappingrT   r?   s     €€rE   rU   rV   Ö   s   øé € ÐMÂH¸�$˜ ¨Õ4ÂHùs   ƒ)ÚbulkrC   rD   Úinclude_bulk_keys)Úbookkeepingr9   r:   )Úbase_mapperÚsessionÚconnection_callableÚNotImplementedErrorr
   r   r   r3   r7   Údictr   Ústrr   ÚlistÚ_expand_compositesrT   Ú_sorted_tablesÚitemsÚ_pks_by_tableÚlenÚ_get_embedded_bindparamsÚkeyr   Ú_collect_insert_commandsÚ_emit_insert_statementsÚ
_returningÚreturns_rowsÚsplice_horizontallyÚ_identity_classÚ_identity_key_propsÚtuple)r?   r@   rA   rB   rC   rD   r9   r:   r]   rL   ÚstatesÚdict_ÚmÚreturn_resultÚtablerO   Úmappers_to_runr\   Úsuper_mapperÚbÚextra_bp_namesÚrecordsr   Úidentity_clsÚpÚidentity_propsrj   rT   s   `                          @rE   rF   rF   f   s  ù€ ð ×$Ñ$€Kà×"Ñ"×6×6Ü!ð-ó
ð 	
ö
 ßŠ=ÜœH¤]´2Ñ%6Ñ7¸ÓBˆHæá7?Ó@²x¨e˜eŸj™jÓ)±xˆFÐ@Ù4:Ô;²F¡. 5›±FˆHÑ;ˆHá08Ó9² uŸ
œ
±ˆHÐ9ˆHçŠ=ÜœH¤T¬#¬s¨(¡^Ñ4°hÓ?ˆHæô ˜H“~‰Hñ *2Ó2ª Aœ˜Qž©ˆHÐ2Ü˜6 8Ô,à$×/Ñ/°Ó<€Jà8<€Mð %×3Ñ3×9Ñ9Ô;ôâ;‰IˆEØ�F×(Ñ(Ñ(ó 	ˆ‹Ù;ð ñ ö à‰Ü	ˆ^Ó	˜qÓ	 ð ‰àˆã-Ñˆˆ|ð #Ñ.ð -×EÑEÔGóâG�AØ—5‘5˜H Q™KÑ'ó �—”ÙGòð ð 	õ
ô( ×5Ò5ØÝMÁHÓMØØ +Ø)Ø"0òó)
ˆô< ×4Ò4ØØØØØØ#Ø 3Ø/ñ	
ˆð Ó*Ø&×1×1°]Ñ5JØ &’Ø×$×$Ñ$Þ"Ð"�{Ø -× AÑ AÀ&Ó I’ñ  .öB ž8Ø×-Ñ-ˆØ)/×)CÒ)CÓDÒ)C A˜!Ÿ%œ%Ñ)CˆÐDÛ"‰LˆEàÜ©^Ó<ª^ c�u˜S”z©^Ñ<Ó=ØðˆEŽIñ #ð Ñ&ØÑ(Ð(Ð(ØÐð 'ùòu AùÛ;ùâ9ùò( 3ùóùò4ùòt Eùò =s<   Á0K9ÂK>Â$LÄL	ÅLÅ/LÆ4LÇLÊ$LËLT)Úuse_orm_update_stmtÚenable_check_rowcountc               ó   • g r<   r=   ©r?   r@   rA   rB   Úupdate_changed_onlyr€   r�   s          rE   Ú_bulk_updater…   þ   s   € ð rG   c               ó   • g r<   r=   rƒ   s          rE   r…   r…     s   € ð rG   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  o˜" T U	5      PM     nn	OCU V	s/ s H  o™R
                  PM     nn	O'U V
s/ s H  n
[        U
5      PM     nn
[        T U5        UR                  R                  (       a  [        S5      eUR                  U5      mUb@  UR                  5        Vs/ s H$  nUR                  US   ;   d  M  UR                  PM&     snOSnUR                  R                  5        Hl  u  pÞT R                  U5      (       a  UT R                  ;  a  M-  [         R"                  " S UUU 4S jU 5       SUUS9n[         R$                  " US UUUSUUS	9  Mn     Ub  [&        R(                  " 5       $ g s  sn	f s  sn	f s  sn
f s  snf )
Nc                óœ   >• UR                   R                  5        VVs0 s H  u  p#X!R                  ;   d  UT;   d  M  X#_M      snn$ s  snnf r<   )ra   rf   Úcommitted_state)r?   rL   ÚkÚvÚsearch_keyss       €rE   Ú_changed_dictÚ#_bulk_update.<locals>._changed_dict(  sP   ø€ ð Ÿ
™
×(Ñ(Ô*ô
â*‘�Ø×)Ñ)Ó)¨Q°+Ñ-=ó ˆAŠDÙ*ò
ð 	
ùó 
s
   ŸA¾AzJconnection_callable / per-instance sharding not supported in bulk_update()r   r=   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_proprj   rX   s     €€rE   rU   Ú_bulk_update.<locals>.<genexpr>S  sN   øé € ð ò  (�Gð ØØØð "×2×2ð   × 7Ñ 7× ;Ñ ;Ò<à!õ
ò  (ùs   ƒ>AT)rZ   r€   r[   F)r\   r€   r�   )r]   Ú_primary_key_propkeysr�   rj   Úunionra   rd   r^   r_   r`   rT   ri   re   rf   Úisarg   r   Ú_collect_update_commandsÚ_emit_update_statementsÚ_resultÚnull_result)r?   r@   rA   rB   r„   r€   r�   r]   r�   rL   ru   rz   r{   rw   ry   r|   rT   rŒ   s   `               @@rE   r…   r…     sí  ú€ ð ×$Ñ$€Kà×.Ñ.€KØ××Ø×.Ñ.×2Ñ2Ð3×9Ñ9¸+ÓFˆõ
ö ÞÙBJÓKÂ(¸˜ f¨eÖ4Á(ˆHÐKˆHá08Ó9² uŸ
œ
±ˆHÐ9ˆHá%-Ó.¢X ”D˜–G¡XˆÐ.Ü˜6 8Ô,à×"Ñ"×6×6Ü!ð-ó
ð 	
ð
 %×/Ñ/°Ó<€Jð Ñ*ð )×AÑAÔCó	
âC�Ø�u‰u˜ ™Ñ#ó ˆA�EŒEÙCò	
ð ð ð  +×9Ñ9×?Ñ?ÖAÑˆØ�z‰z˜,×'Ñ'¨5¸×8LÑ8LÓ+LÙä×6Ò6ØØõñ  (óð Ø 3Ø,ñ'
ˆô* 	×+Ò+ØØØØØØØ 3Ø"7ô		
ñ3  BðH Ñ&Ü×"Ò"Ó$Ð$ð 'ùò Lùâ9ùâ.ùò	
s   Á+G"ÂG'Â G,ÄG1Ä*G1c                ó  • U R                   nU(       d  g [        UR                  5       5      nU Vs0 s H  nXBU   R                  5       _M     nnU H%  nUR	                  U5       H  nXT   " U5        M     M'     g s  snf r<   )Ú
compositesÚsetÚkeysÚ)_populate_composite_bulk_save_mappings_fnÚintersection)r?   r@   Úcomposite_attrsÚcomposite_keysrj   Ú
populatorsrY   s          rE   rd   rd   t  s‰   € Ø×'Ñ'€OÞØä˜×-Ñ-Ó/Ó0€Nñ "óâ!ˆCð 	˜SÑ!×KÑKÓMÒMÙ!ð ð ó ˆØ!×.Ñ.¨wÖ7ˆCØŠO˜GÖ$ó 8ò ùò	s   ²A=c                  ó¦   • \ rS rSr% SrSrS\S'   \S 5       r\S 5       r	\S 5       r
\S	 5       r\S
 5       r\S 5       rSS.S jr\S 5       rSrg)ÚORMDMLStateiƒ  TNz&Optional[ORMFromStatementCompileState]Úfrom_statement_ctxc           	   #  ó8  #   • [         R                  nU GH{  u  pg[        R                  " [        R
                  U5      n[        U[        5      (       a¤  [        X[        S9nU[        L aj  [        R                  " [        R
                  U5      U(       a8  [        R                  " [        R                  U[        R                  " 5       SS9OU4v •  MÁ  U" UUR                  U5      U5       S h  v•N   Mä  SUR                  ;   aB  UR                  n	[        U	S   U	S   5      n
U" UU
R                  U5      U5       S h  v•N   GM6  UU(       d  UO7[        R                  " [        R                  U[        R                  " 5       SS94v •  GM~     g  N£ NT7f)N)ÚdefaultT)Útype_Úis_crudÚentity_namespaceÚ	proxy_key)r(   Ú_get_crud_kv_pairsr   Úexpectr    ÚDMLColumnRoleÚ
isinstancerb   r#   r   ÚExpressionElementRoler"   ÚNullTypeÚ_bulk_update_tuplesÚ_annotations)Úclsr?   Ú	statementÚkv_iteratorÚneeds_to_be_cacheableÚcore_get_crud_kv_pairsrŠ   r‹   ÚdescÚk_annoÚattrs              rE   Ú_get_orm_crud_kv_pairsÚ"ORMDMLState._get_orm_crud_kv_pairs‡  s{  é € ô "0×!BÑ!BÐä‰DˆAÜ× Ò ¤×!4Ñ!4°aÓ8ˆAä˜!œS×!Ñ!Ü,¨VÄÑI�Øœ8Ò#ä!×(Ò(¬×)<Ñ)<¸aÓ@ö  5ô &×,Ò,Ü %× ;Ñ ;Ø !Ü&.×&7Ò&7Ó&9Ø(,ò	ð "#ðô ñ  6Ø!Ø×0Ñ0°Ó3Ø-ó ÷ ò ð
 $ q§~¡~Ó5ØŸ™�Ü,ØÐ-Ñ.°°{Ñ0Có�ñ 2ØØ×,Ñ,¨QÓ/Ø)ó÷ ó ð ö  5ñ ä&×-Ò-Ü!×7Ñ7ØÜ"*×"3Ò"3Ó"5Ø$(ñ	ðõ òI  ñ(ñùs&   ‚C0FÃ2FÃ3AFÅFÅAFÆFc                ó¦   • UR                   R                  R                  S5      nU(       a#  UR                  (       a  UUR                  S   La  g U$ )NÚplugin_subject)rw   Ú_propagate_attrsÚgetr?   )r³   r´   r¾   s      rE   Ú_get_dml_plugin_subjectÚ#ORMDMLState._get_dml_plugin_subject¿  sN   € à"Ÿ™×9Ñ9×=Ñ=Ð>NÓOˆö Ø!×(×(ØØ×-Ñ-Ð.>Ñ?ò@ð ØÐrG   c                óò   • U R                  U5      nU(       d  [        R                  " X5      $ U Vs/ s H7  n[        U R	                  UR
                  XR                  5       S5      5      PM9     sn$ s  snf )NF)rÁ   r(   Ú_get_multi_crud_kv_pairsra   r»   r?   rf   )r³   r´   rµ   r¾   Ú
value_dicts        rE   rÄ   Ú$ORMDMLState._get_multi_crud_kv_pairsÌ  s   € à×4Ñ4°YÓ?ˆæÜ!×:Ò:Øóð ñ *ó
ò *�
ô Ø×*Ñ*Ø"×)Ñ)¨9×6FÑ6FÓ6HÈ%óöñ
 *ñ
ð 	
ùò 
s   ³>A4c                óÊ   • U(       d   S5       eU R                  U5      nU(       d  [        R                  " XU5      $ [        U R	                  UR
                  UUU5      5      $ )Nz0no test coverage for needs_to_be_cacheable=False)rÁ   r(   r«   rc   r»   r?   )r³   r´   rµ   r¶   r¾   s        rE   r«   ÚORMDMLState._get_crud_kv_pairsÞ  st   € ö "ð	>à=ó	>Ø!ð ×4Ñ4°YÓ?ˆæÜ!×4Ò4ØÐ(=óð ô Ø×&Ñ&Ø×%Ñ%ØØØ%ó	ó
ð 	
rG   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)ÚnameÚtypeÚexprÚentityrw   )	rw   r²   r?   Úis_aliased_classrË   Úclass_Ú__name__rÎ   Úlocal_table)r³   r´   Úext_infor?   Ú_label_names        rE   Úget_entity_descriptionÚ"ORMDMLState.get_entity_descriptionó  sm   € à—?‘?×/Ñ/°Ñ?ˆØ—‘ˆØ×$×$Ø"Ÿ-™-‰Kà Ÿ-™-×0Ñ0ˆKð  Ø—M‘MØ—O‘OØ—o‘oØ×'Ñ'ñ
ð 	
rG   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À   )Úcs    rE   Ú_ent_for_colÚCORMDMLState.get_returning_column_descriptions.<locals>._ent_for_col  s   € Ø—>‘>×%Ñ% n°dÓ;Ð;rG   c                ó‚   • Uc  U $ U R                   R                  SS 5      nU(       d  U $ [        UR                  X 5      $ )Nrª   )r²   rÀ   ÚgetattrrÎ   )rÙ   Úentrª   s      rE   Ú_attr_for_colÚDORMDMLState.get_returning_column_descriptions.<locals>._attr_for_col	  s;   € Ø‰{Ø�ØŸ™×*Ñ*¨;¸Ó=ˆIÞØ�ä˜sŸz™z¨9Ó8Ð8rG   )rË   rÌ   rÍ   ÚaliasedrÎ   )Ú_all_selected_columnsrj   rÌ   rÏ   rÎ   )r³   r´   rÚ   rß   rÙ   rÞ   s         rE   Ú!get_returning_column_descriptionsÚ-ORMDMLState.get_returning_column_descriptions  sˆ   € ò	<ò	9ð$ /8×.MÒ.MóÚ.M¨‘L “OÓ$Ñ.Mòô
ò‘�ð Ÿ™ØŸ™Ù% aÓ-Ø×/Ñ/ØŸ*™*ôñò
ð 	
ùòùó
s   •A4®AA9)Úuse_supplemental_colsc               óJ  • UR                   (       Ga  [        UR                   USS9nUR                  " S0 UR                  D6nUR                  " UR
                  6 nX`l        [        R                  " Xa5      =U l	        nUR                  U5        UR                  5       nSUl         UR                   Vs/ s H	  oˆc  M  UPM     n	nU	(       d  U	R                  UR                  5        U(       a  UR                  " UR                  SU	06nU$ UR                   " U	6 nU$ s  snf )a<  establish 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)rm   r   r:   Ú_execution_optionsÚoptionsÚ_with_optionsÚselect_statementr   Úcreate_for_statementr¤   Ú!setup_dml_returning_compile_stateÚ	_generateÚprimary_columnsÚextendÚprimary_keyrC   Ú	returning)
ÚselfÚcompilerÚorm_level_statementÚdml_level_statementÚ
dml_mapperrå   ÚfsÚfscrÙ   Úcols_to_returns
             rE   Ú_setup_orm_returningÚ ORMDMLState._setup_orm_returning  s,  € ð( ×)×)Ð)ÜØ#×.Ñ.Ø#Ø %ñˆBð
 ×%Ò%ÑOÐ(;×(NÑ(NÑOˆBØ—’Ð0×>Ñ>Ð?ˆBØ$&Ô!ä,×AÒAÀ"ÓOðˆDÔ# cð ×1Ñ1°*Ô=à"5×"?Ñ"?Ó"AÐØ-/ÐÔ*à),×)<Ò)<ÓNÒ)< AŸaÑ)<ˆNÐNö "Ø×%Ñ% j×&<Ñ&<Ô=æ$Ø&9×&IÒ&Ið  ×+Ñ+ð'ð '5ñ'Ð#ð( #Ð"ð	 ':×&CÒ&CØ#ð'Ð#ð #Ð"ùò9 Os   Â6D Ã D c           
     ón  • UR                   nUR                  R                  nUR                  (       a�  UR                  R                  R
                  (       d\  UR                  S[        R                  5      n	[        UR                  UR                  UUUU	UU5      n
[        R                  " Xj5      $ U$ )NÚ_sa_orm_load_options)r   ÚcompiledÚcompile_stater¤   Úcompile_optionsÚ_is_starrÀ   r   Údefault_load_optionsrì   r   Ú	instances)r³   r^   r´   rN   r:   Úbind_argumentsr   Úexecution_contextr  Úload_optionsÚquerycontexts              rE   Ú_return_orm_returningÚ!ORMDMLState._return_orm_returningb  s¢   € ð #ŸN™NÐØ)×2Ñ2×@Ñ@ˆð ×,×,Ø!×4Ñ4×DÑD×M×Mà,×0Ñ0Ø&¬×(IÑ(IóˆLô (Ø×0Ñ0Ø×.Ñ.ØØØØØ!Øó	ˆLô ×$Ò$ VÓ:Ð:àˆMrG   )r¤   rì   )rÑ   Ú
__module__Ú__qualname__Ú__firstlineno__Úis_dml_returningr¤   Ú__annotations__Úclassmethodr»   rÁ   rÄ   r«   rÕ   rã   rü   r
  Ú__static_attributes__r=   rG   rE   r£   r£   ƒ  s¬   ‡ ØÐØAEÐÐ>ÓEàñ5ó ð5ðn ñ
ó ð
ð ñ
ó ð
ð" ñ
ó ð
ð( ñ
ó ð
ð  ñ
ó ð
ðB #õA#ðF ñ ó ó rG   r£   c                  ó  • \ rS rSr " S S\5      r\SSSSS.             SS jj5       r\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 5       r\S 5       r\S 5       rSrg)ÚBulkUDCompileStatei†  c                  ó–   • \ rS rSr% SrS\S'   SrS\S'   SrS\S	'   SrS\S
'   Sr	S\S'   Sr
S\S'   SrS\S'   \rSrSrSrSrS\S'   Srg)Ú)BulkUDCompileState.default_update_optionsi‡  Úautor+   Ú_dml_strategyr-   Ú_synchronize_sessionFÚboolÚ_can_use_returningÚ_is_delete_usingÚ_is_update_fromTÚ
_autoflushNúOptional[Mapper[Any]]Ú_subject_mapperÚ_populate_existingr=   )rÑ   r  r  r  r  r  r  r  r  r  r  r   r)   Ú_resolved_valuesÚ_eval_conditionÚ_matched_rowsÚ_identity_tokenr!  r  r=   rG   rE   Údefault_update_optionsr  ‡  sn   ‡ Ø-3ˆÐ*Ó3Ø;AÐÐ8ÓAØ#(Ð˜DÓ(Ø!&Ð˜$Ó&Ø %ˆ˜Ó%Øˆ
�DÓØ15ˆÐ.Ó5Ø%ÐØˆØˆØˆØ#(Ð˜DÖ(rG   r&  F©Úis_multitableÚis_update_fromÚis_delete_usingÚis_executemanyc               ó   • [        5       er<   )r`   )r³   Údialectr?   r(  r)  r*  r+  s          rE   Úcan_use_returningÚ$BulkUDCompileState.can_use_returning•  s   € ô "Ó#Ð#rG   c                óZ  • [         R                  R                  S1 SkUUR                  5      u  nnX%S'    UR                  S   nU(       a   UR
                  US'   USUR
                  0-  nSUR                  R                  ;  a  US	S
0-  nOk[        U[        5      (       d?  UR                  S:X  a  US	S0-  nO>UR                  S:X  a  [        R                  " S5      eOUR                  S:X  a  US	S0-  nUR                  n	U	bH  U	S;  a  [        R                  " S5      eUR                  S:X  a  U	S:X  a  [        R                  " S5      eU(       Gd  UR                   (       a  UR!                  5         UR                  S:X  au  UR                  S:X  a  U R#                  UUUUUU5      nOuUR                  S:X  a  U R%                  UUUUUU5      nONUR                  S:X  a  U R'                  UUUUUU5      nO'UR                  S:X  a  UR                  S:X  a  USS0-  nUR)                  UR                  UR*                  UR,                  UR                  UR.                  S.5      nU[0        R2                  " U5      R5                  SU05      4$ ! [         a     S5       ef = f)NÚ_sa_orm_update_options>   Ú	autoflushÚdml_strategyÚidentity_tokenr)  r*  Úpopulate_existingÚsynchronize_sessionÚclauser¾   r?   r   ú0statement had 'orm' plugin but no plugin_subjectrÊ   r  Ú	core_onlyr  ÚormrZ   úHCan't use "bulk" ORM insert strategy without passing separate parameters)r  ÚevaluateÚfetchFzSValid 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  )r6  r*  r)  r3  r.  )r  r&  Úfrom_execution_optionsré   r¿   r?   ÚKeyErrorrw   r²   r®   rc   r  Úsa_excÚInvalidRequestErrorr  ÚArgumentErrorr  Ú_do_pre_synchronize_autoÚ_do_pre_synchronize_evaluateÚ_do_pre_synchronize_fetchÚ	_annotater  r  r  r   Úimmutabledictr“   )
r³   r^   r´   rN   r:   r  Úis_pre_eventÚupdate_optionsr¾   Úsyncs
             rE   Úorm_pre_session_execÚ'BulkUDCompileState.orm_pre_session_exec¢  sú  € ô ×5Ñ5×LÑLØ$òð Ø×(Ñ(ó
ñ	
ØØð $-�xÑ ð	MØ&×7Ñ7Ð8HÑIˆNö Ø+9×+@Ñ+@�˜xÑ(ØÐ#4°n×6KÑ6KÐ"LÑL�à §¡×!=Ñ!=Ó=Ø˜°Ð<Ñ<‰NÜ˜F¤D×)Ñ)Ø×+Ñ+¨vÓ5Ø ?°EÐ":Ñ:‘Ø×-Ñ-°Ó7Ü×0Ò0ð2óð ð 8ð ×+Ñ+¨vÓ5Ø ?°FÐ";Ñ;�à×2Ñ2ˆØÑØÐ?Ó?Ü×*Ò*ð=óð ð ×+Ñ+¨vÓ5¸$À'»/Ü×0Ò0ðLóð ÷
 Ø×(×(Ø×"Ñ"Ô$à×+Ñ+¨uÓ4Ø!×6Ñ6¸&Ó@Ø%(×%AÑ%AØØ!ØØ)Ø&Ø&ó&‘Nð $×8Ñ8¸JÓFØ%(×%EÑ%EØØ!ØØ)Ø&Ø&ó&‘Nð $×8Ñ8¸GÓCØ%(×%BÑ%BØØ!ØØ)Ø&Ø&ó&�Nøð  ×-Ñ-°Ó7Ø!×6Ñ6¸&Ó@Ø"Ð'=¸zÐ&JÑJ�Nð "×+Ñ+à+9×+NÑ+NØ'5×'FÑ'FØ&4×&DÑ&DØ$2×$@Ñ$@Ø)7×)JÑ)JñóˆIð Ü×ÒÐ0Ó1×7Ñ7Ø)¨>Ð:óð
ð 	
øôi ó 	MØLÐLÓL�5ð	Mús   ·J ÊJ*c                óL  • US   nUR                   S:X  aF  UR                  S:X  a  U R                  XXg5        OWUR                  S:X  a  U R                  XXg5        O4UR                   S:X  a$  UR                  S:X  a  U R	                  XXg5        U$ U R                  UUUUUU5      $ )Nr1  r:  r<  r=  rZ   )r  r  Ú_do_post_synchronize_evaluateÚ_do_post_synchronize_fetchÚ"_do_post_synchronize_bulk_evaluater
  )r³   r^   r´   rN   r:   r  r   rI  s           rE   Úorm_setup_cursor_resultÚ*BulkUDCompileState.orm_setup_cursor_result  s¿   € ð$ +Ð+CÑDˆØ×'Ñ'¨5Ó0Ø×2Ñ2°jÓ@Ø×1Ñ1Ø¨õð  ×4Ñ4¸Ó?Ø×.Ñ.Ø¨ôøð ×)Ñ)¨VÓ3Ø×2Ñ2°jÓ@Ø×6Ñ6Ø Vôð ˆMà×(Ñ(ØØØØØØó
ð 	
rG   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_aliasesrÎ   Ú_resolve_where_criteria)rK   ÚaerÓ   s     €rE   rU   Ú@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)rK   ÚcritÚadapters     €rE   rU   rY  h  s   øé € ÐOÂ;¸4 × 0Ñ 0°× 6Ð 6Â;ùs   ƒ!)rÏ   Ú_adapterr?   rr   Ú_single_table_criterion)r³   Úglobal_attributesrÓ   Úreturn_critr]  s     ` @rE   Ú_adjust_for_extra_criteriaÚ-BulkUDCompileState._adjust_for_extra_criteriaG  s­   ù€ ð ˆà'/×'@×'@�(×#Ò#Àdˆð )Ø�O‰Oð
ð óð œ5ô !à+Ø1°8·?±?ÐCòó!ó ñ ˆKð �?‰?×2Ñ2Ñ>Ø˜HŸO™O×CÑCÐEÑEˆKæÜÔOÁ;ÓOÓOˆKàÐrG   c                ó,  •  UR                   UR                  R                   La&  UR                  UR                   R                  5      nOUR                  UR                  5      n U Vs/ s H
  oT" U5      PM     sn$ ! [         a    / s $ f = fs  snf )a‚  return 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.

)rÒ   r]   Ú_tuple_getterrò   r?  )r³   r   r?   ÚrowsÚpk_keysÚrows         rE   Ú_interpret_returning_rowsÚ,BulkUDCompileState._interpret_returning_rowsl  sŒ   € ð$	Ø×!Ñ!¨×);Ñ);×)GÑ)GÒGð
 !×.Ñ.¨v×/AÑ/A×/MÑ/MÓN‘à ×.Ñ.¨v×/AÑ/AÓB‘ñ )-Ó-ª �˜–©Ñ-Ð-øô ó 	ð ŠIð		üò .s   ‚AA? ÁA? Á+BÁ?BÂBc                ó2  • UR                   nUR                  nU Vs/ s HT  nUR                  R                  U5      (       d  M%  UR                  (       a  M8  UR                  5       XUR                  4PMV     nnUR                  nUb-  U VVV	s/ s H  u  p…n	UR                  U:X  d  M  X…U	4PM     nnnn	/ n
U HM  u  p…n	U" U5      nUSL d  U[        R                  L d  M(  U
R                  UUU	U[        R                  L 45        MO     U
$ s  snf s  sn	nnf ©NT)r   r#  r?   r”   ÚexpiredÚobjra   r%  r4  r   Ú_EXPIRED_OBJECTÚappend)r³   rI  rs   r?   Úeval_conditionrL   Úraw_datar4  rn  rt   r   Úevaled_conditions               rE   Ú _get_matched_objects_on_criteriaÚ3BulkUDCompileState._get_matched_objects_on_criteria�  s+  € à×/Ñ/ˆØ'×7Ñ7ˆñ  ó
â�Ø�|‰|×Ñ ×'ó -à05·µó -ˆU�Y‰Y‹[˜%§¡Ó,Ùð 	ð 
ð (×7Ñ7ˆØÑ%ñ *2õâ)1Ñ%�C Ø×'Ñ'¨>Ñ9ó $�˜UÓ#Ù)1ð ò ð ˆÛ!)ÑˆC˜Ù-¨cÓ2Ðð
 ! DÒ(Ø#¤y×'@Ñ'@Ô@à—‘àØØØ(¬I×,EÑ,EÐEð	öñ "*ð" ˆùòA
ùôs   �$DÁDÁ DÂDÂ*Dc                ó„  • UR                   nUR                  n[        R                  " U5      nSnUR                  (       a  XbR                  -  n0 nUR
                   H'  nUR                  (       d  M  UR                  U5        M)     U(       a  X`R                  Xs5      -  nU(       a  UR                  " U6 n	U	$ S n
U
n	U	$ )Nr=   c                ó   • grl  r=   )rn  s    rE   r#  ÚJBulkUDCompileState._eval_condition_from_statement.<locals>._eval_conditionÌ  s   € ØrG   )
r   rÐ   r   Ú_EvaluatorCompilerÚ_where_criteriarë   Ú_is_criteria_optionÚget_global_criteriarb  Úprocess)r³   rI  r´   r?   Ú
target_clsÚevaluator_compilerr\  r`  Úoptrq  r#  s              rE   Ú_eval_condition_from_statementÚ1BulkUDCompileState._eval_condition_from_statement¶  sº   € à×/Ñ/ˆØ—]‘]ˆ
ä&×9Ò9¸*ÓEÐØˆØ×$×$Ø×-Ñ-Ñ-ˆDàÐØ×*Ô*ˆCØ×&×&Ñ&Ø×'Ñ'Ð(9Ö:ñ +ö Ø×2Ñ2Ð3DÓMÑMˆDæØ/×7Ò7¸Ð>ˆNð Ðòð -ˆNàÐrG   c                ó¤   •  U R                  Xb5      nUUSS.-   $ ! [        R                   a     Of = fUSS0-  nU R                  UUUUUU5      $ )aŒ  setup 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<  )r#  r  r  r=  )r�  r   ÚUnevaluatableErrorrE  )r³   r^   r´   rN   r:   r  rI  rq  s           rE   rC  Ú+BulkUDCompileState._do_pre_synchronize_autoÓ  s…   € ð2	Ø ×?Ñ?ØóˆNð "Ø#1Ø(2ñ%ñ ð øô ×+Ñ+ó 	Ùð	úð 	Ð1°7Ð;Ñ;ˆØ×,Ñ,ØØØØØØó
ð 	
s   ‚ ›2±2c                ó    •  U R                  Xb5      nUSU0-   $ ! [        R                   a  n[        R                  " SU-  5      UeS nAff = f)Nz{Could not evaluate current criteria in Python: "%s". Specify 'fetch' or False for the synchronize_session execution option.r#  )r�  r   r„  r@  rA  )	r³   r^   r´   rN   r:   r  rI  rq  Úerrs	            rE   rD  Ú/BulkUDCompileState._do_pre_synchronize_evaluate  sp   € ð
	Ø ×?Ñ?ØóˆNð Ø˜~ð!
ñ 
ð 	
øô ×+Ñ+ó 	Ü×,Ò,ð8à:=ñ>óð ð	ûð	ús   ‚ šA®AÁAc                óà   • UR                   (       a  / $ UR                  (       a  [        UR                  5      $ UR                  (       a#  [        UR                  R	                  5       5      $ / $ r<   )Ú_multi_valuesÚ_ordered_valuesrc   Ú_valuesrf   )r³   r?   r´   s      rE   Ú_get_resolved_valuesÚ'BulkUDCompileState._get_resolved_values  sR   € à×"×"ØˆIØ×&×&Ü˜	×1Ñ1Ó2Ð2Ø××Ü˜	×)Ñ)×/Ñ/Ó1Ó2Ð2àˆIrG   c                ó.  • / nU Hq  u  pEU(       aN  [        U[        R                  5      (       a/   UR                  U   nUR	                  UR
                  U45        MZ  [        R                  " SU-  5      e   U$ ! [        R                   a     MŽ  f = f)NzCAttribute name not found, can't be synchronized back to objects: %r)
r®   r   ÚColumnElementÚ_columntopropertyrp  rj   Úorm_excÚUnmappedColumnErrorr@  rA  )r³   r?   Úresolved_valuesÚvaluesrŠ   r‹   rº   s          rE   Ú_resolved_keys_as_propnamesÚ.BulkUDCompileState._resolved_keys_as_propnames(  s”   € àˆÛ#‰DˆAÞœ* Q¬
×(@Ñ(@×AÑAð1Ø!×3Ñ3°AÑ6�Dð —M‘M 4§8¡8¨Q -Ö0ä×0Ò0ð7Ø9:ñ;óð ñ $ð ˆøô ×2Ñ2ó Úðús   ±A<Á<BÂBc                ó@  ^ ^^^• TR                   m[        TR                  TR                  4-   6 R	                  T5      R
                  " UR                  6 nUR                  Ul        S mSUU UU4S jjnUR                  UUUUUS9n	U	R                  5       n
TU
TS.-   $ )Nc                ó   >• U R                   R                  " S0 U R                  D6nTR                  UR                  TTR
                  TR                  U R                  S9nTb  TU:w  a  [        R                  " S5      eO0U R                  (       a  U(       d  [        R                  " S5      eUmU(       a  [        R                  " 5       $ g )N)r)  r*  r+  zjFor synchronize_session='fetch', can't mix multiple backends where some support RETURNING and others don'tz‚For synchronize_session='fetch', can't use multiple parameter sets in ORM mode, which this backend does not support with RETURNINGr=   )r^   Úget_bindr  r.  r-  r  r  r+  r@  rA  r—   r˜   )Úorm_contextÚbindÚper_bind_resultr.  r³   r?   rI  s      €€€€rE   Úskip_for_returningÚHBulkUDCompileState._do_pre_synchronize_fetch.<locals>.skip_for_returning\  sÍ   ø€ Ø×&Ñ&×/Ò/ÑM°+×2LÑ2LÑMˆDð "×3Ñ3Ø—‘ØØ-×=Ñ=Ø .× ?Ñ ?Ø*×9Ñ9ð 4ð ˆOð !Ñ,Ø$¨Ó7Ü ×4Ò4ð óð ð 8ð ×+×+¶OÜ×0Ò0ð-óð ð %4Ð!æÜ×*Ò*Ó,Ð,àrG   )r:   r  Ú
_add_event)r$  r  )r›  r0   Úreturnr   )
r   r!   rò   Úselect_identity_tokenÚselect_fromrê   rë   rz  ÚexecuteÚfetchall)r³   r^   r´   rN   r:   r  rI  Úselect_stmtrž  r   Úmatched_rowsr.  r?   s   `     `    @@rE   rE  Ú,BulkUDCompileState._do_pre_synchronize_fetch:  sÂ   û€ ð  ×/Ñ/ˆô �V×'Ñ'¨6×+GÑ+GÐ*IÑIÐKß‰[˜Ó ß‰Wðà×-Ñ-ð/ð 	ð
 '0×&?Ñ&?ˆÔ#ð !Ð÷	ò 	ðB —‘ØØØ/Ø)Ø)ð !ð 
ˆð —‘Ó(ˆàØ)Ø"3ñ!
ñ 
ð 	
rG   r=   N©r-  r   r?   úMapper[Any]r(  r  r)  r  r*  r  r+  r  r¡  r  )rÑ   r  r  r  r%   r&  r  r.  rK  rQ  rb  ri  rt  r�  rC  rD  r�  r–  rE  r  r=   rG   rE   r  r  †  sZ  † ô) ô )ð ð $Ø$Ø %Ø$ñ
$àð
$ð ð
$ð
 ð
$ð ð
$ð ð
$ð ð
$ð 
ô
$ó ð
$ð ñv
ó ðv
ðp ñ)
ó ð)
ðV ñ"ó ð"ðH ñ .ó ð .ðD ñ$ó ð$ðL ñó ðð8 ñ-
ó ð-
ð^ ñ
ó ð
ð2 ñó ðð ñó ðð" ñN
ó óN
rG   r  r:  Úinsertc                  ó¸   ^ • \ rS rSr%  " S S\5      rSrS\S'   \S 5       r	\              SS j5       r
\SU 4S	 jj5       r\S
 5       rS rS rSrU =r$ )ÚBulkORMInsertiŒ  c                  ój   • \ rS rSr% SrS\S'   SrS\S'   SrS\S'   S	rS
\S'   Sr	S\S'   Sr
S\S'   Srg	)Ú$BulkORMInsert.default_insert_optionsiŽ  r  r+   r  Fr  Ú_render_nullsÚ_return_defaultsNr  r   Tr  r!  r=   )rÑ   r  r  r  r  r  r°  r±  r   r  r!  r  r=   rG   rE   Údefault_insert_optionsr¯  Ž  sB   ‡ Ø-3ˆÐ*Ó3Ø#ˆ�tÓ#Ø!&Ð˜$Ó&Ø15ˆÐ.Ó5Øˆ
�DÓØ#(Ð˜DÖ(rG   r²  NzOptional[FromStatement]rì   c                ó(  • [         R                  R                  S1 SkUUR                  5      u  nnX%S'    UR                  S   nU(       a   UR
                  US'   USUR
                  0-  nU(       d?  UR                  S:X  a  US	S
0-  nO>UR                  S:X  a  [        R                  " S5      eOUR                  S:X  a  US	S0-  nUR                  S:w  a7  U(       d  [        R                  nOUR                  [        R                  5      nU(       d!  UR                  (       a  UR                  5         UR                  SUR                  05      nU[        R                   " U5      R                  SU05      4$ ! [         a     S5       ef = f)NÚ_sa_orm_insert_options>   r2  r3  rD   r5  r7  r¾   r?   r   r8  r  r  r:  rZ   r;  Úrawr3  )r­  r²  r>  ré   r¿   r?   r?  r  r@  rA  r   Ú_orm_load_exec_optionsr“   r  rF  r   rG  )	r³   r^   r´   rN   r:   r  rH  Úinsert_optionsr¾   s	            rE   rK  Ú"BulkORMInsert.orm_pre_session_exec˜  s«  € ô ×0Ñ0×GÑGØ$ÚNØØ×(Ñ(ó	
ñ	
ØØð $-�xÑ ð	MØ&×7Ñ7Ð8HÑIˆNö Ø+9×+@Ñ+@�˜xÑ(ØÐ#4°n×6KÑ6KÐ"LÑL�æØ×+Ñ+¨vÓ5Ø ?°EÐ":Ñ:‘Ø×-Ñ-°Ó7Ü×0Ò0ð2óð ð 8ð ×+Ñ+¨vÓ5Ø ?°FÐ";Ñ;�à×'Ñ'¨5Ó0ö %Ü$+×$BÑ$BÑ!à$5×$;Ñ$;Ü×2Ñ2ó%Ð!ö  × 9× 9Ø×ÑÔ à×'Ñ'Ø˜^×9Ñ9Ð:ó
ˆ	ð
 Ü×ÒÐ0Ó1×7Ñ7Ø)¨>Ð:óð
ð 	
øôO ó 	MØLÐLÓL�5ð	Mús   ·E? Å?Fc                ó®  • UR                  SU R                  5      nUR                  S;  a  [        R                  " S5      eUR                  S:X  a  UR                  X#=(       d    0 US9nU$ UR                  S:X  a¨  UR                  n	UR                  b*  U	R                  (       a  [        R                  " SU	 35      eU	c   eUR                  c   e[        U	[        S[        U[        5      (       a  U/OU5      UR                  S	UR                  UR                   UUS
9nO4UR                  S:X  a  UR                  X#=(       d    0 US9nO
[#        5       e[%        UR&                  5      (       d  U$ UR(                  (       a:  UR                  S[*        R,                  5      n
U
SS0-  n
UR/                  SU
05      nU R1                  UUUUUU5      $ )Nr´  )rµ  rZ   r:  r  zHValid strategies for ORM insert strategy are 'raw', 'orm', 'bulk', 'autorµ  )r:   rZ   z`bulk INSERT with a 'post values' clause (typically upsert) not supported for multi-table mapper úIterable[Dict[str, Any]]F)rB   rC   rD   r9   r:   r:  rÿ   r!  T)rÀ   r²  r  r@  rB  r¤  r   Ú_post_values_clauseÚ_multiple_persistence_tablesrA  Ú_transactionrF   r   r®   ra   r±  r°  ÚAssertionErrorr  rm   r!  r   r  r“   r
  )r³   r^   r´   rN   r:   r  rP   r·  r   r?   r  s              rE   Úorm_execute_statementÚ#BulkORMInsert.orm_execute_statementÜ  s	  € ð +×.Ñ.Ø$ c×&@Ñ&@ó
ˆð ×'Ñ'ð 0
ó 
ô ×&Ò&ð2óð ð ×'Ñ'¨5Ó0Ø—\‘\ØŸ< RÐ;Lð "ð ˆFð ˆMà×'Ñ'¨6Ó1Ø#×3Ñ3ˆFð ×-Ñ-Ñ9Ø×7×7ä×0Ò0ðà$˜Xð'óð ð Ñ%Ð%Ð%Ø×'Ñ'Ñ3Ð3Ð3Ü!ØÜØ.Ü *¨6´4× 8Ñ 8�V‘H¸fóð ×$Ñ$ØØ .× ?Ñ ?Ø+×9Ñ9Ø$-Ø"3ñ‰Fð ×)Ñ)¨UÓ2Ø—\‘\ØŸ< RÐ;Lð "ð ‰Fô !Ó"Ð"ä�I×(Ñ(×)Ñ)ØˆMà×,×,Ø,×0Ñ0Ø&¬×(IÑ(IóˆLð Ð1°4Ð8Ñ8ˆLØ 1× 7Ñ 7Ø'¨Ð6ó!Ðð ×(Ñ(ØØØØØØó
ð 	
rG   c                ó<  >• [        [        [        TU ]  " X40 UD65      nUb  UR                  (       + nOSnU(       d  U$ UR
                  S   nUR                  R                  SS5      nUS:X  a  UR                  U5        U$ US:X  a  UR                  X&5        U$ )NTr¾   r3  rµ  rZ   r:  )
r   r­  Úsuperrí   Ústackr¿   r²   rÀ   Ú_setup_for_bulk_insertÚ_setup_for_orm_insert)	r³   r´   rõ   Úkwrô   Útoplevelr?   r3  Ú	__class__s	           €rE   rí   Ú"BulkORMInsert.create_for_statement5  s¦   ø€ äÜÜ‰GÒ(¨ÑCÀÑCó
ˆð
 ÑØ#Ÿ>™>Ô)‰HàˆHÞØˆKà×+Ñ+Ð,<Ñ=ˆØ ×-Ñ-×1Ñ1°.À%ÓHˆØ˜6Ó!Ø×'Ñ'¨Ô1ð ˆð ˜UÓ"Ø×&Ñ& xÔ8àˆrG   c                ó–   ^• U4S jUR                  5        5        VVVs0 s H  u  p4nUb  UR                  OUU_M     snnn$ s  snnnf )Nc              3  ób   >#   • U  H$  u  pTR                   R                  U5      X4v •  M&     g 7fr<   )rÙ   rÀ   )rK   rŠ   r‹   r?   s      €rE   rU   Ú;BulkORMInsert._resolved_keys_as_col_keys.<locals>.<genexpr>P  s(   øé € ð Ú4O©D¨A�—‘—‘˜a“ !Õ'Ò4Oùs   ƒ,/)rf   rj   )r³   r?   Úresolved_value_dictÚcolrŠ   r‹   s    `    rE   Ú_resolved_keys_as_col_keysÚ(BulkORMInsert._resolved_keys_as_col_keysL  sR   ø€ ôØ4G×4MÑ4MÔ4Oôõ
ò‘	�˜ð ‘ˆC�GŠG¨A¨qÒ0ñó
ð 	
ùô 
s    Ac                ó€   • [        [        R                  U R                  5      =p4U R	                  UUUUSS9nX0l        g )NF©rø   rå   )r   r   ÚInsertr´   rü   )rô   rõ   r?   r´   rö   s        rE   rÅ  Ú#BulkORMInsert._setup_for_orm_insertU  sD   € Ü*.¬s¯z©z¸4¿>¹>Ó*JÐJˆ	à×-Ñ-ØØØØØ"'ð .ð 
ˆ	ð #�rG   c                ó  • [        [        R                  U R                  5      =p#UR                  nUS   US   peUR                  5       nXRl        U R                  (       aE  U R                  R                  5        VVs0 s H  u  pxUR                  UL d  M  Xx_M     snnU l        U R                  UUUUSS9nU R                  b;  U R                  R                  R                  (       a  [        R                  " S5      eX l        gs  snnf )z±establish 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_mapperTrÒ  NzˆCan't use RETURNING * with bulk ORM INSERT.  Please use a different INSERT form, such as INSERT..VALUES or INSERT with a Core Connection)r   r   rÓ  r´   r²   Ú_clonerw   Ú_dict_parametersrf   rü   r¤   r  r  r@  ÚCompileError)	rô   rõ   r´   rö   ÚanÚemit_insert_tableÚemit_insert_mapperrÎ  Úvals	            rE   rÄ  Ú$BulkORMInsert._setup_for_bulk_inserta  s  € ô +/¬s¯z©z¸4¿>¹>Ó*JÐJˆ	Ø×#Ñ#ˆð Ð#Ñ$ØÐ$Ñ%ð .ð
 ×$Ñ$Ó&ˆ	à+ŒØ× × ð !%× 5Ñ 5× ;Ñ ;Ô =ô%â =‘H�CØ—9‘9Ð 1Ð1ó �’Ù =ò%ˆDÔ!ð ×-Ñ-ØØØØ)Ø"&ð .ð 
ˆ	ð ×#Ñ#Ñ/Ø×'Ñ'×7Ñ7×@×@ä×%Ò%ð3óð ð #�ùó1%s   Á?D	ÂD	)rÙ  r´   )r^   r1   r´   z
dml.InsertrN   r6   r:   r,   r  r/   rP   r4   r¡  ú_result.Result)r¡  r­  )rÑ   r  r  r  r%   r²  rì   r  r  rK  r¿  rí   rÏ  rÅ  rÄ  r  Ú__classcell__©rÈ  s   @rE   r­  r­  Œ  sË   ø‡ ô) ô )ð 15ÐÐ-Ó4àñA
ó ðA
ðF ðV
àðV
ð ðV
ð &ð	V
ð
 6ðV
ð 'ðV
ð ðV
ð 
óV
ó ðV
ðp öó ðð, ñ
ó ð
ò
#÷,#ð ,#rG   r­  Úupdatec                  óê   ^ • \ rS rSr\S 5       rS rS r\              SU 4S jj5       r\SSSSS.             SS jj5       r	\S	 5       r
\S
 5       r\S 5       r\S 5       rSrU =r$ )ÚBulkORMUpdatei�  c                ó~  • U R                  U 5      nUR                  R                  SS5      nUR                  (       + nU(       a  US:X  a  UR	                  X5        U$ US:X  d   US:X  a4  SUR
                  R                  ;  a  [        R                  " XAU40 UD6  U$ U(       a  US;   a  UR                  X5        U$ )Nr3  ÚunspecifiedrZ   r9  rÊ   )r:  rç  )	Ú__new__r²   rÀ   rÃ  Ú_setup_for_bulk_updaterw   r(   Ú__init__Ú_setup_for_orm_update)r³   r´   rõ   rÆ  rô   r3  rÇ  s          rE   rí   Ú"BulkORMUpdate.create_for_statement’  s¸   € à�{‰{˜3Óˆà ×-Ñ-×1Ñ1Ø˜Mó
ˆð  —~‘~Ô%ˆæ˜¨Ó.Ø×'Ñ'¨	Ô<ð ˆð ˜KÓ'Ø˜}Ó,Ø i§o¡o×&BÑ&BÓBä×#Ò# D°XÑDÀÒDð ˆö ˜\Ð-CÓCØ×&Ñ& yÔ;àˆrG   c                óV  • UnUR                   (       + nUR                  R                  S   nUR                  =U l        nU R	                  Xq5      U l        U R                  UUUUS9  UR                  (       a  [        U R
                  5      U l        UR                  5       nUR                  R                  S   UL a  UR                  Ul        UR                  (       a  U R
                  Ul        O"UR                  (       a  U R
                  Ul        U R                  U R                  U5      n	U	(       a  UR                  " U	6 n[        R                   " XU40 UD6  Sn
U(       d  S nOUR                  R#                  SS 5      nUR                  R#                  SS 5      nUSLa0  US:H  =(       a$    U R%                  UR&                  XpR(                  S9nUS:X  a,  U(       a%  Sn
UR*                  " UR                  R,                  6 nU(       a  U R/                  UUUUU
S	9nX€l        g )
NrÊ   ©rÇ  Úprocess_criteria_for_toplevelFr6  r.  r=  )r(  TrÒ  )rÃ  rw   r²   r?   r�  r"  Ú_init_global_attributesrŒ  ra   rØ  rÒ   r‹  rb  r`  Úwherer(   rê  rÀ   r.  r-  r(  rC   rò   rü   r´   )rô   r´   rõ   rÆ  rö   rÇ  rÓ   r?   Únew_stmtÚnew_critrå   r6  r.  s                rE   rë  Ú#BulkORMUpdate._setup_for_orm_update©  s  € Ø'Ðà—~‘~Ô%ˆà—?‘?×/Ñ/°Ñ?ˆà'Ÿ™Ð.ˆŒ�fà $× 9Ñ 9¸&Ó LˆÔà×$Ñ$ØØØØ*2ð	 	%ñ 	
ð ××Ü$(¨×)>Ñ)>Ó$?ˆDÔ!à×#Ñ#Ó%ˆà�>‰>×&Ñ& ~Ñ6¸&Ò@Ø#×/Ñ/ˆHŒNð ×$×$Ø'+×'<Ñ'<ˆHÕ$Ø××Ø#×4Ñ4ˆHÔà×2Ñ2Ø×"Ñ" Fó
ˆö Ø—~’~ xÐ0ˆHô 	×Ò °Ñ?¸BÒ?à %ÐæØ"&Ñà"*×"7Ñ"7×";Ñ";Ø% tó#Ðð %×1Ñ1×5Ñ5Ø ó
Ðð  EÒ)ð $ wÑ.÷ Ø×*Ñ*Ø×$Ñ$ f×<NÑ<Nð +ð ð ð  'Ó)Ö.?Ø$(Ð!ð  ×/Ò/°·±×1KÑ1KÐLˆHæØ×0Ñ0ØØ#ØØ!Ø&;ð 1ð ˆHð "�rG   c                óÐ  • [        [        R                  U5      nUR                  nUS   US   peUR	                  5       nXQl        [        R                  " XU40 UD6  U R                  (       a  [        R                  " S5      eU R                  (       aE  U R                  R                  5        VVs0 s H  u  pxUR
                  UL d  M  Xx_M     snnU l        Xl        gs  snnf )z±establish an UPDATE statement within the context of
bulk insert.

This method will be within the "conn.execute()" call that is invoked
by persistence._emit_update_statement().

Ú_emit_update_tableÚ_emit_update_mapperzšbulk ORM UPDATE does not support ordered_values() for custom UPDATE statements with bulk parameter sets.  Use a non-bulk UPDATE statement or use values().N)r   r   ÚUpdater²   rØ  rw   r(   rê  r‹  r@  rA  rÙ  rf   r´   )	rô   r´   rõ   rÆ  rÛ  Úemit_update_tableÚ_rÎ  rÞ  s	            rE   ré  Ú$BulkORMUpdate._setup_for_bulk_update  sÞ   € ô œŸ™ YÓ/ˆ	Ø×#Ñ#ˆð Ð#Ñ$ØÐ$Ñ%ð ð
 ×$Ñ$Ó&ˆ	Ø+Œä×Ò °Ñ@¸RÒ@à××Ü×,Ò,ð=óð ð × × ð !%× 5Ñ 5× ;Ñ ;Ô =ô%â =‘H�CØ—9‘9Ð 1Ð1ó �’Ù =ò%ˆDÔ!ð
 #�ùó%s   Â3C"ÃC"c           
     óü  >• UR                  SU R                  5      nUR                  (       a:  UR                  S[        R                  5      nUSS0-  nUR                  SU05      nUR                  S;  a  [        R                  " S5      eUR                  S:X  aË  UR                  (       + n	UR                  S:w  d   eUR                  (       a&  UR                  S	:X  a  [        R                  " S
5      eUR                  n
U
c   eUR                  c   e[        U
[        S[!        U["        5      (       a  U/OU5      UR                  SSUU	S9nU R%                  UUUUUU5      $ [&        TU ]Q  UUUUUU5      $ )Nr1  rÿ   r!  T)r:  r  rZ   r9  zOValid strategies for ORM UPDATE strategy are 'orm', 'auto', 'bulk', 'core_only'rZ   r=  r<  zÑbulk synchronize of persistent objects not supported when using bulk update with additional WHERE criteria right now.  add synchronize_session=None execution option to bypass synchronize of persistent objects.rº  F)rB   r„   r€   r�   )rÀ   r&  r!  r   r  r“   r  r@  rB  rz  r  rA  r   r½  r…   r   r®   ra   rQ  rÂ  r¿  )r³   r^   r´   rN   r:   r  rP   rI  r  r�   r?   r   rÈ  s               €rE   r¿  Ú#BulkORMUpdate.orm_execute_statement/  s¾  ø€ ð +×.Ñ.Ø$ c×&@Ñ&@ó
ˆð ×,×,Ø,×0Ñ0Ø&¬×(IÑ(IóˆLð Ð1°4Ð8Ñ8ˆLØ 1× 7Ñ 7Ø'¨Ð6ó!Ðð ×'Ñ'ð 0
ó 
ô ×&Ò&ð9óð ð ×'Ñ'¨6Ó1Ø(1×(AÑ(AÔ$AÐ!à!×6Ñ6¸'ÓAÐAÐAð ×)×)Ø"×7Ñ7¸:ÓEä×0Ò0ðóð ð $×3Ñ3ˆFØÑ%Ð%Ð%Ø×'Ñ'Ñ3Ð3Ð3Ü!ØÜØ.Ü *¨6´4× 8Ñ 8�V‘H¸fóð ×$Ñ$ØØ$)Ø$-Ø&;ñˆFð ×.Ñ.ØØØØ!ØØóð ô ‘7Ñ0ØØØØ!ØØóð rG   Fr'  c               ó*  • UR                   =(       a    UR                  R                  nU(       d  gU(       a  UR                  $ U(       a  UR                  $ U(       a5  UR                  (       d$  [
        R                  " SUR                   S35      eg)NFú	Dialect "zæ" does not support RETURNING with UPDATE..FROM; for synchronize_session='fetch', please add the additional execution option 'is_update_from=True' to the statement to indicate that a separate SELECT should be used for this backend.T)Úupdate_returningrÒ   Úimplicit_returningÚupdate_executemany_returningÚupdate_returning_multifromr@  rÚ  rË   ©r³   r-  r?   r(  r)  r*  r+  Únormal_answers           rE   r.  ÚBulkORMUpdate.can_use_returning…  s…   € ð ×$Ñ$×N¨×);Ñ);×)NÑ)Nð 	ö ØæØ×7Ñ7Ð7ö Ø×5Ñ5Ð5æ 7×#E×#EÜ×%Ò%Ø˜GŸL™L˜>ð *Eð Eóð ð rG   c                óÚ  ^• U(       d  g UR                   nUR                   Vs/ s H  ofR                  PM     nnUR                  nU GH  mUR	                  U4S jU 5       UR
                  5      n	UR                  U	5      n
U
(       d  MD  [        T5      R                  U5      nU
R                  nU
R                  R                  U5      nU H  nXì;   d  M
  TU   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(       d  GM  U
R#                  XÏ5        GM     g s  snf )Nc              3  ó.   >#   • U  H
  nTU   v •  M     g 7fr<   r=   )rK   rj   Úparams     €rE   rU   ÚCBulkORMUpdate._do_post_synchronize_bulk_evaluate.<locals>.<genexpr>¸  s   øé € Ð/¢w ��s–¢wùs   ƒ)r   rq   rj   Úidentity_mapÚidentity_key_from_primary_keyr%  Úfast_get_stater›   Ú
differencera   Ú
unmodifiedrž   ÚmanagerÚdispatchÚrefreshÚ_commitrc   Ú_expire_attributes)r³   r^   rN   r   rI  r?   Úproprg  r  Úidentity_keyrL   Úevaluated_keysrt   Úto_evaluaterj   Ú	to_expirer	  s                   @rE   rP  Ú0BulkORMUpdate._do_post_synchronize_bulk_evaluateª  s;  ø€ ö Øà×/Ñ/ˆØ(.×(BÒ(BÓCÒ(B —8”8Ñ(BˆÐCà×+Ñ+ˆäˆEØ!×?Ñ?Ü/¡wÓ/Ø×.Ñ.óˆLð !×/Ñ/°Ó=ˆEÞÙä  ›Z×2Ñ2°7Ó;ˆNà—J‘JˆEà×*Ñ*×7Ñ7¸ÓGˆKÛ"�Ø•<Ø!& s¡�E“Jñ #ð �M‰M×"Ñ"×*Ñ*¨5°$¸ÔDà�M‰M˜%¤ kÓ!2Ô3ð
 '×3Ñ3°EÓ:×EÑEØóˆI÷ ‰yØ×(Ñ(¨×:ò; ùò	 Ds   ¤E(c                ó4  • U R                  UUR                  R                  5       5      nU R                  UUUUR                  R
                  S   U VVVV	s/ s H
  u  pgp‰XgU4PM     sn	nnnUR                  5       UR                  5       5        g s  sn	nnnf )Nr   )rt  r  Ú
all_statesÚ#_apply_update_set_values_to_objectsr   Úcompiled_parametersÚprefetch_colsÚpostfetch_cols)
r³   r^   r´   r   rI  Úmatched_objectsrn  rL   rt   rú  s
             rE   rN  Ú+BulkORMUpdate._do_post_synchronize_evaluateÕ  sŽ   € ð ×>Ñ>ØØ× Ñ ×+Ñ+Ó-ó
ˆð
 	×/Ñ/ØØØØ�N‰N×.Ñ.¨qÑ1Ù=LÖMº_Ñ%9 S°ˆc˜%Ó ¹_ÔMØ× Ñ Ó"Ø×!Ñ!Ó#õ	
ùõ
 Ns   ÁBc                óF  • UR                   nUR                  nU(       a<  U R                  X5U5      nU Vs/ s H  n[        U5      UR                  4-   PM     n	nOUR
                  n	U	 Vs/ s H  oˆSS US   4PM     sn V
Vs/ s H<  u  p«UR                  b  X´R                  :X  d  M#  UR                  [        U
5      US9PM>     snn
 Vs/ s H#  nXÁR                  ;   d  M  UR                  U   PM%     nnU(       d  g U R                  UUUUR                  R                  S   U Vs/ s H0  nU[        R                  " U5      [        R                  " U5      4PM2     snUR                  5       UR!                  5       5        g s  snf s  snf s  snn
f s  snf s  snf ©Nr   éÿÿÿÿ)r4  )r   Úreturned_defaults_rowsri  rr   r%  r$  r  rc   r  r  r   r  r   Úinstance_stateÚinstance_dictr  r   )r³   r^   r´   r   rI  Útarget_mapperr&  Úpk_rowsrh  r§  rò   r4  r  Úobjsrn  s                  rE   rO  Ú(BulkORMUpdate._do_post_synchronize_fetchè  sÖ  € ð '×6Ñ6ˆà!'×!>Ñ!>ÐÞ!Ø×3Ñ3ØÐ'=óˆGñ
 #óâ"�Cô �c“
˜n×<Ñ<Ð>Ô>Ù"ð ð ˆLð
 *×7Ñ7ˆLñ 5Aó4Ú4@¨S˜˜2�Y  B¡Ó(±Lò4ô
!ò
4Ñ/�Kð "×1Ñ1Ñ9Ø!×%CÑ%CÑCó�×;Ñ;Ü˜Ó%Ø#1ð <ó ñ4ó
!ó
ò
!�ð ×3Ñ3Ñ3ó /ˆG× Ñ  Ô.ñ
!ð 	ð 
ö  Øà×/Ñ/ØØØØ�N‰N×.Ñ.¨qÑ1ñ  óò  �Cð	 Ü×-Ò-¨cÓ2Ü×,Ò,¨SÓ1óñ
  ñð × Ñ Ó"Ø×!Ñ!Ó#õ	
ùò5ùò4ùó
!ùò
ùò0s)   ¶#F	Á,FÂ"FÂ+FÃFÃ%FÄ,7Fc           
     óú  • UR                   nUR                  n	[        R                  " U	5      n
U R	                  Xƒ5      nU R                  X‹5      n0 nU H>  u  pï U
R                  [        R                  " [        R                  U5      5      nUXÞ'   M@     [        UR                  5       5      nU VVs1 s H  u  nnUiM
     nnn[        5       nU Vs1 s H;  nUR                  U;   d  M  UUR                   ;   d  M'  UR                  U;  d  M9  UiM=     nnU Vs1 s H.  nUUR                   ;   d  M  UR                   U   R                  iM0     snR#                  U5      nU Vs/ s H(  nUR                   U   R                  UR                  4PM*     nnU GH  u  nnnUR%                  U VVs0 s H  u  nnUUU   _M     snn5        UR'                  UR(                  U5        UR*                  R-                  U5      nU H  nUU;   d  M  XÞ   " U5      UU'   M     UR.                  R0                  R3                  USU5        UR5                  U[        U5      5        UR-                  U5      R#                  U5      nU(       a  UR'                  UU5        UR7                  U5        GM     UR9                  U5        g! [        R                   a     GM‰  f = fs  snnf s  snf s  snf s  snf s  snnf )zUapply values to objects derived from an update statement, e.g.
UPDATE..SET <values>

N)r   rÐ   r   ry  r�  r–  r}  r   r¬   r    r¯   r„  rc   rœ   r›   rj   r‘  r  rã  r  ra   r  rž   r  r  r  r  ÚaddÚ_register_altered) r³   r^   rI  r´   Úeffective_paramsr!  r  r   r?   r~  r  r”  Úresolved_keys_as_propnamesÚvalue_evaluatorsrj   ÚvalueÚ
_evaluatorr  rŠ   r‹   Úattribrs   rÙ   Úto_prefetchr  Úprefetch_transferrn  rL   rt   Úcol_to_propÚc_keyr  s                                    rE   r  Ú1BulkORMUpdate._apply_update_set_values_to_objects  sø  € ð   ×/Ñ/ˆØ—]‘]ˆ
Ü&×9Ò9¸*ÓEÐØ×2Ñ2°6ÓEˆØ%(×%DÑ%DØó&
Ð"ð ÐÛ4‰JˆCð3Ø/×7Ñ7Ü×$Ò$¤U×%@Ñ%@À%ÓHó�
ð )3Ð Ó%ñ 5ô Ð.×3Ñ3Ó5Ó6ˆÙ :Ô;Ò :™˜˜1“!Ñ :ˆÑ;ä“ˆñ #ó
â"�Ø�u‰uÐ(Ñ(ó ð �V×-Ñ-Ñ-ó ð —‘˜^Ñ+÷	 Ù"ð 	ð 
ñ $ó
â#�Ø�F×,Ñ,Ñ,ó ,ˆF×$Ñ$ QÑ'×+Ô+Ù#ñ
÷ ‰*�^Ó
$ð	 	ñ ?Jó
Ú>I¸ˆV×%Ñ% aÑ(×,Ñ,¨a¯e©eÓ4¹kð 	ð 
ô "1ÑˆC�˜à�L‰Lñ /@ôâ.?Ñ*˜ Uð  Ð!1°%Ñ!8Ò8Ù.?òôð ×$Ñ$ U§Z¡Z°Ô;à×*Ñ*×7Ñ7¸ÓGˆKã"�Ø˜%•<à!1Ò!6°sÓ!;�E˜#“Jñ #ð
 �M‰M×"Ñ"×*Ñ*¨5°$¸ÔDà�M‰M˜%¤ kÓ!2Ô3ð
 ×+Ñ+¨EÓ2×=Ñ=¸kÓJˆIÞØ×(Ñ(¨°	Ô:à�J‰J�u×ñ; "1ð< 	×!Ñ! &Õ)øôs ×/Ñ/ó Ûðüó <ùò
ùò
ùò
ùósH   Á4KÂ5K"ÃK(Ã-K(Ã?K(ÄK(ÄK-Ä5K-Å(/K2Æ3K7ËKËK)rÙ  r"  r?   r´   )r^   r1   r´   z
dml.UpdaterN   r6   r:   r,   r  r/   rP   r4   r¡  rà  r©  )rÑ   r  r  r  r  rí   rë  ré  r¿  r.  rP  rN  rO  r  r  rá  râ  s   @rE   rå  rå  �  s?  ø† àñó ðò,`"òD"#ðH ðSàðSð ðSð &ð	Sð
 6ðSð 'ðSð ðSð 
öSó ðSðj ð $Ø$Ø %Ø$ñ"àð"ð ð"ð
 ð"ð ð"ð ð"ð ð"ð 
ô"ó ð"ðH ñ(;ó ð(;ðT ñ
ó ð
ð$ ñ3
ó ð3
ðj ñU*ó öU*rG   rå  Údeletec                  ó¾   ^ • \ rS rSr\S 5       r\              S
U 4S jj5       r\SSSSS.             SS jj5       r\S 5       r\S 5       r	S	r
U =r$ )ÚBulkORMDeleteiw  c           	     óR  • U R                  U 5      nUR                  R                  SS5      nUS:X  d   US:X  a4  SUR                  R                  ;  a  [        R
                  " XAU40 UD6  U$ UR                  (       + nUnUR                  R                  S   nUR                  =Ul        n	UR                  UUUUS9  UR                  5       n
U
R                  R                  S   U	L a  U	R                  U
l        U R                  UR                  U	5      nU(       a  U
R                  " U6 n
[        R
                  " XJU40 UD6  SnU(       d  S nOUR                  R                  SS 5      nUR                  R                  SS 5      nUSLaL  US	:H  =(       a@    UR                  UR                  U	UR                   UR                  R                  S
S5      S9nU(       a%  SnU
R"                  " U
R                  R$                  6 n
U(       a  UR'                  UUU
U	US9n
X¤l        U$ )Nr3  rç  r9  rÊ   rî  Fr6  r.  r=  r*  )r(  r*  TrÒ  )rè  r²   rÀ   rw   r&   rê  rÃ  r?   rð  rØ  rÒ   rb  r`  rñ  r.  r-  r(  rC   rò   rü   r´   )r³   r´   rõ   rÆ  rô   r3  rÇ  rö   rÓ   r?   rò  ró  rå   r6  r.  s                  rE   rí   Ú"BulkORMDelete.create_for_statementy  s7  € à�{‰{˜3Óˆà ×-Ñ-×1Ñ1Ø˜Mó
ˆð
 ˜KÓ'Ø˜}Ó,Ø i§o¡o×&BÑ&BÓBä×#Ò# D°XÑDÀÒDØˆKà—~‘~Ô%ˆà'Ðà—?‘?×/Ñ/°Ñ?ˆØ'Ÿ™Ð.ˆŒ�fà×$Ñ$ØØØØ*2ð	 	%ñ 	
ð ×#Ñ#Ó%ˆà�>‰>×&Ñ& ~Ñ6¸&Ò@Ø#×/Ñ/ˆHŒNà×1Ñ1Ø×"Ñ" Fó
ˆö Ø—~’~ xÐ0ˆHô 	×Ò °Ñ?¸BÒ?à %ÐæØ"&Ñà"*×"7Ñ"7×";Ñ";Ø% tó#Ðð %×1Ñ1×5Ñ5Ø ó
Ðð  EÒ)ð $ wÑ.÷ Ø×*Ñ*Ø×$Ñ$ØØ"&×"4Ñ"4Ø$,×$9Ñ$9×$=Ñ$=Ø)¨5ó%ð	 +ð ð ö Ø$(Ð!à×/Ò/°·±×1KÑ1KÐLˆHæØ×0Ñ0ØØ#ØØ!Ø&;ð 1ð ˆHð "ŒàˆrG   c                óö   >• UR                  SU R                  5      nUR                  S:X  a  [        R                  " S5      eUR                  S;  a  [        R
                  " S5      e[        TU ]  XX4XV5      $ )Nr1  rZ   zˆBulk ORM DELETE not supported right now. Statement may be invoked at the Core level using session.connection().execute(stmt, parameters))r:  r  r9  zGValid strategies for ORM DELETE strategy are 'orm', 'auto', 'core_only')rÀ   r&  r  r@  rA  rB  rÂ  r¿  )	r³   r^   r´   rN   r:   r  rP   rI  rÈ  s	           €rE   r¿  Ú#BulkORMDelete.orm_execute_statementÕ  s�   ø€ ð +×.Ñ.Ø$ c×&@Ñ&@ó
ˆð ×'Ñ'¨6Ó1Ü×,Ò,ðAóð ð ×'Ñ'Ð/KÓKÜ×&Ò&ðóð ô
 ‰wÑ,Ø ¸>ó
ð 	
rG   Fr'  c               ó  • UR                   =(       a    UR                  R                  nU(       d  gU(       a  UR                  $ U(       a5  UR                  (       d$  [        R
                  " SUR                   S35      eg)NFrÿ  zè" 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_returningrÒ   r  Údelete_returning_multifromr@  rÚ  rË   r  s           rE   r.  ÚBulkORMDelete.can_use_returningõ  sz   € ð ×$Ñ$×N¨×);Ñ);×)NÑ)Nð 	ö Øö ð ×5Ñ5Ð5æ 7×#E×#Eô ×%Ò%Ø˜GŸL™L˜>ð *Eð Eóð ð rG   c                ó$  • U R                  UUR                  R                  5       5      n/ nU HE  u  pxpšU
(       a'  UR                  X‘R                  R                  5        M4  UR                  U5        MG     U(       a  UR                  U5        g g r<   )rt  r  r  Ú_expireÚ	_modifiedrp  Ú_remove_newly_deleted)r³   r^   r´   r   rI  r!  Ú	to_deleterú  rL   rt   Úis_partially_expireds              rE   rN  Ú+BulkORMDelete._do_post_synchronize_evaluate  s�   € ð ×>Ñ>ØØ× Ñ ×+Ñ+Ó-ó
ˆð
 ˆ	ã5DÑ1ˆA�eÞ#Ø—‘˜e×%9Ñ%9×%CÑ%CÖDà× Ñ  Ö'ñ	 6Eö Ø×)Ñ)¨)Õ4ð rG   c                ó¼  • UR                   nUR                  nU(       a<  U R                  X5U5      nU 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XÁR                  ;   d  M7  UR                  [        R                  " UR                  U   5      /5        Ml     g s  snf r$  )r   r&  ri  rr   r%  r$  r  rc   r  rI  r   r'  )r³   r^   r´   r   rI  r)  r&  r*  rh  r§  rò   r4  r  s                rE   rO  Ú(BulkORMDelete._do_post_synchronize_fetch2  sú   € ð '×6Ñ6ˆà!'×!>Ñ!>Ðæ!Ø×3Ñ3ØÐ'=óˆGñ #óâ"�Cô �c“
˜n×<Ñ<Ð>Ô>Ù"ð ð ˆLð
 *×7Ñ7ˆLãˆCØ˜a ˜)ˆKØ  ™WˆNð )×FÑFÜ�[Ó!Ø-ð Gð ˆLð ×3Ñ3Õ3Ø×-Ñ-ä"×1Ò1Ø#×0Ñ0°Ñ>óðöò  ùòs   ¶#C)r?   r´   )r^   r1   r´   z
dml.DeleterN   r6   r:   r,   r  r/   rP   r4   r¡  rà  r©  )rÑ   r  r  r  r  rí   r¿  r.  rN  rO  r  rá  râ  s   @rE   r=  r=  w  sÿ   ø† àñYó ðYðv ð
àð
ð ð
ð &ð	
ð
 6ð
ð 'ð
ð ð
ð 
ö
ó ð
ð> ð $Ø$Ø %Ø$ñ&àð&ð ð&ð
 ð&ð ð&ð ð&ð ð&ð 
ô&ó ð&ðP ñ5ó ð5ð& ñ$ó ö$rG   r=  )r?   ú
Mapper[_O]r@   ú<Union[Iterable[InstanceState[_O]], Iterable[Dict[str, Any]]]rA   r2   rB   r  rC   r  rD   r  r9   úLiteral[None]r:   ú$Optional[OrmExecuteOptionsParameter]r¡  ÚNone)r?   rO  r@   rP  rA   r2   rB   r  rC   r  rD   r  r9   úOptional[dml.Insert]r:   rR  r¡  zcursor.CursorResult[Any])r?   rO  r@   rP  rA   r2   rB   r  rC   r  rD   r  r9   rT  r:   rR  r¡  z"Optional[cursor.CursorResult[Any]])r?   rª  r@   rP  rA   r2   rB   r  r„   r  r€   rQ  r�   r  r¡  rS  )r?   rª  r@   rP  rA   r2   rB   r  r„   r  r€   úOptional[dml.Update]r�   r  r¡  z_result.Result[Any])r?   rª  r@   rP  rA   r2   rB   r  r„   r  r€   rU  r�   r  r¡  zOptional[_result.Result[Any]])OÚ__doc__Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   Ú r   r   r   r   r’  r   r   Úbaser   r   r   r   r   r@  r   Úenginer   r   r—   Úsqlr   r   r   r    r!   r"   Úsql.baser#   r$   r%   Úsql.dmlr&   r'   r(   r)   Úutil.typingr*   Ú_typingr+   r,   r-   r?   r.   r^   r/   r0   r1   r2   rL   r3   r4   r5   Úengine.interfacesr6   Úobjectr7   rF   r…   rd   r£   r  Ú
plugin_forr­  rå  r=  r=   rG   rE   Ú<module>rd     sè  ðñõ
 #å Ý Ý Ý Ý Ý Ý  Ý Ý å Ý Ý Ý Ý Ý Ý Ý ,Ý "Ý 1Ý !Ý Ý Ý Ý &Ý Ý Ý Ý Ý Ý Ý ,Ý #Ý Ý $Ý $Ý $Ý Ý !æÝ,Ý3Ý3ÝÝ'Ý(Ý Ý+Ý$Ý#ÝÝ9áˆT˜Ñ €ð 
ð *-Ø>Añ
Øð
àJð
ð ,ð
ð
 ð
ð ð
ð ð
ð 'ð
ð <ð
ð 
ô
ó 
ð
ð 
ð 14Ø>Añ
#Øð
#àJð
#ð ,ð
#ð
 ð
#ð ð
#ð ð
#ð .ð
#ð <ð
#ð ô
#ó 
ð
#ð* 15Ø>BñUØðUàJðUð ,ðUð
 ðUð ðUð ðUð .ðUð <ðUð (õUðp 
ð *-Ø"&ñ	Øð	àJð	ð ,ð	ð
 ð	ð ð	ð 'ð	ð  ð	ð 
ô	ó 
ð	ð 
ð 14Ø"&ñ	Øð	àJð	ð ,ð	ð
 ð	ð ð	ð .ð	ð  ð	ð ô	ó 
ð	ð& 15Ø"&ñY%ØðY%àJðY%ð ,ðY%ð
 ðY%ð ðY%ð .ðY%ð  ðY%ð #õY%òx%ô@Ð)ô @ôFC
˜ô C
ðL ×Ò˜ Ó)ô@#�K ó @#ó *ð@#ðF ×Ò˜ Ó)ôc*Ð&¨ó c*ó *ðc*ðL ×Ò˜ Ó)ô_Ð&¨ó _ó *ñ_rG   