Ë
    V.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,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	d8d8d9œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dRd:„«       ZFe	d8d8d9œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dSd;„«       ZFd<d<d9œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dTd=„ZFe	d8d>d?œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dUd@„«       ZGe	d8d>d?œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dVdA„«       ZGd<d>d?œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dWdB„ZGdC„ ZH G dD„ dEe«      ZI G dF„ dGeI«      ZJ e*j–                  dHdI«       G dJ„ dKeIe.«      «       ZL e*j–                  dHdL«       G dM„ dNeJe/«      «       ZM e*j–                  dHdO«       G dP„ dQeJe-«      «       ZNy<)Xzoadditional ORM persistence classes related to "bulk" operations,
specifically outside of the flush() process.

é    )Úannotations)ÚAny)Úcast)ÚDict)ÚIterable)ÚOptional)Úoverload)ÚTYPE_CHECKING)ÚTypeVar)ÚUnioné   )Ú
attributes)Úcontext)Ú	evaluator)Úexc)Úloading)Úpersistence)ÚNO_VALUE)ÚAbstractORMCompileState)ÚFromStatement)ÚORMFromStatementCompileState)ÚQueryContexté   )Úutil)ÚDialect)Úresult)Ú	coercions)Údml)Ú
expression)Úroles)Úselect)Úsqltypes)Ú_entity_namespace_key)ÚCompileState)ÚOptions)ÚDeleteDMLState)ÚInsertDMLState)ÚUpdateDMLState)Ú
EMPTY_DICT)ÚLiteral)ÚDMLStrategyArgument)ÚOrmExecuteOptionsParameter)ÚSynchronizeSessionArgument)ÚMapper)Ú_BindArguments)ÚORMExecuteState)ÚSession)ÚSessionTransaction)ÚInstanceState)Ú
Connection)Úcursor)Ú_CoreAnyExecuteParamsÚ_O)Úbound.)Úuse_orm_insert_stmtÚexecution_optionsc                ó   — y ©N© ©ÚmapperÚmappingsÚsession_transactionÚisstatesÚreturn_defaultsÚrender_nullsr9   r:   s           úaC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\sqlalchemy/orm/bulk_persistence.pyÚ_bulk_insertrF   J   s   € ð ó    c                ó   — y r<   r=   r>   s           rE   rF   rF   X   s   € ð  #rG   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Ú
connectionr?   s            €€rE   Ú	<genexpr>z_bulk_insert.<locals>.<genexpr>À   sR   øè ø€ ð 
ñ(ñ	ØØØØØØØØ ð# ØØØØØØØ ô	ñ&ùs   ƒ c              3  ó*   •K  — | ]
  }d |‰‰f–— Œ y ­wr<   r=   ©rK   ÚmappingrT   r?   s     €€rE   rU   z_bulk_insert.<locals>.<genexpr>Ö   s   øè ø€ ÐMÁH¸�$˜ ¨Ô4ÁHùs   ƒ)ÚbulkrC   rD   Úinclude_bulk_keys)Úbookkeepingr9   r:   )Úbase_mapperÚsessionÚconnection_callableÚNotImplementedErrorr
   r   r   r3   r7   Údictr   Ústrr   ÚlistÚ_expand_compositesrT   Ú_sorted_tablesÚitemsÚ_pks_by_tableÚlenÚ_get_embedded_bindparamsÚkeyr   Ú_collect_insert_commandsÚ_emit_insert_statementsÚ
_returningÚreturns_rowsÚsplice_horizontallyÚ_identity_classÚ_identity_key_propsÚtuple)r?   r@   rA   rB   rC   rD   r9   r:   r\   rL   ÚstatesÚdict_ÚmÚreturn_resultÚtablerO   Úmappers_to_runr[   Úsuper_mapperÚbÚextra_bp_namesÚrecordsr   Úidentity_clsÚpÚidentity_propsri   rT   s   `                          @rE   rF   rF   f   s  ù€ ð ×$Ñ$€Kà×"Ñ"×6Ò6Ü!ð-ó
ð 	
ñ
 ÝÜœH¤]´2Ñ%6Ñ7¸ÓBˆHáá7?Ó@±x¨e�u˜eŸj™jÒ)°xˆFÐ@Ù4:Ô;±F¡. 5¨%š°FˆHÒ;á08Ó9± u˜Ÿ
›
°ˆHÑ9åÜœH¤T¬#¬s¨(¡^Ñ4°hÓ?ˆHáô ˜H“~‰Hñ *2Ó2© Aœ˜Q�¨ˆHÐ2Ü˜6 8Ô,à$×/Ñ/°Ó<€Jà8<€Mð %×3Ñ3×9Ñ9Ô;ôá;‰IˆE�2Ø�F×(Ñ(Ñ(ð 
�ŠØ;ð ñ ñ à‰Ü	ˆ^Ó	˜qÒ	 ð ‰àˆã-Ñˆˆ|ð #Ð.ð -×EÑEÔGóáG�AØ—5‘5˜H Q™KÑ'ð —“ØGòð ð 	ô
ô( ×5Ñ5ØÜMÁHÓMØØ +Ø)Ø"0õó)
ˆô< ×4Ñ4ØØØØØØ#Ø 3Ø/ô	
ˆð Ñ*Ø&×1Ò1°]Ð5JØ &‘Ø×$Ó$Ù"Ð"�{Ø -× AÑ AÀ&Ó I‘ð  .ñB ™8Ø×-Ñ-ˆØ)/×)CÒ)CÓDÑ)C A˜!Ÿ%›%Ð)CˆÐDÛ"‰LˆE�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=   ©r?   r@   rA   rB   Úupdate_changed_onlyr   r€   s          rE   Ú_bulk_updater„   þ   s   € ð rG   c                ó   — y r<   r=   r‚   s          rE   r„   r„     s   € ð rG   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<   )r`   re   Úcommitted_state)r?   rL   ÚkÚvÚsearch_keyss       €rE   Ú_changed_dictz#_bulk_update.<locals>._changed_dict(  sT   ø€ ð Ÿ
™
×(Ñ(Ô*ô
á*‘��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_propri   rW   s     €€rE   rU   z_bulk_update.<locals>.<genexpr>S  sO   øè ø€ ð ñ  (�Gð ØØØð "×2Ò2ð   × 7Ñ 7× ;Ñ ;Ò<à!ô
ñ  (ùs   ƒ69T)rY   r   rZ   F)r[   r   r€   )r\   Ú_primary_key_propkeysrŽ   ri   Úunionr`   rc   r]   r^   r_   rT   rh   rd   re   Úisarf   r   Ú_collect_update_commandsÚ_emit_update_statementsÚ_resultÚnull_result)r?   r@   rA   rB   rƒ   r   r€   r\   rŒ   rL   rt   ry   rz   rv   rx   r{   rT   r‹   s   `               @@rE   r„   r„     sè  ú€ ð ×$Ñ$€Kà×.Ñ.€KØ×ÒØ×.Ñ.×2Ñ2Ð3×9Ñ9¸+ÓFˆô
ñ ÙÙBJÓKÁ(¸™ f¨eÕ4À(ˆHÑKá08Ó9± u˜Ÿ
›
°ˆHÑ9á%-Ó.¡X ”D˜•G XˆÐ.Ü˜6 8Ô,à×"Ñ"×6Ò6Ü!ð-ó
ð 	
ð
 %×/Ñ/°Ó<€Jð Ð*ð )×AÑAÔCó	
áC�Ø�u‰u˜ ™Ñ#ð �E‹EØCò	
ð ð ð  +×9Ñ9×?Ñ?ÖAÑˆˆ|Ø�z‰z˜,Ô'¨5¸×8LÑ8LÑ+LØä×6Ñ6ØØôñ  (óð Ø 3Ø,ô'
ˆô* 	×+Ñ+ØØØØØØØ 3Ø"7ö		
ð3  BðH Ð&Ü×"Ñ"Ó$Ð$ð 'ùò Lùâ9ùâ.ùò	
s   ÁF6Á2F;ÂG Ã2$Gc                óð   — | j                   }|sy t        |j                  «       «      }|D �ci c]  }|||   j                  «       “Œ }}|D ]#  }|j	                  |«      D ]  } ||   |«       Œ Œ% y c c}w r<   )Ú
compositesÚsetÚkeysÚ)_populate_composite_bulk_save_mappings_fnÚintersection)r?   r@   Úcomposite_attrsÚcomposite_keysri   Ú
populatorsrX   s          rE   rc   rc   t  s�   € Ø×'Ñ'€OÙØä˜×-Ñ-Ó/Ó0€Nñ "óá!ˆCð 	ˆ_˜SÑ!×KÑKÓMÑMØ!ð ð ó ˆØ!×.Ñ.¨wÖ7ˆCØˆJ�s‰O˜GÕ$ñ 8ñ ùò	s   ­A3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y)ÚORMDMLStateTNz&Optional[ORMFromStatementCompileState]Úfrom_statement_ctxc              #  ó  K  — t         j                  }|D �]j  \  }}t        j                  t        j
                  |«      }t        |t        «      r t        ||t        ¬«      }|t        u rdt        j                  t        j
                  |«      |r9t        j                  t        j                  |t        j                  «       d¬«      n|f–— Œ¹ |||j                  |«      |«      E d {  –—†  ŒÛd|j                  v rA|j                  }	t        |	d   |	d   «      }
 |||
