Ë
    r™ãj®" ã                  óü  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 dd	lm
Z
 dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl m"Z# ddl$m%Z% ddl$m&Z& dd l$m'Z' dd!l$m(Z( dd"l$m)Z) dd#l$m*Z* dd$l+m,Z, dd%l+m-Z- dd&l+m.Z. dd'l/m0Z0 dd(l/m1Z1 dd)l/m2Z2 dd*lm3Z3 dd+l4m5Z5 dd,l4m6Z6 erHdd-l7m8Z8 dd.l7m9Z9 dd/l7m:Z: dd0l;m<Z< dd1l=m>Z> dd2l=m?Z? dd3l=m@Z@ dd4l=mAZA dd5lBmCZC dd6l mDZD dd7l mEZE dd8lFmGZG  ed9eH¬:«      ZIe
d;d;d<œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dUd=„«       ZJe
d;d;d<œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dVd>„«       ZJd?d?d<œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dWd@„ZJe
d;dAdBœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dXdC„«       ZKe
d;dAdBœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dYdD„«       ZKd?dAdBœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dZdE„ZK	 	 	 	 	 	 d[dF„ZL G dG„ dHe«      ZM G dI„ dJeM«      ZN e-jž                  dKdL«       G dM„ dNeMe1«      «       ZP e-jž                  dKdO«       G dP„ dQeNe2«      «       ZQ e-jž                  dKdR«       G dS„ dTeNe0«      «       ZRy?)\zoadditional ORM persistence classes related to "bulk" operations,
specifically outside of the flush() process.

é    )Úannotations)ÚAny)Úcast)ÚDict)ÚIterable)ÚLiteral)ÚOptional)Úoverload)ÚTYPE_CHECKING)ÚTypeVar)ÚUnioné   )Ú
attributes)Úcontext)Ú	evaluator)Úexc)Úloading)Úpersistence)ÚNO_VALUE)Ú_AbstractORMCompileState)Ú_ORMFromStatementCompileState)ÚFromStatement)ÚQueryContext)ÚPropComparatoré   )Úutil)ÚDialect)Úresult)Ú	coercions)Údml)Ú
expression)Úroles)Úselect)Úsqltypes)Ú_entity_namespace_key)ÚCompileState)ÚOptions)ÚDeleteDMLState)ÚInsertDMLState)ÚUpdateDMLState)Ú
EMPTY_DICT)ÚTupleAny)ÚUnpack)ÚDMLStrategyArgument)ÚOrmExecuteOptionsParameter)ÚSynchronizeSessionArgument)ÚMapper)Ú_BindArguments)ÚORMExecuteState)ÚSession)ÚSessionTransaction)ÚInstanceState)Ú
Connection)Úcursor)Ú_CoreAnyExecuteParamsÚ_O)Úbound.)Úuse_orm_insert_stmtÚexecution_optionsc                ó   — y ©N© ©ÚmapperÚmappingsÚsession_transactionÚisstatesÚreturn_defaultsÚrender_nullsr<   r=   s           új/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/sqlalchemy/orm/bulk_persistence.pyÚ_bulk_insertrI   M   s   € ð ó    c                ó   — y r?   r@   rA   s           rH   rI   rI   [   s   € ð  #rJ   Nc               ó„  ‡ ‡— ‰ j                   }|j                  j                  rt        d«      ‚|rpt        rt        t        t        t              |«      }|r0|D �	cg c]  }	|	|	j                  f‘Œ }
}	|
D �	�cg c]  \  }	}|‘Œ	 }}	}nv|D �	cg c]  }	|	j                  ‘Œ }}	n\t        r$t        t        t        t        t        f      |«      }|rt        |«      }n|D �cg c]  }t        |«      ‘Œ }}t        ‰ |«       |j                  |«      Šd }|j                   j#                  «       D ��cg c]  \  }}|‰ j$                  v r||f‘Œ }}}|rd}nt'        |«      dkD  rd}nd}|D ]Ä  \  }}|�9|j)                  «       D �cg c]  }|j*                  |d   v r|j*                  ‘Œ! c}nd}ˆˆ fd„t-        j.                  |ˆˆ fd„|D «       d|||¬	«      D «       }t-        j0                  |d ||||||¬
«      }|€Œ’|j2                  r|€|}Œ£|j4                  sŒ°|sJ ‚|j7                  |«      }ŒÆ |r_|r]‰ j8                  }‰ j:                  D �cg c]  }|j*                  ‘Œ }}
D ])  \  }	}|t=        |D �cg c]  }||   ‘Œ	 c}«      d f|	_        Œ+ |�|€J ‚|S y c c}	w c c}}	w c c}	w c c}w c c}}w c c}w c c}w c c}w )NzJconnection_callable / per-instance sharding not supported in bulk_insert()Tr   Fr   r@   c           	   3  óD   •K  — | ]  \  }}}}}}}}d ||‰
‰	|||f–— Œ y ­wr?   r@   )Ú.0ÚstateÚ
state_dictÚparamsÚmpÚconnÚvalue_paramsÚhas_all_pksÚhas_all_defaultsÚ
connectionrB   s            €€rH   ú	<genexpr>z_bulk_insert.<locals>.<genexpr>Ã   sM   øè ø€ ò 
ñ	ØØØØØØØØ ð# ØØØØØØØ ô	ñ
ùs   ƒ c              3  ó*   •K  — | ]
  }d |‰‰f–— Œ y ­wr?   r@   ©rN   ÚmappingrW   rB   s     €€rH   rX   z_bulk_insert.<locals>.<genexpr>Ù   s   øè ø€ ÒM¸�$˜ ¨Ô4ÑMùs   ƒ)ÚbulkrF   rG   Úinclude_bulk_keys)Úbookkeepingr<   r=   )Úbase_mapperÚsessionÚconnection_callableÚNotImplementedErrorr   r   r   r6   r:   Údictr   Ústrr   ÚlistÚ_expand_other_attrsrW   Ú_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)rB   rC   rD   rE   rF   rG   r<   r=   r_   rO   ÚstatesÚdict_ÚmÚreturn_resultÚtablerR   Úmappers_to_runr^   Úsuper_mapperÚbÚextra_bp_namesÚrecordsr   Úidentity_clsÚpÚidentity_propsrl   rW   s   `                          @rH   rI   rI   i   s  ù€ ð ×$Ñ$€Kà×"Ñ"×6Ò6Ü!ð-ó
ð 	
ñ
 ÝÜœH¤]´2Ñ%6Ñ7¸ÓBˆHáà7?Ö@¨e�u˜eŸj™jÒ)Ð@ˆFÐ@Ø4:×;¡. 5¨%šÐ;ˆHÒ;à08Ö9 u˜Ÿ
›
Ð9ˆHÑ9åÜœH¤T¬#¬s¨(¡^Ñ4°hÓ?ˆHáô ˜H“~‰Hð *2Ö2 Aœ˜Q�Ð2ˆHÐ2Ü˜F HÔ-à$×/Ñ/°Ó<€Jà8<€Mð %×3Ñ3×9Ñ9Ó;÷áˆE�2Ø�F×(Ñ(Ñ(ð 
�Šð€Nñ ñ à‰Ü	ˆ^Ó	˜qÒ	 ð ‰àˆà-ò ?JÑˆˆ|ð #Ð.ð -×EÑEÓGöàØ—5‘5˜H Q™KÑ'ð —“óð ð 	ô
ô( ×5Ñ5ØÜMÀHÔMØØ +Ø)Ø"0ôô)
ˆô< ×4Ñ4ØØØØØØ#Ø 3Ø/ô	
ˆð Ñ*Ø&×1Ò1°]Ð5JØ &‘Ø×$Ó$Ù"Ð"�{Ø -× AÑ AÀ&Ó I‘ð?JñB ™8Ø×-Ñ-ˆØ)/×)CÑ)CÖD A˜!Ÿ%›%ÐDˆÐDØ"ò 	‰LˆE�5àÜ¨^Ö< c�u˜S“zÒ<Ó=ØðˆE�Ið	ð Ð&ØÐ(Ð(Ð(ØÐð 'ùòu AùÛ;ùâ9ùò( 3ùóùò4ùòt Eùò =s0   ÁJÁ8JÂJ#ÃJ(Ä.J-Æ$J3ÉJ8É3J=T)Úuse_orm_update_stmtÚenable_check_rowcountc                ó   — y r?   r@   ©rB   rC   rD   rE   Úupdate_changed_onlyr‚   rƒ   s          rH   Ú_bulk_updater‡     s   € ð rJ   c                ó   — y r?   r@   r…   s          rH   r‡   r‡     s   € ð (+rJ   c               ó”  ‡ ‡‡— ‰ j                   }‰ j                  Š‰ j                  r&‰ j                  j                  hj	                  ‰«      Šˆfd„}|r3|r|D �	cg c]  }	 |‰ |	«      ‘Œ }}	n>|D �	cg c]  }	|	j
                  ‘Œ }}	n$|D �
cg c]  }
t        |
«      ‘Œ }}
t        ‰ |«       |j                  j                  rt        d«      ‚|j                  |«      Š|�9|j                  «       D �cg c]  }|j                  |d   v r|j                  ‘Œ! c}nd}|j                  j                  «       D ]g  \  }}‰ j                  |«      r|‰ j                  vrŒ&t!        j"                  d |ˆˆ fd„|D «       d||¬«      }t!        j$                  |d |||d||¬	«       Œi |�t'        j(                  «       S y c c}	w c c}	w c c}
w c c}w )
Nc                ó�   •— |j                   j                  «       D ��ci c]  \  }}||j                  v s|‰v r||“Œ c}}S c c}}w r?   )rc   rh   Úcommitted_state)rB   rO   ÚkÚvÚsearch_keyss       €rH   Ú_changed_dictz#_bulk_update.<locals>._changed_dict+  sO   ø€ ð Ÿ
™
×(Ñ(Ó*÷
á��1Ø�E×)Ñ)Ñ)¨Q°+Ñ-=ð ˆq‰Dó
ð 	
ùó 
s   ŸAzJconnection_callable / per-instance sharding not supported in bulk_update()r   r@   c              3  óv   •K  — | ]0  }d |‰‰‰j                   r|‰j                   j                     nd f–— Œ2 y ­wr?   )Ú_version_id_proprl   rZ   s     €€rH   rX   z_bulk_update.<locals>.<genexpr>V  sM   øè ø€ ò ð ð ØØØð "×2Ò2ð   × 7Ñ 7× ;Ñ ;Ò<à!ô
ñùs   ƒ69T)r\   r‚   r]   F)r^   r‚   rƒ   )r_   Ú_primary_key_propkeysr‘   rl   Úunionrc   rf   r`   ra   rb   rW   rk   rg   rh   Úisari   r   Ú_collect_update_commandsÚ_emit_update_statementsÚ_resultÚnull_result)rB   rC   rD   rE   r†   r‚   rƒ   r_   r�   rO   rw   r|   r}   ry   r{   r~   rW   rŽ   s   `               @@rH   r‡   r‡     sä  ú€ ð ×$Ñ$€Kà×.Ñ.€KØ×ÒØ×.Ñ.×2Ñ2Ð3×9Ñ9¸+ÓFˆô
ñ ÙØBJÖK¸™ f¨eÕ4ÐKˆHÑKà08Ö9 u˜Ÿ
›
Ð9ˆHÑ9à%-Ö. ”D˜•GÐ.ˆÐ.Ü˜F HÔ-à×"Ñ"×6Ò6Ü!ð-ó
ð 	
ð
 %×/Ñ/°Ó<€Jð Ð*ð )×AÑAÓCö	
àØ�u‰u˜ ™Ñ#ð �E‹Eó	
ð ð ð  +×9Ñ9×?Ñ?ÓAò "
Ñˆˆ|Ø�z‰z˜,Ô'¨5¸×8LÑ8LÑ+LØä×6Ñ6ØØôð  (ôð Ø 3Ø,ô'
ˆô* 	×+Ñ+ØØØØØØØ 3Ø"7ö		
ð3"
ðH Ð&Ü×"Ñ"Ó$Ð$ð 'ùò Lùâ9ùâ.ùò	
s   ÁF6Á2F;ÂG Ã2$Gc                ó  ‡ — ‰ j                   }t        |j                  «       «      }d„ ˆ fd„|D «       D «       D ��ci c]
  \  }}|�||“Œ }}}t        |«      }|sy |D ]#  }|j                  |«      D ]  } ||   |«       Œ Œ% y c c}}w )Nc              3  óx   K  — | ]2  \  }}|t         ur%t        |t        «      r||j                  |«      f–— Œ4 y ­wr?   )r   Ú
isinstancer   Ú_bulk_dml_setter)rN   rl   Úattrs      rH   rX   z&_expand_other_attrs.<locals>.<genexpr>€  s?   è ø€ ò 
á��Tð œ8Ñ#¬
°4¼Ô(Hð �$×'Ñ'¨Ó,Ô-ñ
ùs   ‚8:c              3  óF   •K  — | ]  }|t        ‰|t        ¬ «      f–— Œ y­w)©ÚdefaultN)r%   r   )rN   rl   rB   s     €rH   rX   z&_expand_other_attrs.<locals>.<genexpr>‚  s(   øè ø€ ò àð Ô+¨F°CÄÔJÔKñùs   ƒ!)Úall_orm_descriptorsÚsetÚkeysÚintersection)	rB   rC   Ú	all_attrsÚ	attr_keysrl   ÚsetterÚbulk_dml_settersÚsetters_todor[   s	   `        rH   rf   rf   w  s´   ø€ ð ×*Ñ*€Iä�I—N‘NÓ$Ó%€Iñ
óà$ôô
÷áˆC�ð Ðð 	ˆV‰ðÐñ ô Ð'Ó(€LÙØàò +ˆØ×,Ñ,¨WÓ5ò 	+ˆCØ!Ð˜SÑ! 'Õ*ñ	+ñ+ùó!s   ¼Bc                  óœ   — e Zd ZU dZdZded<   ed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed	„ «       Zed
„ «       Zddœd„Zed„ «       Zy)Ú_ORMDMLStateTNz'Optional[_ORMFromStatementCompileState]Úfrom_statement_ctxc              #  óH  K  — t         j                  }|D �]„  \  }}t        j                  t        j
                  |«      }t        |t        «      r¨t        ||t        ¬«      }t        |t        «      sdt        j                  t        j
                  |«      |r9t        j                  t        j                  |t        j                  «       d¬«      n|f–— ŒÁ |||j                  |«      |«      E d {  –—†  Œãd|j                  v rS|j                  }	t        |	d   |	d   «      }
