§
    
 @gö ã                  óB  — 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,m/Z/ dd(lm0Z0 dd)l1m2Z2 e
rHdd*l3m4Z4 dd+l3m5Z5 dd,l3m6Z6 dd-l7m8Z8 dd.l9m:Z: dd/l9m;Z; dd0l9m<Z< dd1l9m=Z= dd2l>m?Z? dd3lm@Z@ dd4lmAZA dd5lBmCZC  ed6eD¬7¦  «        ZEe		 	 djdkdI„¦   «         ZFe		 	 djdldL„¦   «         ZF	 	 dmdndO„ZFe		 	 dodpdU„¦   «         ZGe		 	 dodqdX„¦   «         ZG	 	 drdsdZ„ZGd[„ ZH G d\„ d]e¦  «        ZI G d^„ d_eI¦  «        ZJ e*jK        d`da¦  «         G db„ dceIe.¦  «        ¦   «         ZL e*jK        d`dd¦  «         G de„ dfeJe/¦  «        ¦   «         ZM e*jK        d`dg¦  «         G dh„ dieJe-¦  «        ¦   «         ZNdMS )tzoadditional 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.Úmapperú
Mapper[_O]Úmappingsú<Union[Iterable[InstanceState[_O]], Iterable[Dict[str, Any]]]Úsession_transactionr2   ÚisstatesÚboolÚreturn_defaultsÚrender_nullsÚuse_orm_insert_stmtúLiteral[None]Úexecution_optionsú$Optional[OrmExecuteOptionsParameter]ÚreturnÚNonec                ó   — d S ©N© ©r9   r;   r=   r>   r@   rA   rB   rD   s           úS/var/www/piapp/venv/lib/python3.11/site-packages/sqlalchemy/orm/bulk_persistence.pyÚ_bulk_insertrM   J   ó	   € ð €Có    úOptional[dml.Insert]úcursor.CursorResult[Any]c                ó   — d S rI   rJ   rK   s           rL   rM   rM   X   rN   rO   Nú"Optional[cursor.CursorResult[Any]]c                ó€  ‡ ‡‡‡— ‰ j         }|j        j        rt          d¦  «        ‚|r(|rd„ ‰D ¦   «         }	d„ |	D ¦   «         Šn)d„ ‰D ¦   «         Šnd„ ‰D ¦   «         Št	          ‰ ‰¦  «         |                     |¦  «        Šd }
ˆ fd„|j                             ¦   «         D ¦   «         }|rd}nt          |¦  «        dk    rd}nd	}|D ]§\  }}|� ˆfd
„| 	                    ¦   «         D ¦   «         nd}ˆˆ fd„t          j        |ˆˆ fd„‰D ¦   «         d|||¬¦  «        D ¦   «         }t          j        |d ||||||¬¦  «        }|�,|j        r|
€|}
Œ‡|j        r|sJ ‚|
                     |¦  «        }
Œ¨|rD|rB‰ j        }d„ ‰ j        D ¦   «         }|	D ]'\  }Š|t%          ˆfd„|D ¦   «         ¦  «        f|_        Œ(|�|
€J ‚|
S d S )NzJconnection_callable / per-instance sharding not supported in bulk_insert()c                ó    — g | ]}||j         f‘ŒS rJ   ©Údict©Ú.0Ústates     rL   ú
<listcomp>z _bulk_insert.<locals>.<listcomp>z   s   € Ð@Ð@Ð@¨e�u˜eœjÐ)Ð@Ð@Ð@rO   c                ó   — g | ]\  }}|‘ŒS rJ   rJ   )rY   rZ   Údict_s      rL   r[   z _bulk_insert.<locals>.<listcomp>{   s   € Ð;Ð;Ð;¡. 5¨%˜Ð;Ð;Ð;rO   c                ó   — g | ]	}|j         ‘Œ
S rJ   rV   rX   s     rL   r[   z _bulk_insert.<locals>.<listcomp>}   ó   € Ð9Ð9Ð9 u˜œ
Ð9Ð9Ð9rO   c                ó,   — g | ]}t          |¦  «        ‘ŒS rJ   rV   ©rY   Úms     rL   r[   z _bulk_insert.<locals>.<listcomp>   ó   € Ð.Ð.Ð. •D˜‘G”GÐ.Ð.Ð.rO   c                ó0   •— g | ]\  }}|‰j         v ¯||f‘ŒS rJ   )Ú_pks_by_table)rY   ÚtableÚmpr9   s      €rL   r[   z _bulk_insert.<locals>.<listcomp>†   s9   ø€ ð ð ð áˆE�2Ø�FÔ(Ð(Ð(ð 
�ˆà(Ð(Ð(rO   Tr   Fc                ó<   •— g | ]}|j         ‰d          v ¯|j         ‘ŒS ©r   ©Úkey©rY   Úbr;   s     €rL   r[   z _bulk_insert.<locals>.<listcomp>    s6   ø€ ð ð ð àØ”5˜H QœKÐ'Ð'ð ”à'Ð'Ð'rO   rJ   c           	   3  ó>   •K  — | ]\  }}}}}}}}d ||‰
‰	|||fV — Œd S rI   rJ   )rY   rZ   Ú
state_dictÚparamsrg   ÚconnÚvalue_paramsÚhas_all_pksÚhas_all_defaultsÚ
connectionr9   s            €€rL   ú	<genexpr>z_bulk_insert.<locals>.<genexpr>©   sk   øè è € ð 
ð 
ñ	ØØØØØØØØ ð# ØØØØØØØ ð	ð
ð 
ð 
ð 
ð 
ð 
rO   c              3  ó$   •K  — | ]
}d |‰‰fV — Œd S rI   rJ   ©rY   Úmappingru   r9   s     €€rL   rv   z_bulk_insert.<locals>.<genexpr>¿   s,   øè è € ÐMÐM¸�$˜ ¨Ð4ÐMÐMÐMÐMÐMÐMrO   )Úbulkr@   rA   Úinclude_bulk_keys)ÚbookkeepingrB   rD   c                ó   — g | ]	}|j         ‘Œ
S rJ   rj   )rY   Úps     rL   r[   z _bulk_insert.<locals>.<listcomp>Ú   s   € ÐDÐDÐD A˜!œ%ÐDÐDÐDrO   c                ó    •— g | ]
}‰|         ‘ŒS rJ   rJ   )rY   rk   r]   s     €rL   r[   z _bulk_insert.<locals>.<listcomp>Þ   s   ø€ Ð<Ð<Ð< c�u˜S”zÐ<Ð<Ð<rO   )Úbase_mapperÚsessionÚconnection_callableÚNotImplementedErrorÚ_expand_compositesru   Ú_sorted_tablesÚitemsÚlenÚ_get_embedded_bindparamsr   Ú_collect_insert_commandsÚ_emit_insert_statementsÚ
_returningÚreturns_rowsÚsplice_horizontallyÚ_identity_classÚ_identity_key_propsÚtuplerk   )r9   r;   r=   r>   r@   rA   rB   rD   r€   ÚstatesÚreturn_resultÚmappers_to_runr|   rf   Úsuper_mapperÚextra_bp_namesÚrecordsr   Úidentity_clsÚidentity_propsrZ   ru   r]   s   ``                   @@rL   rM   rM   f   sþ  øøøø€ ð Ô$€KàÔ"Ô6ð 
Ý!ð-ñ
ô 
ð 	
ð
 ð -Øð 	:Ø@Ð@°xÐ@Ñ@Ô@ˆFØ;Ð;°FÐ;Ñ;Ô;ˆHˆHà9Ð9°Ð9Ñ9Ô9ˆHˆHà.Ð. XÐ.Ñ.Ô.ˆÝ˜6 8Ñ,Ô,Ð,à$×/Ò/°Ñ<Ô<€Jà8<€Mðð ð ð à$Ô3×9Ò9Ñ;Ô;ðñ ô €Nð ð 	àˆˆÝ	ˆ^Ñ	Ô	˜qÒ	 Ð	 ð ˆˆàˆà-ð ?Jð ?JÑˆˆ|ð #Ð.ðð ð ð à,×EÒEÑGÔGðñ ô ð ð ð 	ð
ð 
ð 
ð 
ð 
õ( Ô5ØØMÐMÐMÐMÐMÀHÐMÑMÔMØØ +Ø)Ø"0ðñ ô ð)
ñ 
ô 
ˆõ< Ô4ØØØØØØ#Ø 3Ø/ð	
ñ 	
ô 	
ˆð Ð*Ø&Ô1ð J°]Ð5JØ &��ØÔ$ð JØ"Ð"Ð"Ð"Ø -× AÒ AÀ&Ñ IÔ I�øàð ˜8ð ØÔ-ˆØDÐD¨Ô)CÐDÑDÔDˆØ"ð 	ð 	‰LˆE�5àÝÐ<Ð<Ð<Ð<¨^Ð<Ñ<Ô<Ñ=Ô=ðˆEŒIˆIð
 Ð&ØÐ(Ð(Ð(ØÐð 'Ð&rO   TúMapper[Any]Úupdate_changed_onlyÚuse_orm_update_stmtÚenable_check_rowcountc                ó   — d S rI   rJ   ©r9   r;   r=   r>   rš   r›   rœ   s          rL   Ú_bulk_updaterŸ   æ   ó	   € ð €CrO   úOptional[dml.Update]ú_result.Result[Any]c                ó   — d S rI   rJ   rž   s          rL   rŸ   rŸ   ó   r    rO   úOptional[_result.Result[Any]]c                óÒ  ‡ ‡‡‡‡— ‰ j         }‰ j        Š‰ j        r ‰ j        j        h                     ‰¦  «        Šˆfd„Š|r|rˆˆ fd„‰D ¦   «         Šn)d„ ‰D ¦   «         Šnd„ ‰D ¦   «         Št          ‰ ‰¦  «         |j        j        rt          d¦  «        ‚| 	                    |¦  «        Š|� ˆfd„| 
                    ¦   «         D ¦   «         nd}|j                             ¦   «         D ]g\  }	}
‰                      |
¦  «        r	|	‰ j        vrŒ$t          j        d |	ˆˆ fd„‰D ¦   «         d	||¬
¦  «        }t          j        |d |
|	|d||¬¦  «         Œh|�t%          j        ¦   «         S d S )Nc                óR   •‡— ˆˆfd„‰j                              ¦   «         D ¦   «         S )Nc                ó6   •— i | ]\  }}|‰j         v s|‰v ¯||“ŒS rJ   )Úcommitted_state)rY   ÚkÚvÚsearch_keysrZ   s      €€rL   ú
<dictcomp>z7_bulk_update.<locals>._changed_dict.<locals>.<dictcomp>  sA   ø€ ð 
ð 
ð 
á��1Ø�EÔ)Ð)Ð)¨Q°+Ð-=Ð-=ð ˆqà-=Ð-=Ð-=rO   )rW   r†   )r9   rZ   r«   s    `€rL   Ú_changed_dictz#_bulk_update.<locals>._changed_dict  sB   øø€ ð
ð 
ð 
ð 
ð 
àœ
×(Ò(Ñ*Ô*ð
ñ 
ô 
ð 	
rO   c                ó(   •— g | ]} ‰‰|¦  «        ‘ŒS rJ   rJ   )rY   rZ   r­   r9   s     €€rL   r[   z _bulk_update.<locals>.<listcomp>  s%   ø€ ÐKÐKÐK¸˜˜ f¨eÑ4Ô4ÐKÐKÐKrO   c                ó   — g | ]	}|j         ‘Œ
S rJ   rV   rX   s     rL   r[   z _bulk_update.<locals>.<listcomp>  r_   rO   c                ó,   — g | ]}t          |¦  «        ‘ŒS rJ   rV   ra   s     rL   r[   z _bulk_update.<locals>.<listcomp>  rc   rO   zJconnection_callable / per-instance sharding not supported in bulk_update()c                ó<   •— g | ]}|j         ‰d          v ¯|j         ‘ŒS ri   rj   rl   s     €rL   r[   z _bulk_update.<locals>.<listcomp>*  s6   ø€ ð 	
ð 	
ð 	
àØŒu˜ œÐ#Ð#ð ŒEà#Ð#Ð#rO   rJ   c              3  óX   •K  — | ]$}d |‰‰‰j         r|‰j         j                 nd fV — Œ%d S rI   )Ú_version_id_proprk   rx   s     €€rL   rv   z_bulk_update.<locals>.<genexpr>:  sg   øè è € ð ð ð ð ØØØð "Ô2ð"˜ Ô 7Ô ;Ô<Ð<à!ð
ðð ð ð ð ð rO   T)rz   r›   r{   F)r|   r›   rœ   )r€   Ú_primary_key_propkeysr³   rk   Úunionr„   r�   r‚   rƒ   ru   rˆ   r…   r†   Úisare   r   Ú_collect_update_commandsÚ_emit_update_statementsÚ_resultÚnull_result)r9   r;   r=   r>   rš   r›   rœ   r€   r•   rf   r”   r–   r­   ru   r«   s   ``          @@@rL   rŸ   rŸ      s;  øøøøø€ ð Ô$€KàÔ.€KØÔð GØÔ.Ô2Ð3×9Ò9¸+ÑFÔFˆð
ð 
ð 
ð 
ð 
ð ð -Øð 	:ØKÐKÐKÐKÐKÀ(ÐKÑKÔKˆHˆHà9Ð9°Ð9Ñ9Ô9ˆHˆHà.Ð. XÐ.Ñ.Ô.ˆÝ˜6 8Ñ,Ô,Ð,àÔ"Ô6ð 
Ý!ð-ñ
ô 
ð 	
ð
 %×/Ò/°Ñ<Ô<€Jð Ð*ð	
ð 	
ð 	
ð 	
à(×AÒAÑCÔCð	
ñ 	
ô 	
ð 	
ð ð ð  +Ô9×?Ò?ÑAÔAð "
ð "
Ñˆˆ|Ø�zŠz˜,Ñ'Ô'ð 	¨5¸Ô8LÐ+LÐ+LØåÔ6ØØðð ð ð ð ð  (ðñ ô ð Ø 3Ø,ð'
ñ 
ô 
ˆõ* 	Ô+ØØØØØØØ 3Ø"7ð		
ñ 		
ô 		
ð 		
ð 		
ð Ð&ÝÔ"Ñ$Ô$Ð$ð 'Ð&rO   c                óØ   ‡— | j         Š‰sd S t          ‰                     ¦   «         ¦  «        }ˆfd„|D ¦   «         }|D ]+}|                     |¦  «        D ]} ||         |¦  «         ŒŒ,d S )Nc                óF   •— i | ]}|‰|                               ¦   «         “ŒS rJ   )Ú)_populate_composite_bulk_save_mappings_fn)rY   rk   Úcomposite_attrss     €rL   r¬   z&_expand_composites.<locals>.<dictcomp>a  s<   ø€ ð ð ð àð 	ˆ_˜SÔ!×KÒKÑMÔMðð ð rO   )Ú
compositesÚsetÚkeysÚintersection)r9   r;   Úcomposite_keysÚ
populatorsry   rk   r¾   s         @rL   r„   r„   [  s­   ø€ ØÔ'€OØð Øˆå˜×-Ò-Ñ/Ô/Ñ0Ô0€Nðð ð ð à!ðñ ô €Jð ð %ð %ˆØ!×.Ò.¨wÑ7Ô7ð 	%ð 	%ˆCØˆJ�sŒO˜GÑ$Ô$Ð$Ð$ð	%ð%ð %rO   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dd
œd„Zed„ ¦   «         ZdS )ÚORMDMLStateTNz&Optional[ORMFromStatementCompileState]Úfrom_statement_ctxc              #  óü  K  — t           j        }|D �]i\  }}t          j        t          j        |¦  «        }t          |t          ¦  «        r t          ||t          ¬¦  «        }|t          u rYt          j        t          j        |¦  «        |r3t          j        t          j
        |t          j        ¦   «         d¬¦  «        n|fV — Œ³ |||                     |¦  «        |¦  «        E d {V —† ŒÚd|j        v rK|j        }	t          |	d         |	d         ¦  «        }
 |||
                     |¦  «        |¦  «        E d {V —† �Œ.||s|n2t          j        t          j
        |t          j        ¦   «         d¬¦  «        fV — �Œkd S )N)ÚdefaultT)Útype_Úis_crudÚentity_namespaceÚ	proxy_key)r(   Ú_get_crud_kv_pairsr   Úexpectr    ÚDMLColumnRoleÚ
isinstanceÚstrr#   r   ÚExpressionElementRoler"   ÚNullTypeÚ_bulk_update_tuplesÚ_annotations)Úclsr9   Ú	statementÚkv_iteratorÚneeds_to_be_cacheableÚcore_get_crud_kv_pairsr©   rª   ÚdescÚk_annoÚattrs              rL   Ú_get_orm_crud_kv_pairsz"ORMDMLState._get_orm_crud_kv_pairsn  s  è è € õ "0Ô!BÐàð ,	ñ ,	‰DˆAˆqÝÔ ¥Ô!4°aÑ8Ô8ˆAå˜!�SÑ!Ô!ð )Ý,¨V°QÅÐIÑIÔI�Ø�8Ð#Ð#å!Ô(­Ô)<¸aÑ@Ô@ð 1ð�	Ô(Ý!Ô7ØÝ"*Ô"3Ñ"5Ô"5Ø$(ð	ñ ô ð ð ð
ð 
ð 
ð 
ð 
ð  6Ð5Ø!Ø×0Ò0°Ñ3Ô3Ø-ñ ô  ð ð ð ð ð ð ð ð ð
 $ q¤~Ð5Ð5Øœ�Ý,ØÐ-Ô.°°{Ô0Cñô �ð 2Ð1ØØ×,Ò,¨QÑ/Ô/Ø)ñô ð ð ð ð ð ð ð ñ ð à0ð�A�Aå"Ô)ÝÔ3ØÝ&Ô/Ñ1Ô1Ø $ð	ñ ô ð	
ð 
ð 
ð 
ñ 
ðE,	ð ,	rO   c                ó~   ‡ ‡‡— ‰j         d         Š‰r‰j        st          j        ‰|¦  «        S ˆ ˆˆfd„|D ¦   «         S )NÚplugin_subjectc           
     óˆ   •— g | ]>}t          ‰                     ‰j        ‰|                     ¦   «         d ¦  «        ¦  «        ‘Œ?S )F)rW   rß   r9   r†   )rY   Ú