j                  |«      |«      E d {  –—†  �Œ*||s|n8t        j                  t        j                  |t        j                  «       d¬«      f–— �Œm y 7 Œ™7 ŒM­w)N)ÚdefaultT)Útype_Úis_crudÚentity_namespaceÚ	proxy_key)r(   Ú_get_crud_kv_pairsr   Úexpectr    ÚDMLColumnRoleÚ
isinstancera   r#   r   ÚExpressionElementRoler"   ÚNullTypeÚ_bulk_update_tuplesÚ_annotations)Úclsr?   Ú	statementÚkv_iteratorÚneeds_to_be_cacheableÚcore_get_crud_kv_pairsr‰   rŠ   ÚdescÚk_annoÚattrs              rE   Ú_get_orm_crud_kv_pairsz"ORMDMLState._get_orm_crud_kv_pairs‡  s~  è ø€ ô "0×!BÑ!BÐä‰DˆAˆqÜ× Ñ ¤×!4Ñ!4°aÓ8ˆAä˜!œSÔ!Ü,¨V°QÄÔI�Øœ8Ñ#ä!×(Ñ(¬×)<Ñ)<¸aÓ@ñ  5ô &×,Ñ,Ü %× ;Ñ ;Ø !Ü&.×&7Ñ&7Ó&9Ø(,õ	ð "#ðó ñ  6Ø!Ø×0Ñ0°Ó3Ø-ó ÷ ñ ð
 $ q§~¡~Ñ5ØŸ™�Ü,ØÐ-Ñ.°°{Ñ0Có�ñ 2ØØ×,Ñ,¨QÓ/Ø)ó÷ ò ð ñ  5ñ ä&×-Ñ-Ü!×7Ñ7ØÜ"*×"3Ñ"3Ó"5Ø$(ô	ðô ñI  ð(øðús&   ‚C(FÃ*FÃ+AFÄ8FÄ9AFÆFc                óø   — |j                   d   }|r|j                  st        j                  ||«      S |D �cg c]7  }t	        | j                  |j                  ||j                  «       d«      «      ‘Œ9 c}S c c}w )NÚplugin_subjectF)Ú_propagate_attrsr?   r(   Ú_get_multi_crud_kv_pairsr`   r¸   re   )r°   r±   r²   rº   Ú
value_dicts        rE   r¼   z$ORMDMLState._get_multi_crud_kv_pairs¿  sŒ   € à"×3Ñ3Ð4DÑEˆá ^×%:Ò%:Ü!×:Ñ:Ø˜;óð ñ *ó
ñ *�
ô Ø×*Ñ*Ø"×)Ñ)¨9°j×6FÑ6FÓ6HÈ%óõð
 *ñ
ð 	
ùò 
s   ¸<A7c                óÊ   — |sJ d«       ‚|j                   d   }|r|j                  st        j                  |||«      S t	        | j                  |j                  |||«      «      S )Nz0no test coverage for needs_to_be_cacheable=Falserº   )r»   r?   r(   r¨   rb   r¸   )r°   r±   r²   r³   rº   s        rE   r¨   zORMDMLState._get_crud_kv_pairsÑ  s   € ñ "ð	>à=ó	>Ø!ð #×3Ñ3Ð4DÑEˆá ^×%:Ò%:Ü!×4Ñ4Ø˜;Ð(=óð ô Ø×&Ñ&Ø×%Ñ%ØØØ%ó	ó
ð 	
rG   c                ó
  — |j                   j                  d   }|j                  }|j                  r|j                  }n|j
                  j                  }||j
                  |j                  |j                  |j                  dœS )NÚparententity)ÚnameÚtypeÚexprÚentityrv   )	rv   r¯   r?   Úis_aliased_classrÁ   Úclass_Ú__name__rÄ   Úlocal_table)r°   r±   Úext_infor?   Ú_label_names        rE   Úget_entity_descriptionz"ORMDMLState.get_entity_descriptionç  sm   € à—?‘?×/Ñ/°Ñ?ˆØ—‘ˆØ×$Ò$Ø"Ÿ-™-‰Kà Ÿ-™-×0Ñ0ˆKð  Ø—M‘MØ—O‘OØ—o‘oØ×'Ñ'ñ
ð 	
rG   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¯   Úget)Úcs    rE   Ú_ent_for_colzCORMDMLState.get_returning_column_descriptions.<locals>._ent_for_colú  s   € Ø—>‘>×%Ñ% n°dÓ;Ð;rG   c                óx   — |€| S | j                   j                  dd «      }|s| S t        |j                  || «      S )Nr§   )r¯   rÎ   ÚgetattrrÄ   )rÏ   Úentr§   s      rE   Ú_attr_for_colzDORMDMLState.get_returning_column_descriptions.<locals>._attr_for_colý  s=   € Øˆ{Ø�ØŸ™×*Ñ*¨;¸Ó=ˆIÙØ�ä˜sŸz™z¨9°aÓ8Ð8rG   )rÁ   rÂ   rÃ   ÚaliasedrÄ   )Ú_all_selected_columnsri   rÂ   rÅ   rÄ   )r°   r±   rÐ   rÔ   rÏ   rÓ   s         rE   Ú!get_returning_column_descriptionsz-ORMDMLState.get_returning_column_descriptionsø  sŽ   € ò	<ò	9ð$ /8×.MÒ.MóÙ.M¨�‘L “OÒ$Ð.Mòô
ñ‘��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)rl   r   r:   Ú_execution_optionsÚoptionsÚ_with_optionsÚselect_statementr   Úcreate_for_statementr¡   Ú!setup_dml_returning_compile_stateÚ	_generateÚprimary_columnsÚextendÚprimary_keyrC   Ú	returning)
ÚselfÚcompilerÚorm_level_statementÚdml_level_statementÚ
dml_mapperrØ   ÚfsÚfscrÏ   Úcols_to_returns
             rE   Ú_setup_orm_returningz ORMDMLState._setup_orm_returning  s<  € ð( ×)Ó)ÜØ#×.Ñ.Ø#Ø %ôˆBð
 &�×%Ñ%ÑOÐ(;×(NÑ(NÑOˆBØ�—‘Ð0×>Ñ>Ð?ˆBØ$&ˆDÔ!ä,×AÑAÀ"ÀhÓOðˆDÔ# cð ×1Ñ1°*Ô=à"5×"?Ñ"?Ó"AÐØ-/ÐÔ*à),×)<Ò)<ÓNÑ)< AÀÁšaÐ)<ˆ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±   rN   r:   Úbind_argumentsr   Úexecution_contextró   Úload_optionsÚquerycontexts              rE   Ú_return_orm_returningz!ORMDMLState._return_orm_returningV  s¤   € ð #ŸN™NÐØ)×2Ñ2×@Ñ@ˆð ×,Ò,Ø!×4Ñ4×DÑD×MÒMà,×0Ñ0Ø&¬×(IÑ(IóˆLô (Ø×0Ñ0Ø×.Ñ.ØØØØØ!Øó	ˆLô ×$Ñ$ V¨\Ó:Ð:àˆMrG   )rÇ   Ú
__module__Ú__qualname__Úis_dml_returningr¡   Ú__annotations__Úclassmethodr¸   r¼   r¨   rË   r×   rï   rü   r=   rG   rE   r    r    ƒ  s˜   … ØÐØAEÐÐ>ÓEàñ5ó ð5ðn ñ
ó ð
ð" ñ
ó ð
ð* ñ
ó ð
ð  ñ
ó ð
ðB #ôA#ðF ñ ó ñ rG   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_strategyr-   Ú_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=   rG   rE   Údefault_update_optionsr  {  sn   … Ø-3ˆÐ*Ó3Ø;AÐÐ8ÓAØ#(Ð˜DÓ(Ø!&Ð˜$Ó&Ø %ˆ˜Ó%Øˆ
�DÓØ15ˆÐ.Ó5Ø%ÐØˆØˆØˆØ#(Ð˜DÔ(rG   r  F©Úis_multitableÚis_update_fromÚis_delete_usingÚis_executemanyc               ó   — t        «       ‚r<   )r_   )r°   Údialectr?   r  r  r  r  s          rE   Úcan_use_returningz$BulkUDCompileState.can_use_returning‰  s   € ô "Ó#Ð#rG   c                ó
  — 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œ«      }|t1        j2                  |«      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º   r?   r  ú0statement had 'orm' plugin but no plugin_subjectrÀ   r  Ú	core_onlyr  ÚormrY   úHCan't use "bulk" ORM insert strategy without passing separate parameters)r  ÚevaluateÚfetchFzSValid strategies for session synchronization are 'auto', 'evaluate', 'fetch', Falser+  zkThe 'fetch' synchronization strategy is not available for 'bulk' ORM updates (i.e. multiple parameter sets)r*  r  )r$  r  r  r!  r  )r  r  Úfrom_execution_optionsrÜ   r»   r?   ÚKeyErrorrv   r¯   r«   rb   r  Úsa_excÚInvalidRequestErrorr  ÚArgumentErrorr  Ú_do_pre_synchronize_autoÚ_do_pre_synchronize_evaluateÚ_do_pre_synchronize_fetchÚ	_annotater  r  r
  r   Úimmutabledictr�   )
r°   r]   r±   rN   r:   rø   Úis_pre_eventÚupdate_optionsrº   Úsyncs
             rE   Úorm_pre_session_execz'BulkUDCompileState.orm_pre_session_exec–  só  € ô ×5Ñ5×LÑLØ$òð Ø×(Ñ(ó
ñ	
ØØð $-ˆ�xÑ ð	MØ&×7Ñ7Ð8HÑIˆNñ Ø+9×+@Ñ+@�˜xÑ(ØÐ#4°n×6KÑ6KÐ"LÑL‘à §¡×!=Ñ!=Ñ=Ø˜°Ð<Ñ<‰NÜ˜F¤DÔ)Ø×+Ñ+¨vÒ5Ø ?°EÐ":Ñ:‘Ø×-Ñ-°Ò7Ü×0Ñ0ð2óð ð
 ×+Ñ+¨vÒ5Ø ?°FÐ";Ñ;�à×2Ñ2ˆØÐØÐ?Ñ?Ü×*Ñ*ð=óð ð ×+Ñ+¨vÒ5¸$À'º/Ü×0Ñ0ðLóð ò
 Ø×(Ò(Ø×"Ñ"Ô$à×+Ñ+¨uÒ4Ø!×6Ñ6¸&Ò@Ø%(×%AÑ%AØØ!ØØ)Ø&Ø&ó&‘Nð $×8Ñ8¸JÒFØ%(×%EÑ%EØØ!ØØ)Ø&Ø&ó&‘Nð $×8Ñ8¸GÒCØ%(×%BÑ%BØØ!ØØ)Ø&Ø&ó&‘Nð  ×-Ñ-°Ò7Ø!×6Ñ6¸&Ò@Ø"Ð'=¸zÐ&JÑJ�Nð "×+Ñ+à+9×+NÑ+NØ'5×'FÑ'FØ&4×&DÑ&DØ$2×$@Ñ$@Ø)7×)JÑ)JñóˆIð Ü×ÑÐ0Ó1×7Ñ7Ø)¨>Ð:óð
ð 	
øôi ò 	MØLÐLÓL�5ð	Mús   ¸I1 É1J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  r(  r*  r+  rY   )r  r  Ú_do_post_synchronize_evaluateÚ_do_post_synchronize_fetchÚ"_do_post_synchronize_bulk_evaluaterü   )r°   r]   r±   rN   r:   rø   r   r7  s           rE   Ú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à×(Ñ(ØØØØØØó
ð 	
rG   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)rK   ÚaerÉ   s     €rE   rU   z@BulkUDCompileState._adjust_for_extra_criteria.<locals>.<genexpr>P  s>   øè ø€ ð !ñ�Bð ×%Ò%¨¯©°hÑ)>ð	 ×*Ñ*¨8×4ñùs   ƒ58c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr<   )Útraverse)rK   ÚcritÚadapters     €rE   rU   z@BulkUDCompileState._adjust_for_extra_criteria.<locals>.<genexpr>\  s   øè ø€ ÐOÁ;¸4 × 0Ñ 0°× 6Á;ùs   ƒ)rÅ   Ú_adapterr?   rq   Ú_single_table_criterion)r°   Úglobal_attributesrÉ   Úreturn_critrH  s     ` @rE   Ú_adjust_for_extra_criteriaz-BulkUDCompileState._adjust_for_extra_criteria;  s­   ù€ ð ˆà'/×'@Ò'@�(×#Ò#Àdˆð )Ø�O‰Oð
ð ñð œ5ó !à+Ø1°8·?±?ÐCòó!ó ñ ˆKð �?‰?×2Ñ2Ð>Ø˜HŸO™O×CÑCÐEÑEˆKáÜÓOÁ;ÓOÓOˆKàÐrG   c                ó"  — 	 |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å   r-  )r°   r   r?   ÚrowsÚpk_keysÚrows         rE   Ú_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  r?   r‘   ÚexpiredÚobjr`   r  r"  r   Ú_EXPIRED_OBJECTÚappend)r°   r7  rr   r?   Úeval_conditionrL   Úraw_datar"  rW  rs   r   Úevaled_conditions               rE   Ú _get_matched_objects_on_criteriaz3BulkUDCompileState._get_matched_objects_on_criteriaƒ  s)  € à×/Ñ/ˆØ'×7Ñ7ˆñ  ó
á�Ø�|‰|×Ñ Ô'°·²ð �Y‰Y‹[˜% §¡Ò,Øð 	ð 
ð (×7Ñ7ˆØÐ%ñ *2õá)1Ñ%�C˜ Ø×'Ñ'¨>Ò9ð �e˜UÒ#Ø)1ð ò ð ˆÛ!)Ñˆ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rU  r=   )rW  s    rE   r  zJBulkUDCompileState._eval_condition_from_statement.<locals>._eval_conditionÀ  s   € ØrG   )
r  rÆ   r   Ú_EvaluatorCompilerÚ_where_criteriarÞ   Ú_is_criteria_optionÚget_global_criteriarM  Úprocess)r°   r7  r±   r?   Ú
target_clsÚevaluator_compilerrG  rK  ÚoptrZ  r  s              rE   Ú_eval_condition_from_statementz1BulkUDCompileState._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àÐrG   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.

        r*  )r  r  r  r+  )rh  r   ÚUnevaluatableErrorr3  )r°   r]   r±   rN   r:   rø   r7  rZ  s           rE   r1  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  )rh  r   rj  r.  r/  )	r°   r]   r±   rN   r:   rø   r7  rZ  Úerrs	            rE   r2  z/BulkUDCompileState._do_pre_synchronize_evaluate÷  sr   € ð
	Ø ×?Ñ?Ø 	óˆNð Ø˜~ð!