t        |
t        «      sJ ‚ |||
j                  |«      |«      E d {  –—†  �ŒD||s|n8t        j                  t        j                  |t        j                  «       d¬«      f–— �Œ‡ y 7 Œ«7 ŒM­w)NrŸ   T)Útype_Úis_crudÚentity_namespaceÚ	proxy_key)r*   Ú_get_crud_kv_pairsr   Úexpectr"   ÚDMLColumnRoler›   rd   r%   r   r   ÚExpressionElementRoler$   ÚNullTypeÚ_bulk_update_tuplesÚ_annotations)ÚclsrB   Ú	statementÚkv_iteratorÚneeds_to_be_cacheableÚcore_get_crud_kv_pairsrŒ   r�   ÚdescÚk_annor�   s              rH   Ú_get_orm_crud_kv_pairsz#_ORMDMLState._get_orm_crud_kv_pairs—  s•  è ø€ ô "0×!BÑ!BÐàó 1	‰DˆAˆqÜ× Ñ ¤×!4Ñ!4°aÓ8ˆAä˜!œSÔ!Ü,¨V°QÄÔI�Ü! $¬Ô7ä!×(Ñ(¬×)<Ñ)<¸aÓ@ñ  5ô &×,Ñ,Ü %× ;Ñ ;Ø !Ü&.×&7Ñ&7Ó&9Ø(,õ	ð "#ðó ñ  6Ø!Ø×0Ñ0°Ó3Ø-ó ÷ ñ ð
 $ q§~¡~Ñ5ØŸ™�Ü,ØÐ-Ñ.°°{Ñ0Có�ô " $¬Ô7Ð7Ð7Ù1ØØ×,Ñ,¨QÓ/Ø)ó÷ ò ð ñ  5ñ ä&×-Ñ-Ü!×7Ñ7ØÜ"*×"3Ñ"3Ó"5Ø$(ô	ðô ñK1	ð(øðús&   ‚C0F"Ã2FÃ3AF"ÅF ÅAF"Æ F"c                ó�   — |j                   j                  j                  d«      }|r|j                  r||j                  d   ury |S )NÚplugin_subject)ry   Ú_propagate_attrsÚgetrB   )r¹   rº   rÂ   s      rH   Ú_get_dml_plugin_subjectz$_ORMDMLState._get_dml_plugin_subjectÐ  sN   € à"Ÿ™×9Ñ9×=Ñ=Ð>NÓOˆñ Ø!×(Ò(ØØ×-Ñ-Ð.>Ñ?ñ@ð ØÐrJ   c                óä   — | j                  |«      }|st        j                  ||«      S |D �cg c]7  }t        | j	                  |j
                  ||j                  «       d«      «      ‘Œ9 c}S c c}w )NF)rÅ   r*   Ú_get_multi_crud_kv_pairsrc   rÀ   rB   rh   )r¹   rº   r»   rÂ   Ú
value_dicts        rH   rÇ   z%_ORMDMLState._get_multi_crud_kv_pairsÝ  s|   € à×4Ñ4°YÓ?ˆáÜ!×:Ñ:Ø˜;óð ð *ö
ð ô Ø×*Ñ*Ø"×)Ñ)¨9°j×6FÑ6FÓ6HÈ%óõò
ð 	
ùò 
s   ®<A-c                ó¶   — |sJ d«       ‚| j                  |«      }|st        j                  |||«      S t        | j	                  |j
                  |||«      «      S )Nz0no test coverage for needs_to_be_cacheable=False)rÅ   r*   r²   re   rÀ   rB   )r¹   rº   r»   r¼   rÂ   s        rH   r²   z_ORMDMLState._get_crud_kv_pairsï  sv   € ñ "ð	>à=ó	>Ø!ð ×4Ñ4°YÓ?ˆáÜ!×4Ñ4Ø˜;Ð(=óð ô Ø×&Ñ&Ø×%Ñ%ØØØ%ó	ó
ð 	
rJ   c                ó
  — |j                   j                  d   }|j                  }|j                  r|j                  }n|j
                  j                  }||j
                  |j                  |j                  |j                  dœS )NÚparententity)ÚnameÚtypeÚexprÚentityry   )	ry   r¸   rB   Úis_aliased_classrÌ   Úclass_Ú__name__rÏ   Úlocal_table)r¹   rº   Úext_inforB   Ú_label_names        rH   Úget_entity_descriptionz#_ORMDMLState.get_entity_description  sm   € à—?‘?×/Ñ/°Ñ?ˆØ—‘ˆØ×$Ò$Ø"Ÿ-™-‰Kà Ÿ-™-×0Ñ0ˆKð  Ø—M‘MØ—O‘OØ—o‘oØ×'Ñ'ñ