value_dictr×   rá   rØ   s     €€€rL   r[   z8ORMDMLState._get_multi_crud_kv_pairs.<locals>.<listcomp>«  s`   ø€ ð 
ð 
ð 
ð õ Ø×*Ò*Ø"Ô)¨9°j×6FÒ6FÑ6HÔ6HÈ%ñô ñô ð
ð 
ð 
rO   )Ú_propagate_attrsr9   r(   Ú_get_multi_crud_kv_pairs)r×   rØ   rÙ   rá   s   `` @rL   rå   z$ORMDMLState._get_multi_crud_kv_pairs¢  sv   øøø€ à"Ô3Ð4DÔEˆàð 	 ^Ô%:ð 	Ý!Ô:Ø˜;ñô ð ð
ð 
ð 
ð 
ð 
ð 
ð *ð
ñ 
ô 
ð 	
rO   c                óÆ   — |s
J d¦   «         ‚|j         d         }|r|j        st          j        |||¦  «        S t	          |                      |j        |||¦  «        ¦  «        S )Nz0no test coverage for needs_to_be_cacheable=Falserá   )rä   r9   r(   rÎ   Úlistrß   )r×   rØ   rÙ   rÚ   rá   s        rL   rÎ   zORMDMLState._get_crud_kv_pairs´  s˜   € ð "ð	>ð 	>à=ñ	>ô 	>ð 	>ð #Ô3Ð4DÔEˆàð 	 ^Ô%:ð 	Ý!Ô4Ø˜;Ð(=ñô ð õ Ø×&Ò&ØÔ%ØØØ%ñ	ô ñ
ô 
ð 	
rO   c                ó¢   — |j         j        d         }|j        }|j        r|j        }n|j        j        }||j        |j        |j        |j        dœS )NÚparententity)ÚnameÚtypeÚexprÚentityrf   )	rf   rÖ   r9   Úis_aliased_classrê   Úclass_Ú__name__rí   Úlocal_table)r×   rØ   Úext_infor9   Ú_label_names        rL   Úget_entity_descriptionz"ORMDMLState.get_entity_descriptionÊ  s_   € à”?Ô/°Ô?ˆØ”ˆØÔ$ð 	1Ø"œ-ˆKˆKà œ-Ô0ˆKð  Ø”MØ”OØ”oØÔ'ð
ð 
ð 	
rO   c                óP   ‡‡— d„ Šd„ Šˆfd„ˆfd„|j         D ¦   «         D ¦   «         S )Nc                ó8   — | j                              dd ¦  «        S )Nré   )rÖ   Úget)Úcs    rL   Ú_ent_for_colzCORMDMLState.get_returning_column_descriptions.<locals>._ent_for_colÝ  s   € Ø”>×%Ò% n°dÑ;Ô;Ð;rO   c                ót   — |€| S | j                              dd ¦  «        }|s| S t          |j        || ¦  «        S )NrÍ   )rÖ   r÷   Úgetattrrí   )rø   ÚentrÍ   s      rL   Ú_attr_for_colzDORMDMLState.get_returning_column_descriptions.<locals>._attr_for_colà  sD   € Øˆ{Ø�Øœ×*Ò*¨;¸Ñ=Ô=ˆIØð 9Ø�å˜sœz¨9°aÑ8Ô8Ð8rO   c                ób   •— g | ]+\  }}|j         |j         ‰||¦  «        |j        |j        d œ‘Œ,S ))rê   rë   rì   Úaliasedrí   )rk   rë   rî   rí   )rY   rø   rü   rý   s      €rL   r[   zAORMDMLState.get_returning_column_descriptions.<locals>.<listcomp>é  sZ   ø€ ð 
ð 
ð 
ñ ��3ð œØœØ%˜ a¨Ñ-Ô-ØÔ/Øœ*ðð ð
ð 
ð 
rO   c                ó*   •— g | ]}| ‰|¦  «        f‘ŒS rJ   rJ   )rY   rø   rù   s     €rL   r[   zAORMDMLState.get_returning_column_descriptions.<locals>.<listcomp>ñ  s3   ø€ ð ð ð Ø)*��L�L ‘O”OÐ$ðð ð rO   )Ú_all_selected_columns)r×   rØ   rý   rù   s     @@rL   Ú!get_returning_column_descriptionsz-ORMDMLState.get_returning_column_descriptionsÛ  ss   øø€ ð	<ð 	<ð 	<ð	9ð 	9ð 	9ð
ð 
ð 
ð 
ðð ð ð Ø.7Ô.Mðñ ô ð
ñ 
ô 
ð 	
rO   )Úuse_supplemental_colsc               óÂ  — |j         r×t          |j         |d¬¦  «        } |j        di |j        ¤Ž} |j        |j        Ž }|| _        t          j        ||¦  «        x| _	        }| 
                    |¦  «         |                     ¦   «         }d|_         d„ |j        D ¦   «         }|s|                     |j        ¦  «         |r |j        |j        d|iŽ}n
 |j        |Ž }|S )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_namesrJ   c                ó   — g | ]}|®|‘ŒS rI   rJ   )rY   rø   s     rL   r[   z4ORMDMLState._setup_orm_returning.<locals>.<listcomp>  s   € ÐNÐNÐN AÀÀ˜aÀÀÀrO   Úsupplemental_cols)r‹   r   rD   Ú_execution_optionsÚoptionsÚ_with_optionsÚselect_statementr   Úcreate_for_statementrÇ   Ú!setup_dml_returning_compile_stateÚ	_generateÚprimary_columnsÚextendÚprimary_keyr@   Ú	returning)	ÚselfÚcompilerÚorm_level_statementÚdml_level_statementÚ
dml_mapperr  ÚfsÚfscÚcols_to_returns	            rL   Ú_setup_orm_returningz ORMDMLState._setup_orm_returningö  s?  € ð( Ô)ð +	ÝØ#Ô.Ø#Ø %ðñ ô ˆBð
 &�Ô%ÐOÐOÐ(;Ô(NÐOÐOˆBØ�”Ð0Ô>Ð?ˆBØ$&ˆDÔ!õ -ÔAÀ"ÀhÑOÔOðPˆDÔ#Øà×1Ò1°*Ñ=Ô=Ð=à"5×"?Ò"?Ñ"AÔ"AÐØ-/ÐÔ*àNÐN¨Ô)<ÐNÑNÔNˆNð "ð >Ø×%Ò% jÔ&<Ñ=Ô=Ð=à$ð Ø&IÐ&9Ô&Ið  Ô+ð'ð '5ð'ð 'Ð#Ð#ð  'DÐ&9Ô&CØ#ð'Ð#ð #Ð"rO   c           	     ó  — |j         }|j        j        }|j        re|j        j        j        sT|                     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Ø   rp   rD   Úbind_argumentsr   Úexecution_contextr  Úload_optionsÚquerycontexts              rL   Ú_return_orm_returningz!ORMDMLState._return_orm_returning9  sš   € ð #œNÐØ)Ô2Ô@ˆð Ô,ð	à!Ô4ÔDÔMð	ð -×0Ò0Ø&­Ô(Iñô ˆLõ (ØÔ0ØÔ.ØØØØ!Øñô ˆLõ Ô$ V¨\Ñ:Ô:Ð:àˆMrO   )rð   Ú
__module__Ú__qualname__Úis_dml_returningrÇ   Ú__annotations__Úclassmethodrß   rå   rÎ   rô   r  r  r(  rJ   rO   rL   rÆ   rÆ   j  sô   € € € € € € ØÐØAEÐÐEÐEÐEÑEàð1ð 1ñ „[ð1ðf ð
ð 
ñ „[ð
ð" ð
ð 
ñ „[ð
ð* ð
ð 
ñ „[ð
ð  ð
ð 
ñ „[ð
ðB #ðA#ð A#ð A#ð A#ð A#ðF ðð ñ „[ðð ð rO   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dS )Ú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S )ú)BulkUDCompileState.default_update_optionsÚautor+   Ú_dml_strategyr-   Ú_synchronize_sessionFr?   Ú_can_use_returningÚ_is_delete_usingÚ_is_update_fromTÚ
_autoflushNúOptional[Mapper[Any]]Ú_subject_mapper)rð   r)  r*  r3  r,  r4  r5  r6  r7  r8  r:  r)   Ú_resolved_valuesÚ_eval_conditionÚ_matched_rowsÚ_identity_tokenrJ   rO   rL   Údefault_update_optionsr1  ]  sŸ   € € € € € € Ø-3ˆÐ3Ð3Ð3Ñ3Ø;AÐÐAÐAÐAÑAØ#(ÐÐ(Ð(Ð(Ñ(Ø!&ÐÐ&Ð&Ð&Ñ&Ø %ˆÐ%Ð%Ð%Ñ%Øˆ
ÐÐÐÑØ15ˆÐ5Ð5Ð5Ñ5Ø%ÐØˆØˆØˆˆˆrO   r?  F©Úis_multitableÚis_update_fromÚis_delete_usingÚis_executemanyÚdialectr   r9   r™   rA  r?   rB  rC  rD  rF   c               ó   — t          ¦   «         ‚rI   )rƒ   )r×   rE  r9   rA  rB  rC  rD  s          rL   Úcan_use_returningz$BulkUDCompileState.can_use_returningj  s   € õ "Ñ#Ô#Ð#rO   c                óz  — t           j                             dh d£||j        ¦  «        \  }}||d<   	 |j        d         }|r|j        |d<   |d|j        iz  }n# t          $ r J d¦   «         ‚w xY wd	|j        j        vr|d
diz  }nZt          |t          ¦  «        s3|j        dk    r|d
diz  }n2|j        dk    rt          j        d¦  «        ‚n|j        dk    r|d
diz  }|j        }	|	�=|	dvrt          j        d¦  «        ‚|j        dk    r|	dk    rt          j        d¦  «        ‚|sé|j        r|                     ¦   «          |j        dk    rr|j        dk    r|                      ||||||¦  «        }ni|j        dk    r|                      ||||||¦  «        }nC|j        dk    r|                      ||||||¦  «        }n|j        dk    r|j        dk    r|ddiz  }|                     |j        |j        |j        |j        |j        dœ¦  «        }|t1          j        |¦  «                             d|i¦  «        fS )NÚ_sa_orm_update_options>   Ú	autoflushÚdml_strategyÚidentity_tokenrB  rC  Úsynchronize_sessionÚclauserá   r9   r:  Fú0statement had 'orm' plugin but no plugin_subjectré   r3  Ú	core_onlyr2  Úormrz   úHCan't use "bulk" ORM insert strategy without passing separate parameters)r2  ÚevaluateÚfetchFzSValid strategies for session synchronization are 'auto', 'evaluate', 'fetch', FalserT  zkThe 'fetch' synchronization strategy is not available for 'bulk' ORM updates (i.e. multiple parameter sets)rS  r4  )rM  rC  rB  rK  rG  )r/  r?  Úfrom_execution_optionsr  rä   r9   ÚKeyErrorrf   rÖ   rÑ   rç   r3  Úsa_excÚInvalidRequestErrorr4  ÚArgumentErrorr8  Ú_do_pre_synchronize_autoÚ_do_pre_synchronize_evaluateÚ_do_pre_synchronize_fetchÚ	_annotater6  r7  r5  r   Úimmutabledictrµ   )
r×   r�   rØ   rp   rD   r$  Úis_pre_eventÚupdate_optionsrá   Úsyncs
             rL   Úorm_pre_session_execz'BulkUDCompileState.orm_pre_session_execw  sE  € õ Ô5×LÒLØ$ðð ð ð ØÔ(ñ
ô 
ñ	
ØØð $-ˆ�xÑ ð	MØ&Ô7Ð8HÔIˆNð ð MØ+9Ô+@�˜xÑ(ØÐ#4°nÔ6KÐ"LÑL�øøõ ð 	Mð 	Mð 	MØLÐLÑLÔLÐLð	Møøøð  ¤Ô!=Ð=Ð=Ø˜°Ð<Ñ<ˆNˆNÝ˜F¥DÑ)Ô)ð 
	<ØÔ+¨vÒ5Ð5Ø ?°EÐ":Ñ:��ØÔ-°Ò7Ð7ÝÔ0ð2ñô ð ð 8ð Ô+¨vÒ5Ð5Ø ?°FÐ";Ñ;�àÔ2ˆØÐØÐ?Ð?Ð?ÝÔ*ð=ñô ð ð Ô+¨vÒ5Ð5¸$À'º/¸/ÝÔ0ðLñô ð ð
 ð 0	ØÔ(ð %Ø×"Ò"Ñ$Ô$Ð$àÔ+¨uÒ4Ð4Ø!Ô6¸&Ò@Ð@Ø%(×%AÒ%AØØ!ØØ)Ø&Ø&ñ&ô &�N�Nð $Ô8¸JÒFÐFØ%(×%EÒ%EØØ!ØØ)Ø&Ø&ñ&ô &�N�Nð $Ô8¸GÒCÐCØ%(×%BÒ%BØØ!ØØ)Ø&Ø&ñ&ô &�Nøð  Ô-°Ò7Ð7Ø!Ô6¸&Ò@Ð@Ø"Ð'=¸zÐ&JÑJ�Nð "×+Ò+à+9Ô+NØ'5Ô'FØ&4Ô&DØ$2Ô$@Ø)7Ô)Jðð ñô ˆIð ÝÔÐ0Ñ1Ô1×7Ò7Ø)¨>Ð:ñô ð
ð 	
ó   ³A ÁA.c                óL  — |d         }|j         dk    rH|j        dk    r|                      ||||¦  «         nT|j        dk    r|                      ||||¦  «         n0|j         dk    r%|j        dk    r|                      ||||¦  «         |S |                      ||||||¦  «        S )NrI  rQ  rS  rT  rz   )r3  r4  Ú_do_post_synchronize_evaluateÚ_do_post_synchronize_fetchÚ"_do_post_synchronize_bulk_evaluater(  )r×   r�   rØ   rp   rD   r$  r   r`  s           rL   Úorm_setup_cursor_resultz*BulkUDCompileState.orm_setup_cursor_resultï  só   € ð$ +Ð+CÔDˆØÔ'¨5Ò0Ð0ØÔ2°jÒ@Ð@Ø×1Ò1Ø˜Y¨°ñô ð ð ð  Ô4¸Ò?Ð?Ø×.Ò.Ø˜Y¨°ñô ð øð Ô)¨VÒ3Ð3ØÔ2°jÒ@Ð@Ø×6Ò6Ø˜V V¨^ñô ð ð ˆMà×(Ò(ØØØØØØñ
ô 
ð 	
rO   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.

        rJ   NÚadditional_entity_criteriac              3  ób   •K  — | ])}|j         s	|j        ‰u ¯|                     ‰¦  «        V — Œ*d S rI   )Úinclude_aliasesrí   Ú_resolve_where_criteria)rY   Úaerò   s     €rL   rv   z@BulkUDCompileState._adjust_for_extra_criteria.<locals>.<genexpr>0  s[   øè è € ð !ð !àð Ô%ð!ð
 *,¬°hÐ)>Ð)>ð	 ×*Ò*¨8Ñ4Ô4ð *?Ð)>Ð)>Ð)>ð!ð !rO   c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S rI   )Útraverse)rY   ÚcritÚadapters     €rL   rv   z@BulkUDCompileState._adjust_for_extra_criteria.<locals>.<genexpr><  s1   øè è € ÐOÐO¸4 × 0Ò 0°Ñ 6Ô 6ÐOÐOÐOÐOÐOÐOrO   )rî   Ú_adapterr9   r�   Ú_single_table_criterion)r×   Úglobal_attributesrò   Úreturn_critrr  s     ` @rL   Ú_adjust_for_extra_criteriaz-BulkUDCompileState._adjust_for_extra_criteria  sÛ   øø€ ð ˆà'/Ô'@ÐJ�(Ô#Ð#Àdˆð )ØŒOð
ð ðð ð �5ð !ð !ð !ð !à+Ø1°8´?ÐCôð!ñ !ô !ñ ô ñ ˆKð Œ?Ô2Ð>Ø˜HœOÔCÐEÑEˆKàð 	PÝÐOÐOÐOÐOÀ;ÐOÑOÔOÑOÔOˆKàÐrO   c                ó  ‡‡	‡
— |j         |j        j         ur|S d„ |j         j        D ¦   «         Š|                     ¦   «         D ]z}|j        € np|j         |j        j         u rŒt          |j        |j        j                  ¦  «        }d„ ||         D ¦   «         }‰                     ¦   «         D ]\  }}||         ‰|<   ŒŒ{ˆfd„t          |j         j        ¦  «        D ¦   «         Š	ˆ	fd„|j        j        D ¦   «         Š
ˆ
fd„|D ¦   «         S )aÇ  translate from local inherited table columns to base mapper
        primary key columns.

        Joined inheritance mappers always establish the primary key in terms of
        the base table.   When we UPDATE a sub-table, we can only get
        RETURNING for the sub-table's columns.

        Here, we create a lookup from the local sub table's primary key
        columns to the base table PK columns so that we can get identity
        key values from RETURNING that's against the joined inheritance
        sub-table.

        the complexity here is to support more than one level deep of
        inheritance, where we have to link columns to each other across
        the inheritance hierarchy.

        c                ó   — i | ]}||“ŒS rJ   rJ   )rY   Úpks     rL   r¬   z@BulkUDCompileState._interpret_returning_rows.<locals>.<dictcomp>[  s   € ÐOÐOÐO¨"˜r 2ÐOÐOÐOrO   Nc                ó   — i | ]\  }}||“Œ	S rJ   rJ   )rY   Úsuper_pkÚsub_pks      rL   r¬   z@BulkUDCompileState._interpret_returning_rows.<locals>.<dictcomp>d  s   € ÐNÐNÐNÑ/?¨x¸˜& (ÐNÐNÐNrO   c                ó(   •— i | ]\  }}‰|         |“ŒS rJ   rJ   )rY   ÚidxÚlpkÚlocal_pk_to_base_pks      €rL   r¬   z@BulkUDCompileState._interpret_returning_rows.<locals>.<dictcomp>h  s4   ø€ ð 
ð 
ð 
á��Sð   Ô$ cð
ð 
ð 
rO   c                ó    •— g | ]
}‰|         ‘ŒS rJ   rJ   )rY   ÚbpkÚlookups     €rL   r[   z@BulkUDCompileState._interpret_returning_rows.<locals>.<listcomp>l  s*   ø€ ð 
ð 
ð 
ØˆF�3ŒKð
ð 
ð 
rO   c                óH   •‡— g | ]Št          ˆfd „‰D ¦   «         ¦  «        ‘ŒS )c              3  ó(   •K  — | ]}‰|         V — Œd S rI   rJ   )rY   r  Úrows     €rL   rv   zJBulkUDCompileState._interpret_returning_rows.<locals>.<listcomp>.<genexpr>o  s'   øè è € Ð>Ð> 3�c˜#”hÐ>Ð>Ð>Ð>Ð>Ð>rO   )r�   )rY   r‡  Úprimary_key_converts    @€rL   r[   z@BulkUDCompileState._interpret_returning_rows.<locals>.<listcomp>o  s8   øø€ ÐOÐOÐOÀ3•Ð>Ð>Ð>Ð>Ð*=Ð>Ñ>Ô>Ñ>Ô>ÐOÐOÐOrO   )	rñ   r€   r  Úiterate_to_rootÚinheritsrW   Ú_table_to_equatedr†   Ú	enumerate)r×   r9   Úrowsrg   Út_to_eÚ
col_to_colrz  Úsuper_r�  r„  rˆ  s           @@@rL   Ú_interpret_returning_rowsz,BulkUDCompileState._interpret_returning_rows@  sd  øøø€ ð( Ô VÔ%7Ô%CÐCÐCØˆKð PÐO°Ô0BÔ0NÐOÑOÔOÐà×(Ò(Ñ*Ô*ð 		=ð 		=ˆBØŒ{Ð"Ø�Ø” 2¤;Ô#:Ð:Ð:Øå˜"Ô.¨r¬{Ô/FÔGÑHÔHˆFØNÐNÀ6È"Ä:ÐNÑNÔNˆJØ1×7Ò7Ñ9Ô9ð =ð =‘
��FØ*4°VÔ*<Ð# BÑ'Ð'ð=ð
ð 
ð 
ð 
å% fÔ&8Ô&DÑEÔEð
ñ 
ô 
ˆð
ð 
ð 
ð 
Ø#)Ô#5Ô#Að
ñ 
ô 
Ðð PÐOÐOÐOÈ$ÐOÑOÔOÐOrO   c                ó
  ‡
‡— |j         Š|j        }ˆfd„|D ¦   «         }|j        Š
‰
�ˆ
fd„|D ¦   «         }g }|D ]H\  }}} ||¦  «        }	|	du s|	t          j        u r%|                     ||||	t          j        u f¦  «         ŒI|S )Nc                óŠ   •— g | ]?}|j                              ‰¦  «        ¯|j        °#|                     ¦   «         ||j        f‘Œ@S rJ   )r9   r¶   ÚexpiredÚobjrW   )rY   rZ   r9   s     €rL   r[   zGBulkUDCompileState._get_matched_objects_on_criteria.<locals>.<listcomp>v  s\   ø€ ð 
ð 
ð 
àØŒ|×Ò Ñ'Ô'ð
ð 16´ð
Ø�YŠY‰[Œ[˜% ¤Ð,ð
ð 
ð 
rO   c                ó8   •— g | ]\  }}}|j         ‰k    ¯|||f‘ŒS rJ   ©rL  )rY   r•  rZ   r]   rL  s       €rL   r[   zGBulkUDCompileState._get_matched_objects_on_criteria.<locals>.<listcomp>~  s>   ø€ ð ð ð á%�C˜ ØÔ'¨>Ò9Ð9ð �e˜UÐ#à9Ð9Ð9rO   T)r:  r<  r>  r   Ú_EXPIRED_OBJECTÚappend)r×   r`  r‘   Úeval_conditionÚraw_datar   r•  rZ   r]   Úevaled_conditionrL  r9   s             @@rL   Ú _get_matched_objects_on_criteriaz3BulkUDCompileState._get_matched_objects_on_criteriaq  só   øø€ àÔ/ˆØ'Ô7ˆð
ð 
ð 
ð 
àð
ñ 
ô 
ˆð (Ô7ˆØÐ%ðð ð ð à)1ðñ ô ˆHð ˆØ!)ð 	ð 	ÑˆC�˜Ø-˜~¨cÑ2Ô2Ðð
 ! DÐ(Ð(Ø#¥yÔ'@Ð@Ð@à—’àØØØ(­IÔ,EÐEð	ñô ð øð ˆrO   c                ó  — |j         }|j        }t          j        |¦  «        }d}|j        r
||j        z  }i }|j        D ]}|j        r|                     |¦  «         Œ|r||                      ||¦  «        z  }|r |j	        |Ž }	nd„ }
|
}	|	S )NrJ   c                ó   — dS ©NTrJ   )r•  s    rL   r<  zJBulkUDCompileState._eval_condition_from_statement.<locals>._eval_condition®  s   € Ø�trO   )
r:  rï   r   Ú_EvaluatorCompilerÚ_where_criteriar
  Ú_is_criteria_optionÚget_global_criteriarw  Úprocess)r×   r`  rØ   r9   Ú
target_clsÚevaluator_compilerrq  ru  Úoptrš  r<  s              rL   Ú_eval_condition_from_statementz1BulkUDCompileState._eval_condition_from_statement˜  sÒ   € àÔ/ˆØ”]ˆ
å&Ô9¸*ÑEÔEÐØˆØÔ$ð 	.Ø�IÔ-Ñ-ˆDàÐØÔ*ð 	;ð 	;ˆCØÔ&ð ;Ø×'Ò'Ð(9Ñ:Ô:Ð:øàð 	NØ�C×2Ò2Ð3DÀfÑMÔMÑMˆDàð 	-Ø7Ð/Ô7¸Ð>ˆNˆNðð ð ð -ˆNàÐrO   c                ó¬   — 	 |                       ||¦  «        }||ddœz   S # t          j        $ r Y nw xY w|ddiz  }|                      ||||||¦  «        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.

        rS  )r<  r4  r4  rT  )r©  r   ÚUnevaluatableErrorr\  )r×   r�   rØ   rp   rD   r$  r`  rš  s           rL   rZ  z+BulkUDCompileState._do_pre_synchronize_autoµ  s¡   € ð2	Ø ×?Ò?Ø 	ñô ˆNð "Ø#1Ø(2ð%ð %ñ ð øõ Ô+ð 	ð 	ð 	ØˆDð	øøøð 	Ð1°7Ð;Ñ;ˆØ×,Ò,ØØØØØØñ