ñ 
ð 	
øô ×+Ñ+ò 	Ü×,Ñ,ð8à:=ñ>óð ð	ûð	ús   ‚ ›A®AÁAc                óÂ   — |j                   rg S |j                  rt        |j                  «      S |j                  r#t        |j                  j	                  «       «      S g S r<   )Ú_multi_valuesÚ_ordered_valuesrb   Ú_valuesre   )r°   r?   r±   s      rE   Ú_get_resolved_valuesz'BulkUDCompileState._get_resolved_values  sR   € à×"Ò"ØˆIØ×&Ò&Ü˜	×1Ñ1Ó2Ð2Ø×ÒÜ˜	×)Ñ)×/Ñ/Ó1Ó2Ð2àˆIrG   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Ú_columntopropertyrY  ri   Úorm_excÚUnmappedColumnErrorr.  r/  )r°   r?   Úresolved_valuesÚvaluesr‰   rŠ   r·   s          rE   Ú_resolved_keys_as_propnamesz.BulkUDCompileState._resolved_keys_as_propnames  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  r.  r/  r”   r•   )Úorm_contextÚbindÚper_bind_resultr  r°   r?   r7  s      €€€€rE   Úskip_for_returningzHBulkUDCompileState._do_pre_synchronize_fetch.<locals>.skip_for_returningP  sÊ   ø€ Ø/�;×&Ñ&×/Ñ/ÑM°+×2LÑ2LÑMˆDð "×3Ñ3Ø—‘ØØ-×=Ñ=Ø .× ?Ñ ?Ø*×9Ñ9ð 4ó ˆOð !Ð,Ø$¨Ò7Ü ×4Ñ4ð óð ð
 ×+Ò+±OÜ×0Ñ0ð-óð ð %4Ð!áÜ×*Ñ*Ó,Ð,àrG   )r:   rø   Ú
