Hacked By AnonymousFox

Current Path : /opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/orm/__pycache__/
Upload File :
Current File : //opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/orm/__pycache__/persistence.cpython-311.pyc

�

�܋f���^�dZddlmZddlmZddlZddlmZddlmZddlmZ	dd	lm
Z
dd
lmZddlm
Z
ddlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd�Zd�Zd=d�Zd�Zd�Zd�Zd�Zd�Z			d>d�Z	d=d�Zd�Zd�Z 	d?d �Z!	d?d!�Z"d"�Z#d#�Z$d$�Z%d%�Z&d&�Z'd'�Z(d(�Z)d)�Z*d*�Z+Gd+�d,e,��Z-Gd-�d.e-��Z.Gd/�d0e-��Z/Gd1�d2e-��Z0Gd3�d4e-��Z1Gd5�d6e.e0��Z2Gd7�d8e.e1��Z3Gd9�d:e/e0��Z4Gd;�d<e/e1��Z5dS)@z�private module containing functions used to emit INSERT, UPDATE
and DELETE statements on behalf of a :class:`_orm.Mapper` and its descending
mappers.

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

�)�chain)�groupbyN�)�
attributes)�	evaluator)�exc)�loading)�sync)�_entity_descriptor)�	state_str�)�sql)�util)�
expression)�
_from_objectsc
������j}t|��}|jjrt	d���|r(|rd�|D��}d�|D��}nd�|D��}nt|��}|�|���|j���D]_\}	}
��	|
��s���fd�t|	��fd�|D��d||���D��}t|d||
|	||�	���`|rD|rD�j}d
��j
D��}
|D]+\}�|t�fd�|
D����f|_�(dSdSdS)NzJconnection_callable / per-instance sharding not supported in bulk_insert()c� �g|]}||jf��S���dict��.0�states  �Q/opt/cloudlinux/venv/lib64/python3.11/site-packages/sqlalchemy/orm/persistence.py�
<listcomp>z _bulk_insert.<locals>.<listcomp>7s��@�@�@�e�u�e�j�)�@�@�@�c��g|]\}}|��Srr)rr�dict_s   rrz _bulk_insert.<locals>.<listcomp>8s��;�;�;�.�5�%��;�;�;rc��g|]	}|j��
Srrrs  rrz _bulk_insert.<locals>.<listcomp>:���9�9�9�u��
�9�9�9rc	3�>�K�|]\}}}}}}}}d||�
�	|||fV��dS�Nr)rr�
state_dict�params�mp�conn�value_params�has_all_pks�has_all_defaults�
connection�mappers         ��r�	<genexpr>z_bulk_insert.<locals>.<genexpr>Csk�����
�
�	�������� �#������� �	
�
�
�
�
�
�
rc3�$�K�|]
}d|��fV��dSr"r�r�mappingr*r+s  ��rr,z_bulk_insert.<locals>.<genexpr>Ys,�����M�M��$����4�M�M�M�M�M�MrT)�bulk�return_defaults�render_nulls��bookkeepingc��g|]	}|j��
Sr��key)r�ps  rrz _bulk_insert.<locals>.<listcomp>ks��D�D�D�A�!�%�D�D�Drc� ��g|]
}�|��Srr)rr7rs  �rrz _bulk_insert.<locals>.<listcomp>os���<�<�<�c�u�S�z�<�<�<r)�base_mapper�_cached_connection_dict�session�connection_callable�NotImplementedError�listr*�_sorted_tables�items�isa�_collect_insert_commands�_emit_insert_statements�_identity_class�_identity_key_props�tupler7)r+�mappings�session_transaction�isstatesr1r2r:�cached_connections�states�table�super_mapper�records�identity_cls�identity_propsrr*rs`              @@r�_bulk_insertrR#s������$�K�0��=�=���"�6�
�!�
-�
�
�	
�
�"��	:�@�@�x�@�@�@�F�;�;�F�;�;�;�H�H�9�9��9�9�9�H�H���>�>��$�/�/��<�<�J�*�9�?�?�A�A�(
�(
���|��z�z�,�'�'�	��
�
�
�
�
�(*��M�M�M�M�M�H�M�M�M�� /�)����)
�
�
��8	 �������'�	
�	
�	
�	
�	
���8���-��D�D��)C�D�D�D��"�	�	�L�E�5���<�<�<�<�^�<�<�<�=�=��E�I�I�	����	�	rc
�6��
����j}t|��}�j��jr �jjh������fd��
|r|r�
�fd�|D��}nd�|D��}nt
|��}|jjrtd���|�
|���|j���D]Q\}}��
|��s�td|��fd�|D��d���}	t|d||||	d�	���RdS)
Nc�l���t��fd��j���D����S)Nc3�@�K�|]\}}|�jvs|�v�||fV��dSr")�committed_state)r�k�v�search_keysrs   ��rr,z6_bulk_update.<locals>._changed_dict.<locals>.<genexpr>sO�����
�
���1��E�)�)�)�Q�+�-=�-=���F�-=�-=�-=�-=�
�
r)rrA)r+rrYs `�r�
_changed_dictz#_bulk_update.<locals>._changed_dict~sO�����
�
�
�
�
��
�(�(�*�*�
�
�
�
�
�	
rc�(��g|]}��|����Srr)rrrZr+s  ��rrz _bulk_update.<locals>.<listcomp>�s%���K�K�K��
�
�f�e�4�4�K�K�Krc��g|]	}|j��
Srrrs  rrz _bulk_update.<locals>.<listcomp>�r rzJconnection_callable / per-instance sharding not supported in bulk_update()c3�X�K�|]$}d|���jr|�jjndfV��%dSr")�_version_id_propr7r.s  ��rr,z_bulk_update.<locals>.<genexpr>�sg�����

�

������"�2�"��� 7� ;�<�<�!�
�

�

�

�

�

�

rT)r0Fr3)r:r;�_primary_key_propkeysr^r7�unionr?r<r=r>r*r@rArB�_collect_update_commands�_emit_update_statements)
r+rHrIrJ�update_changed_onlyr:rKrMrNrOrZr*rYs
`         @@@r�_bulk_updaterdss��������$�K�0��=�=���.�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���>�>���"�6�
�!�
-�
�
�	
�
%�/�/��<�<�J�*�9�?�?�A�A� 
� 
���|��z�z�,�'�'�	��*���

�

�

�

�

� (�

�

�

��#
�
�
��(	 ��������	
�	
�	
�	
�	
�1 
� 
rFc	��|s0|js)t||��D]}t||g|d����dSg}g}t|��}t	|||��D]B\}}}	}
}}}
|s|r|�|||	|
|
f���)|�|||	|
f���C|j���D]X\}}	||	jvr�t||��}t|||��}t||||	||��t||||	||���Yt||td�|D��d�|D������dS)a;Issue ``INSERT`` and/or ``UPDATE`` statements for a list
    of objects.

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

    T)�singleNc3�.K�|]\}}}}||||dfV��dS)FNr)rrr#r+r*s     rr,zsave_obj.<locals>.<genexpr>�sI����
�
�;�U�J��
��
�F�J��>�
�
�
�
�
�
rc3�0K�|]\}}}}}||||dfV��dS)TNr)rrr#r+r*�update_version_ids      rr,zsave_obj.<locals>.<genexpr>sR����	
�	
������%�
�
�F�J��=�	
�	
�	
�	
�	
�	
r)�batch�_sort_states�save_objr;�_organize_states_for_save�appendr@rA�
_pks_by_tablerCrarbrD� _finalize_insert_update_commandsr)r:rL�uowtransactionrfr�states_to_update�states_to_insertrKrr+r*�has_identity�
row_switchrirM�insert�updates                 rrlrl�s����+�+��!�+�v�6�6�	H�	H�E��[�5�'�>�$�G�G�G�G�G�������0��=�=��
#�;���	G�	G�H�H�	�
�
�������	H�:�	H��#�#���v�z�3D�E�
�
�
�
�
�#�#�U�E�6�:�$F�G�G�G�G�$�3�9�9�;�;�
�
�
��v���,�,�,��)�%�1A�B�B��)��E�#3�
�
��	 �������
	
�	
�	
�	 �������
	
�	
�	
�	
�%���
�
�
�?O�
�
�
�	
�	
�&�	
�	
�	
�	
�	
�����rc	�"���t|��}tt|||����}|j���D]E\����jvr���fd�|D��}t
||�||��}t|||��|���FdS)z\Issue UPDATE statements on behalf of a relationship() which
    specifies post_update.

    c
3��K�|]<\}}}}�|jv�||||�j���||�j��ndfV��=dSr")ro�version_id_col�#_get_committed_state_attr_by_column)rrr#�
sub_mapperr*r+rMs     ��rr,zpost_update.<locals>.<genexpr>s������
�
�:��z�:�z��
�0�0�0������(�4��:�:��:�v�'<�����

�1�0�0�0�
�
rN)r;r?� _organize_states_for_post_updater@rAro�_collect_post_update_commands�_emit_post_update_statements)	r:rLrq�post_update_colsrKrrrwr+rMs	       @@r�post_updater�s�����
1��=�=���(��f�n�M�M����%�3�9�9�;�;�
�
�
��v���,�,�,��
�
�
�
�
�>N�
�
�
�� /�����8H�
�
��	%�������
	
�	
�	
�	
�1
�
rc	��t|��}tt|||����}|j}t	t|�������D]I}||}||jvr�|jr|jr�#t||||��}t||||||���J|D]$\}	}
}}}|j�|||	���%dS)z�Issue ``DELETE`` statements for a list of objects.

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

    N)
r;r?�_organize_states_for_deleter@�reversed�keysro�inherits�passive_deletes�_collect_delete_commands�_emit_delete_statements�dispatch�after_delete)
r:rLrqrK�states_to_delete�table_to_mapperrMr+�deleterr#r*ris
             r�
delete_objr�;s*��1��=�=���#�K���H�H����"�0�O��$��3�3�5�5�6�6�7�7�
�
�� ��'����,�,�,��
�_�	��!7�	��)����0@�
�
��	 �������
	
�	
�	
�	
�
�
@�@�	�
�������$�$�V�Z��?�?�?�?�@�@rc#�K�t|||��D�]�\}}}}t|j��}|jp|�|��}dx}	}
|s|j�|||��n|j�|||��|jr|�|||��|s�||jj	vr�|jj	|}tj|��}|�|��s�|�
|��s7tjdt!|���d|�dt!|�������|�d|t!|��t!|����|�|��|}	|s|	r0|j�)|�|	r|	n||	r|	jn||j��}
||||||	|
fV����dS)aTMake an initial pass across a set of states for INSERT or
    UPDATE.

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

    Nz
New instance z with identity key z$ conflicts with persistent instance zPdetected row switch for identity %s.  will update %s, remove %s from transaction)�_connections_for_states�boolr7�_identity_key_from_stater��
before_insert�
before_update�_validate_polymorphic_identityr<�identity_mapr�instance_state�was_already_deleted�
is_deleted�orm_exc�
FlushErrorr�
_log_debug�remove_state_actionsrzr{r)
r:rLrqrrr+r*rt�instance_keyruri�instance�existings
             rrmrmisX����-D��^�V�-�-�B
�B
�(��u�f�j��E�I�����y�J�F�$C�$C�E�$J�$J��)-�-�
�&��	E��O�)�)�&�*�e�D�D�D�D��O�)�)�&�*�e�D�D�D��0�	H��1�1�&�%��G�G�G��	&��� 6� C�C�C�%�-�:�<�H�H�!�0��:�:�H�!�5�5�h�?�?�
&�%�0�0��:�:��!�,�,�%�U�+�+�+�+�\�\�\�9�X�;N�;N�;N�P�����&�&�"�!��e�$�$��h�'�'�
����3�3�H�=�=�=�%�
��	�J�	�F�,A�,M� &� J� J�(�3�
�
�e�#-�8�
���5��%�!�!��
�������
�	
�	
�	
�	
�uB
�B
rc�$�t|||��S)z�Make an initial pass across a set of states for UPDATE
    corresponding to post_update.

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

    )r�)r:rLrqs   rr}r}�s��#�;���G�G�Grc#��K�t|||��D]R\}}}}|j�|||��|j�|�|||j��}nd}|||||fV��SdS)z�Make an initial pass across a set of states for DELETE.

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

    N)r�r��
before_deleterzr{)r:rLrqrrr+r*ris        rr�r��s�����-D��^�V�-�-�
D�
D�(��u�f�j�	��%�%�f�j�%�@�@�@�� �,� &� J� J��u�f�3�!�!���!%���e�V�Z�1B�C�C�C�C�C�
D�
Drc	#�K�|D�]�\}}}}||jvr�i}	i}
|j|}|j|}t|���|��D]{}
||
}||
}|�||vr|s�|sTt|d��st
|tj��r*t|d��r|�	��n||
|<�q||	|j
<�||sE|j|�|	���d�|
D����D]}d|	|<�|r|rP|j
|�|	��}|jjr!|j|�|	��}nd}ndx}}|jdur=|j�6|j|j|vr"|�d��|	|jj
<|||	|||
||fV����dS)zSIdentify sets of values to use in INSERT statements for a
    list of states.

    N�__clause_element__c��g|]	}|j��
Srr6)r�cs  rrz,_collect_insert_commands.<locals>.<listcomp>s��9�9�9�q�Q�U�9�9�9rTF)ro�_propkey_to_col�_insert_cols_evaluating_none�set�intersection�hasattr�
isinstancer�
ClauseElementr�r7�_insert_cols_as_none�
difference�_pk_keys_by_table�issubsetr:�eager_defaults�_server_default_cols�version_id_generatorrz�_cols_by_table)rMrsr0r1r2rr#r+r*r$r'�propkey_to_col�	eval_none�propkey�value�col�colkeyr(r)s                   rrCrC�sz����2B�J
�J
�-��z�6�:���,�,�,�������/��6���7��>�	��>�*�*�7�7�
�C�C�	(�	(�G��w�'�E� ��)�C��}��I�!5�!5�l�!5���

(���3�4�4�

(��e�S�%6�7�7�

(��u�&:�;�;��E�,�,�.�.�.���S�!�!�#(��s�w����	&��+�E�2���F�#�#���9�9�L�9�9�9�:�:�
&�
&��
"&��v����	2��	2�!�2�5�9�B�B�6�J�J�K��!�0�
(�#)�#>�u�#E�#N�#N��$�$� � �$(� � �-1�1��{�
�'�u�4�4��%�1��%��)>�u�)E�E�E�06�0K�0K��1�1�F�6�(�,�-�

��������	
�		
�		
�		
�		
�CJ
�J
rc#���K�|D�]\}�}}}||jvr�|j|}i}	|j|�|r]t��fd�t��������|j|��D����}
d}n�i}
t����|j��D]�}�|}
�|}t|
d��st|
tj��r*t|
d��r|
���n|
|	|<�f|j
|j�|
|j|��dur
|
|
|j<��|jjr!|j|�|
��}nd}|��|j|j|vr�|sa|
s_|	s]|j���D]A}|j
|jj�|�t4j��}|jrn�B��|j}|
o|	}||
|j<|s	|j|
vr)|jdur |�|��}||
|j<n|jdur|r
||
|j<n|
s|	s��jd}d}|rHt��fd�t����|j|��D����}n�i}|D]�}|j|j}|j
|j�|�t4j��}|jrb|j rd||f|jvr3d}|jd||j<|
�!|jd��n1|j d||j<||	vrd}n|j"d||j<||j�tGj$d	|�d
|�������|
s|	r#|
�%|��|�|
|||	||fV����|r2|j&|D]$\}}tOj(|||||||j)���%��dS)atIdentify sets of values to use in UPDATE statements for a
    list of states.

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

    c3�B�K�|]}�|j�|fV��dSr"r6�rr�r�r#s  ��rr,z+_collect_update_commands.<locals>.<genexpr>XsI�������� ��(�,�j��.A�B������rTr�NFc3�\�K�|]&}�|j��|��fV��'dSr")�_label�getr�s  ��rr,z+_collect_update_commands.<locals>.<genexpr>�sP�������� ��(�/�����1H�1H�I������r�pk_cascadedrzCan't update table �, using NULL for primary key value on column )*ror�rr�r�r��_pk_attr_keys_by_tablerVr�r�rr�r��manager�impl�is_equalr7r:r��_server_onupdate_default_colsr�rzr��_columntoproperty�values�get_historyr�PASSIVE_NO_INITIALIZE�addedr�r��PASSIVE_OFF�deleted�pop�	unchangedr�r�rw�_table_to_equatedr
�populate�passive_updates)rqrMrrr0rr+r*ri�pksr'r$r)r�r�r��prop�history�	no_params�valr(�expect_pk_cascaded�	pk_params�m�
equated_pairsr�r#s                        @@rrara6s�������(
�
h�h�	�
�������,�,�,���"�5�)�����/��6���)	(�������"�>�2�2���j�)�)���F�9�%�@�A�A�	�����F� $����F��~�.�.�;�;��%���
,�
,��#�7�+��$�W�-���5�"6�7�7�,�:��3�,�<�<�,�
#�5�*>�?�?�#��0�0�2�2�2�"�!��%�%��M�'�*�/�8�8��u�4�W�=��� � � �
',�F�3�7�O���!�0�
(��8��?��(�6�"�"�!� �$(� �
�)��%��)>�u�)E�E�E��

��

�<�

�
#�4�;�;�=�=���D�#�m�D�H�5�:�F�F��z�:�+K���G��}�������'�C�"�
�7�<�'7�I�!2�F�3�:���

4���v�-�-��-�U�:�:��1�1�2C�D�D��"%��s�w����,��5�5�)�5�
#4��s�w����	�L�	����"���&	�������"�>�2�2�?�?��1�%�8� � ������I�I��I��
�
�� �2�3�7�;���-��0�5�A�A��:�z�'=�����=�A�#�O�0�)�5�#�6�)�4�5�5�.2�*�07�
�a�0@�	�#�*�-��
�
�3�7�D�1�1�1�1�18���0B�	�#�*�-��,�.�.�*/�K��,3�,=�a�,@�I�c�j�)��S�Z�(�0�!�,�,�49�E�E�3�3�@����1��	�\�	��M�M�)�$�$�$������� ��	�	
�	
�	
�	
� �	�%+�$<�U�$C�	
�	
� ��=��
�����!�"��*������Ah�hrc#�K�|D�]?\}}}}}	|j|}
i}d}|j|D]�}
|
|
vr,|�|||
tj���||
j<�2|
|vs|
j�c|j|
}|j|j	j
�||tj��}|j
r|j
d}|||
j	<d}��|ru|	�j|j|j|vrV|j}
|	||
j<t|j	��r1|
j	|vr(|jdur|�|	��}|||
j	<|||||fV���AdS)zrIdentify sets of values to use in UPDATE statements for a
    list of states within a post_update operation.

    F)�passiveNrT)ror��_get_state_attr_by_columnrr�r��onupdater�r�r7r�r�r�r�rzr�r�)r:rqrMrrr�rr#r+r*rir�r$�hasdatar�r�r�r�r�s                  rr~r~�s�����
�
-@�-@�	�
�����
�"�5�)�������(��/�	#�	#�C��c�z�z�%+�%E�%E��:�s�J�4J�&F�&�&��s�z�"�"��(�(�(�C�L�,D��/��4���-���1�6�B�B��:�z�'G�����=�#�#�M�!�,�E�&+�F�3�7�O�"�G���	@�!�-��)�V�-B�5�-I�I�I��+��%6��s�z�"����O�O�*���v�-�-��3�5�@�@� �5�5�6G�H�H�C�&)�F�3�7�O���V�Z��?�?�?�?��[-@�-@rc#�(K�|D]�\}}}}}||jvr�i}	|j|D]?}
|�|||
��x|	|
j<}|�tjd|�d|
������@|�#|j|j|vr||	|jj<|	|fV���dS)zSIdentify values to use in DELETE statements for a list of
    states to be deleted.NzCan't delete from table r�)ror{r7r�r�rzr�)r:rqrMr�rr#r+r*rir$r�r�s            rr�r�'s
����
�
!�!�	�
�������,�,�,�����'��.�	�	�C��B�B��z�3���
�F���
���}��(�(�16���s�s�<�����
�)��%��)>�u�)E�E�E�0A�F�6�(�,�-��j� � � � � �=!�!rTc
�z�����jduo�j�j�v����fd�}|�d�f|��}t|d���D�]h\\}	}
}}}
}d}t	|��}|}d}|
s|���}d}nJ|r%|s#�jjr|���}d}n#�j�|��j��}d}|s|	jj	n|	jj
}|o|	jj}|o�}|rm|D]i\}}}�}	}}}
|	�|�
|��|��}|r't�|�||||jjd|d�	�	||jz
}|}�jn�|s`|}|D]Z\}}}�}	}}}
||	�||��}|r't�|�||||jjd|d�	�	||jz
}�[n�d�|D��}|p|ot%|��d	k}||	�||��}||jz
}|D]4\}}}�}	}}}
|r't�|�||||jjd|d�	�	�5|rA|t%|��kr,t'jd
�jt%|��|fz�����E�r!t-jd|jjz����jdS)z`Emit UPDATE statements corresponding to value lists collected
    by _collect_update_commands().Nc���tj��}�j�D]>}|j�|tj|j|j���k���?�rK|j��jtj�jj�jj���k����	|��}|S�N)�type_)