ô 
ð 	
s   ‚   2±2c                óž   — 	 |                       ||¦  «        }n/# t          j        $ r}t          j        d|z  ¦  «        |‚d }~ww xY w|d|iz   S )Nz{Could not evaluate current criteria in Python: "%s". Specify 'fetch' or False for the synchronize_session execution option.r<  )r©  r   r«  rW  rX  )	r×   r�   rØ   rp   rD   r$  r`  rš  Úerrs	            rL   r[  z/BulkUDCompileState._do_pre_synchronize_evaluateå  s‡   € ð
	Ø ×?Ò?Ø 	ñô ˆNˆNøõ Ô+ð 	ð 	ð 	ÝÔ,ð8à:=ñ>ñô ð ð	øøøøð	øøøð Ø˜~ð!
ñ 
ð 	
s   ‚ ™A¨A Á Ac                ó¨   — |j         rg S |j        rt          |j        ¦  «        S |j        r&t          |j                             ¦   «         ¦  «        S g S rI   )Ú_multi_valuesÚ_ordered_valuesrç   Ú_valuesr†   )r×   r9   rØ   s      rL   Ú_get_resolved_valuesz'BulkUDCompileState._get_resolved_valuesÿ  s[   € àÔ"ð 	ØˆIØÔ&ð 	Ý˜	Ô1Ñ2Ô2Ð2ØÔð 	Ý˜	Ô)×/Ò/Ñ1Ô1Ñ2Ô2Ð2àˆIrO   c                óþ   — g }|D ]w\  }}|rZt          |t          j        ¦  «        r@	 |j        |         }|                     |j        |f¦  «         ŒL# t          j        $ r Y Œ]w xY wt          j	        d|z  ¦  «        ‚|S )NzCAttribute name not found, can't be synchronized back to objects: %r)
rÑ   r   ÚColumnElementÚ_columntopropertyr™  rk   Úorm_excÚUnmappedColumnErrorrW  rX  )r×   r9   Úresolved_valuesÚvaluesr©   rª   rÞ   s          rL   Ú_resolved_keys_as_propnamesz.BulkUDCompileState._resolved_keys_as_propnames
  sµ   € àˆØ#ð 	ð 	‰DˆAˆqØð �* Q­