_add_event)r  r
  )r}  r0   Úreturnr   )
r  r!   rå   Úselect_identity_tokenÚselect_fromrÝ   rÞ   ra  ÚexecuteÚfetchall)r°   r]   r±   rN   r:   rø   r7  Úselect_stmtr€  r   Úmatched_rowsr  r?   s   `     `    @@rE   r3  z,BulkUDCompileState._do_pre_synchronize_fetch.  s¾   û€ ð  ×/Ñ/ˆðŒF�V×'Ñ'¨6×+GÑ+GÐ*IÑIÐKß‰[˜Ó ß‰W�i×-Ñ-ð/ð 	ð
 '0×&?Ñ&?ˆÔ#ð !Ð÷	ð 	ðB —‘ØØØ/Ø)Ø)ð !ó 
ˆð —‘Ó(ˆàØ)Ø"3ñ!
ñ 
ð 	
rG   N©r  r   r?   úMapper[Any]r  r	  r  r	  r  r	  r  r	  r‚  r	  )rÇ   rý   rþ   r%   r  r  r  r9  r>  rM  rS  r]  rh  r1  r2  rq  ry  r3  r=   rG   rE   r  r  z  sZ  „ ô) ô )ð ð $Ø$Ø %Ø$ñ
$àð
$ð ð
$ð
 ð