r�and_ro�clausesrn�	bindparamr��typerzrw��clauser��stmtr+�needs_version_idrMs   ���r�update_stmtz,_emit_update_statements.<locals>.update_stmt_s����������'��.�	�	�C��N�!�!��s�}�S�Z�s�x�@�@�@�@�
�
�
�
��	��N�!�!��%��=��)�0� �/�4�����
�
�
��|�|�F�#�#���rrwc��|dt|d��t|d��|d|dfS�N�r
����r�r���recs r�<lambda>z)_emit_update_statements.<locals>.<lambda>z�8����F���A��K�K���Q��L�L���F���F�
�rrFTc��g|]
}|d��S�r
r�rr�s  rrz+_emit_update_statements.<locals>.<listcomp>�s��9�9�9�#�s�1�v�9�9�9rr�MUPDATE statement on table '%s' expected to update %d row(s); %d were matched.�MDialect %s does not support updated rowcount - versioning cannot be verified.)rzr��_memorr?r1r:r��dialect�supports_sane_rowcount� supports_sane_rowcount_returning�supports_sane_multi_rowcount�executer��
_postfetch�context�compiled_parameters�rowcount�lenr��StaleDataError�descriptionr�warn�dialect_description)r:rqrKr+rMrwr4r��cached_stmtr*�	paramkeys�hasvaluer)r(rO�rows�	statementr1�assert_singlerow�assert_multirow�allow_multirowrr#r$r'r��check_rowcount�multiparamsr�s   ``                       @rrbrbNsX�����	��T�)�	B��!�V�%:�5�%A�A��
�������(�#�#�X�u�$5�{�C�C�K�

��	
�	
�	
�	
�W�W�	�H��Y��*:�K�����w�-�-���	����	#�!�1�1�3�3�I�"�O�O��		#�$�		#��"�1�		#�
"�1�1�3�3�I�"�O�O�
�
"�
.�!�1�1�&�2G�H�H�I�"�O�#�
E�J��5�5��#�D�	�
�
@��"�?�	�*�B�2B�.B���[	��
2�
2�	������� ���&�&�y�'7�'7��'E�'E�v�N�N������&���"���	�5�a�8�$��
�
�
���
�"��!1���1
2�4"�@
�!1���'�'�	������ �$��*�:�6�>�>�!�6���A�
#��"�"�*�!�!�&���I�9�!�<�(� �
�
�
��A�J�&�D�D�7'�::�9��9�9�9��!0�"�$�>��[�)9�)9�Q�)>��'�z�2�:�:��{������
�"�����	������ �$��"��"�"�*�!�!�&���I�9�!�<�(� �
�
�
���
	��s�7�|�|�#�#��,�9��(�#�g�,�,��=�>����$��	��I�3��)�/�0�
�
�
��gW�Wrc
�D�|�d|f|j��}t|d���D�]�\\}}	}
}}}
|}|r|s|jr|jjs�|r�|
s�t
|
��}
d�|
D��}||�||��}|rTt|
|j	j
��D]9\\}}}}}}}}}|rt||||||||d�	�	�(t|||���:��|s|jr|�
��}n!|j�|�
|j��}|
D]�\}}}}}}}}|r*|�|�|��|��}n||�||��}|j	j}|�Xt||j|��D]<\}}|j|}|�(||vs|�|j���
|||j<�=|r;|r(t|||||||j	j
d|d�	�	��t|||�������dS)z`Emit INSERT statements corresponding to value lists collected
    by _collect_insert_commands().rvc��|dt|d��t|d��|d|dfSr�r�r�s rr�z)_emit_insert_statements.<locals>.<lambda>"r�rc��g|]
}|d��Sr�rrs  rrz+_emit_insert_statements.<locals>.<listcomp>9s��5�5�5�c�3�q�6�5�5�5rFNr)rrvrr�r�implicit_returningr?r�zipr
rr	�_postfetch_bulk_saver1rzr��inserted_primary_keyror�r�r7)r:rqrKr+rMrvr4rr*�pkeysrr(r)rOrrr�rr#r$�
mapper_recr&r'�last_inserted_params�result�primary_key�pkr�r�s                             rrDrDsS���#�#�X�u�$5�u�|�D�D�K�

��	
�	
�	
�	
�pL�pL�	�D��U�H�k�3C�� �	��`	L�!�`	L�#�1�	`	L�
"�)�<�`	L��`	L��`	L��7�m�m�G�5�5�W�5�5�5�K�"�:�.�6�6�y�+�N�N�A��
L���!�)�"?�@�@�L�L��	��"��"��$�#�(�(��
L�"�&�*�!�!�&��0�(�!�
�
�
�
�-�Z��U�K�K�K�K��$�
M��(B�
M�%�5�5�7�7�	�	��&�2�%�5�5�f�6K�L�L�	��.
L�.
L�	�������� � ��'�/�/�!�(�(��6�6����F�F�0�
�;�C�C�!�6���F�%�n�A���*�#&�#�V�%9�%�%@�$�$�6�6���C� *�;�C�@���>��<�/�/�)�~�~�d�h�7�7�?�35�J�t�x�0���L��
L�"�&�*�!�!�&�"�"�N�>�q�A�(�!�
�
�
�
�-�Z��U�K�K�K��].
L�EpL�pLrc������jduo�j�j�v����fd�}|�d�f|��}t|d���D�]�\}}	d}
t	|	��}	|d}�j�|jjn|jj}|o|jj}
�p|
}|sY|}|	D]S\}}}}}||�	||��}t||�||||jjd��|
|j
z
}
�Tnyd�|	D��}|
p|ot|��dk}||�	||��}|
|j
z
}
|	D]-\}}}}}t||�||||jjd���.|rA|
t|	��kr,tjd�jt|	��|
fz�����h�r!t%jd	|jjz�����dS)
zeEmit UPDATE statements corresponding to value lists collected
    by _collect_post_update_commands().Nc����tj��}�j�D]>}|j�|tj|j|j���k���?�rK|j��jtj�jj�jj���k����	|��}�j�|�
�j��}|Sr�)rr�ror�rnr�r�r�rzrwr1r�s   ���rr�z1_emit_post_update_statements.<locals>.update_stmt�s����������'��.�	�	�C��N�!�!��s�}�S�Z�s�x�@�@�@�@�
�
�
�
��	��N�!�!��%��=��)�0� �/�4�����
�
�
��|�|�F�#�#��� �,��'�'��(=�>�>�D��rr�c�<�|dt|d��fS)N�r�)r�r�s rr�z._emit_post_update_statements.<locals>.<lambda>�s��S��V�S��Q��[�[�)�rrc��g|]
\}}}}}|��Srr)rrr#r$r&r$s      rrz0_emit_post_update_statements.<locals>.<listcomp>�s2�����?�E�:�z�4�����rrrr)rzr�rrr?rrrrr�_postfetch_post_updater
rrr
r�rrrrr)r:rqrKr+rMrwr�rr7rOrr*rrrrrr#r$r$r�rr�s   ``                 @rrr�s������	��T�)�	B��!�V�%:�5�%A�A��
�������0�!�!�=�%�"8�+�F�F�I� ��)�)���G�G���W����w�-�-����V�
��$�,�
��5�5��#�D�	�
�
@��"�?�	�.�-�@����$	�-�N�EL�
#�
#�A��z�:�z�6�&�z�2�:�:�9�f�M�M��&��"������I�1�!�4������
�"���
#���CJ����K�
-�� �:�S��%5�%5��%:�
�#�:�.�6�6�y�+�N�N�A��A�J��D�EL�	
�	
�A��z�:�z�6�&��"������I�1�!�4������
	��s�7�|�|�#�#��,�9��(�#�g�,�,��=�>����$��	��I�3��)�/�0�
�
�
��GG�Grc�"�����jduo�j�j�v����fd�}|�d�f|��}t|d���D�]<\}}	d�|	D��}
||}t	|
��}d}d}
�rx|jjsl|jjr(d}|
D]"}|�||��}||j	z
}�#nYtjd	|jjz��|�||
��n!|�||
��}�sd
}
|j	}|j
rm|dkrg||kra|jjst	|
��dkrB|
r!tjd�j||fz����tjd�j||fz�����>dS)
z`Emit DELETE statements corresponding to value lists collected
    by _collect_delete_commands().Nc���tj��}�j�D]>}|j�|tj|j|j���k���?�rK|j��jtj�jj�jj���k����	|��Sr�)
rr�ror�rnr�r7r�rzr�)r�r�r+�need_version_idrMs  ���r�delete_stmtz,_emit_delete_statements.<locals>.delete_stmts����������'��.�	�	�C��N�!�!��s�}�S�W�C�H�=�=�=�=�
�
�
�
��	��N�!�!��%��=��)�-�V�5J�5O�����
�
�
��|�|�F�#�#�#rr�c��|dS)Nrrr�s rr�z)_emit_delete_statements.<locals>.<lambda> s
���A��rc��g|]\}}|��Srr)rr$r*s   rrz+_emit_delete_statements.<locals>.<listcomp>!s��=�=�=�"4�&�*�v�=�=�=r���FrzMDialect %s does not support deleted rowcount - versioning cannot be verified.Trz�DELETE statement on table '%s' expected to delete %d row(s); %d were matched.  Please set confirm_deleted_rows=False within the mapper configuration to prevent this warning.)rzr�rrr
rrrrrrrr�confirm_deleted_rowsrr�r)r:rqrKr+rMr�r2rr*�recs�del_objects�expected�rows_matched�	only_warnr$r�r1s   ``           @rr�r�sX�����	��T�)�	B��!�V�%:�5�%A�A��
$�$�$�$�$�$�$�"�!�!�8�U�"3�[�A�A�I�#�F�,>�,>�?�?�=�=��
�D�=�=��=�=�=��'�
�3�
��{�#�#�����	�
�	&��&�C�	&��!�8�

;� ��*�/�/�F�"�*�*�9�f�=�=�A� �A�J�.�L�L�/��	�7� �(�<�=����
�"�"�9�k�:�:�:�:��"�"�9�k�:�:�A�"�
!� �	��:�L�
�,�	��r�!�!��L�(�(��"�?�)��{�#�#�q�(�(�
�
��	�=��(�(�L�A�	B������,�=��(�(�L�A�	B�����o=�=rc�6�	�|D�]�\�	}}}}|jrC�	��	fd�|jD����}|r�	��	j|��g}|jr2|��	j�|j����|j	�<|j
dur3|jj�	j
vr |�|jjg��|rO|��	���	_tj|j�|���	j�	|���|s|j�||�	��n|j�||�	��|j
dur-|j	�&||jj�t-jd������dS)zzfinalize state on states that have been inserted or updated,
    including calling after_insert/after_update events.

    c���g|]A}|jr|jr*|j�jvs|js|js|j�jv�:|j��BSr)�expire_on_flush�deferredr7r)rr8rs  �rrz4_finalize_insert_update_commands.<locals>.<listcomp>is{��������)�	�
"#���
01�u��
�/B�/B��-�0C�!"�
�	0C�
�E���3�3��E�4�3�3rNF)�
refresh_state�only_load_propsz2Instance does not contain a non-NULL version value)�_readonly_props�unmodified_intersection�_expire_attributesrr��extend�_unloaded_non_objectr��&_server_default_plus_onupdate_propkeysrzr�r^r7�unloadedr�r	�
load_on_identr<�queryr��after_insert�after_updater�r�)
r:rqrLr#r+r*rt�readonly�
toload_nowrs
         @rrprp`s���
@F�>�>�;��z�6�:�|��!�	?��4�4�����#�3������H��
?��(�(���X�>�>�>�
�
��%�	�����*�7�7��A���
�
�
�
�!�-��+�u�4�4��&�*�e�n�<�<��!�!�6�#:�#>�"?�@�@�@��	�#�<�<�U�C�C�E�I��!��&�,�,�V�4�4��	�#� *�	
�
�
�
��	D��O�(�(���U�C�C�C�C��O�(�(���U�C�C�C�
�'�5�0�0��%�1��&�1�5�6�>��(�H�����y>�>rc���|�|��rdS|jjj}|jjj}�j�,�j�j|vrt|���jgz}t�j	j
j��}	|	rg}
|D][}|j|vrP|�j
vrG||j|�j
|j<|	r%|
��j
|j���\|	r#|
r!�j	j
�|||
��|r)|�|j�fd�|D����dSdS)Nc�F��g|]}|�jv��j|j��Sr�r�r7�rr�r+s  �rrz*_postfetch_post_update.<locals>.<listcomp>��<���
�
�
����0�0�0��(��+�/�0�0�0r)r�r
�compiled�prefetch�	postfetchrzr�r?r��
class_managerr��
refresh_flushr7r�rnrDr)r+rqrMrrr&r$�
prefetch_cols�postfetch_colsrX�load_evt_attrsr�s`           rr.r.�s����� � ��'�'�����N�+�4�M��^�,�6�N�	��)��!�V�%:�5�%A�A�A��]�+�+�v�/D�.E�E�
���-�6�D�E�E�M�����
�G�G���5�F�?�?�q�F�$<�<�<�5;�A�E�]�E�&�*�1�-�1�2��
G��%�%�f�&>�q�&A�&E�F�F�F���
��
���%�3�3��>�>�	
�	
�	
��
�
� � ��J�
�
�
�
�'�
�
�
�	
�	
�	
�	
�	
�
�
rc	
����|jjj}	|jjj}
|jjj��j�,�j�j|vrt|	���jgz}	t�j	j
j��}|rg}�ro|jj}
|
�a�D]^}|j
r
|jjr��j�|��}|r,|
|||j<|r|�|j���_|	D][}|j|vrP|�jvrG||j|�j|j<|r%|��j|j���\|r#|r!�j	j
�|||��|r#|r!|
��fd�|D����|
r'|�|j�fd�|
D�����j|D]$\}}t/j||||||�j���%dS)z�Expire attributes in need of newly persisted database state,
    after an INSERT or UPDATE statement has proceeded for that
    state.Nc�*��g|]}|jr|�v�
|��Sr)r')rr��returning_colss  �rrz_postfetch.<locals>.<listcomp>s:���
�
�
���?�
�(+�.�'@�'@��'@�'@�'@rc�F��g|]}|�jv��j|j��SrrQrRs  �rrz_postfetch.<locals>.<listcomp>rSr)r
rTrUrV�	returningrzr�r?r�rWr�rX�returned_defaultsr'�isinsertr�r�r7rnrErDrr�r
r�r�)r+rqrMrrr&r$r'�isupdaterYrZrXr[�rowr�r�r�r�r�r^s`                  @rr	r	�s������N�+�4�M��^�,�6�N��^�,�6�N�	��)��!�V�%:�5�%A�A�A��]�+�+�v�/D�.E�E�
���-�6�D�E�E�M������8��n�.���?�%�
8�
8���?��v�~�'>����/�3�3�C�8�8���8�&)�#�h�E�$�(�O�$�8�&�-�-�d�h�7�7�7��
�G�G���5�F�?�?�q�F�$<�<�<�5;�A�E�]�E�&�*�1�-�1�2��
G��%�%�f�&>�q�&A�&E�F�F�F���
��
���%�3�3��>�>�	
�	
�	
��

�L�

�	���
�
�
�
�'�
�
�
�	
�	
�	
��
�
� � ��J�
�
�
�
�'�
�
�
�	
�	
�	
�#�4�U�;�	
�	
���=��
��
��
����"�	
�	
�	
�	
�	
�	
rc�X�|j|D]\}}tj|||���dSr")r�r
�bulk_populate_inherit_keys)r+rrMr�r�s     rr!r!/sD��"�4�U�;�A�A���=��'��q�-�@�@�@�@�A�Arc#�K�|jjr
|jj}n|j�|��}d}t	||��D];}|r|||�����}|jj}||j||fV��<dS)z�Return an iterator of (state, state.dict, mapper, connection).

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

    N)	r<r=�transactionr*rk�objr�r+r)r:rqrLr=r*rr+s       rr�r�4s�������1�#�,�4�H���#�/�:�:�;�G�G�
�"���k�6�2�2�4�4���	G�,�,�[�%�)�)�+�+�F�F�J���%���U�Z���3�3�3�3�3�
4�4rc�2��tj�fd���S)Nc�:��|��j���S)N)�compiled_cache)�execution_options�_compiled_cache)r&r:s �rr�z)_cached_connection_dict.<locals>.<lambda>Qs"���T�+�+�&�6�,�
�
�r)r�PopulateDict)r:s`rr;r;Ns,�����	
�	
�	
�	
���rc�|�t|��}td�|D����}|�|��	t||j���}nB#t$r5}tjtjd|z��|���Yd}~nd}~wwxYwt|tj
d�����|zS)Nc3�(K�|]
}|j�	|V��dSr"r6)r�ss  rr,z_sort_states.<locals>.<genexpr>Ys)����=�=�1�1�5�+<�Q�+<�+<�+<�+<�=�=rr6z^Could not sort objects by primary key; primary key values must be sortable in Python (was: %s)��replace_context�insert_order)r��difference_update�sorted�_persistent_sortkey_fn�	TypeErrorr�raise_�sa_exc�InvalidRequestError�operator�
attrgetter)r+rL�pending�
persistent�persistent_sorted�errs      rrkrkWs���&�k�k�G��=�=��=�=�=�=�=�J����j�)�)�)�
�"��F�9�
�
�
�����
�
�
����&�>�@C�D�
�
� �	
�	
�	
�	
�	
�	
�	
�	
�	
�����
����	�w�H�/��?�?�@�@�@�
�	�s�A�
B� +B�Bc��eZdZdZd�Zd�Zed���Zed���Z	d�Z
d�Zd�Ze
jd	��d
���Zd�Zd�Zd
S)�BulkUDz;Handle bulk update and deletes via a :class:`_query.Query`.c��|�d��|_|j���|_|���dS)NF)�enable_eagerloadsrJ�_bind_mapperr+�_validate_query_state)�selfrJs  r�__init__zBulkUD.__init__qsD���,�,�U�3�3��
��j�-�-�/�/����"�"�$�$�$�$�$rc	�<�dddtjfdddtjfdddtjfdd	dtjfd
ddtjfdd
dtjffD]>\}}}}|t|j|��|��stjd|�d�����?dS)N�_limitzlimit()�_offsetzoffset()�	_order_byz
order_by()F�	_group_byz
group_by()�	_distinctz
distinct()�	_from_objz2join(), outerjoin(), select_from(), or from_self()rz1Can't call Query.update() or Query.delete() when z has been called)r}�is_�eq�getattrrJr{r|)r��attr�methname�notset�ops     rr�zBulkUD._validate_query_statevs���
�y�$���5�
�
�D�(�,�7�
�,��x�|�<�
�,��x�|�<�
�,��x�|�<��D����	
�
+
�	�	�&�D�(�F�B��2�g�d�j�$�/�/��8�8�
��0�0�19���<����
�	�	rc��|jjSr")rJr<�r�s rr<zBulkUD.session�s
���z�!�!rc��	||}||�S#t$r`}tjtjdd�t
d�|D������z��|���Yd}~dSd}~wwxYw)Nz3Valid strategies for session synchronization are %sz, c3�4K�|]}t|��V��dSr")�repr)r�xs  rr,z"BulkUD._factory.<locals>.<genexpr>�s(����0I�0I�Q��a���0I�0I�0I�0I�0I�0Irrs)�KeyErrorrrzr{�
ArgumentError�joinrw)�cls�lookup�synchronize_session�arg�klassr�s      r�_factoryzBulkUD._factory�s���	��.�/�E��5�#�;����	�	�	��K��$�� $�	�	�&�0I�0I�&�0I�0I�0I�*I�*I� J� J�L���!$�
�
�
�
�
�
�
�
�
�
�����	���s��
A9�AA4�4A9c��|���|���|���|���|���|���dSr")�_do_before_compile�_do_pre�_do_pre_synchronize�_do_exec�_do_post_synchronize�_do_postr�s r�exec_zBulkUD.exec_�sc�����!�!�!�������� � �"�"�"��
�
�����!�!�#�#�#��
�
�����rc�r�|j�||j��|_|jj|_dSr")rJ�
_execute_crudr+r&r)r�r�s  r�
_execute_stmtzBulkUD._execute_stmt�s-���j�.�.�t�T�[�A�A�����,��
�
�
rc��t���r")r>r�s rr�zBulkUD._do_before_compile�s��!�#�#�#rzsqlalchemy.orm.queryc�n�|j}|�|��|_t|jd|j��r�t
��}|jD]T}t||j��s|���n(|�t|j
�����Ut|��dkrtj
d���|���|_n$|�d��jj|_|j}|jr|���dSdS)NrrzLThis operation requires only one Table or entity be specified as the target.)rJ�QueryContextr
r��	_entities�
_ColumnEntityr��clearrwr�columnr
r{r|r��
primary_table�_only_entity_zeror+�local_tabler<�
_autoflush)r��querylibrJ�tables�entr<s      rr�zBulkUD._do_pre�s9���
���,�,�U�3�3����e�o�a�(�(�*@�A�A�	!��U�U�F���
=�
=��!�#�x�'=�>�>�=��L�L�N�N�N��E��M�M�-��
�";�";�<�<�<�<��6�{�{�a����0�9����
&,�Z�Z�\�\��"�"�"'�!8�!8�5�"�"��[�
��
�-����	!���� � � � � �	!�	!rc��dSr"rr�s rr�zBulkUD._do_pre_synchronize�����rc��dSr"rr�s rr�zBulkUD._do_post_synchronize�r�rN)�__name__�
__module__�__qualname__�__doc__r�r��propertyr<�classmethodr�r�r�r�r�dependenciesr�r�r�rrrr�r�ns�������E�E�%�%�%�
���(�"�"��X�"�����[�����-�-�-�$�$�$��T��-�.�.� !� !�/�.� !�D
�
�
�
�
�
�
�
rr�c��eZdZdZd�Zd�ZdS)�BulkEvaluatezDBulkUD which does the 'evaluate' method of session state resolution.c��dSr"r)r��evaluator_compilers  r�_additional_evaluatorsz#BulkEvaluate._additional_evaluators�r�rc�����|j}|���j�	tj���}|j�|�|j���nd��|�|��nG#tj$r5}tj
tjd|z��|���Yd}~nd}~wwxYw��fd�|j
j���D��|_dS)Nc��dS)NTr)ris r�eval_conditionz8BulkEvaluate._do_pre_synchronize.<locals>.eval_condition�s���4rztCould not evaluate current criteria in Python: "%s". Specify 'fetch' or False for the synchronize_session parameter.)�from_c���g|]?\\}}}}t|����tj|��j�2�|���=|��@Sr)�
issubclassrr��expired)rr�r(�identity_tokenrir��
target_clss     ��rrz4BulkEvaluate._do_pre_synchronize.<locals>.<listcomp>�sx���
 
�
 
�
 
��������#�z�*�*�
 
��-�c�2�2�:�
 
���s�#�#�
 
��
 
�
 
�
 
r)rJ�_mapper_zero�class_r�EvaluatorCompiler�whereclause�processr��UnevaluatableErrorrrzr{r|r<r�rA�matched_objects)r�rJr�r�r�r�s    @@rr�z BulkEvaluate._do_pre_synchronize�s>�����
���'�'�)�)�0�
�	�!*�!<�Z�!H�!H��� �,�!3�!;�!;�E�<M�!N�!N��� � � �
�'�'�(:�;�;�;�;���+�	�	�	��K��*�5�7:�;���
�

�
�
�
�
�
�
�
�
�����	����
 
�
 
�
 
�
 
�
 
��m�0�6�6�8�8�
 
�
 
�
 
����s�AA3�3B7�+B2�2B7N)r�r�r�r�r�r�rrrr�r��s8������N�N�
�
�
�$
�$
�$
�$
�$
rr�c��eZdZdZd�ZdS)�	BulkFetchzABulkUD which does the 'fetch' method of session state resolution.c��|j}|j}|���}|j�|jj��}|�||j|j	����
��|_dS)N)r+r$)rJr<�_compile_contextr�with_only_columnsr�r'rr+�_params�fetchall�matched_rows)r�rJr<r
�select_stmts     rr�zBulkFetch._do_pre_synchronizes|���
���-���(�(�*�*���'�9�9���*�
�
��$�O�O����E�M�,�
�
�
�(�*�*�	
���rN)r�r�r�r�r�rrrr�r�s)������K�K�	�	�	�	�	rr�c�v��eZdZdZ�fd�Zed���Zd�Zed���Z	ed���Z
d�Zd�Z�xZ
S)	�
BulkUpdatezBulkUD which handles UPDATEs.c�t��tt|���|��||_||_dSr")�superr�r�r��
update_kwargs)r�rJr�r��	__class__s    �rr�zBulkUpdate.__init__s6���
�j�$���(�(��/�/�/����*����rc�d�t�tttd�||||��S�N)�evaluate�fetchF)r�r��BulkUpdateEvaluate�BulkUpdateFetchr�)r�rJr�r�r�s     r�factoryzBulkUpdate.factorys9�����.�(�!�
�
�

 ����

�

�
	
rc��|jjjr.|jjjD]}||j|��}|�||_�dSdSr")rJr��before_compile_update�r��fn�	new_querys   rr�zBulkUpdate._do_before_compile(�^���:��4�	+��j�)�?�
+�
+���B�t�z�4�0�0�	��(�!*�D�J��		+�	+�
+�
+rc�"�g}t|jd��r|j���n|jD]�\}}|jr�t	|t
j��r>t|j|��}|�|�	|�����dt	|tj��r)|�|�	|������|�||f����|�||f����|S)NrA)
r�r�rAr+r�r�string_typesrrE�_bulk_update_tuplesr�QueryableAttributern)r�r�rWrX�descs     r�_resolved_valueszBulkUpdate._resolved_values/s	�����t�{�G�,�,�
�D�K��������	&�	&�D�A�q�
�{�	
&��a��!2�3�3�*�-�d�k�1�=�=�D��M�M�$�":�":�1�"=�"=�>�>�>�>���:�#@�A�A�*��M�M�!�"7�"7��":�":�;�;�;�;��M�M�1�a�&�)�)�)�)��
�
�q�!�f�%�%�%�%��
rc���g}|jD]�\}}t|tj��r|�|j|f���<t
|d��r|���}|jr_t|tj
��rE	|jj|}|�|j|f����#tj
$rY��wxYwtjd|z���|S)Nr�zInvalid expression type: %r)rr�rr�rnr7r�r�r+r�
ColumnElementr�r��UnmappedColumnErrorr{r|)r�r�rWrXr�s     r�"_resolved_values_keys_as_propnamesz-BulkUpdate._resolved_values_keys_as_propnamesCs�����)�	�	�D�A�q��!�Z�:�;�;�
+��
�
�q�u�a�j�)�)�)����0�1�1�
+��(�(�*�*���{�

�z�!�Z�-E�F�F�

�1��;�8��;�D��M�M�4�8�Q�-�0�0�0�0���2�����D�����
�0�1�A�5�����
s�B;�;C
�C
c���|j}|j�dd��st|��}t	j|j|jj|fi|j��}|�	|��dS)N�preserve_parameter_orderF)
rr�r�rrrwr�r
r�r�)r�r�r�s   rr�zBulkUpdate._do_execZs����&���!�%�%�&@�%�H�H�	"��&�\�\�F��j����L�$��
�
�� �	
�
��	
���;�'�'�'�'�'rc�R�|jj}|j�|��dSr")rJr<r��after_bulk_update�r�r<s  rr�zBulkUpdate._do_posti�)���*�$����*�*�4�0�0�0�0�0r)r�r�r�r�r�r�r�r�r�rrr�r��
__classcell__�r�s@rr�r�s��������'�'�+�+�+�+�+�
�
�
��[�
�+�+�+�����X��&����X��,
(�
(�
(�1�1�1�1�1�1�1rr�c�J��eZdZdZ�fd�Zed���Zd�Zd�Zd�Z	�xZ
S)�
BulkDeletezBulkUD which handles DELETEs.c�X��tt|���|��dSr")r�rr�)r�rJr�s  �rr�zBulkDelete.__init__qs'���
�j�$���(�(��/�/�/�/�/rc�`�t�tttd�||��Sr�)r�r��BulkDeleteEvaluate�BulkDeleteFetchr)r�rJr�s   rr�zBulkDelete.factoryts3�����.�(�!�
�
�

 ��
�
�	
rc��|jjjr.|jjjD]}||j|��}|�||_�dSdSr")rJr��before_compile_deleter�s   rr�zBulkDelete._do_before_compile�r�rc�x�tj|j|jj��}|�|��dSr")rr�r�r
r�r�)r�r2s  rr�zBulkDelete._do_exec�s5���j��!3�T�\�5M�N�N�����;�'�'�'�'�'rc�R�|jj}|j�|��dSr")rJr<r��after_bulk_deleter
s  rr�zBulkDelete._do_post�rr)r�r�r�r�r�r�r�r�r�r�rr
s@rrrns��������'�'�0�0�0�0�0��	
�	
��[�	
�+�+�+�(�(�(�
1�1�1�1�1�1�1rrc��eZdZdZd�Zd�ZdS)r�zSBulkUD which handles UPDATEs using the "evaluate"
    method of session resolution.c��i|_|j}|D]4\}}|�tj|����|j|<�5dSr")�value_evaluatorsrr�r�_literal_as_binds)r�r�r�r7r�s     rr�z)BulkUpdateEvaluate._additional_evaluators�s]�� "����8�� �	�	�J�C��);�)C�)C��,�U�3�3�*�*�D�!�#�&�&�	�	rc��|jj}t��}t|j�����}|jD]�}tj|��tj	|��}}|j
�|��}|D]}||vr|j||��||<� |jj
�|d|��|�|t|����|�|t|���|����|�|����|�|��dSr")rJr<r�r?rr�r�rr��
instance_dict�
unmodifiedr�r�r��refresh�_commitrDr��add�_register_altered)	r�r<rL�evaluated_keysrirr�to_evaluater7s	         rr�z'BulkUpdateEvaluate._do_post_synchronize�sS���*�$�������d�3�8�8�:�:�;�;���'�	�	�C��)�#�.�.��(��-�-��E� �*�7�7��G�G�K�"�
A�
A���%�<�<�!;��!6�s�!;�C�!@�!@�E�#�J���M�"�*�*�5�$��D�D�D��M�M�%��k�!2�!2�3�3�3�
�$�$��s�>�*�*�5�5�k�B�B�
�
�
�
�J�J�u������!�!�&�)�)�)�)�)rN)r�r�r�r�r�r�rrrr�r��s<������%�%����*�*�*�*�*rr�c��eZdZdZd�ZdS)rzSBulkUD which handles DELETEs using the "evaluate"
    method of session resolution.c�b�|jj�d�|jD����dS)Nc�6�g|]}tj|����Sr)rr�)rris  rrz;BulkDeleteEvaluate._do_post_synchronize.<locals>.<listcomp>�s#��L�L�L��Z�
&�s�
+�
+�L�L�Lr)rJr<�_remove_newly_deletedr�r�s rr�z'BulkDeleteEvaluate._do_post_synchronize�s=���
��0�0�L�L�t�7K�L�L�L�	
�	
�	
�	
�	
rN�r�r�r�r�r�rrrrr�s-������%�%�
�
�
�
�
rrc��eZdZdZd�ZdS)r�zPBulkUD which handles UPDATEs using the "fetch"
    method of session resolution.c����|jj�|j����t�fd��fd�|jD��D����}|j}td�|D����}|D]4}|�|j��}|r��||���5��	|��dS)Nc�`��g|]*}|�jv�tj�j|����+Sr)r�rr�)r�identity_keyr<s  �rrz8BulkUpdateFetch._do_post_synchronize.<locals>.<listcomp>�sH���	
�	
�	
� � �7�#7�7�7��)�'�*>�|�*L�M�M�8�7�7rc�T��g|]$}��t|������%Sr)�identity_key_from_primary_keyr?)rr'�
target_mappers  �rrz8BulkUpdateFetch._do_post_synchronize.<locals>.<listcomp>�sF���%�%�%�$�"�?�?��[�)�)���%�%�%rc3� K�|]	\}}|V��
dSr"r)rrWrXs   rr,z7BulkUpdateFetch._do_post_synchronize.<locals>.<genexpr>�s&����*�*�4�1�a�Q�*�*�*�*�*�*r)
rJr<r�r�r�rr�r�
_expire_stater#)r�rLr��attribr�	to_expirer<r1s      @@rr�z$BulkUpdateFetch._do_post_synchronize�s�����*�$���
�/�/�1�1�
��	
�	
�	
�	
�%�%�%�%�(,�'8�	%�%�%�	
�	
�	
�
�
���8���*�*�6�*�*�*�*�*���	8�	8�E��+�+�E�J�7�7�I��
8��%�%�e�Y�7�7�7���!�!�&�)�)�)�)�)rNr*rrrr�r��s-������%�%�*�*�*�*�*rr�c��eZdZdZd�ZdS)rzPBulkUD which handles DELETEs using the "fetch"
    method of session resolution.c� �|jj}|j���}|jD]`}|�t|����}||jvr3|�tj	|j|��g���adSr")
rJr<r�r�r0r?r�r)rr�)r�r<r1r'r.s     rr�z$BulkDeleteFetch._do_post_synchronize�s����*�$���
�/�/�1�1�
��,�
	�
	�K�)�F�F��[�!�!���L��w�3�3�3��-�-�"�1�#�0��>��������
	�
	rNr*rrrrr�s-������%�%�����rr)F)FFF)T)6r��	itertoolsrrr}�rrrr�r	r
�baserrr{rrr�sql.baserrRrdrlr�r�rmr}r�rCrar~r�rbrDrr�rpr.r	r!r�r;rk�objectr�r�r�r�rr�rr�rrrr�<module>r=s���������������������������������������������������$�$�$�$�$�$�������������������������������$�$�$�$�$�$�M�M�M�`B
�B
�B
�JS�S�S�S�l*
�*
�*
�Z+@�+@�+@�\N
�N
�N
�b	H�	H�	H�D�D�D�6
���U
�U
�U
�U
�r38�v�v�v�v�r5@�5@�5@�p$!�$!�$!�\�~�~�~�~�P�~L�~L�~L�~L�Bp�p�p�fZ�Z�Z�zC�C�C�L&
�&
�&
�R]
�]
�]
�@A�A�A�
4�4�4�4������.e
�e
�e
�e
�e
�V�e
�e
�e
�P*
�*
�*
�*
�*
�6�*
�*
�*
�Z���������Y1�Y1�Y1�Y1�Y1��Y1�Y1�Y1�x 1� 1� 1� 1� 1�� 1� 1� 1�F&*�&*�&*�&*�&*��z�&*�&*�&*�R
�
�
�
�
��z�
�
�
�*�*�*�*�*�i��*�*�*�<�����i������r

Hacked By AnonymousFox1.0, Coded By AnonymousFox