Ô(@ÑAÔAð ð1Ø!Ô3°AÔ6�Dð —M’M 4¤8¨Q -Ñ0Ô0Ð0Ð0øõ Ô2ð ð ð Ø�Dðøøøõ
 Ô0ð7Ø9:ñ;ñô ð ð ˆs   §AÁA#Á"A#c                ó   ‡ ‡‡‡— ‰j         Š t          ‰j        ‰j        fz   Ž                      ‰¦  «        j        |j        Ž }|j        |_        d Šdˆˆ ˆˆfd„}|                     |||||¬¦  «        }	|	 	                    ¦   «         }
‰|
‰dœz   S )	NÚorm_contextr0   rF   r   c                ó4  •—  | j         j        di | j        ¤Ž}‰                     |j        ‰‰j        ‰j        | j        ¬¦  «        }‰�‰|k    rt          j	        d¦  «        ‚n| j        r|st          j	        d¦  «        ‚|Š|rt          j        ¦   «         S d S )N)rB  rC  rD  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 RETURNINGrJ   )r�   Úget_bindr$  rG  rE  r7  r6  rD  rW  rX  r¹   rº   )r¼  ÚbindÚper_bind_resultrG  r×   r9   r`  s      €€€€rL   Úskip_for_returningzHBulkUDCompileState._do_pre_synchronize_fetch.<locals>.skip_for_returning>  sÛ   ø€ Ø/�;Ô&Ô/ÐMÐM°+Ô2LÐMÐMˆDð "×3Ò3Ø”ØØ-Ô=Ø .Ô ?Ø*Ô9ð 4ñ ô ˆOð !Ð,Ø$¨Ò7Ð7Ý Ô4ð ñô ð ð 8ð Ô+ð 4°Oð 4ÝÔ0ð-ñô ð ð %4Ð!àð ÝÔ*Ñ,Ô,Ð,à�trO   )rD   r$  Ú
_add_event)r=  r5  )r¼  r0   rF   r   )
r:  r!   r  Úselect_identity_tokenÚselect_fromr	  r
  r¢  ÚexecuteÚfetchall)r×   r�   rØ   rp   rD   r$  r`  Úselect_stmtrÁ  r   Úmatched_rowsrG  r9   s   `     `    @@rL   r\  z,BulkUDCompileState._do_pre_synchronize_fetch  sã   øøøø€ ð  Ô/ˆð�F�VÔ'¨6Ô+GÐ*IÑIÐKßŠ[˜Ñ Ô Ü�iÔ-ð/ð 	ð
 '0Ô&?ˆÔ#ð !Ðð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðB —’ØØØ/Ø)Ø)ð !ñ 