$ð ð
$ð ð
$ð ð
$ð 
ò
$ó ð
$ð ñv
ó ðv
ðp ñ)
ó ð)
ðV ñ"ó ð"ðH ñ .ó ð .ðD ñ$ó ð$ðL ñó ðð8 ñ-
ó ð-
ð^ ñ
ó ð
ð2 ñó ðð ñó ðð" ñN
ó ñN
rG   r  r(  Ú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=   rG   rE   Údefault_insert_optionsr�  ‚  sB   … Ø-3ˆÐ*Ó3Ø#ˆ�tÓ#Ø!&Ð˜$Ó&Ø15ˆÐ.Ó5Øˆ
�DÓØ#(Ð˜DÔ(rG   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!  rD   r#  r%  rº   r?   r  r&  r  r  r(  rY   r)  Úrawr!  )r�  r’  r,  rÜ   r»   r?   r-  r  r.  r/  r   Ú_orm_load_exec_optionsr�   r  r4  r   r5  )	r°   r]   r±   rN   r:   rø   r6  Úinsert_optionsrº   s	            rE   r9  z"BulkORMInsert.orm_pre_session_execŒ  s¨  € ô ×0Ñ0×GÑGØ$ÚNØØ×(Ñ(ó	
ñ	
ØØð $-ˆ�xÑ ð	MØ&×7Ñ7Ð8HÑIˆNñ Ø+9×+@Ñ+@�˜xÑ(ØÐ#4°n×6KÑ6KÐ"LÑL‘áØ×+Ñ+¨vÒ5Ø ?°EÐ":Ñ:‘Ø×-Ñ-°Ò7Ü×0Ñ0ð2óð ð
 ×+Ñ+¨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! Å!E2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•  rY   r(  r  zHValid strategies for ORM insert strategy are 'raw', 'orm', 'bulk', 'autor•  )r:   rY   z`bulk INSERT with a 'post values' clause (typically upsert) not supported for multi-table mapper úIterable[Dict[str, Any]]F)rB   rC   rD   r9   r:   r(  rñ   r  T)rÎ   r’  r  r.  r0  r…  r  Ú_post_values_clauseÚ_multiple_persistence_tablesr/  Ú_transactionrF   r   r«   r`   r‘  r�  ÚAssertionErrorr	  rl   r  r   rö   r�   rü   )r°   r]   r±   rN   r:   rø   rP   r—  r   r?   rú   s              rE   Ú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ó!Ðð ×(Ñ(ØØØØØØó
ð 	
rG   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•  rY   r(  )
r   r�  Úsuperrà   Ústackr»   r¯   rÎ   Ú_setup_for_bulk_insertÚ_setup_for_orm_insert)	r°   r±   rè   Úkwrç   Útoplevelr?   r!  Ú	__class__s	           €rE   rà   z"BulkORMInsert.create_for_statement)  sª   ø€ äÜÜ‰GÑ(¨°HÑCÀÑCó
ˆð
 ÐØ#Ÿ>™>Ð)‰HàˆHÙØˆKà×+Ñ+Ð,<Ñ=ˆØ ×-Ñ-×1Ñ1°.À%ÓHˆØ˜6Ò!Ø×'Ñ'¨Ô1ð ˆð ˜UÒ"Ø×&Ñ& x°Ô8àˆrG   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Î   )rK   r‰   rŠ   r?   s      €rE   rU   z;BulkORMInsert._resolved_keys_as_col_keys.<locals>.<genexpr>D  s-   øè ø€ ð Ù4O©D¨A¨q�—‘—‘˜a“ ! QÔ'Ñ4Oùs   ƒ+.)re   ri   )r°   r?   Úresolved_value_dictÚcolr‰   rŠ   s    `    rE   Ú_resolved_keys_as_col_keysz(BulkORMInsert._resolved_keys_as_col_keys@  sT   ø€ óØ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è   r?   r±   ré   s        rE   r£  z#BulkORMInsert._setup_for_orm_insertI  sI   € Ü*.¬s¯z©z¸4¿>¹>Ó*JÐJˆ	Ð'à×-Ñ-ØØØØØ"'ð .ó 
ˆ	ð #ˆ�rG   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¯   Ú_clonerv   Ú_dict_parametersre   rï   r¡   rô   rõ   r.  ÚCompileError)	rç   rè   r±   ré   ÚanÚemit_insert_tableÚemit_insert_mapperrª  Úvals	            rE   r¢  z$BulkORMInsert._setup_for_bulk_insertU  s  € ô +/¬s¯z©z¸4¿>¹>Ó*JÐJˆ	Ð'Ø×#Ñ#ˆð Ð#Ñ$ØÐ$Ñ%ð .Ðð
 ×$Ñ$Ó&ˆ	à+ˆ	ŒØ× Ò ð !%× 5Ñ 5× ;Ñ ;Ô =ô%á =‘H�C˜Ø—9‘9Ð 1Ñ1ð �S‘Ø =ò%ˆDÔ!ð ×-Ñ-ØØØØ)Ø"&ð .ó 
ˆ	ð ×#Ñ#Ð/Ø×'Ñ'×7Ñ7×@Ò@ä×%Ñ%ð3óð ð #ˆ�ùó1%s   Á=D )r]   r1   r±   z
dml.InsertrN   r6   r:   r,   rø   r/   rP   r4   r‚  ú_result.Result)r‚  r�  )rÇ   rý   rþ   r%   r’  rß   r   r  r9  rž  rà   r«  r£  r¢  Ú__classcell__©r¦  s   @rE   r�  r�  €  sÆ   ø… ô) ô )ð 15ÐÐ-Ó4àñA
ó ðA
ðF ðV
àðV
ð ðV
ð &ð	V
ð
 6ðV