ð 	
rJ   c           
     óø   — d„ }d„ }|j                   D �cg c]  }| ||«      f‘Œ c}D ��cg c]<  \  }}|j                  |j                   |||«      |j                  |j                  dœ‘Œ> c}}S c c}w c c}}w )Nc                ó:   — | j                   j                  dd «      S )NrË   )r¸   rÄ   )Úcs    rH   Ú_ent_for_colzD_ORMDMLState.get_returning_column_descriptions.<locals>._ent_for_col  s   € Ø—>‘>×%Ñ% n°dÓ;Ð;rJ   c                óx   — |€| S | j                   j                  dd «      }|s| S t        |j                  || «      S )Nr±   )r¸   rÄ   ÚgetattrrÏ   )rÙ   Úentr±   s      rH   Ú_attr_for_colzE_ORMDMLState.get_returning_column_descriptions.<locals>._attr_for_col  s=   € Øˆ{Ø�ØŸ™×*Ñ*¨;¸Ó=ˆIÙØ�ä˜sŸz™z¨9°aÓ8Ð8rJ   )rÌ   rÍ   rÎ   ÚaliasedrÏ   )Ú_all_selected_columnsrl   rÍ   rÐ   rÏ   )r¹   rº   rÚ   rÞ   rÙ   rÝ   s         rH   Ú!get_returning_column_descriptionsz._ORMDMLState.get_returning_column_descriptions  s‚   € ò	<ò	9ð$ /8×.MÑ.MöØ)*�‘L “OÒ$ò÷
ñ ��3ð Ÿ™ØŸ™Ù% a¨Ó-Ø×/Ñ/ØŸ*™*óó
ð 	
ùòùó
s   •A1¬AA6)Úuse_supplemental_colsc               ó,  — |j                   �rt        |j                   |d¬«      } |j                  di |j                  ¤Ž} |j                  |j
                  Ž }|| _        t        j                  ||«      x| _	        }|j                  |«       |j                  «       }d|_         |j                  D �cg c]  }|€Œ|‘Œ	 }	}|	s|	j                  |j                  «       |r |j                  |j                  d|	iŽ}|S  |j                   |	Ž }|S c c}w )al  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)ro   r   r=   Ú_execution_optionsÚoptionsÚ_with_optionsÚselect_statementr   Úcreate_for_statementr¬   Ú!setup_dml_returning_compile_stateÚ	_generateÚprimary_columnsÚextendÚprimary_keyrF   Ú	returning)
ÚselfÚcompilerÚorm_level_statementÚdml_level_statementÚ
dml_mapperrâ   ÚfsÚfscrÙ   Úcols_to_returns
             rH   Ú_setup_orm_returningz!_ORMDMLState._setup_orm_returning0  s<  € ð( ×)Ó)ÜØ#×.Ñ.Ø#Ø %ôˆBð
 &�×%Ñ%ÑOÐ(;×(NÑ(NÑOˆBØ�—‘Ð0×>Ñ>Ð?ˆBØ$&ˆDÔ!ä-×BÑBØ˜óðˆDÔ# cð
 ×1Ñ1°*Ô=à"5×"?Ñ"?Ó"AÐØ-/ÐÔ*à),×)<Ñ)<ÖN AÀÁšaÐNˆNÐNñ "Ø×%Ñ% j×&<Ñ&<Ô=á$Ø&IÐ&9×&IÑ&Ið  ×+Ñ+ð'ð '5ñ'Ð#ð( #Ð"ð	 'DÐ&9×&CÑ&CØ#ð'Ð#ð #Ð"ùò9 Os   Â5DÂ=Dc           
     óZ  — |j                   }|j                  j                  }|j                  r||j                  j                  j
                  s\|j                  dt        j                  «      }	t        |j                  |j                  ||||	||«      }
t        j                  ||
«      S |S )NÚ_sa_orm_load_options)r   ÚcompiledÚcompile_stater¬   Úcompile_optionsÚ_is_starrÄ   r   Údefault_load_optionsré   r   Ú	instances)r¹   r`   rº   rQ   r=   Úbind_argumentsr   Úexecution_contextrý   Úload_optionsÚquerycontexts              rH   Ú_return_orm_returningz"_ORMDMLState._return_orm_returningu  s¤   € ð #ŸN™NÐØ)×2Ñ2×@Ñ@ˆð ×,Ò,Ø!×4Ñ4×DÑD×MÒMà,×0Ñ0Ø&¬×(IÑ(IóˆLô (Ø×0Ñ0Ø×.Ñ.ØØØØØ!Øó	ˆLô ×$Ñ$ V¨\Ó:Ð:àˆMrJ   )rÒ   Ú
__module__Ú__qualname__Úis_dml_returningr¬   Ú__annotations__ÚclassmethodrÀ   rÅ   rÇ   r²   rÖ   rá   rù   r  r@   rJ   rH   r«   r«   “  s¬   … ØÐØBFÐÐ?ÓFàñ6ó ð6ðp ñ
ó ð
ð ñ
ó ð
ð" ñ
ó ð
ð( ñ
ó ð
ð  ñ
ó ð
ðB #ôC#ðJ ñ ó ñ rJ   r«   c                  ó
  — e Zd Z G d„ de«      Zedddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zed„ «       Zed„ «       Zed„ «       Z	ed	„ «       Z
ed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zy)Ú_BulkUDCompileStatec                  óŽ   — e Zd ZU dZded<   dZded<   dZded<   dZded	<   dZded
<   dZ	ded<   dZ
ded<   eZdZdZdZdZded<   y)ú*_BulkUDCompileState.default_update_optionsÚautor.   Ú_dml_strategyr0   Ú_synchronize_sessionFÚboolÚ_can_use_returningÚ_is_delete_usingÚ_is_update_fromTÚ
_autoflushNúOptional[Mapper[Any]]Ú_subject_mapperÚ_populate_existing)rÒ   r  r  r  r
  r  r  r  r  r  r  r+   Ú_resolved_valuesÚ_eval_conditionÚ_matched_rowsÚ_identity_tokenr  r@   rJ   rH   Údefault_update_optionsr  š  sn   … Ø-3ˆÐ*Ó3Ø;AÐÐ8ÓAØ#(Ð˜DÓ(Ø!&Ð˜$Ó&Ø %ˆ˜Ó%Øˆ
�DÓØ15ˆÐ.Ó5Ø%ÐØˆØˆØˆØ#(Ð˜DÔ(rJ   r  F©Úis_multitableÚis_update_fromÚis_delete_usingÚis_executemanyc               ó   — t        «       ‚r?   )rb   )r¹   ÚdialectrB   r!  r"  r#  r$  s          rH   Úcan_use_returningz%_BulkUDCompileState.can_use_returning¨  s   € ô "Ó#Ð#rJ   c                óp  — t         j                  j                  dh d£||j                  «      \  }}||d<   	 |j                  d   }|r!|j
                  |d<   |d|j
                  iz  }	 d|j                  j                  vr|d	d
iz  }nat        |t        «      s;|j                  dk(  r|d	diz  }n:|j                  dk(  r+t        j                  d«      ‚|j                  dk(  r|d	diz  }|j                  }	|	�B|	dvrt        j                  d«      ‚|j                  dk(  r|	dk(  rt        j                  d«      ‚|�s=|j                   r|j!                  «        |j                  dk(  rr|j                  dk(  r| j#                  ||||||«      }nq|j                  dk(  r| j%                  ||||||«      }nK|j                  dk(  r<| j'                  ||||||«      }n%|j                  dk(  r|j                  dk(  r|ddiz  }|j)                  |j                  |j*                  |j,                  |j                  |j.                  dœ«      }|st0        j2                  }n|j5                  t0        j2                  «      }|t7        j8                  |«      j5                  d|i«      |fS # t        $ r J d«       ‚w xY w)NÚ_sa_orm_update_options>   Ú	autoflushÚdml_strategyÚidentity_tokenr"  r#  Úpopulate_existingÚsynchronize_sessionÚclauserÂ   rB   r  ú0statement had 'orm' plugin but no plugin_subjectrË   r  Ú	core_onlyr  Úormr\   úHCan't use "bulk" ORM insert strategy without passing separate parameters)r  ÚevaluateÚfetchFzSValid strategies for session synchronization are 'auto', 'evaluate', 'fetch', Falser5  zkThe 'fetch' synchronization strategy is not available for 'bulk' ORM updates (i.e. multiple parameter sets)r4  r  )r.  r#  r"  r+  r'  )r  r  Úfrom_execution_optionsræ   rÃ   rB   ÚKeyErrorry   r¸   r›   re   r  Úsa_excÚInvalidRequestErrorr  ÚArgumentErrorr  Ú_do_pre_synchronize_autoÚ_do_pre_synchronize_evaluateÚ_do_pre_synchronize_fetchÚ	_annotater  r  r  r   Ú_orm_load_exec_optionsr“   r   Úimmutabledict)
r¹   r`   rº   rQ   r=   r  Úis_pre_eventÚupdate_optionsrÂ   Úsyncs
             rH   Úorm_pre_session_execz(_BulkUDCompileState.orm_pre_session_execµ  s#  € ô  ×6Ñ6×MÑMØ$òð Ø×(Ñ(ó
ñ	
ØØð $-ˆ�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óð ð
 ×+Ñ+¨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ñ& %Ü$+×$BÑ$BÑ!à$5×$;Ñ$;Ü×2Ñ2ó%Ð!ð
 Ü×ÑÐ0Ó1×7Ñ7Ø)¨>Ð:óð ð