ô 
ˆð —’Ñ(Ô(ˆàØ)Ø"3ð!
ð !
ñ 
ð 	
rO   N©rE  r   r9   r™   rA  r?   rB  r?   rC  r?   rD  r?   rF   r?   )rð   r)  r*  r%   r?  r-  rG  rb  rh  rw  r‘  r�  r©  rZ  r[  r²  rº  r\  rJ   rO   rL   r/  r/  \  s°  € € € € € ðð ð ð ð  ñ ô ð ð ð $Ø$Ø %Ø$ð
$ð 
$ð 
$ð 
$ð 
$ñ „[ð
$ð ðu
ð u
ñ „[ðu
ðn ð)
ð )
ñ „[ð)
ðV ð"ð "ñ „[ð"ðH ð.Pð .Pñ „[ð.Pð` ð$ð $ñ „[ð$ðL ðð ñ „[ðð8 ð-
ð -
ñ „[ð-
ð^ ð
ð 
ñ „[ð
ð2 ðð ñ „[ðð ðð ñ „[ðð" ðN
ð N
ñ „[ðN
ð N
ð N
rO   r/  rQ  Ú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                  ód   — 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S )ú$BulkORMInsert.default_insert_optionsr2  r+   r3  Fr?   Ú_render_nullsÚ_return_defaultsNr9  r:  Tr8  Ú_populate_existing)
rð   r)  r*  r3  r,  rÏ  rÐ  r:  r8  rÑ  rJ   rO   rL   Údefault_insert_optionsrÎ  p  sz   € € € € € € Ø-3ˆÐ3Ð3Ð3Ñ3Ø#ˆÐ#Ð#Ð#Ñ#Ø!&ÐÐ&Ð&Ð&Ñ&Ø15ˆÐ5Ð5Ð5Ñ5Øˆ
ÐÐÐÑØ#(ÐÐ(Ð(Ð(Ñ(Ð(Ð(rO   rÒ  NzOptional[FromStatement]r  c                óª  — t           j                             dh d£||j        ¦  «        \  }}||d<   	 |j        d         }|r|j        |d<   |d|j        iz  }n# t          $ r J d¦   «         ‚w xY w|s3|j        d	k    r|d
diz  }n2|j        dk    rt          j	        d¦  «        ‚n|j        d	k    r|d
diz  }|j        dk    r.|st          j        }n|                     t          j        ¦  «        }|s|j        r|                     ¦   «          |                     d|j        i¦  «        }|t          j        |¦  «                             d|i¦  «        fS )NÚ_sa_orm_insert_options>   rJ  rK  rA   Úpopulate_existingrN  rá   r9   r:  FrO  r2  r3  rQ  rz   rR  ÚrawrK  )rÌ  rÒ  rU  r  rä   r9   rV  r3  rW  rX  r   Ú_orm_load_exec_optionsrµ   r8  r]  r   r^  )	r×   r�   rØ   rp   rD   r$  r_  Úinsert_optionsrá   s	            rL   rb  z"BulkORMInsert.orm_pre_session_execz  sç  € õ Ô0×GÒGØ$ØNÐNÐNØØÔ(ñ	
ô 
ñ	
ØØð $-ˆ�xÑ ð	MØ&Ô7Ð8HÔIˆNð ð MØ+9Ô+@�˜xÑ(ØÐ#4°nÔ6KÐ"LÑL�øøõ ð 	Mð 	Mð 	MØLÐLÑLÔLÐLð	Møøøð ð 
	<ØÔ+¨vÒ5Ð5Ø ?°EÐ":Ñ:��ØÔ-°Ò7Ð7ÝÔ0ð2ñô ð ð 8ð Ô+¨vÒ5Ð5Ø ?°FÐ";Ñ;�àÔ'¨5Ò0Ð0ð %ð Ý$+Ô$BÐ!Ð!à$5×$;Ò$;ÝÔ2ñ%ô %Ð!ð ð 	! Ô 9ð 	!Ø×ÒÑ Ô Ð à×'Ò'Ø˜^Ô9Ð:ñ
ô 
ˆ	ð
 ÝÔÐ0Ñ1Ô1×7Ò7Ø)¨>Ð:ñô ð
ð 	
rc  r�   r1   rØ   ú
dml.Insertrp   r6   rD   r,   r$  r/   rq   r4   rF   ú_result.Resultc           
     ó4  — |                      d| j        ¦  «        }|j        dvrt          j        d¦  «        ‚|j        dk    r|                     ||p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        ||¬
¦  «        }n4|j        dk    r|                     ||pi |¬¦  «        }nt#          ¦   «         ‚t%          |j        ¦  «        s|S |j        r>|                      dt*          j        ¦  «        }
|
ddiz  }
|                     d|
i¦  «        }|                      ||||||¦  «        S )NrÔ  )rÖ  rz   rQ  r2  zHValid strategies for ORM insert strategy are 'raw', 'orm', 'bulk', 'autorÖ  )rD   rz   z`bulk INSERT with a 'post values' clause (typically upsert) not supported for multi-table mapper úIterable[Dict[str, Any]]F)r>   r@   rA   rB   rD   rQ  r  rÑ  T)r÷   rÒ  r3  rW  rY  rÅ  r:  Ú_post_values_clauseÚ_multiple_persistence_tablesrX  Ú_transactionrM   r   rÑ   rW   rÐ  rÏ  ÚAssertionErrorr?   r‹   rÑ  r   r"  rµ   r(  )r×   r�   rØ   rp   rD   r$  rq   rØ  r   r9   r&  s              rL   Úorm_execute_statementz#BulkORMInsert.orm_execute_statement¾  s?  € ð +×.Ò.Ø$ cÔ&@ñ
ô 
ˆð Ô'ð 0
ð 
ð 
õ Ô&ð2ñô ð ð Ô'¨5Ò0Ð0Ø—\’\Ø˜6˜< RÐ;Lð "ñ ô ˆFð ˆMàÔ'¨6Ò1Ð1Ø#Ô3ˆFð Ô-Ð9ØÔ7ð :õ Ô0ð'à$ð'ð 'ñô ð ð Ð%Ð%Ð%ØÔ'Ð3Ð3Ð3Ý!ØÝØ.Ý *¨6µ4Ñ 8Ô 8ÐD�V�H�H¸fñô ð Ô$ØØ .Ô ?Ø+Ô9Ø$-Ø"3ðñ ô ˆFˆFð Ô)¨UÒ2Ð2Ø—\’\Ø˜6˜< RÐ;Lð "ñ ô ˆFˆFõ !Ñ"Ô"Ð"å�IÔ(Ñ)Ô)ð 	ØˆMàÔ,ð 	Ø,×0Ò0Ø&­Ô(Iñô ˆLð Ð1°4Ð8Ñ8ˆLØ 1× 7Ò 7Ø'¨Ð6ñ!ô !Ðð ×(Ò(ØØØØØØñ
ô 
ð 	
rO   c                óF  •— t          t           t          ¦   «         j        ||fi |¤Ž¦  «        }|�	|j         }nd}|s|S |j        d         }|j                             dd¦  «        }|dk    r|                     |¦  «         n|dk    r| 	                    ||¦  «         |S )NTrá   rK  rÖ  rz   rQ  )
r   rÌ  Úsuperr  Ústackrä   rÖ   r÷   Ú_setup_for_bulk_insertÚ_setup_for_orm_insert)	r×   rØ   r  Úkwr  Útoplevelr9   rK  Ú	__class__s	           €rL   r  z"BulkORMInsert.create_for_statement  sÇ   ø€ åÝØ(�E‰GŒGÔ(¨°HÐCÐCÀÐCÐCñ
ô 
ˆð
 ÐØ#œ>Ð)ˆHˆHàˆHØð 	ØˆKàÔ+Ð,<Ô=ˆØ Ô-×1Ò1°.À%ÑHÔHˆØ˜6Ò!Ð!Ø×'Ò'¨Ñ1Ô1Ð1Ð1Ø˜UÒ"Ð"Ø×&Ò& x°Ñ8Ô8Ð8àˆrO   c                óX   ‡— d„ ˆfd„|                      ¦   «         D ¦   «         D ¦   «         S )Nc                ó.   — i | ]\  }}}|�|j         n||“ŒS rI   rj   )rY   Úcolr©   rª   s       rL   r¬   z<BulkORMInsert._resolved_keys_as_col_keys.<locals>.<dictcomp>0  s:   € ð 