ð 'ðV
ð ðV
ð 
òV
ó ðV
ðp ôó ðð, ñ
ó ð
ò
#ö,#rG   r�  Úupdatec                  óÚ   ‡ — 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!  ÚunspecifiedrY   r'  rÀ   )r(  rÀ  )	Ú__new__r¯   rÎ   r¡  Ú_setup_for_bulk_updaterv   r(   Ú__init__Ú_setup_for_orm_update)r°   r±   rè   r¤  rç   r!  r¥  s          rE   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°(Ô;àˆrG   c                ó  — |}|j                    }|j                  j                  d   }|j                  x| _        }| j	                  ||«      | _        | j                  ||||¬«       |j                  rt        | j
                  «      | _        |j                  «       }|j                  j                  d   |u r|j                  |_        |j                  r| j
                  |_        n|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  r+  )r  Tr­  )r¡  rv   r¯   r?   rq  r  Ú_init_global_attributesrp  r`   r²  rÈ   ro  rM  rK  Úwherer(   rÃ  rÎ   r  r  r  rC   rå   rï   r±   )rç   r±   rè   r¤  ré   r¥  rÉ   r?   Únew_stmtÚnew_critrØ   r$  r  s                rE   rÄ  z#BulkORMUpdate._setup_for_orm_update�  s#  € Ø'Ðà—~‘~Ð%ˆà—?‘?×/Ñ/°Ñ?ˆà'Ÿ™Ð.ˆŒ�fà $× 9Ñ 9¸&À)Ó LˆÔà×$Ñ$ØØØØ*2ð	 	%ô 	
ð ×ÒÜ$(¨×)>Ñ)>Ó$?ˆDÔ!à×#Ñ#Ó%ˆà�>‰>×&Ñ& ~Ñ6¸&Ñ@Ø#×/Ñ/ˆHŒNð ×$Ò$Ø'+×'<Ñ'<ˆHÕ$Ø×ÒØ#×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ð "ˆ�rG   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²  rv   r(   rÃ  ro  r.  r/  r³  re   r±   )	rç   r±   rè   r¤  rµ  Úemit_update_tableÚ_rª  r¸  s	            rE   rÂ  z$BulkORMUpdate._setup_for_bulk_updateÿ  sé   € ô œŸ™ YÓ/ˆ	Ø×#Ñ#ˆð Ð#Ñ$ØÐ$Ñ%ð Ðð
 ×$Ñ$Ó&ˆ	Ø+ˆ	Œä×Ñ  i°Ñ@¸RÒ@à×ÒÜ×,Ñ,ð=óð ð × Ò ð !%× 5Ñ 5× ;Ñ ;Ô =ô%á =‘H�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)r(  r  rY   r'  zOValid strategies for ORM UPDATE strategy are 'orm', 'auto', 'bulk', 'core_only'rY   r+  r*  zÑbulk synchronize of persistent objects not supported when using bulk update with additional WHERE criteria right now.  add synchronize_session=None execution option to bypass synchronize of persistent objects.r™  F)rB   rƒ   r   r€   )rÎ   r  r  r   rö   r�   r  r.  r0  ra  r  r/  r  rœ  r„   r   r«   r`   r>  r   rž  )r°   r]   r±   rN   r:   rø   rP   r7  rú   r€   r?   r   r¦  s               €rE   rž  z#BulkORMUpdate.orm_execute_statement#  s»  ø€ ð +×.Ñ.Ø$ c×&@Ñ&@ó