ð 	
øôI ò 	MØLÐLÓL�5ð	Mús   ¸J$ Ê$J5c                óN  — |d   }|j                   dk(  rH|j                  dk(  r| j                  ||||«       nX|j                  dk(  rI| j                  ||||«       n4|j                   dk(  r%|j                  dk(  r| j	                  ||||«       |S | j                  ||||||«      S )Nr)  r2  r4  r5  r\   )r  r  Ú_do_post_synchronize_evaluateÚ_do_post_synchronize_fetchÚ"_do_post_synchronize_bulk_evaluater  )r¹   r`   rº   rQ   r=   r  r   rB  s           rH   Úorm_setup_cursor_resultz+_BulkUDCompileState.orm_setup_cursor_result?  sÊ   € ð$ +Ð+CÑDˆØ×'Ñ'¨5Ò0Ø×2Ñ2°jÒ@Ø×1Ñ1Ø˜Y¨°õð  ×4Ñ4¸Ò?Ø×.Ñ.Ø˜Y¨°õð ×)Ñ)¨VÒ3Ø×2Ñ2°jÒ@Ø×6Ñ6Ø˜V V¨^ôð ˆMà×(Ñ(ØØØØØØó
ð 	
rJ   c                ó:  ‡‡— d}‰j                   r‰j                  ndŠd‰j                  f|v r&|t        ˆfd„|d‰j                  f   D «       «      z  }‰j                  j                  �|‰j                  j                  fz  }‰rt        ˆfd„|D «       «      }|S )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  ót   •K  — | ]/  }|j                   s|j                  ‰u r|j                  ‰«      –— Œ1 y ­wr?   )Úinclude_aliasesrÏ   Ú_resolve_where_criteria)rN   ÚaerÔ   s     €rH   rX   zA_BulkUDCompileState._adjust_for_extra_criteria.<locals>.<genexpr>€  s:   øè ø€ ò !àð ×%Ò%¨¯©°hÑ)>ð	 ×*Ñ*¨8×4ñ!ùs   ƒ58c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr?   )Útraverse)rN   ÚcritÚadapters     €rH   rX   zA_BulkUDCompileState._adjust_for_extra_criteria.<locals>.<genexpr>Œ  s   øè ø€ ÒO¸4 × 0Ñ 0°× 6ÑOùs   ƒ)rÐ   Ú_adapterrB   rt   Ú_single_table_criterion)r¹   Úglobal_attributesrÔ   Úreturn_critrS  s     ` @rH   Ú_adjust_for_extra_criteriaz._BulkUDCompileState._adjust_for_extra_criteriak  s­   ù€ ð ˆà'/×'@Ò'@�(×#Ò#Àdˆð )Ø�O‰Oð
ð ñð œ5ó !à+Ø1°8·?±?ÐCñô!ó ñ ˆKð �?‰?×2Ñ2Ð>Ø˜HŸO™O×CÑCÐEÑEˆKáÜÓOÀ;ÔOÓOˆKàÐrJ   c                ó"  — 	 |j                   |j                  j                   ur&|j                  |j                   j                  «      }n|j                  |j                  «      }|D �cg c]
  } ||«      ‘Œ c}S # t        $ r g cY S w xY wc c}w )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ï   r7  )r¹   r   rB   ÚrowsÚpk_keysÚrows         rH   Ú_interpret_returning_rowsz-_BulkUDCompileState._interpret_returning_rows�  sˆ   € ð$	Ø×!Ñ!¨×);Ñ);×)GÑ)GÑGð
 !×.Ñ.¨v×/AÑ/A×/MÑ/MÓN‘à ×.Ñ.¨v×/AÑ/AÓB�ð )-Ö- ‘˜•Ò-Ð-øô ò 	ð ŠIð		üò .s   ‚A#A; Á)BÁ;B	ÂB	c                ó   — |j                   }|j                  }|D �cg c]F  }|j                  j                  |«      r)|j                  s|j                  «       ||j                  f‘ŒH }}|j                  }|�)|D ���	cg c]  \  }}}	|j                  |k(  r|||	f‘Œ }}}}	g }
|D ]J  \  }}}	 ||«      }|du s|t        j                  u sŒ&|
j                  |||	|t        j                  u f«       ŒL |
S c c}w c c}	}}w ©NT)r  r  rB   r”   ÚexpiredÚobjrc   r  r,  r   Ú_EXPIRED_OBJECTÚappend)r¹   rB  ru   rB   Úeval_conditionrO   Úraw_datar,  rb  rv   r   Úevaled_conditions               rH   Ú _get_matched_objects_on_criteriaz4_BulkUDCompileState._get_matched_objects_on_criteria³  s,  € à×/Ñ/ˆØ'×7Ñ7ˆð  ö
àØ�|‰|×Ñ Ô'°·²ð �Y‰Y‹[˜% §¡Ò,ð
ˆð 
ð (×7Ñ7ˆØÐ%ð *2÷ð á%�C˜ Ø×'Ñ'¨>Ò9ð �e˜UÒ#ðˆHò ð ˆØ!)ò 	ÑˆC�˜Ù-¨cÓ2Ðð
 ! DÑ(Ø#¤y×'@Ñ'@Ò@à—‘àØØØ(¬I×,EÑ,EÐEð	õð	ð" ˆùòA
ùôs   �AC4Á>C9c                óZ  — |j                   }|j                  }t        j                  |«      }d}|j                  r||j                  z  }i }|j
                  D ]   }|j                  sŒ|j                  |«       Œ" |r|| j                  ||«      z  }|r |j                  |Ž }	|	S d„ }
|
}	|	S )Nr@   c                 ó   — yr`  r@   )rb  s    rH   r  zK_BulkUDCompileState._eval_condition_from_statement.<locals>._eval_conditionð  s   € ØrJ   )
r  rÑ   r   Ú_EvaluatorCompilerÚ_where_criteriarè   Ú_is_criteria_optionÚget_global_criteriarX  Úprocess)r¹   rB  rº   rB   Ú
target_clsÚevaluator_compilerrR  rV  Úoptre  r  s              rH   Ú_eval_condition_from_statementz2_BulkUDCompileState._eval_condition_from_statementÚ  sÅ   € à×/Ñ/ˆØ—]‘]ˆ
ä&×9Ñ9¸*ÓEÐØˆØ×$Ò$Ø�I×-Ñ-Ñ-ˆDàÐØ×*Ñ*ò 	;ˆCØ×&Ó&Ø×'Ñ'Ð(9Õ:ð	;ñ Ø�C×2Ñ2Ð3DÀfÓMÑMˆDáØ7Ð/×7Ñ7¸Ð>ˆNð Ðòð -ˆNàÐrJ   c                ó¤   — 	 | j                  ||«      }||ddœz   S # t        j                  $ r Y nw xY w|ddiz  }| j                  ||||||«      S )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.

        r4  )r  r  r  r5  )rs  r   ÚUnevaluatableErrorr=  )r¹   r`   rº   rQ   r=   r  rB  re  s           rH   r;  z,_BulkUDCompileState._do_pre_synchronize_auto÷  s‡   € ð2	Ø ×?Ñ?Ø 	óˆNð "Ø#1Ø(2ñ%ñ ð øô ×+Ñ+ò 	Ùð	úð 	Ð1°7Ð;Ñ;ˆØ×,Ñ,ØØØØØØó
ð 	
s   ‚ œ2±2c                óž   — 	 | j                  ||«      }|d|iz   S # t        j                  $ r}t        j                  d|z  «      |‚d }~ww xY w)Nz{Could not evaluate current criteria in Python: "%s". Specify 'fetch' or False for the synchronize_session execution option.r  )rs  r   ru  r8  r9  )	r¹   r`   rº   rQ   r=   r  rB  re  Úerrs	            rH   r<  z0_BulkUDCompileState._do_pre_synchronize_evaluate'  sr   € ð
	Ø ×?Ñ?Ø 	óˆNð Ø˜~ð!
ñ 
ð 	
øô ×+Ñ+ò 	Ü×,Ñ,ð8à:=ñ>óð ð	ûð	ús   ‚ ›A®AÁAc                ó€   — |j                   rg S |j                  r#t        |j                  j                  «       «      S g S r?   )Ú_multi_valuesÚ_valuesre   rh   )r¹   rB   rº   s      rH   Ú_get_resolved_valuesz(_BulkUDCompileState._get_resolved_valuesA  s8   € à×"Ò"ØˆIØ×ÒÜ˜	×)Ñ)×/Ñ/Ó1Ó2Ð2àˆIrJ   c                ó  — g }|D ]f  \  }}|rHt        |t        j                  «      r.	 |j                  |   }|j	                  |j
                  |f«       ŒPt        j                  d|z  «      ‚ |S # t        j                  $ r Y Œ€w xY w)NzCAttribute name not found, can't be synchronized back to objects: %r)
r›   r!   ÚColumnElementÚ_columntopropertyrd  rl   Úorm_excÚUnmappedColumnErrorr8  r9  )r¹   rB   Úresolved_valuesÚvaluesrŒ   r�   r�   s          rH   Ú_resolved_keys_as_propnamesz/_BulkUDCompileState._resolved_keys_as_propnamesJ  s˜   € àˆØ#ò 	‰DˆAˆqÙœ* Q¬
×(@Ñ(@ÔAð1Ø!×3Ñ3°AÑ6�Dð —M‘M 4§8¡8¨Q -Õ0ä×0Ñ0ð7Ø9:ñ;óð ð	ð ˆøô ×2Ñ2ò Ùðús   ¨A0Á0BÂBc                óB  ‡ ‡‡‡— ‰j                   Š t        ‰j                  ‰j                  fz   Ž j	                  ‰«      j
                  |j                  Ž }|j                  |_        d Šdˆˆ ˆˆfd„}|j                  |||||¬«      }	|	j                  «       }