ð 
ð 
á��Q˜ð �ˆCŒGˆG¨A¨qð
ð 
ð 
rO   c              3  óX   •K  — | ]$\  }}‰j                              |¦  «        ||fV — Œ%d S rI   )rø   r÷   )rY   r©   rª   r9   s      €rL   rv   z;BulkORMInsert._resolved_keys_as_col_keys.<locals>.<genexpr>2  sK   øè è € ð ð Ù,0¨A¨q�”—’˜a‘” ! QÐ'ðð ð ð ð ð rO   )r†   )r×   r9   Úresolved_value_dicts    ` rL   Ú_resolved_keys_as_col_keysz(BulkORMInsert._resolved_keys_as_col_keys.  sS   ø€ ð
ð 
ðð ð ð Ø4G×4MÒ4MÑ4OÔ4Oðñ ô ð
ñ 
ô 
ð 	
rO   c                óŠ   — t          t          j        | j        ¦  «        x}}|                      ||||d¬¦  «        }|| _        d S )NF©r  r  )r   r   ÚInsertrØ   r  )r  r  r9   rØ   r  s        rL   ræ  z#BulkORMInsert._setup_for_orm_insert7  sQ   € Ý*.­s¬z¸4¼>Ñ*JÔ*JÐJˆ	Ð'à×-Ò-ØØØØØ"'ð .ñ 
ô 
ˆ	ð #ˆŒˆˆrO   c                ó¬  ‡— t          t          j        | j        ¦  «        x}}|j        }|d         |d         cŠ}|                     ¦   «         }‰|_        | j        r*ˆfd„| j                             ¦   «         D ¦   «         | _        |  	                    ||||d¬¦  «        }| j
        �%| j
        j        j        rt          j        d¦  «        ‚|| _        dS )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_mapperc                ó.   •— i | ]\  }}|j         ‰u ¯||“ŒS rJ   ©rf   )rY   rì  ÚvalÚemit_insert_tables      €rL   r¬   z8BulkORMInsert._setup_for_bulk_insert.<locals>.<dictcomp>W  ó7   ø€ ð %ð %ð %á�C˜Ø”9Ð 1Ð1Ð1ð �Sà1Ð1Ð1rO   Trñ  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Ö   Ú_clonerf   Ú_dict_parametersr†   r  rÇ   r   r!  rW  ÚCompileError)r  r  rØ   r  ÚanÚemit_insert_mapperrù  s         @rL   rå  z$BulkORMInsert._setup_for_bulk_insertC  s  ø€ õ +/­s¬z¸4¼>Ñ*JÔ*JÐJˆ	Ð'ØÔ#ˆð Ð#Ô$ØÐ$Ô%ð 	.ÐÐ-ð
 ×$Ò$Ñ&Ô&ˆ	à+ˆ	ŒØÔ ð 	ð%ð %ð %ð %à $Ô 5× ;Ò ;Ñ =Ô =ð%ñ %ô %ˆDÔ!ð ×-Ò-ØØØØ)Ø"&ð .ñ 
ô 
ˆ	ð Ô#Ð/ØÔ'Ô7Ô@ð 0õ Ô%ð3ñô ð ð #ˆŒˆˆrO   )r�   r1   rØ   rÙ  rp   r6   rD   r,   r$  r/   rq   r4   rF   rÚ  )rF   rÌ  )rð   r)  r*  r%   rÒ  r  r,  r-  rb  rá  r  rï  ræ  rå  Ú__classcell__©ré  s   @rL   rÌ  rÌ  n  s  ø€ € € € € € ð)ð )ð )ð )ð ) ñ )ô )ð )ð 15ÐÐ4Ð4Ð4Ñ4àðA
ð A
ñ „[ðA
ðF ðV
ð V
ð V
ñ „[ðV
ðp ðð ð ð ð ñ „[ðð, ð
ð 
ñ „[ð
ð
#ð 
#ð 
#ð,#ð ,#ð ,#ð ,#ð ,#ð ,#ð ,#rO   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                óJ  — |                       | ¦  «        }|j                             dd¦  «        }|j         }|r|dk    r|                     ||¦  «         nK|dk    s|dk    r#d|j        j        vrt          j        |||fi |¤Ž n|r|dv r|                     ||¦  «         |S )NrK  Úunspecifiedrz   rP  ré   )rQ  r  )	Ú__new__rÖ   r÷   rä  Ú_setup_for_bulk_updaterf   r(   Ú__init__Ú_setup_for_orm_update)r×   rØ   r  rç  r  rK  rè  s          rL   r  z"BulkORMUpdate.create_for_statementt  sÛ   € à�{Š{˜3ÑÔˆà Ô-×1Ò1Ø˜Mñ
ô 
ˆð  ”~Ð%ˆàð 		<˜¨Ò.Ð.Ø×'Ò'¨	°8Ñ<Ô<Ð<Ð<à˜KÒ'Ð'Ø˜}Ò,Ð,Ø i¤oÔ&BÐBÐBåÔ# D¨)°XÐDÐDÀÐDÐDÐDÐDØð 	<˜\Ð-CÐCÐCØ×&Ò& y°(Ñ;Ô;Ð;àˆrO   c                óB  — |}|j          }|j        j        d         }|j        x| _        }|                      ||¦  «        | _        |                      ||||¬¦  «         |j        rt          | j        ¦  «        | _        | 	                    ¦   «         }|j
        r| j        |_
        n|j        r| j        |_        |                      | j        |¦  «        }	|	r
 |j        |	Ž }t          j        | ||fi |¤Ž d}
|sd }n|j                             dd ¦  «        }|j                             dd ¦  «        }|dur(|dk    o!|                      |j        || j        ¬¦  «        }|dk    r|rd}
 |j        |j        j        Ž }|r|                      |||||
¬	¦  «        }|| _        d S )
Nré   ©rè  Úprocess_criteria_for_toplevelFrM  rG  rT  )rA  Trñ  )rä  rf   rÖ   r9   r²  r;  Ú_init_global_attributesr±  rW   rû  r°  rw  ru  Úwherer(   r	  r÷   rG  rE  rA  r@   r  r  rØ   )r  rØ   r  rç  r  rè  rò   r9   Únew_stmtÚnew_critr  rM  rG  s                rL   r
  z#BulkORMUpdate._setup_for_orm_update‹  s/  € Ø'Ðà”~Ð%ˆà”?Ô/°Ô?ˆà'œÐ.ˆŒ�fà $× 9Ò 9¸&À)Ñ LÔ LˆÔà×$Ò$ØØØØ*2ð	 	%ñ 	
ô 	
ð 	
ð Ôð 	@Ý$(¨Ô)>Ñ$?Ô$?ˆDÔ!à×#Ò#Ñ%Ô%ˆð Ô$ð 	5Ø'+Ô'<ˆHÔ$Ð$ØÔð 	5Ø#Ô4ˆHÔà×2Ò2ØÔ" Fñ
ô 
ˆð ð 	1Ø%�x”~ xÐ0ˆHõ 	Ô  h°Ð?Ð?¸BÐ?Ð?Ð?à %Ðàð 	Ø"&ÐÐà"*Ô"7×";Ò";Ø% tñ#ô #Ðð %Ô1×5Ò5Ø ñ
ô 
Ðð  EÐ)Ð)ð $ wÒ.ð Ø×*Ò*ØÔ$ f¸DÔ<Nð +ñ ô ð ð  'Ò)Ð)Ð.?Ð)Ø$(Ð!ð 0�xÔ/°´Ô1KÐLˆHàð 	Ø×0Ò0ØØ#ØØ!Ø&;ð 1ñ ô ˆHð "ˆŒˆˆrO   c                óp  ‡— t          t          j        |¦  «        }|j        }|d         |d         cŠ}|                     ¦   «         }‰|_        t          j        | ||fi |¤Ž | j        rt          j
        d¦  «        ‚| j        r*ˆfd„| j                             ¦   «         D ¦   «         | _        || _        dS )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().c                ó.   •— i | ]\  }}|j         ‰u ¯||“ŒS rJ   r÷  )rY   rì  rø  Úemit_update_tables      €rL   r¬   z8BulkORMUpdate._setup_for_bulk_update.<locals>.<dictcomp>  rú  rO   N)r   r   ÚUpdaterÖ   rû  rf   r(   r	  r°  rW  rX  rü  r†   rØ   )r  rØ   r  rç  rþ  Ú_r  s         @rL   r  z$BulkORMUpdate._setup_for_bulk_updateê  sì   ø€ õ �œ YÑ/Ô/ˆ	ØÔ#ˆð Ð#Ô$ØÐ$Ô%ð 	Ð˜1ð
 ×$Ò$Ñ&Ô&ˆ	Ø+ˆ	ŒåÔ  i°Ð@Ð@¸RÐ@Ð@Ð@àÔð 	ÝÔ,ð=ñô ð ð Ô ð 	ð%ð %ð %ð %à $Ô 5× ;Ò ;Ñ =Ô =ð%ñ %ô %ˆDÔ!ð
 #ˆŒˆˆrO   r�   r1   rØ   ú
dml.Updaterp   r6   rD   r,   r$  r/   rq   r4   rF   rÚ  c           
     ó*  •— |                      d| j        ¦  «        }|j        dvrt          j        d¦  «        ‚|j        dk    rª|j         }|j        dk    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	||¬