ˆð ×,Ò,Ø,×0Ñ0Ø&¬×(IÑ(IóˆLð Ð1°4Ð8Ñ8ˆLØ 1× 7Ñ 7Ø'¨Ð6ó!Ðð ×'Ñ'ð 0
ñ 
ô ×&Ñ&ð9óð ð ×'Ñ'¨6Ò1Ø(1×(AÑ(AÐ$AÐ!à!×6Ñ6¸'ÒAÐAÐAð ×)Ò)Ø"×7Ñ7¸:ÒEä×0Ñ0ðóð ð $×3Ñ3ˆFØÐ%Ð%Ð%Ø×'Ñ'Ð3Ð3Ð3Ü!ØÜØ.Ü *¨6´4Ô 8�V‘H¸fóð ×$Ñ$ØØ$)Ø$-Ø&;ôˆFð ×.Ñ.ØØØØ!ØØóð ô ‘7Ñ0ØØØØ!ØØóð rG   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_multifromr.  r´  rÁ   ©r°   r  r?   r  r  r  r  Únormal_answers           rE   r  zBulkORMUpdate.can_use_returningy  s…   € ð ×$Ñ$ÒN¨×);Ñ);×)NÑ)Nð 	ñ ØáØ×7Ñ7Ð7ñ Ø×5Ñ5Ð5á 7×#EÒ#EÜ×%Ñ%Ø˜GŸL™L˜>ð *Eð Eóð ð rG   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=   )rK   ri   Úparams     €rE   rU   zCBulkORMUpdate._do_post_synchronize_bulk_evaluate.<locals>.<genexpr>¬  s   øè ø€ Ð/¡w ��s•¡wùs   ƒ)r  rp   ri   Úidentity_mapÚidentity_key_from_primary_keyr  Úfast_get_stater˜   Ú
differencer`   Ú
unmodifiedr›   ÚmanagerÚdispatchÚrefreshÚ_commitrb   Ú_expire_attributes)r°   r]   rN   r   r7  r?   ÚproprQ  rÞ  Úidentity_keyrL   Úevaluated_keysrs   Úto_evaluateri   Ú	to_expirerÝ  s                   @rE   r=  z0BulkORMUpdate._do_post_synchronize_bulk_evaluatež  sA  ø€ ñ Øà×/Ñ/ˆØ(.×(BÒ(BÓCÑ(B �4—8“8Ð(BˆÐCà×+Ñ+ˆäˆEØ!×?Ñ?Û/¡wÓ/Ø×.Ñ.óˆLð !×/Ñ/°Ó=ˆEÙØä  ›Z×2Ñ2°7Ó;ˆNà—J‘JˆEà×*Ñ*×7Ñ7¸ÓGˆKÛ"�Ø˜%’<Ø!& s¡�E˜#’Jð #ð �M‰M×"Ñ"×*Ñ*¨5°$¸ÔDà�M‰M˜%¤ kÓ!2Ô3ð
 '×3Ñ3°EÓ:×EÑEØóˆIò Ø×(Ñ(¨°	Ö:ñ; ùò	 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   )r]  rÞ  Ú
all_statesÚ#_apply_update_set_values_to_objectsr   Úcompiled_parametersÚprefetch_colsÚpostfetch_cols)
r°   r]   r±   r   r7  Úmatched_objectsrW  rL   rs   rÑ  s
             rE   r;  z+BulkORMUpdate._do_post_synchronize_evaluateÉ  s”   € ð ×>Ñ>ØØ× Ñ ×+Ñ+Ó-ó
ˆð
 	×/Ñ/ØØØØ�N‰N×.Ñ.¨qÑ1Ù=LÖ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_rowsrS  rq   r  r  rß  rb   rÞ  rï  r   rð  r   Úinstance_stateÚinstance_dictrñ  rò  )r°   r]   r±   r   r7  Útarget_mapperr÷  Úpk_rowsrR  rˆ  rå   r"  ré  ÚobjsrW  s                  rE   r<  z(BulkORMUpdate._do_post_synchronize_fetchÜ  sÚ  € ð '×6Ñ6ˆà!'×!>Ñ!>ÐÙ!Ø×3Ñ3Ø˜Ð'=óˆGñ
 #óá"�Cô �c“
˜n×<Ñ<Ð>Ó>Ø"ð ñ ð
 *×7Ñ7ˆLñ 5Aó4Ù4@¨S�S˜˜2�Y  B¡Ò(°Lò4ô
!ñ
4Ñ/�K ð "×1Ñ1Ð9Ø! ^×%CÑ%CÒCð ×;Ñ;Ü˜Ó%Ø#1ð <õ ð4ó
!ó
ñ
!�ð ˜w×3Ñ3Ñ3ð × Ñ  Ó.ð
!ð 	ð 
ñ  Øà×/Ñ/ØØØØ�N‰N×.Ñ.¨qÑ1ñ  óñ  �Cð	 Ü×-Ñ-¨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   r`  rq  ry  rd  r   r©   r    r¬   rj  rb   r™   r˜   ri   rt  rá  r¼  rç  r`   râ  r›   rã  rä  rå  ræ  ÚaddÚ_register_altered) r°   r]   r7  r±   Úeffective_paramsró  rñ  rò  r?   re  rf  rw  Úresolved_keys_as_propnamesÚvalue_evaluatorsri   ÚvalueÚ
_evaluatorrê  r‰   rŠ   Úattribrr   rÏ   Úto_prefetchrì  Úprefetch_transferrW  rL   rs   Úcol_to_propÚc_keyrë  s                                    rE   rï  z1BulkORMUpdate._apply_update_set_values_to_objects  sõ  € ð   ×/Ñ/ˆØ—]‘]ˆ
Ü&×9Ñ9¸*ÓEÐØ×2Ñ2°6¸9ÓEˆØ%(×%DÑ%DØ�Oó&
Ð"ð ÐÛ4‰JˆC�ð3Ø/×7Ñ7Ü×$Ñ$¤U×%@Ñ%@À%ÓHó�
ð )3Ð  Ò%ð 5ô Ð.×3Ñ3Ó5Ó6ˆÙ :Ô;Ñ :™˜˜1’!Ð :ˆÑ;ä“ˆñ #ó
á"�Ø�u‰uÐ(Ñ(Ø�V×-Ñ-Ñ-Ø—‘˜^Ñ+ò	 Ø"ð 	ð 
ñ $ó
á#�Ø�F×,Ñ,Ñ,ð ×$Ñ$ QÑ'×+Ó+Ø#ñ
÷ ‰*�^Ó
$ð	 	ñ ?Jó
Ù>I¸ˆV×%Ñ% aÑ(×,Ñ,¨a¯e©eÒ4¸kð 	ð 
ô "1ÑˆC�˜à�L‰Lñ /@ôá.?Ñ*˜ Uð  Ð!1°%Ñ!8Ñ8Ø.?òôð ×$Ñ$ U§Z¡Z°Ô;à×*Ñ*×7Ñ7¸ÓGˆKã"�Ø˜%’<à!6Ð!1°#Ñ!6°sÓ!;�E˜#’Jð #ð
 �M‰M×"Ñ"×*Ñ*¨5°$¸ÔDà�M‰M˜%¤ kÓ!2Ô3ð
 ×+Ñ+¨EÓ2×=Ñ=¸kÓJˆIÙØ×(Ñ(¨°	Ô:à�J‰J�uÖð; "1ð< 	×!Ñ! &Õ)øôs ×/Ñ/ò Úðüó <ùò
ùò
ùò
ùós0   Á3JÂ5J6Ã3J<Ä.KÅ,KÆKÊJ3Ê2J3)r]   r1   r±   z
dml.UpdaterN   r6   r:   r,   rø   r/   rP   r4   r‚  r¹  r‰  )rÇ   rý   rþ   r  rà   rÄ  rÂ  rž  r  r=  r;  r<  rï  rº  r»  s   @rE   r¾  r¾  „  s?  ø„ àñó ðò,`"òD"#ðH ðSàðSð ðSð &ð	Sð
 6ðSð 'ðSð ðSð 
ôSó ðSðj ð $Ø$Ø %Ø$ñ"àð"ð ð"ð
 ð"ð ð"ð ð"ð ð"ð 
ò"ó ð"ðH ñ(;ó ð(;ðT ñ
ó ð
ð$ ñ3
ó ð3
ðj ñU*ó ôU*rG   r¾  Údeletec                  ó®   ‡ — 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À  r'  rÀ   rÆ  Fr$  r  r+  r  )r  r  Tr­  )rÁ  r¯   rÎ   rv   r&   rÃ  r¡  r?   rÈ  r²  rÈ   rM  rK  rÉ  r  r  r  rC   rå   rï   r±   )r°   r±   rè   r¤  rç   r!  r¥  ré   rÉ   r?   rÊ  rË  rØ   r$  r  s                  rE   rà   z"BulkORMDelete.create_for_statementm  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ð "ˆŒàˆrG   c                óò   •— |j                  d| j                  «      }|j                  dk(  rt        j                  d«      ‚|j                  dvrt        j
                  d«      ‚t        ‰| �  ||||||«      S )Nr  rY   zˆBulk ORM DELETE not supported right now. Statement may be invoked at the Core level using session.connection().execute(stmt, parameters))r(  r  r'  zGValid strategies for ORM DELETE strategy are 'orm', 'auto', 'core_only')rÎ   r  r  r.  r/  r0  r   rž  )	r°   r]   r±   rN   r:   rø   rP   r7  r¦  s	           €rE   rž  z#BulkORMDelete.orm_execute_statementÉ  s”   ø€ ð +×.Ñ.Ø$ c×&@Ñ&@ó
ˆð ×'Ñ'¨6Ò1Ü×,Ñ,ðAóð ð ×'Ñ'Ð/KÑKÜ×&Ñ&ðóð ô
 ‰wÑ,Ø�Y Ð(9¸>È4ó
ð 	
rG   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_multifromr.  r´  rÁ   rÙ  s           rE   r  zBulkORMDelete.can_use_returningé  sz   € ð ×$Ñ$ÒN¨×);Ñ);×)NÑ)Nð 	ñ Øñ ð ×5Ñ5Ð5á 7×#EÒ#Eô ×%Ñ%Ø˜GŸL™L˜>ð *Eð Eóð ð rG   c                ó  — | j                  ||j                  j                  «       «      }g }|D ]A  \  }}}	}
|
r'|j                  |	|j                  j                  «       Œ1|j                  |«       ŒC |r|j                  |«       y y r<   )r]  rÞ  rî  Ú_expireÚ	_modifiedrY  Ú_remove_newly_deleted)r°   r]   r±   r   r7  ró  Ú	to_deleterÑ  rL   rs   Úis_partially_expireds              rE   r;  z+BulkORMDelete._do_post_synchronize_evaluate  sˆ   € ð ×>Ñ>ØØ× Ñ ×+Ñ+Ó-ó
ˆð
 ˆ	ã5DÑ1ˆAˆu�eÐ1Ù#Ø—‘˜e W×%9Ñ%9×%CÑ%CÕDà× Ñ  Õ'ð	 6Eñ Ø×)Ñ)¨)Õ4ð rG   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÷  rS  rq   r  r  rß  rb   rÞ  r  r   rø  )r°   r]   r±   r   r7  rú  r÷  rû  rR  rˆ  rå   r"  ré  s                rE   r<  z(BulkORMDelete._do_post_synchronize_fetch&  sü   € ð '×6Ñ6ˆà!'×!>Ñ!>Ðá!Ø×3Ñ3Ø˜Ð'=óˆGñ #óá"�Cô �c“
˜n×<Ñ<Ð>Ó>Ø"ð ñ ð
 *×7Ñ7ˆLãˆCØ˜a ˜)ˆKØ  ™WˆNð )×FÑFÜ�[Ó!Ø-ð Gó ˆLð ˜w×3Ñ3Ò3Ø×-Ñ-ä"×1Ñ1Ø#×0Ñ0°Ñ>óðõñ  ùòs   ² C)r]   r1   r±   z
dml.DeleterN   r6   r:   r,   rø   r/   rP   r4   r‚  r¹  r‰  )
rÇ   rý   rþ   r  rà   rž  r  r;  r<  rº  r»  s   @rE   r  r  k  sÿ   ø„ àñYó ðYðv ð
àð
ð ð
ð &ð	
ð
 6ð
ð 'ð
ð ð
ð 
ô
ó ð
ð> ð $Ø$Ø %Ø$ñ&àð&ð ð&ð
 ð&ð ð&ð ð&ð ð&ð 
ò&ó ð&ðP ñ5ó ð5ð& ñ$ó ô$rG   r  )r?   ú
Mapper[_O]r@   ú<Union[Iterable[InstanceState[_O]], Iterable[Dict[str, Any]]]rA   r2   rB   r	  rC   r	  rD   r	  r9   úLiteral[None]r:   ú$Optional[OrmExecuteOptionsParameter]r‚  ÚNone)r?   r  r@   r  rA   r2   rB   r	  rC   r	  rD   r	  r9   úOptional[dml.Insert]r:   r  r‚  zcursor.CursorResult[Any])r?   r  r@   r  rA   r2   rB   r	  rC   r	  rD   r	  r9   r  r:   r  r‚  z"Optional[cursor.CursorResult[Any]])r?   rŠ  r@   r  rA   r2   rB   r	  rƒ   r	  r   r  r€   r	  r‚  r  )r?   rŠ  r@   r  rA   r2   rB   r	  rƒ   r	  r   úOptional[dml.Update]r€   r	  r‚  z_result.Result[Any])r?   rŠ  r@   r  rA   r2   rB   r	  rƒ   r	  r   r  r€   r	  r‚  zOptional[_result.Result[Any]])OÚ__doc__Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   Ú r   r   r   r   ru  r   r   Úbaser   r   r   r   r   r.  r   Úenginer   r   r”   Úsqlr   r   r   r    r!   r"   Úsql.baser#   r$   r%   Úsql.dmlr&   r'   r(   r)   Úutil.typingr*   Ú_typingr+   r,   r-   r?   r.   r]   r/   r0   r1   r2   rL   r3   r4   r5   Úengine.interfacesr6   Úobjectr7   rF   r„   rc   r    r  Ú
plugin_forr�  r¾  r  r=   rG   rE   Ú<module>r.     sî  ðñõ
 #å Ý Ý Ý Ý Ý Ý  Ý Ý å Ý Ý Ý Ý Ý Ý Ý ,Ý "Ý 1Ý !Ý Ý Ý Ý &Ý Ý Ý Ý Ý Ý Ý ,Ý #Ý Ý $Ý $Ý $Ý Ý !áÝ,Ý3Ý3ÝÝ'Ý(Ý Ý+Ý$Ý#ÝÝ9áˆT˜Ô €ð 