‰|
‰dœz   S )Nc                ó|  •—  | j                   j                  di | j                  ¤Ž}‰j                  |j                  ‰‰j
                  ‰j                  | j                  ¬«      }‰�‰|k7  r:t        j                  d«      ‚| j                  r|st        j                  d«      ‚|Š|rt        j                  «       S y )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$  r8  r9  r—   r˜   )Úorm_contextÚbindÚper_bind_resultr'  r¹   rB   rB  s      €€€€rH   Úskip_for_returningzI_BulkUDCompileState._do_pre_synchronize_fetch.<locals>.skip_for_returning~  sÊ   ø€ Ø/�;×&Ñ&×/Ñ/ÑM°+×2LÑ2LÑMˆDð "×3Ñ3Ø—‘ØØ-×=Ñ=Ø .× ?Ñ ?Ø*×9Ñ9ð 4ó ˆOð !Ð,Ø$¨Ò7Ü ×4Ñ4ð óð ð
 ×+Ò+±OÜ×0Ñ0ð-óð ð %4Ð!áÜ×*Ñ*Ó,Ð,àrJ   )r=   r  Ú
_add_event)r  r  )r‡  r3   Úreturnr   )
r  r#   rï   Úselect_identity_tokenÚselect_fromrç   rè   rl  ÚexecuteÚfetchall)r¹   r`   rº   rQ   r=   r  rB  Úselect_stmtrŠ  r   Úmatched_rowsr'  rB   s   `     `    @@rH   r=  z-_BulkUDCompileState._do_pre_synchronize_fetch\  s¾   û€ ð  ×/Ñ/ˆðŒF�V×'Ñ'¨6×+GÑ+GÐ*IÑIÐKß‰[˜Ó ß‰W�i×-Ñ-ð/ð 	ð
 '0×&?Ñ&?ˆÔ#ð !Ð÷	ð 	ðB —‘ØØØ/Ø)Ø)ð !ó 
ˆð —‘Ó(ˆàØ)Ø"3ñ!
ñ 
ð 	
rJ   N©r&  r   rB   úMapper[Any]r!  r  r"  r  r#  r  r$  r  rŒ  r  )rÒ   r  r  r'   r  r  r'  rD  rI  rX  r^  rh  rs  r;  r<  r{  rƒ  r=  r@   rJ   rH   r  r  ™  sZ  „ ô) ô )ð ð $Ø$Ø %Ø$ñ
$àð
$ð ð
$ð
 ð
$ð ð
$ð ð
$ð ð
$ð 
ò
$ó ð
$ð ñG
ó ðG
ðR ñ)
ó ð)
ðV ñ"ó ð"ðH ñ .ó ð .ðD ñ$ó ð$ðL ñó ðð8 ñ-
ó ð-
ð^ ñ
ó ð
ð2 ñó ðð ñó ðð" ñN
ó ñN
rJ   r  r2  Úinsertc                  óª   ‡ — e Zd ZU  G d„ de«      ZdZded<   ed„ «       Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z	edˆ fd„«       Z
ed	„ «       Zd
„ Zd„ Zˆ xZS )Ú_BulkORMInsertc                  ób   — e Zd ZU dZded<   dZded<   dZded<   dZd	ed
<   dZded<   dZ	ded<   y)ú%_BulkORMInsert.default_insert_optionsr  r.   r  Fr  Ú_render_nullsÚ_return_defaultsNr  r  Tr  r  )
rÒ   r  r  r  r
  rš  r›  r  r  r  r@   rJ   rH   Údefault_insert_optionsr™  °  sB   … Ø-3ˆÐ*Ó3Ø#ˆ�tÓ#Ø!&Ð˜$Ó&Ø15ˆÐ.Ó5Øˆ
�DÓØ#(Ð˜DÔ(rJ   rœ  NzOptional[FromStatement]ré   c                óì  — t         j                  j                  dh d£||j                  «      \  }}||d<   	 |j                  d   }|r!|j
                  |d<   |d|j
                  iz  }	 |s;|j                  dk(  r|d	d
iz  }n:|j                  dk(  r+t        j                  d«      ‚|j                  dk(  r|d	diz  }|j                  dk7  r2|st        j                  }n|j                  t        j                  «      }|s|j                  r|j                  «        |j                  d|j                  i«      }|t        j                   |«      j                  d|i«      |fS # t        $ r J d«       ‚w xY w)NÚ_sa_orm_insert_options>   r*  r+  rG   r-  r/  rÂ   rB   r  r0  r  r  r2  r\   r3  Úrawr+  )r—  rœ  r6  ræ   rÃ   rB   r7  r  r8  r9  r   r?  r“   r  r>  r   r@  )	r¹   r`   rº   rQ   r=   r  rA  Úinsert_optionsrÂ   s	            rH   rD  z#_BulkORMInsert.orm_pre_session_execº  s­  € ô ×1Ñ1×HÑHØ$ÚNØØ×(Ñ(ó	
ñ	
ØØð $-ˆ�xÑ ð	MØ&×7Ñ7Ð8HÑIˆNñ Ø+9×+@Ñ+@�˜xÑ(ØÐ#4°n×6KÑ6KÐ"LÑL‘áØ×+Ñ+¨vÒ5Ø ?°EÐ":Ñ:‘Ø×-Ñ-°Ò7Ü×0Ñ0ð2óð ð
 ×+Ñ+¨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" Å"E3c           
     ót  — |j                  d| j                  «      }|j                  dvrt        j                  d«      ‚|j                  dk(  r|j                  ||xs i |¬«      }|S |j                  dk(  r�|j                  }	|j                  �$|	j                  rt        j                  d|	› �«      ‚|	€J ‚|j                  €J ‚t        |	t        dt        |t        «      r|gn|«      |j                  d	|j                  |j                   ||¬
«      }n2|j                  dk(  r|j                  ||xs i |¬«      }n
t#        «       ‚t%        |j&                  «      s|S |j(                  r:|j                  dt*        j,                  «      }
|
ddiz  }
|j/                  d|
i«      }| j1                  ||||||«      S )Nrž  )rŸ  r\   r2  r  zHValid strategies for ORM insert strategy are 'raw', 'orm', 'bulk', 'autorŸ  )r=   r\   z`bulk INSERT with a 'post values' clause (typically upsert) not supported for multi-table mapper úIterable[Dict[str, Any]]F)rE   rF   rG   r<   r=   r2  rû   r  T)rÄ   rœ  r  r8  r:  r�  r  Ú_post_values_clauseÚ_multiple_persistence_tablesr9  Ú_transactionrI   r   r›   rc   r›  rš  ÚAssertionErrorr  ro   r  r   r   r“   r  )r¹   r`   rº   rQ   r=   r  rS   r   r   rB   r  s              rH   Úorm_execute_statementz$_BulkORMInsert.orm_execute_statementÿ  s  € ð +×.Ñ.Ø$ c×&@Ñ&@ó
ˆð ×'Ñ'ð 0
ñ 
ô ×&Ñ&ð2óð ð ×'Ñ'¨5Ò0Ø—\‘\Ø˜6š< RÐ;Lð "ó ˆFð ˆMà×'Ñ'¨6Ò1Ø#×3Ñ3ˆFð ×-Ñ-Ð9Ø×7Ò7ä×0Ñ0ðà$˜Xð'óð ð Ð%Ð%Ð%Ø×'Ñ'Ð3Ð3Ð3Ü!ØÜØ.Ü *¨6´4Ô 8�V‘H¸fóð ×$Ñ$ØØ .× ?Ñ ?Ø+×9Ñ9Ø$-Ø"3ô‰Fð ×)Ñ)¨UÒ2Ø—\‘\Ø˜6š< RÐ;Lð "ó ‰Fô !Ó"Ð"ä�I×(Ñ(Ô)ØˆMà×,Ò,Ø,×0Ñ0Ø&¬×(IÑ(IóˆLð Ð1°4Ð8Ñ8ˆLØ 1× 7Ñ 7Ø'¨Ð6ó!Ðð ×(Ñ(ØØØØØØó
ð 	
rJ   c                ó&  •— t        t        t        ‰| �  ||fi |¤Ž«      }|�|j                   }nd}|s|S |j
                  d   }|j                  j                  dd«      }|dk(  r|j                  |«       |S |dk(  r|j                  ||«       |S )NTrÂ   r+  rŸ  r\   r2  )
r   r—  Úsuperrê   ÚstackrÃ   r¸   rÄ   Ú_setup_for_bulk_insertÚ_setup_for_orm_insert)	r¹   rº   rò   Úkwrñ   ÚtoplevelrB   r+  Ú	__class__s	           €rH   rê   z#_BulkORMInsert.create_for_statementX  sª   ø€ äÜÜ‰GÑ(¨°HÑCÀÑCó
ˆð
 ÐØ#Ÿ>™>Ð)‰HàˆHÙØˆKà×+Ñ+Ð,<Ñ=ˆØ ×-Ñ-×1Ñ1°.À%ÓHˆØ˜6Ò!Ø×'Ñ'¨Ô1ð ˆð ˜UÒ"Ø×&Ñ& x°Ô8àˆrJ   c                óŽ   ‡— ˆfd„|j                  «       D «       D ���ci c]  \  }}}|�|j                  n||“Œ c}}}S c c}}}w )Nc              3  ó`   •K  — | ]%  \  }}‰j                   j                  |«      ||f–— Œ' y ­wr?   )rÙ   rÄ   )rN   rŒ   r�   rB   s      €rH   rX   z<_BulkORMInsert._resolved_keys_as_col_keys.<locals>.<genexpr>s  s-   øè ø€ ò Ù,0¨A¨q�—‘—‘˜a“ ! QÔ'ñùs   ƒ+.)rh   rl   )r¹   rB   Úresolved_value_dictÚcolrŒ   r�   s    `    rH   Ú_resolved_keys_as_col_keysz)_BulkORMInsert._resolved_keys_as_col_keyso  sP   ø€ óØ4G×4MÑ4MÓ4Oô÷