¦  «        }
|                      ||||||
¦  «        S t          ¦   «                              ||||||¦  «        S )NrI  )rQ  r2  rz   rP  zOValid strategies for ORM UPDATE strategy are 'orm', 'auto', 'bulk', 'core_only'rz   rT  rS  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)r>   rš   r›   rœ   )r÷   r?  r3  rW  rY  r¢  r4  rX  r:  rß  rŸ   r   rÑ   rW   rh  rã  rá  )r×   r�   rØ   rp   rD   r$  rq   r`  rœ   r9   r   ré  s              €rL   rá  z#BulkORMUpdate.orm_execute_statement  sŽ  ø€ ð +×.Ò.Ø$ cÔ&@ñ
ô 
ˆð Ô'ð 0
ð 
ð 
õ Ô&ð9ñô ð ð Ô'¨6Ò1Ð1Ø(1Ô(AÐ$AÐ!à!Ô6¸'ÒAÐAÐAÐAð Ô)ð
à"Ô7¸:ÒEÐEåÔ0ðñô ð ð $Ô3ˆFØÐ%Ð%Ð%ØÔ'Ð3Ð3Ð3Ý!ØÝØ.Ý *¨6µ4Ñ 8Ô 8ÐD�V�H�H¸fñô ð Ô$ØØ$)Ø$-Ø&;ðñ ô ˆFð ×.Ò.ØØØØ!ØØñô ð õ ‘7”7×0Ò0ØØØØ!ØØñô ð rO   Fr@  rE  r   r9   r™   rA  r?   rB  rC  rD  c               ó¤   — |j         o|j        j        }|sdS |r|j        S |r|j        S |r$|j        st          j        d|j        › d�¦  «        ‚dS )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_multifromrW  rý  rê   ©r×   rE  r9   rA  rB  rC  rD  Únormal_answers           rL   rG  zBulkORMUpdate.can_use_returningZ  s—   € ð Ô$ÐN¨Ô);Ô)Nð 	ð ð 	Ø�5àð 	8ØÔ7Ð7ð ð 
	ØÔ5Ð5àð 	 7Ô#Eð 	ÝÔ%ðE˜GœLð Eð Eð Eñô ð ð ˆtrO   c                ó�  ‡— |sd S |j         }d„ |j        D ¦   «         }|j        }|D �]Š|                     ˆfd„|D ¦   «         |j        ¦  «        }|                     |¦  «        }	|	sŒBt          ‰¦  «                             |¦  «        }
|	j        }|	j	         
                    |
¦  «        }|D ]}||v r‰|         ||<   Œ|	j        j                             |	d |¦  «         |	                     |t          |¦  «        ¦  «         |
 
                    |¦  «                             |¦  «        }|r|	                     ||¦  «         �Œd S )Nc                ó   — g | ]	}|j         ‘Œ
S rJ   rj   )rY   Úprops     rL   r[   zDBulkORMUpdate._do_post_synchronize_bulk_evaluate.<locals>.<listcomp>‡  s   € ÐCÐCÐC �4”8ÐCÐCÐCrO   c              3  ó(   •K  — | ]}‰|         V — Œd S rI   rJ   )rY   rk   Úparams     €rL   rv   zCBulkORMUpdate._do_post_synchronize_bulk_evaluate.<locals>.<genexpr>�  s'   øè è € Ð/Ð/ ��s”Ð/Ð/Ð/Ð/Ð/Ð/rO   )r:  r�   Úidentity_mapÚidentity_key_from_primary_keyr>  Úfast_get_staterÀ   Ú
differencerW   Ú
unmodifiedrÂ   ÚmanagerÚdispatchÚrefreshÚ_commitrç   Ú_expire_attributes)r×   r�   rp   r   r`  r9   Úpk_keysr(  Úidentity_keyrZ   Úevaluated_keysr]   Úto_evaluaterk   Ú	to_expirer'  s                  @rL   rg  z0BulkORMUpdate._do_post_synchronize_bulk_evaluate  s�  ø€ ð ð 	ØˆFàÔ/ˆØCÐC¨Ô(BÐCÑCÔCˆàÔ+ˆàð 	;ñ 	;ˆEØ!×?Ò?Ø/Ð/Ð/Ð/ wÐ/Ñ/Ô/ØÔ.ñô ˆLð !×/Ò/°Ñ=Ô=ˆEØð Øå  ™ZœZ×2Ò2°7Ñ;Ô;ˆNà”JˆEàÔ*×7Ò7¸ÑGÔGˆKØ"ð ,ð ,�Ø˜%�<�<Ø!& s¤�E˜#‘JøàŒMÔ"×*Ò*¨5°$¸ÑDÔDÐDà�MŠM˜%¥ kÑ!2Ô!2Ñ3Ô3Ð3ð
 '×3Ò3°EÑ:Ô:×EÒEØñô ˆIð ð ;Ø×(Ò(¨°	Ñ:Ô:Ð:ùð;	;ð 	;rO   c                ó¤   — |                       ||j                             ¦   «         ¦  «        }|                      |||d„ |D ¦   «         ¦  «         d S )Nc                ó"   — g | ]\  }}}}|||f‘ŒS rJ   rJ   )rY   r•  rZ   r]   r  s        rL   r[   z?BulkORMUpdate._do_post_synchronize_evaluate.<locals>.<listcomp>·  s(   € ÐMÐMÐMÑ%9 S¨%°¸ˆc�5˜%Ð ÐMÐMÐMrO   )r�  r(  Ú
all_statesÚ#_apply_update_set_values_to_objects)r×   r�   rØ   r   r`  Úmatched_objectss         rL   re  z+BulkORMUpdate._do_post_synchronize_evaluateª  sl   € ð ×>Ò>ØØÔ ×+Ò+Ñ-Ô-ñ
ô 
ˆð
 	×/Ò/ØØØØMÐM¸_ÐMÑMÔMñ		
ô 	
ð 	
ð 	
ð 	
rO   c                ó  ‡‡‡	— ‰j         Š	|j        }|r%|                      ‰	|¦  «        }ˆfd„|D ¦   «         }n‰j        }ˆfd„ˆ	ˆfd„d„ |D ¦   «         D ¦   «         D ¦   «         }|sd S |                      ‰‰|d„ |D ¦   «         ¦  «         d S )Nc                ó@   •— g | ]}t          |¦  «        ‰j        fz   ‘ŒS rJ   ©r�   r>  ©rY   r‡  r`  s     €rL   r[   z<BulkORMUpdate._do_post_synchronize_fetch.<locals>.<listcomp>Æ  ó:   ø€ ð ð ð àõ �c‘
”
˜nÔ<Ð>Ñ>ðð ð rO   c                ó<   •— g | ]}|‰j         v ¯‰j         |         ‘ŒS rJ   )r(  )rY   r3  r�   s     €rL   r[   z<BulkORMUpdate._do_post_synchronize_fetch.<locals>.<listcomp>Í  s=   ø€ ð 
ð 
ð 
àð ˜wÔ3Ð3Ð3ð Ô  Ô.ð 4Ð3Ð3rO   c                ó‚   •— g | ];\  }}‰j         �|‰j         k    ¯‰                     t          |¦  «        |¬¦  «        ‘Œ<S )Nr—  )r>  r)  rç   )rY   r  rL  Útarget_mapperr`  s      €€rL   r[   z<BulkORMUpdate._do_post_synchronize_fetch.<locals>.<listcomp>Ï  sh   ø€ ð 
!ð 
!ð 
!ñ
 0�K ð "Ô1Ð9Ø! ^Ô%CÒCÐCð ×;Ò;Ý˜Ñ%Ô%Ø#1ð <ñ ô ð DÐCÐCrO   c                ó2   — g | ]}|d d…         |d         f‘ŒS )r   éÿÿÿÿrJ   )rY   r‡  s     rL   r[   z<BulkORMUpdate._do_post_synchronize_fetch.<locals>.<listcomp>Ô  s6   € ð 4ð 4ð 4Ø-0�S˜˜2˜”Y  B¤Ð(ð4ð 4ð 4rO   c                ó`   — g | ]+}|t          j        |¦  «        t          j        |¦  «        f‘Œ,S rJ   )r   Úinstance_stateÚinstance_dict)rY   r•  s     rL   r[   z<BulkORMUpdate._do_post_synchronize_fetch.<locals>.<listcomp>ä  sK   € ð ð ð ð ð	 ÝÔ-¨cÑ2Ô2ÝÔ,¨SÑ1Ô1ððð ð rO   )r:  Úreturned_defaults_rowsr‘  r=  r:  )
r×   r�   rØ   r   r`  rI  Úpk_rowsrÈ  ÚobjsrC  s
    `  `    @rL   rf  z(BulkORMUpdate._do_post_synchronize_fetchº  s0  øøø€ ð 'Ô6ˆà!'Ô!>ÐØ!ð 
	8Ø×3Ò3ØÐ5ñô ˆGðð ð ð à"ðñ ô ˆLˆLð
 *Ô7ˆLð
ð 
ð 
ð 
ð
!ð 
!ð 
!ð 
!ð 
!ð
4ð 4Ø4@ð4ñ 4ô 4ð
!ñ 
!ô 
!ð
ñ 
ô 
ˆð  ð 	ØˆFà×/Ò/ØØØðð ð  ðñ ô ñ		
ô 	
ð 	
ð 	
ð 	
rO   c                ó¢  — |j         }|j        }t          j        |¦  «        }|                      ||¦  «        }|                      ||¦  «        }	i }
|	D ]R\  }}	 |                     t          j        t          j
        |¦  «        ¦  «        }||
|<   Œ># t          j        $ r Y ŒOw xY wt          |
                     ¦   «         ¦  «        }d„ |	D ¦   «         }t          ¦   «         }|D ]Ö\  }}}|j                             |¦  «        }|D ]}||v r |
|         |¦  «        ||<   Œ|j        j                             |d|¦  «         |                     |t          |¦  «        ¦  «         |                     |¦  «                             |¦  «        }|r|                     ||¦  «         |                     |¦  «         Œ×|                     |¦  «         dS )zeapply values to objects derived from an update statement, e.g.
        UPDATE..SET <values>

        c                ó   — h | ]\  }}|’ŒS rJ   rJ   )rY   r©   rª   s      rL   ú	<setcomp>zDBulkORMUpdate._apply_update_set_values_to_objects.<locals>.<setcomp>	  s   € Ð;Ð;Ð;™˜˜1�!Ð;Ð;Ð;rO   N)r:  rï   r   r¡  r²  rº  r¥  r   rÏ   r    rÓ   r«  rç   rÁ   rÀ   r,  rÂ   r-  r.  r/  r0  r+  r1  ÚaddÚ_register_altered)r×   r�   r`  rØ   r;  r9   r¦  r§  r¸  Úresolved_keys_as_propnamesÚvalue_evaluatorsrk   ÚvalueÚ
_evaluatorr4  Úattribr‘   r•  rZ   r]   r5  r6  s                         rL   r:  z1BulkORMUpdate._apply_update_set_values_to_objectsî  s  € ð  Ô/ˆØ”]ˆ
Ý&Ô9¸*ÑEÔEÐØ×2Ò2°6¸9ÑEÔEˆØ%(×%DÒ%DØ�Oñ&
ô &
Ð"ð ÐØ4ð 	3ð 	3‰JˆC�ð3Ø/×7Ò7ÝÔ$¥UÔ%@À%ÑHÔHñô �
ð )3Ð  Ñ%Ð%øõ Ô/ð ð ð Ø�ðøøøõ
 Ð.×3Ò3Ñ5Ô5Ñ6Ô6ˆØ;Ð;Ð :Ð;Ñ;Ô;ˆå‘”ˆØ!0ð 	ð 	ÑˆC�˜ØÔ*×7Ò7¸ÑGÔGˆKà"ð <ð <�Ø˜%�<�<à!6Ð!1°#Ô!6°sÑ!;Ô!;�E˜#‘JøàŒMÔ"×*Ò*¨5°$¸ÑDÔDÐDà�MŠM˜%¥ kÑ!2Ô!2Ñ3Ô3Ð3ð
 ×+Ò+¨EÑ2Ô2×=Ò=¸kÑJÔJˆIØð ;Ø×(Ò(¨°	Ñ:Ô:Ð:à�JŠJ�uÑÔÐÐØ×!Ò! &Ñ)Ô)Ð)Ð)Ð)s   Á2BÂB#Â"B#)r�   r1   rØ   r  rp   r6   rD   r,   r$  r/   rq   r4   rF   rÚ  rÉ  )rð   r)  r*  r-  r  r
  r  rá  rG  rg  re  rf  r:  r   r  s   @rL   r  r  r  s3  ø€ € € € € àðð ñ „[ðð,]"ð ]"ð ]"ð~"#ð "#ð "#ðH ðIð Ið Ið Ið Iñ „[ðIðV ð $Ø$Ø %Ø$ð"ð "ð "ð "ð "ñ „[ð"ðH ð(;ð (;ñ „[ð(;ðT ð