ð *-Ø>Añ
Øð
àJð
ð ,ð
ð
 ð
ð ð
ð ð
ð 'ð
ð <ð
ð 
ò
ó 
ð
ð 
ð 14Ø>Añ
#Øð
#àJð
#ð ,ð
#ð
 ð
#ð ð
#ð ð
#ð .ð
#ð <ð
#ð ò
#ó 
ð
#ð* 15Ø>BñUØðUàJðUð ,ðUð
 ðUð ðUð ðUð .ðUð <ðUð (óUðp 
ð *-Ø"&ñ	Øð	àJð	ð ,ð	ð
 ð	ð ð	ð 'ð	ð  ð	ð 
ò	ó 
ð	ð 
ð 14Ø"&ñ	Øð	àJð	ð ,ð	ð
 ð	ð ð	ð .ð	ð  ð	ð ò	ó 
ð	ð& 15Ø"&ñY%ØðY%àJðY%ð ,ðY%ð
 ðY%ð ðY%ð .ðY%ð  ðY%ð #óY%òx%ôtÐ)ô tônC
˜ô C
ðL €×Ñ˜ Ó)ô@#�K ó @#ó *ð@#ðF €×Ñ˜ Ó)ôc*Ð&¨ó c*ó *ðc*ðL €×Ñ˜ Ó)ô_Ð&¨ó _ó *ñ_rG   