ð 
á��Q˜ð �ˆC�GŠG¨A¨qÑ0ô
ð 	
ùô 
s   ŸA c                óŠ   — t        t        j                  | j                  «      x}}| j	                  ||||d¬«      }|| _        y )NF©rõ   râ   )r   r    ÚInsertrº   rù   )rñ   rò   rB   rº   ró   s        rH   r¬  z$_BulkORMInsert._setup_for_orm_insertx  sI   € Ü*.¬s¯z©z¸4¿>¹>Ó*JÐJˆ	Ð'à×-Ñ-ØØØØØ"'ð .ó 
ˆ	ð #ˆ�rJ   c                ó  — t        t        j                  | j                  «      x}}|j                  }|d   |d   }}|j                  «       }||_        | j                  rA| j                  j                  «       D ��ci c]  \  }}|j                  |u r||“Œ c}}| _        | j                  ||||d¬«      }| j                  �5| j                  j                  j                  rt        j                  d«      ‚|| _        yc c}}w )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¸   Ú_clonery   Ú_dict_parametersrh   rù   r¬   rþ   rÿ   r8  ÚCompileError)	rñ   rò   rº   ró   ÚanÚemit_insert_tableÚemit_insert_mapperr³  Úvals	            rH   r«  z%_BulkORMInsert._setup_for_bulk_insert„  s  € ô +/¬s¯z©z¸4¿>¹>Ó*JÐJˆ	Ð'Ø×#Ñ#ˆð Ð#Ñ$ØÐ$Ñ%ð .Ðð
 ×$Ñ$Ó&ˆ	à+ˆ	ŒØ× Ò ð !%× 5Ñ 5× ;Ñ ;Ó =÷%á�C˜Ø—9‘9Ð 1Ñ1ð �S‘ó%ˆDÔ!ð ×-Ñ-ØØØØ)Ø"&ð .ó 
ˆ	ð ×#Ñ#Ð/Ø×'Ñ'×7Ñ7×@Ò@ä×%Ñ%ð3óð ð #ˆ�ùó1%s   Á=D )r`   r4   rº   z
dml.InsertrQ   r9   r=   r/   r  r2   rS   r7   rŒ  ú_result.Result)rŒ  r—  )rÒ   r  r  r'   rœ  ré   r
  r  rD  r§  rê   r´  r¬  r«  Ú__classcell__©r¯  s   @rH   r—  r—  ®  sÆ   ø… ô) ô )ð 15ÐÐ-Ó4àñB
ó ðB
ðH ðV
àðV
ð ðV
ð &ð	V
ð
 6ðV
ð 'ðV
ð ðV
ð 
òV
ó ðV
ðp ôó ðð, ñ
ó ð
ò
#ö,#rJ   r—  Úupdatec                  óÚ   ‡ — e Zd Zed„ «       Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„«       Zedddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zed„ «       Z	ed	„ «       Z
ed
„ «       Zed„ «       Zˆ xZS )Ú_BulkORMUpdatec                óX  — | j                  | «      }|j                  j                  dd«      }|j                   }|r|dk(  r|j	                  ||«       |S |dk(  s|dk(  r2d|j
                  j                  vrt        j                  |||fi |¤Ž |S |r|dv r|j                  ||«       |S )Nr+  Úunspecifiedr\   r1  rË   )r2  rÉ  )	Ú__new__r¸   rÄ   rª  Ú_setup_for_bulk_updatery   r*   Ú__init__Ú_setup_for_orm_update)r¹   rº   rò   r­  rñ   r+  r®  s          rH   rê   z#_BulkORMUpdate.create_for_statementµ  s¾   € à�{‰{˜3Óˆà ×-Ñ-×1Ñ1Ø˜Mó
ˆð  —~‘~Ð%ˆá˜¨Ò.Ø×'Ñ'¨	°8Ô<ð ˆð ˜KÒ'Ø˜}Ò,Ø i§o¡o×&BÑ&BÑBä×#Ñ# D¨)°XÑDÀÒDð ˆñ ˜\Ð-CÑCØ×&Ñ& y°(Ô;àˆrJ   c                óÔ  — |}|j                    }|j                  j                  d   }|j                  x| _        }| j	                  ||«      | _        | j                  ||||¬«       |j                  rt        | j
                  «      | _        |j                  «       }|j                  j                  d   |u r|j                  |_        |j                  r| j
                  |_        | j                  | j                  |«      }	|	r |j                  |	Ž }t        j                  | ||fi |¤Ž d}
|sd }n|j                  j!                  dd «      }|j                  j!                  dd «      }|dur/|dk(  xr( | j#                  |j$                  || j&                  ¬«      }|dk(  r'|r%d}
 |j(                  |j                  j*                  Ž }|r| j-                  |||||
¬	«      }|| _        y )
NrË   ©r®  Úprocess_criteria_for_toplevelFr.  r'  r5  )r!  Tr¶  )rª  ry   r¸   rB   r{  r  Ú_init_global_attributesrz  rc   r»  rÓ   rX  rV  Úwherer*   rÌ  rÄ   r'  r&  r!  rF   rï   rù   rº   )rñ   rº   rò   r­  ró   r®  rÔ   rB   Únew_stmtÚnew_critrâ   r.  r'  s                rH   rÍ  z$_BulkORMUpdate._setup_for_orm_updateÌ  s  € Ø'Ðà—~‘~Ð%ˆà—?‘?×/Ñ/°Ñ?ˆà'Ÿ™Ð.ˆŒ�fà $× 9Ñ 9¸&À)Ó LˆÔà×$Ñ$ØØØØ*2ð	 	%ô 	
ð ×ÒÜ$(¨×)>Ñ)>Ó$?ˆDÔ!à×#Ñ#Ó%ˆà�>‰>×&Ñ& ~Ñ6¸&Ñ@Ø#×/Ñ/ˆHŒNð ×ÒØ#×4Ñ4ˆHÔà×2Ñ2Ø×"Ñ" Fó
ˆñ Ø%�x—~‘~ xÐ0ˆHô 	×Ñ  h°Ñ?¸BÒ?à %ÐáØ"&Ñà"*×"7Ñ"7×";Ñ";Ø% tó#Ðð %×1Ñ1×5Ñ5Ø ó
Ðð  EÑ)ð $ wÑ.ò Ø×*Ñ*Ø×$Ñ$ f¸D×<NÑ<Nð +ó ð ð  'Ò)Ñ.?Ø$(Ð!ð 0�x×/Ñ/°·±×1KÑ1KÐLˆHáØ×0Ñ0ØØ#ØØ!Ø&;ð 1ó ˆHð "ˆ�rJ   c                ó¸  — t        t        j                  |«      }|j                  }|d   |d   }}|j	                  «       }||_        t        j                  | ||fi |¤Ž | j                  rt        j                  d«      ‚| j                  rA| j                  j                  «       D ��ci c]  \  }}|j
                  |u r||“Œ c}}| _        || _        yc c}}w )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»  ry   r*   rÌ  Ú_maintain_values_orderingr8  r9  r¼  rh   rº   )	rñ   rº   rò   r­  r¾  Úemit_update_tableÚ_r³  rÁ  s	            rH   rË  z%_BulkORMUpdate._setup_for_bulk_update,  sä   € ô œŸ™ YÓ/ˆ	Ø×#Ñ#ˆð Ð#Ñ$ØÐ$Ñ%ð Ðð
 ×$Ñ$Ó&ˆ	Ø+ˆ	Œä×Ñ  i°Ñ@¸RÒ@à×)Ò)Ü×,Ñ,ð=óð ð × Ò ð !%× 5Ñ 5× ;Ñ ;Ó =÷%á�C˜Ø—9‘9Ð 1Ñ1ð �S‘ó%ˆDÔ!ð
 #ˆ�ùó%s   Â*Cc           
     óÊ  •— |j                  d| j                  «      }|j                  r:|j                  dt        j                  «      }|ddiz  }|j                  d|i«      }|j                  dvrt        j                  d«      ‚|j                  dk(  r»|j                   }	|j                  dk7  sJ ‚|j                  r$|j                  d	k(  rt        j                  d
«      ‚|j                  }
|
€J ‚|j                  €J ‚t        |
t        dt!        |t"        «      r|gn|«      |j                  dd||	¬«      }| j%                  ||||||«      S t&        ‰| �Q  ||||||«      S )Nr)  rû   r  T)r2  r  r\   r1  zOValid strategies for ORM UPDATE strategy are 'orm', 'auto', 'bulk', 'core_only'r\   r5  r4  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)rE   r†   r‚   rƒ   )rÄ   r  r  r   r   r“   r  r8  r:  rl  r  r9  r  r¥  r‡   r   r›   rc   rI  r©  r§  )r¹   r`   rº   rQ   r=   r  rS   rB  r  rƒ   rB   r   r¯  s               €rH   r§  z$_BulkORMUpdate.orm_execute_statementP  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�V‘H¸fóð ×$Ñ$ØØ$)Ø$-Ø&;ôˆFð ×.Ñ.ØØØØ!ØØóð ô ‘7Ñ0ØØØØ!ØØóð rJ   Fr   c               óì   — |j                   xr |j                  j                  }|sy|r|j                  S |r|j                  S |r/|j                  s#t        j                  d|j                  › d�«      ‚y)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_multifromr8  r½  rÌ   ©r¹   r&  rB   r!  r"  r#  r$  Únormal_answers           rH   r'  z _BulkORMUpdate.can_use_returning¦  s…   € ð ×$Ñ$ÒN¨×);Ñ);×)NÑ)Nð 	ñ ØáØ×7Ñ7Ð7ñ Ø×5Ñ5Ð5á 7×#EÒ#EÜ×%Ñ%Ø˜GŸL™L˜>ð *Eð Eóð ð rJ   c                ó¨  ‡— |sy |j                   }|j                  D �cg c]  }|j                  ‘Œ }}|j                  }|D �]  Š|j	                  ˆfd„|D «       |j
                  «      }	|j                  |	«      }