ð 
ñ „[ð
ð ð1
ð 1
ñ „[ð1
ðf ð1*ð 1*ñ „[ð1*ð 1*ð 1*ð 1*ð 1*rO   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           	     óf  — |                       | ¦  «        }|j                             dd¦  «        }|dk    s|dk    r$d|j        j        vrt	          j        |||fi |¤Ž |S |j         }|}|j        j        d         }|j        x|_        }	|                     ||||¬¦  «         | 	                    ¦   «         }
|  
                    |j        |	¦  «        }|r
 |
j        |Ž }
t	          j        ||
|fi |¤Ž d}|sd }n|j                             dd ¦  «        }|j                             dd ¦  «        }|durB|d	k    o;|                     |j        |	|j        |j                             d
d¦  «        ¬¦  «        }|rd} |
j        |
j        j        Ž }
|r|                     |||
|	|¬¦  «        }
|
|_        |S )NrK  r  rP  ré   r  FrM  rG  rT  rC  )rA  rC  Trñ  )r  rÖ   r÷   rf   r&   r	  rä  r9   r  rû  rw  ru  r  rG  rE  rA  r@   r  r  rØ   )r×   rØ   r  rç  r  rK  rè  r  rò   r9   r  r  r  rM  rG  s                  rL   r  z"BulkORMDelete.create_for_statement%  sS  € à�{Š{˜3ÑÔˆà Ô-×1Ò1Ø˜Mñ
ô 
ˆð
 ˜KÒ'Ð'Ø˜}Ò,Ð,Ø i¤oÔ&BÐBÐBåÔ# D¨)°XÐDÐDÀÐDÐDÐDØˆKà”~Ð%ˆà'Ðà”?Ô/°Ô?ˆØ'œÐ.ˆŒ�fà×$Ò$ØØØØ*2ð	 	%ñ 	
ô 	
ð 	
ð ×#Ò#Ñ%Ô%ˆà×1Ò1ØÔ" Fñ
ô 
ˆð ð 	1Ø%�x”~ xÐ0ˆHõ 	Ô  h°Ð?Ð?¸BÐ?Ð?Ð?à %Ðàð 	Ø"&ÐÐà"*Ô"7×";Ò";Ø% tñ#ô #Ðð %Ô1×5Ò5Ø ñ
ô 
Ðð  EÐ)Ð)ð $ wÒ.ð Ø×*Ò*ØÔ$ØØ"&Ô"4Ø$,Ô$9×$=Ò$=Ø)¨5ñ%ô %ð	 +ñ ô ð ð ð 	MØ$(Ð!à/�xÔ/°´Ô1KÐLˆHàð 	Ø×0Ò0ØØ#ØØ!Ø&;ð 1ñ ô ˆHð "ˆŒàˆrO   r�   r1   rØ   ú
dml.Deleterp   r6   rD   r,   r$  r/   rq   r4   rF   rÚ  c                óþ   •— |                      d| j        ¦  «        }|j        dk    rt          j        d¦  «        ‚|j        dvrt          j        d¦  «        ‚t          ¦   «                              ||||||¦  «        S )NrI  rz   zˆBulk ORM DELETE not supported right now. Statement may be invoked at the Core level using session.connection().execute(stmt, parameters))rQ  r2  rP  zGValid strategies for ORM DELETE strategy are 'orm', 'auto', 'core_only')r÷   r?  r3  rW  rX  rY  rã  rá  )	r×   r�   rØ   rp   rD   r$  rq   r`  ré  s	           €rL   rá  z#BulkORMDelete.orm_execute_statement~  s¤   ø€ ð +×.Ò.Ø$ cÔ&@ñ
ô 
ˆð Ô'¨6Ò1Ð1ÝÔ,ðAñô ð ð Ô'Ð/KÐKÐKÝÔ&ðñô ð õ
 ‰wŒw×,Ò,Ø�Y Ð(9¸>È4ñ
ô 
ð 	
rO   Fr@  rE  r   r9   r™   rA  r?   rB  rC  rD  c               ó’   — |j         o|j        j        }|sdS |r|j        S |r$|j        st	          j        d|j        › d�¦  «        ‚dS )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_multifromrW  rý  rê   r!  s           rL   rG  zBulkORMDelete.can_use_returningž  sŠ   € ð Ô$ÐN¨Ô);Ô)Nð 	ð ð 	Ø�5ð ð 	ð Ô5Ð5àð 	 7Ô#Eð 	õ Ô%ðE˜GœLð Eð Eð Eñô ð ð ˆtrO   c                ó  — |                       ||j                             ¦   «         ¦  «        }g }|D ]?\  }}}	}
|
r!|                     |	|j        j        ¦  «         Œ*|                     |¦  «         Œ@|r|                     |¦  «         d S d S rI   )r�  r(  r9  Ú_expireÚ	_modifiedr™  Ú_remove_newly_deleted)r×   r�   rØ   r   r`  r;  Ú	to_deleter  rZ   r]   Úis_partially_expireds              rL   re  z+BulkORMDelete._do_post_synchronize_evaluateÇ  s¶   € ð ×>Ò>ØØÔ ×+Ò+Ñ-Ô-ñ
ô 
ˆð
 ˆ	à5Dð 	(ð 	(Ñ1ˆAˆu�eÐ1Ø#ð (Ø—’˜e WÔ%9Ô%CÑDÔDÐDÐDà× Ò  Ñ'Ô'Ð'Ð'àð 	5Ø×)Ò)¨)Ñ4Ô4Ð4Ð4Ð4ð	5ð 	5rO   c                ón  ‡— ‰j         }|j        }|r%|                      ||¦  «        }ˆfd„|D ¦   «         }n‰j        }|D ]t}	|	dd…         }
|	d         }|                     t          |
¦  «        |¬¦  «        }||j        v r3|                     t          j	        |j        |         ¦  «        g¦  «         Œud S )Nc                ó@   •— g | ]}t          |¦  «        ‰j        fz   ‘ŒS rJ   r>  r?  s     €rL   r[   z<BulkORMDelete._do_post_synchronize_fetch.<locals>.<listcomp>è  r@  rO   r   rE  r—  )
r:  rI  r‘  r=  r)  rç   r(  rb  r   rG  )r×   r�   rØ   r   r`  rC  rI  rJ  rÈ  r‡  r  rL  r3  s       `        rL   rf  z(BulkORMDelete._do_post_synchronize_fetchÛ  s  ø€ ð 'Ô6ˆà!'Ô!>Ðà!ð 
	8Ø×3Ò3ØÐ5ñô ˆGðð ð ð à"ðñ ô ˆLˆLð
 *Ô7ˆLàð 	ð 	ˆCØ˜a ˜dœ)ˆKØ  œWˆNð )×FÒFÝ�[Ñ!Ô!Ø-ð Gñ ô ˆLð ˜wÔ3Ð3Ð3Ø×-Ò-å"Ô1Ø#Ô0°Ô>ñô ðñô ð øð	ð 	rO   )r�   r1   rØ   rZ  rp   r6   rD   r,   r$  r/   rq   r4   rF   rÚ  rÉ  )
rð   r)  r*  r-  r  rá  rG  re  rf  r   r  s   @rL   rX  rX  #  sÕ   ø€ € € € € àðVð Vñ „[ðVðp ð
ð 
ð 
ð 
ð 
ñ „[ð
ð> ð $Ø$Ø %Ø$ð&ð &ð &ð &ð &ñ „[ð&ðP ð5ð 5ñ „[ð5ð& ð$ð $ñ „[ð$ð $ð $ð $ð $rO   rX  )..)r9   r:   r;   r<   r=   r2   r>   r?   r@   r?   rA   r?   rB   rC   rD   rE   rF   rG   )r9   r:   r;   r<   r=   r2   r>   r?   r@   r?   rA   r?   rB   rP   rD   rE   rF   rQ   )NN)r9   r:   r;   r<   r=   r2   r>   r?   r@   r?   rA   r?   rB   rP   rD   rE   rF   rS   ).T)r9   r™   r;   r<   r=   r2   r>   r?   rš   r?   r›   rC   rœ   r?   rF   rG   )r9   r™   r;   r<   r=   r2   r>   r?   rš   r?   r›   r¡   rœ   r?   rF   r¢   r   )r9   r™   r;   r<   r=   r2   r>   r?   rš   r?   r›   r¡   rœ   r?   rF   r¤   )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   rW  r   Úenginer   r   r¹   Úsqlr   r   r   r    r!   r"   Úsql.baser#   r$   r%   Úsql.dmlr&   r'   r(   r)   Úutil.typingr*   Ú_typingr+   r,   r-   r9   r.   r�   r/   r0   r1   r2   rZ   r3   r4   r5   Úengine.interfacesr6   Úobjectr7   rM   rŸ   r„   rÆ   r/  Ú
plugin_forrÌ  r  rX  rJ   rO   rL   ú<module>ru     s;  ððð ð
 #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !àð :Ø,Ð,Ð,Ð,Ð,Ð,Ø3Ð3Ð3Ð3Ð3Ð3Ø3Ð3Ð3Ð3Ð3Ð3ØÐÐÐÐÐØ'Ð'Ð'Ð'Ð'Ð'Ø(Ð(Ð(Ð(Ð(Ð(Ø Ð Ð Ð Ð Ð Ø+Ð+Ð+Ð+Ð+Ð+Ø$Ð$Ð$Ð$Ð$Ð$Ø#Ð#Ð#Ð#Ð#Ð#ØÐÐÐÐÐØ9Ð9Ð9Ð9Ð9Ð9à€WˆT˜Ð Ñ Ô €ð 
ð *-Ø>Að
ð 
ð 
ð 
ñ 
„ð
ð 
ð 14Ø>Að
ð 
ð 
ð 
ñ 
„ð
ð( 15Ø>Bð}ð }ð }ð }ð }ð@ 
ð *-Ø"&ð	ð 	ð 	ð 	ñ 
„ð	ð 
ð 14Ø"&ð	ð 	ð 	ð 	ñ 
„ð	ð$ 15Ø"&ðX%ð X%ð X%ð X%ð X%ðv%ð %ð %ðoð oð oð oð oÐ)ñ oô oð oðdO
ð O
ð O
ð O
ð O
˜ñ O
ô O
ð O
ðd €Ô˜ Ñ)Ô)ð@#ð @#ð @#ð @#ð @#�K ñ @#ô @#ñ *Ô)ð@#ðF €Ô˜ Ñ)Ô)ðm*ð m*ð m*ð m*ð m*Ð&¨ñ m*ô m*ñ *Ô)ðm*ð` €Ô˜ Ñ)Ô)ð\ð \ð \ð \ð \Ð&¨ñ \ô \ñ *Ô)ð\ð \ð \rO   