|
sŒ=t        ‰«      j                  |«      }|
j                  }|
j                  j                  |«      }|D ]  }||v sŒ‰|   ||<   Œ |
j                  j                  j                  |
d |«       |
j                  |t!        |«      «       |j                  |«      j                  |«      }|sŒ÷|
j#                  ||«       �Œ y c c}w )Nc              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wr?   r@   )rN   rl   Úparams     €rH   rX   zD_BulkORMUpdate._do_post_synchronize_bulk_evaluate.<locals>.<genexpr>Ù  s   øè ø€ Ò/ ��s•Ñ/ùs   ƒ)r  rs   rl   Úidentity_mapÚidentity_key_from_primary_keyr  Úfast_get_stater¢   Ú
differencerc   Ú
unmodifiedr¤   ÚmanagerÚdispatchÚrefreshÚ_commitre   Ú_expire_attributes)r¹   r`   rQ   r   rB  rB   Úpropr\  rè  Úidentity_keyrO   Úevaluated_keysrv   Úto_evaluaterl   Ú	to_expirerç  s                   @rH   rH  z1_BulkORMUpdate._do_post_synchronize_bulk_evaluateË  sH  ø€ ñ Øà×/Ñ/ˆØ(.×(BÑ(BÖC �4—8“8ÐCˆÐ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ò Ø×(Ñ(¨°	Ö:ñ;	;ùò	 Ds   ŸEc                ó4  — | j                  ||j                  j                  «       «      }| j                  ||||j                  j
                  d   |D ����	cg c]  \  }}}}	|||f‘Œ c}	}}}|j                  «       |j                  «       «       y c c}	}}}w )Nr   )rh  rè  Ú
all_statesÚ#_apply_update_set_values_to_objectsr   Úcompiled_parametersÚprefetch_colsÚpostfetch_cols)
r¹   r`   rº   r   rB  Úmatched_objectsrb  rO   rv   rÛ  s
             rH   rF  z,_BulkORMUpdate._do_post_synchronize_evaluateö  s“   € ð ×>Ñ>ØØ× Ñ ×+Ñ+Ó-ó
ˆð
 	×/Ñ/ØØØØ�N‰N×.Ñ.¨qÑ1Ø=L×MÑMÑ%9 S¨%°¸ˆc�5˜%Ò ÕMØ× Ñ Ó"Ø×!Ñ!Ó#õ	
ùõ
 Ns   ÁBc                ó  — |j                   }|j                  }|r:| j                  |||«      }|D �cg c]  }t        |«      |j                  fz   ‘Œ }	}n|j
                  }	|	D �cg c]  }|dd |d   f‘Œ c}D �
�cg c]<  \  }
}|j                  �||j                  k(  r|j                  t        |
«      |¬«      ‘Œ> c}}
D �cg c]  }||j                  v r|j                  |   ‘Œ! }}|sy | j                  ||||j                  j                  d   |D �cg c]-  }|t        j                  |«      t        j                  |«      f‘Œ/ c}|j                  «       |j!                  «       «       y c c}w c c}w c c}}
w c c}w c c}w ©Nr   éÿÿÿÿ)r,  )r  Úreturned_defaults_rowsr^  rt   r  r  ré  re   rè  rù  r   rú  r   Úinstance_stateÚinstance_dictrû  rü  )r¹   r`   rº   r   rB  Útarget_mapperr  Úpk_rowsr]  r’  rï   r,  ró  Úobjsrb  s                  rH   rG  z)_BulkORMUpdate._do_post_synchronize_fetch	  s½  € ð '×6Ñ6ˆà!'×!>Ñ!>ÐÙ!Ø×3Ñ3Ø˜Ð'=óˆGð
 #öàô �c“
˜n×<Ñ<Ð>Ó>ðˆLñ ð
 *×7Ñ7ˆLð 5Aö4Ø-0�S˜˜2�Y  B¡Ò(ò4÷
!ñ
 0�K ð "×1Ñ1Ð9Ø! ^×%CÑ%CÒCð ×;Ñ;Ü˜Ó%Ø#1ð <õ ó
!ö
àð ˜w×3Ñ3Ñ3ð × Ñ  Ó.ð
ˆð 
ñ  Øà×/Ñ/ØØØØ�N‰N×.Ñ.¨qÑ1ð  öð ð	 Ü×-Ñ-¨cÓ2Ü×,Ñ,¨SÓ1òòð × Ñ Ó"Ø×!Ñ!Ó#õ	
ùò5ùò4ùó
!ùò
ùò0s   ² E.Á%E3Á<AE8Ã$E>Ä2Fc           
     ó¢  — |j                   }|j                  }	t        j                  |	«      }
| j	                  ||«      }| j                  ||«      }i }|D ]>  \  }}	 |
j                  t        j                  t        j                  |«      «      }|||<   Œ@ t        |j                  «       «      }|D ��ch c]  \  }}|’Œ	 }}}t        «       }|D �ch c].  }|j                  |v r||j                   v r|j                  |vr|’Œ0 }}|D �ch c])  }||j                   v r|j                   |   j                  ’Œ+ c}j#                  |«      }|D �cg c]'  }|j                   |   j                  |j                  f‘Œ) }}|D �]  \  }}}|j%                  |D ��ci c]  \  }}|||   “Œ c}}«       |j'                  |j(                  |«       |j*                  j-                  |«      }|D ]  }||v sŒ ||   |«      ||<   Œ |j.                  j0                  j3                  |d|«       |j5                  |t        |«      «       |j-                  |«      j#                  |«      } | r|j'                  || «       |j7                  |«       �Œ
 |j9                  |«       y# t        j                  $ r Y �Œ\w xY wc c}}w c c}w c c}w c c}w c c}}w )zeapply values to objects derived from an update statement, e.g.
        UPDATE..SET <values>

        N)r  rÑ   r   rk  r{  rƒ  ro  r   r³   r"   rµ   ru  re   r£   r¢   rl   r~  rë  rÅ  rñ  rc   rì  r¤   rí  rî  rï  rð  ÚaddÚ_register_altered)!r¹   r`   rB  rº   Úeffective_paramsrý  rû  rü  rB   rp  rq  r�  Úresolved_keys_as_propnamesÚvalue_evaluatorsrl   ÚvalueÚ
_evaluatorrô  rŒ   r�   Úattribru   rÙ   Úto_prefetchrö  Úprefetch_transferrb  rO   rv   Úcol_to_propÚc_keyrõ  Úformerly_modifieds!                                    rH   rù  z2_BulkORMUpdate._apply_update_set_values_to_objects?  sú  € ð   ×/Ñ/ˆØ—]‘]ˆ
Ü&×9Ñ9¸*ÓEÐØ×2Ñ2°6¸9ÓEˆØ%(×%DÑ%DØ�Oó&
Ð"ð ÐØ4ò 	3‰JˆC�ð3Ø/×7Ñ7Ü×$Ñ$¤U×%@Ñ%@À%ÓHó�
ð )3Ð  Ò%ð	3ô Ð.×3Ñ3Ó5Ó6ˆØ :×;™˜˜1’!Ð;ˆÑ;ä“ˆð #ö
àØ�u‰uÐ(Ñ(Ø�V×-Ñ-Ñ-Ø—‘˜^Ñ+ò	 ð
ˆð 
ð $ö
àØ�F×,Ñ,Ñ,ð ×$Ñ$ QÑ'×+Ó+ò
÷ ‰*�^Ó
$ð	 	ð ?Jö
Ø9:ˆV×%Ñ% aÑ(×,Ñ,¨a¯e©eÒ4ð
Ðð 
ð "1ó 	ÑˆC�˜à�L‰Lð /@÷á*˜ Uð  Ð!1°%Ñ!8Ñ8óôð ×$Ñ$ U§Z¡Z°Ô;à×*Ñ*×7Ñ7¸ÓGˆKà"ò <�Ø˜%’<à!6Ð!1°#Ñ!6°sÓ!;�E˜#’Jð<ð
 �M‰M×"Ñ"×*Ñ*¨5°$¸ÔDà�M‰M˜%¤ kÓ!2Ô3ð
 !'× 3Ñ 3°EÓ :× EÑ EØó!Ðñ !Ø×(Ñ(¨Ð0AÔBà�J‰J�uÖð?	ð@ 	×!Ñ! &Õ)øôw ×/Ñ/ò Úðüó <ùò
ùò
ùò
ùós0   Á3JÂ5J6Ã3J<Ä.KÅ,KÆKÊJ3Ê2J3)r`   r4   rº   z
dml.UpdaterQ   r9   r=   r/   r  r2   rS   r7   rŒ  rÂ  r“  )rÒ   r  r  r  rê   rÍ  rË  r§  r'  rH  rF  rG  rù  rÃ  rÄ  s   @rH   rÇ  rÇ  ³  s?  ø„ àñó ðò,^"ò@"#ðH ðSàðSð ðSð &ð	Sð
 6ðSð 'ðSð ðSð 
ôSó ðSðj ð $Ø$Ø %Ø$ñ"àð"ð ð"ð
 ð"ð ð"ð ð"ð ð"ð 
ò"ó ð"ðH ñ(;ó ð(;ðT ñ
ó ð
ð$ ñ3
ó ð3
ðj ñW*ó ôW*rJ   rÇ  Údeletec                  ó®   ‡ — e Zd Zed„ «       Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„«       Zedddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„«       Zed„ «       Zed„ «       Zˆ xZ	S )
Ú_BulkORMDeletec           	     ó   — | j                  | «      }|j                  j                  dd«      }|dk(  s|dk(  r2d|j                  j                  vrt	        j
                  |||fi |¤Ž |S |j                   }|}|j                  j                  d   }|j                  x|_        }	|j                  ||||¬«       |j                  «       }
|
j                  j                  d   |	u r|	j                  |
_        | j                  |j                  |	«      }|r |
j                  |Ž }
t	        j
                  ||
|fi |¤Ž d}|sd }n|j                  j                  dd «      }|j                  j                  dd «      }|durJ|d	k(  xrC |j                  |j                  |	|j                   |j                  j                  d
d«      ¬«      }|r%d} |
j"                  |
j                  j$                  Ž }
|r|j'                  |||
|	|¬«      }
|
|_        |S )Nr+  rÉ  r1  rË   rÏ  Fr.  r'  r5  r#  )r!  r#  Tr¶  )rÊ  r¸   rÄ   ry   r(   rÌ  rª  rB   rÑ  r»  rÓ   rX  rV  rÒ  r'  r&  r!  rF   rï   rù   rº   )r¹   rº   rò   r­  rñ   r+  r®  ró   rÔ   rB   rÓ  rÔ  râ   r.  r'  s                  rH   rê   z#_BulkORMDelete.create_for_statementœ  sA  € à�{‰{˜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—~‘~ xÐ0ˆHô 	×Ñ  h°Ñ?¸BÒ?à %ÐáØ"&Ñà"*×"7Ñ"7×";Ñ";Ø% tó#Ðð %×1Ñ1×5Ñ5Ø ó
Ðð  EÑ)ð $ wÑ.ò Ø×*Ñ*Ø×$Ñ$ØØ"&×"4Ñ"4Ø$,×$9Ñ$9×$=Ñ$=Ø)¨5ó%ð	 +ó ð ñ Ø$(Ð!à/�x×/Ñ/°·±×1KÑ1KÐLˆHáØ×0Ñ0ØØ#ØØ!Ø&;ð 1ó ˆHð "ˆŒàˆrJ   c                óò   •— |j                  d| j                  «      }|j                  dk(  rt        j                  d«      ‚|j                  dvrt        j
                  d«      ‚t        ‰| �  ||||||«      S )Nr)  r\   zˆBulk ORM DELETE not supported right now. Statement may be invoked at the Core level using session.connection().execute(stmt, parameters))r2  r  r1  zGValid strategies for ORM DELETE strategy are 'orm', 'auto', 'core_only')rÄ   r  r  r8  r9  r:  r©  r§  )	r¹   r`   rº   rQ   r=   r  rS   rB  r¯  s	           €rH   r§  z$_BulkORMDelete.orm_execute_statementø  s”   ø€ ð +×.Ñ.Ø$ c×&@Ñ&@ó
ˆð ×'Ñ'¨6Ò1Ü×,Ñ,ðAóð ð ×'Ñ'Ð/KÑKÜ×&Ñ&ðóð ô
 ‰wÑ,Ø�Y Ð(9¸>È4ó
ð 	
rJ   Fr   c               óÐ   — |j                   xr |j                  j                  }|sy|r|j                  S |r/|j                  s#t	        j
                  d|j                  › d�«      ‚y)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_multifromr8  r½  rÌ   rã  s           rH   r'  z _BulkORMDelete.can_use_returning  sz   € ð ×$Ñ$ÒN¨×);Ñ);×)NÑ)Nð 	ñ Øñ ð ×5Ñ5Ð5á 7×#EÒ#Eô ×%Ñ%Ø˜GŸL™L˜>ð *Eð Eóð ð rJ   c                ó  — | j                  ||j                  j                  «       «      }g }|D ]A  \  }}}	}
|
r'|j                  |	|j                  j                  «       Œ1|j                  |«       ŒC |r|j                  |«       y y r?   )rh  rè  rø  Ú_expireÚ	_modifiedrd  Ú_remove_newly_deleted)r¹   r`   rº   r   rB  rý  Ú	to_deleterÛ  rO   rv   Úis_partially_expireds              rH   rF  z,_BulkORMDelete._do_post_synchronize_evaluateA  sŒ   € ð ×>Ñ>ØØ× Ñ ×+Ñ+Ó-ó
ˆð
 ˆ	à5Dò 	(Ñ1ˆAˆu�eÐ1Ù#Ø—‘˜e W×%9Ñ%9×%CÑ%CÕDà× Ñ  Õ'ð		(ñ Ø×)Ñ)¨)Õ4ð rJ   c                óª  — |j                   }|j                  }|r:| j                  |||«      }|D �cg c]  }t        |«      |j                  fz   ‘Œ }	}n|j
                  }	|	D ]i  }|dd }
|d   }|j                  t        |
«      |¬«      }||j                  v sŒ8|j                  t        j                  |j                  |   «      g«       Œk y c c}w rÿ  )r  r  r^  rt   r  r  ré  re   rè  r   r   r  )r¹   r`   rº   r   rB  r  r  r  r]  r’  rï   r,  ró  s                rH   rG  z)_BulkORMDelete._do_post_synchronize_fetchU  sþ   € ð '×6Ñ6ˆà!'×!>Ñ!>Ðá!Ø×3Ñ3Ø˜Ð'=óˆGð #öàô �c“
˜n×<Ñ<Ð>Ó>ðˆLñ ð
 *×7Ñ7ˆLàò 	ˆCØ˜a ˜)ˆKØ  ™WˆNð )×FÑFÜ�[Ó!Ø-ð Gó ˆLð ˜w×3Ñ3Ò3Ø×-Ñ-ä"×1Ñ1Ø#×0Ñ0°Ñ>óðõñ	ùòs   ² C)r`   r4   rº   z
dml.DeleterQ   r9   r=   r/   r  r2   rS   r7   rŒ  rÂ  r“  )
rÒ   r  r  r  rê   r§  r'  rF  rG  rÃ  rÄ  s   @rH   r  r  š  sÿ   ø„ àñYó ðYðv ð
àð
ð ð
ð &ð	
ð
 6ð
ð 'ð
ð ð
ð 
ô
ó ð
ð> ð $Ø$Ø %Ø$ñ&àð&ð ð&ð
 ð&ð ð&ð ð&ð ð&ð 
ò&ó ð&ðP ñ5ó ð5ð& ñ$ó ô$rJ   r  )rB   ú
Mapper[_O]rC   ú<Union[Iterable[InstanceState[_O]], Iterable[Dict[str, Any]]]rD   r5   rE   r  rF   r  rG   r  r<   úLiteral[None]r=   ú$Optional[OrmExecuteOptionsParameter]rŒ  ÚNone)rB   r$  rC   r%  rD   r5   rE   r  rF   r  rG   r  r<   úOptional[dml.Insert]r=   r'  rŒ  zcursor.CursorResult[Any])rB   r$  rC   r%  rD   r5   rE   r  rF   r  rG   r  r<   r)  r=   r'  rŒ  z"Optional[cursor.CursorResult[Any]])rB   r”  rC   r%  rD   r5   rE   r  r†   r  r‚   r&  rƒ   r  rŒ  r(  )rB   r”  rC   r%  rD   r5   rE   r  r†   r  r‚   úOptional[dml.Update]rƒ   r  rŒ  z _result.Result[Unpack[TupleAny]])rB   r”  rC   r%  rD   r5   rE   r  r†   r  r‚   r*  rƒ   r  rŒ  z*Optional[_result.Result[Unpack[TupleAny]]])rB   r”  rC   r¢  rŒ  r(  )SÚ__doc__Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   r   Ú r   r   r   r   r  r   r   Úbaser   r   r   r   r   Ú
interfacesr   r8  r   Úenginer   r   r—   Úsqlr   r    r!   r"   r#   r$   Úsql.baser%   r&   r'   Úsql.dmlr(   r)   r*   r+   Úutil.typingr,   r-   Ú_typingr.   r/   r0   rB   r1   r`   r2   r3   r4   r5   rO   r6   r7   r8   Úengine.interfacesr9   Úobjectr:   rI   r‡   rf   r«   r  Ú
plugin_forr—  rÇ  r  r@   rJ   rH   ú<module>r:     s  ðñõ
 #å Ý Ý Ý Ý Ý Ý Ý  Ý Ý å Ý Ý Ý Ý Ý Ý Ý -Ý 2Ý "Ý !Ý &Ý Ý Ý Ý &Ý Ý Ý Ý Ý Ý Ý ,Ý #Ý Ý $Ý $Ý $Ý Ý "Ý  áÝ,Ý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%ð 0óY%ðx+Øð+Ø#;ð+à	ó+ô8CÐ+ô CôLR
˜,ô R
ðj €×Ñ˜ Ó)ôA#�\ >ó A#ó *ðA#ðH €×Ñ˜ Ó)ôc*Ð(¨.ó c*ó *ðc*ðL €×Ñ˜ Ó)ô_Ð(¨.ó _ó *ñ_rJ   