%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/self/root/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/
Upload File :
Create Path :
Current File : //proc/self/root/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyc

�
��4]c@s�dZddlmZddlmZddlZddlmZddlmZddlmZ	dd	lm
Z
dd
lmZddlm
Z
ddlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd�Zd�Zed�Zd�Zd�Zd�Zd�Zd�Zeeed�Zed�Zd�Z d�Z!e"d�Z#e"d�Z$d �Z%d!�Z&d"�Z'd#�Z(d$�Z)d%�Z*d&�Z+d'�Z,d(�Z-d)e.fd*��YZ/d+e/fd,��YZ0d-e/fd.��YZ1d/e/fd0��YZ2d1e/fd2��YZ3d3e0e2fd4��YZ4d5e0e3fd6��YZ5d7e1e2fd8��YZ6d9e1e3fd:��YZ7dS(;s�private module containing functions used to emit INSERT, UPDATE
and DELETE statements on behalf of a :class:`.Mapper` and its descending
mappers.

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

i����(tchain(tgroupbyNi(t
attributes(t	evaluator(texc(tloading(tsync(t_entity_descriptor(t	state_stri(tsql(tutil(t
expression(t
_from_objectscs��j}t|�}|jjr0td��n|r�|r�g|D]}||jf^qC}	g|	D]\}}
|
^qe}q�g|D]}|j^q�}nt|�}|j|��x�|jj	�D]�\}}�j
|�s�q�n��fd�t|��fd�|D�dtd|d|�D�}
t
|d||||
d|�q�W|r�|r��j}g�jD]}|j^qt}xC|	D]8\}}
|tg|D]}|
|^q��f|_q�WndS(NsJconnection_callable / per-instance sharding not supported in bulk_insert()c		3sE|];\}}}}}}}}d||��|||fVqdS(N(tNone(	t.0tstatet
state_dicttparamstmptconntvalue_paramsthas_all_pksthas_all_defaults(t
connectiontmapper(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>Dsc3s!|]}d|��fVqdS(N(R
(Rtmapping(RR(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>Ystbulktreturn_defaultstrender_nullstbookkeeping(tbase_mappert_cached_connection_dicttsessiontconnection_callabletNotImplementedErrortdicttlistRt_sorted_tablestitemstisat_collect_insert_commandstTruet_emit_insert_statementsR
t_identity_classt_identity_key_propstkeyttuple(Rtmappingstsession_transactiontisstatesRRRtcached_connectionsRtstatestdict_ttabletsuper_mappertrecordstidentity_clstptidentity_propsR-((RRsM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt_bulk_insert#sH	""
	c
sZ�j}t|�}�j��jrB�jjhj���n�fd�}|r�|r�g|D]}|�|�^qd}q�g|D]}|j^q�}nt|�}|jj	r�t
d��n|j|��x||jj
�D]k\}	}
�j|
�sq�ntd|	��fd�|D�dt�}t|d||
|	|dt�q�WdS(Ncs&t��fd��jj�D��S(Nc3s<|]2\}}|�jks*|�kr||fVqdS(N(tcommitted_state(Rtktv(tsearch_keysR(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>�s	(R#R&(RR(R?(RsM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt
_changed_dict~ssJconnection_callable / per-instance sharding not supported in bulk_update()c3s=|]3}d|���jr.|�jjndfVqdS(N(R
t_version_id_propR-(RR(RR(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>�sRR(RRt_primary_key_propkeysRAR-tunionR#R$R R!R"RR%R&R't_collect_update_commandsR
R)t_emit_update_statementstFalse(RR/R0R1tupdate_changed_onlyRR2R@RR5R6R7((RRR?sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt_bulk_updatess@			%
	cCs�|rE|jrEx-t|�D]}t||g|dt�qWdSg}g}t|�}xst|||�D]_\}}}	}
}}}
|s�|r�|j|||	|
|
f�qp|j|||	|
f�qpWx�|jj�D]t\}}	||	j	krq�nt
||�}t|||�}t||||	||�t
||||	||�q�Wt||td�|D�d�|D���dS(s;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.

    tsingleNcss0|]&\}}}}||||tfVqdS(N(RF(RRRRR((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>�scss3|])\}}}}}||||tfVqdS(N(R)(RRRRRtupdate_version_id((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>s
(tbatcht_sort_statestsave_objR)Rt_organize_states_for_savetappendR%R&t
_pks_by_tableR(RDRER*t _finalize_insert_update_commandsR(RR3tuowtransactionRIRtstates_to_updatetstates_to_insertR2R4RRthas_identityt
row_switchRJR5tinserttupdate((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRM�sR+cs�t|�}tt|||��}x||jj�D]k\����jkrUq4n��fd�|D�}t||�||�}t|||��|�q4WdS(s\Issue UPDATE statements on behalf of a relationship() which
    specifies post_update.

    c	3sf|]\\}}}}�|jkr||||�jdk	rW�j||�j�ndfVqdS(N(RPtversion_id_colR
t#_get_committed_state_attr_by_column(RRRt
sub_mapperR(RR5(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>sN(RR$t _organize_states_for_post_updateR%R&RPt_collect_post_update_commandst_emit_post_update_statements(RR3RRtpost_update_colsR2RSRX((RR5sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pytpost_updates"
c
Cs�t|�}tt|||��}|j}x�tt|j���D]k}||}||jkrkqFn|jr�|jr�qFnt	||||�}t
||||||�qFWx3|D]+\}	}
}}}|jj|||	�q�WdS(s�Issue ``DELETE`` statements for a list of objects.

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

    N(
RR$t_organize_states_for_deleteR%treversedtkeysRPtinheritstpassive_deletest_collect_delete_commandst_emit_delete_statementstdispatchtafter_delete(
RR3RRR2tstates_to_deletettable_to_mapperR5RtdeleteRRRRJ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt
delete_obj;s,	
c
cs�x�t|||�D]�\}}}}t|j�}|jpI|j|�}d}	}
|su|jj|||�n|jj|||�|jr�|j|||�n|rf||j	j
krf|j	j
|}tj|�}|j
|�sf|j|�s+tjdt|�|t|�f��n|jd|t|�t|��|j|�|}	qfn|sr|	r�|jdk	r�|j|	r�|	n||	r�|	jn||j�}
n||||||	|
fVqWdS(sTMake 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.

    sJNew instance %s with identity key %s conflicts with persistent instance %ssPdetected row switch for identity %s.  will update %s, remove %s from transactionN(t_connections_for_statestboolR-t_identity_key_from_stateR
Rht
before_insertt
before_updatet_validate_polymorphic_identityR tidentity_mapRtinstance_statetwas_already_deletedt
is_deletedtorm_exct
FlushErrorRt
_log_debugtremove_state_actionsRYRZR#(
RR3RRRR4RRRUtinstance_keyRVRJtinstancetexisting((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRNisL
	"	

cCst|||�S(s�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.

    (Rn(RR3RR((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR\�s	ccs�x�t|||�D]l\}}}}|jj|||�|jdk	re|j|||j�}nd}|||||fVqWdS(s�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(RnRht
before_deleteRYR
RZ(RR3RRRR4RRRJ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRa�sc	cs-x&|D]\}}}}||jkr.qni}	i}
|j|}|j|}x�t|�j|�D]�}
||
}||
}|dkr�||kr�|r�qjqj|r�t|d�s�t|tj	�r�t|d�r�|j
�n||
|<qj||	|j<qjW|s]xJ|j|j
|	�j
g|
D]}|j^q0�D]}d|	|<qFWn|sj|r�|j|j|	�}|jjr�|j|j|	�}q�t}n
t}}|jtk	r|jdk	r|j|j|kr|jd�|	|jj<n|||	|||
||fVqWdS(sSIdentify sets of values to use in INSERT statements for a
    list of states.

    t__clause_element__N(RPt_propkey_to_colt_insert_cols_evaluating_nonetsettintersectionR
thasattrt
isinstanceR	t
ClauseElementR�R-t_insert_cols_as_nonet
differencet_pk_keys_by_tabletissubsetRteager_defaultst_server_default_colsR)tversion_id_generatorRFRYt_cols_by_table(R5RTRRRRRRRRRtpropkey_to_colt	eval_nonetpropkeytvaluetcoltctcolkeyRR((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR(�sX





	#

	
c
#s�x�|D]�\}�}}}||jkr1qn|j|}i}	|j|�|r�t��fd�t��j��j|j|�D��}
t}n�i}
x�t��j|j�D]�}�|}
�|}t	|
d�s�t
|
tj�r t	|
d�r|
j
�n|
|	|<q�|j|jj|
|j|�tk	r�|
|
|j<q�q�W|jjr�|j|j|
�}nt}|dk	r�|j|j|kr�|r|
p�|	rxO|jj�D]8}|j|jjj|�tj�}|jr�Pq�q�Wqn|j}|
o$|	}||
|j<|sI|j|
krw|j t!k	rw|j |�}||
|j<q�|j t!kr�|r�||
|j<q�n|
p�|	s�qnt}t!}|r�t��fd�t��j|j|�D��}ni}x
|D]}|j|j}|j|jj|�tj"�}|jr�|j#skd||f|jkr�t}|jd||j<|
j$|jd�q�|j#d||j<||	kr�t!}q�n|j%d||j<||jdkrt&j'd||f��qqW|
s|	rG|
j(|�|�|
|||	||fVq|rx@|j)|D].\}}t*j+|||||||j,�q[WqqWdS(stIdentify 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.

    c3s&|]}�|j�|fVqdS(N(R-(RR�(R�R(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>ZsR�c3s+|]!}�|j�j|�fVqdS(N(t_labeltget(RR�(R�R(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>�stpk_cascadedisCCan't update table %s using NULL for primary key value on column %sN(-RPR�R#R�R�R�t_pk_attr_keys_by_tableR)R<R�R�R	R�R�tmanagertimpltis_equalR-RR�t_server_onupdate_default_colsR�R
RYR�t_columntopropertytvaluestget_historyRtPASSIVE_NO_INITIALIZEtaddedR�R�RFtPASSIVE_OFFtdeletedtpopt	unchangedRxRyRXt_table_to_equatedRtpopulatetpassive_updates(RRR5RSRRRRRJtpksRRRR�R�R�tpropthistoryt	no_paramstvalRtexpect_pk_cascadedt	pk_paramstmt
equated_pairs((R�RsM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRD7s�

		


	
		

	

ccs�x�|D]�\}}}}}	|j|}
i}t}x�|j|D]�}
|
|
kr}|j|||
dtj�||
j<qC|
|ks�|
jdk	rC|j	|
}|j
|jjj
||tj�}|jr�|jd}|||
j<t}q�qCqCW|r|	dk	r�|j|j|kr�|j}
|	||
j<t|j�r�|
j|kr�|jtk	r�|j|	�}|||
j<q�n|||||fVqqWdS(srIdentify sets of values to use in UPDATE statements for a
    list of states within a post_update operation.

    tpassiveiN(RPRFR�t_get_state_attr_by_columnRR�R�tonupdateR
R�R�R-R�R�R�R�R)RYRoR�(RRRR5RSR_RRRRRJR�RthasdataR�R�R�R�R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR]�s8
"
	

	
ccs�x�|D]�\}}}}}||jkr1qni}	x]|j|D]N}
|j|||
�|	|
j<}|dkrEtjd||
f��qEqEW|dk	r�|j|j|kr�||	|jj<n|	|fVqWdS(sSIdentify values to use in DELETE statements for a list of
    states to be deleted.sHCan't delete from table %s using NULL for primary key value on column %sN(RPRZR-R
RxRyRYR�(RRRR5RjRRRRRJRR�R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRf(s cs��jd	k	o"�j�j�k����fd�}|jd�f|�}xAt|d��D]-\\}	}
}}}
}d}t|�}|}t}|
s�|j�}t}nX|r�|r��j	j
r�|j�}t}n*�jd	k	r|j�j�}t}n|s#|	jjn	|	jj
}|o>|	jj}|oK�}|r�x�|D]�\}}}�}	}}}
|	j|j|�|�}|r�t�|�||||jjd|t�	n||j7}|}q[WnL|ss|}x=|D]v\}}}�}	}}}
||	j||�}|r_t�|�||||jjd|t�	n||j7}q�Wn�g|D]}|d^qz}|p�|o�t|�dk}||	j||�}||j7}x[|D]S\}}}�}	}}}
|r�t�|�||||jjd|t�	q�q�W|rr|t|�kr�tjd�jt|�|f��q�qe�retjd|jj�qeqeWd	S(
s`Emit UPDATE statements corresponding to value lists collected
    by _collect_update_commands().cs�tj�}x@�j�D]1}|jj|tj|jd|j�k�qW�r�|jj�jtj�jjd�jj�k�n�j	|�}|S(Nttype_(
R	tand_RPtclausesROt	bindparamR�ttypeRYRX(tclauseR�tstmt(Rtneeds_version_idR5(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pytupdate_stmt`s	&	RXcSs3|dt|d�t|d�|d|dfS(Niiiii(R�Ro(trec((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt<lambda>{s


iiisMUPDATE statement on table '%s' expected to update %d row(s); %d were matched.sMDialect %s does not support updated rowcount - versioning cannot be verified.N(RYR
R�t_memoRR$RFRR)RR�tdialecttsupports_sane_rowcountt supports_sane_rowcount_returningtsupports_sane_multi_rowcounttexecuteR�t
_postfetchtcontexttcompiled_parameterstrowcounttlenRxtStaleDataErrortdescriptionR
twarntdialect_description(RRRR2RR5RXRR�tcached_stmtRt	paramkeysthasvalueRRR7trowst	statementRtassert_singlerowtassert_multirowtallow_multirowRRRRR�tcheck_rowcountR�tmultiparams((RR�R5sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyREOs�
%			
	"



	"




	"
"cCs�|jd|f|j�}x�t|d��D]�\\}}	}
}}}
|}|s�|ss|jss|jjrD|rD|
rDt|
�}
g|
D]}|d^q�}||j||�}|r�xyt|
|j	j
�D]_\\}}}}}}}}}|r*t||||||||t�	q�t
|||�q�Wq�q.|rc|jrc|j�}n$|jdk	r�|j|j�}nx=|
D]5\}}}}}}}}|r�|j|j|�|�}n||j||�}|j	j}|dk	ruxtt||j|�D]Y\}}|j|}|dk	r||ks^|j|j�dkr|||j<qqWn|r�|r�t|||||||j	j
d|t�	q�t
|||�q�q�Wq.WdS(s`Emit INSERT statements corresponding to value lists collected
    by _collect_insert_commands().RWcSs3|dt|d�t|d�|d|dfS(Niiiii(R�Ro(R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR�#s


iiN(R�RWRR�R�timplicit_returningR$R�tzipR�R�R�RFt_postfetch_bulk_saveRRYR
R�tinserted_primary_keyRPR�R�R-(RRRR2RR5RWRR�RtpkeysR�RRR7R�R�R�R�RRRt
mapper_recRRtlast_inserted_paramstresulttprimary_keytpkR�R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR*s~%	

7
	"



cse�jdk	o"�j�j�k����fd�}|jd�f|�}xt|d��D]�\}}	d}
t|	�}	|d}�jdkr�|jjn	|jj}|o�|jj	}
�p�|
}|sK|}x|	D]^\}}}}}||j
||�}t||�||||jj
d�|
|j7}
q�Wn�g|	D]\}}}}}|^qR}|
p�|o�t|�dk}||j
||�}|
|j7}
xC|	D];\}}}}}t||�||||jj
d�q�W|r=|
t|	�kr]tjd�jt|	�|
f��q]qe�retjd|jj�qeqeWdS(	seEmit UPDATE statements corresponding to value lists collected
    by _collect_post_update_commands().cs�tj�}x@�j�D]1}|jj|tj|jd|j�k�qW�r�|jj�jtj�jjd�jj�k�n�j	|�}�jdk	r�|j�j�}n|S(NR�(R	R�RPR�ROR�R�R�RYRXR
R(R�R�R�(RR�R5(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR��s	&	R`cSs|dt|d�fS(Nii(R�(R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR��tiisMUPDATE statement on table '%s' expected to update %d row(s); %d were matched.sMDialect %s does not support updated rowcount - versioning cannot be verified.N(RYR
R�R�RR$R�R�R�R�R�t_postfetch_post_updateR�R�R�R�RxR�R�R
R�R�(RRRR2RR5RXR�R�R-R7R�RR�R�R�R�RRR�RR�RR�((RR�R5sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR^�sh

%
"cs��jdk	o"�j�j�k����fd�}|jd�f|�}x�t|d��D]�\}}	g|	D]\}
}|
^qx}||}t|�}d}
t}�r:|jjr:|jj	r
d}
x]|D]%}
|j
||
�}|
|j7}
q�Wqdtj
d|jjdd�|j
||�n*|j
||�}�s[t}n|j}
|jre|
dkre||
kre|jjs�t|�d	kre|r�tj
d
�j||
f�q�tjd
�j||
f��qeqeWdS(s`Emit DELETE statements corresponding to value lists collected
    by _collect_delete_commands().cs�tj�}x@�j�D]1}|jj|tj|jd|j�k�qW�r�|jj�jtj�jjd�jj�k�n�j	|�S(NR�(
R	R�RPR�ROR�R-R�RYRl(R�R�(Rtneed_version_idR5(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pytdelete_stmts	&	"RlcSs|dS(Ni((R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR�"R�i����isMDialect %s does not support deleted rowcount - versioning cannot be verified.t
stackleveliis�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.N(RYR
R�R�RR�RFR�R�R�R�R�R
R�R�R)tconfirm_deleted_rowsR�RxR�(RRRR2RR5RlR�R�RtrecsRtdel_objectstexpectedtrows_matchedt	only_warnR�((RR�R5sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRgsL



			cCsx�|D]�\}}}}}|jr�|jg|jD]Z}|jr`|js�|j|jks�|jr5|jr5|j|jkr5|j^q5�}	|	r�|j|j|	�q�ng}
|jr�|
j|j	j
|j��n|jdk	r4|jtkr4|jj|jkr4|
j|jjg�q4n|
rz|j|�|_tj|jj|�|jd|d|
�n|s�|jj|||�n|jj|||�|jtkr|jdk	r||jjdkr�tjd��q�qqWdS(szfinalize state on states that have been inserted or updated,
    including calling after_insert/after_update events.

    t
refresh_statetonly_load_propss2Instance does not contain a non-NULL version valueN(t_readonly_propstunmodified_intersectiontexpire_on_flushtdeferredR-R#t_expire_attributesR�textendt_unloaded_non_objectR�t&_server_default_plus_onupdate_propkeysRYR
R�RFRAtunloadedRpRt
load_on_identR tqueryRhtafter_inserttafter_updateRxRy(RRRR3RRRRRUR9treadonlyt
toload_now((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRQcsH	
	

$			
cCst|j|�rdS|jjj}|jjj}|jdk	ro|j|j|krot|�|jg}nt	|j
jj�}	|	r�g}
nxj|D]b}|j
|kr�||jkr�||j
||j|j
<|	r�|
j|j|j
�q�q�q�W|	r(|
r(|j
jj|||
�n|rp|j|jg|D]%}||jkrA|j|j
^qA�ndS(N(RwR�tcompiledtprefetcht	postfetchRYR
R�R$Rot
class_managerRht
refresh_flushR-R�ROR�R#(RRRR5RR4R�Rt
prefetch_colstpostfetch_colsRtload_evt_attrsR�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR��s0	
!
c		Cs�|jjj}	|jjj}
|jjj}|jdk	rk|j|j|krkt|	�|jg}	nt	|j
jj�}|r�g}
n|r$|jj
}|dk	r$xq|D]f}|jr�|jjr�q�n|jj|�}|r�||||j<|r|
j|j�qq�q�Wq$nxj|	D]b}|j|kr+||jkr+||j||j|j<|r�|
j|j|j�q�q+q+W|r�|
r�|j
jj|||
�n|r�|r�|
jg|D]!}|jr�||kr�|^q��n|
rE|j|jg|
D]%}||jkr|j|j^q�nx=|j|D].\}}tj|||||||j�qSWdS(s�Expire attributes in need of newly persisted database state,
    after an INSERT or UPDATE statement has proceeded for that
    state.N(R�RRRt	returningRYR
R�R$RoRRhRtreturned_defaultsR�tisinsertR�R�R-ROR�R�R#R�RR�R�(RRRR5RR4R�RRtisupdateRRtreturning_colsRR	trowR�R�R�R�R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR��s`	
 
!
%
)cCs5x.|j|D]\}}tj|||�qWdS(N(R�Rtbulk_populate_inherit_keys(RR4R5R�R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR�2sccs�|jjr|jj}n|jj|�}d}xRt|�D]D}|rd|||j��}n|jj}||j	||fVq@WdS(s�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!ttransactionRR
RLtobjR�RR#(RRRR3R!RRR((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRn7scstj�fd��S(Ncs|jd�j�S(Ntcompiled_cache(texecution_optionst_compiled_cache(R(R(sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR�Ts	(R
tPopulateDict(R((RsM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRQscCs�t|�}td�|D��}|j|�yt|dd��}Wn&tk
rp}tjd|��nXt|dtjd��|S(Ncss$|]}|jdk	r|VqdS(N(R-R
(Rts((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>\sR-cSs|jdS(Ni(R-(tq((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR�_R�s^Could not sort objects by primary key; primary key values must be sortable in Python (was: %s)tinsert_order(R�tdifference_updatetsortedt	TypeErrortsa_exctInvalidRequestErrortoperatort
attrgetter(R3tpendingt
persistenttpersistent_sortedterr((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRLZs
tBulkUDcBs�eZdZd�Zd�Zed��Zed��Zd�Z	d�Z
d�Zej
d�d	��Zd
�Zd�ZRS(s5Handle bulk update and deletes via a :class:`.Query`.cCs2|jt�|_|jj�|_|j�dS(N(tenable_eagerloadsRFR�t_bind_mapperRt_validate_query_state(tselfR�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt__init__nsc	Cs�x�dddtjfdddtjfddttjfddttjfd	d
ttjfdddtjffD]F\}}}}|t|j|�|�sstjd
|f��qsqsWdS(Nt_limitslimit()t_offsetsoffset()t	_order_bys
order_by()t	_group_bys
group_by()t	_distincts
distinct()t	_from_objs2join(), outerjoin(), select_from(), or from_self()sCCan't call Query.update() or Query.delete() when %s has been called((	R
Rtis_RFteqtgetattrR�RR(R)tattrtmethnametnotsettop((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR(sscCs
|jjS(N(R�R (R)((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR �scGs\y||}Wn=tk
rMtjddjtd�|D�����nX||�SdS(Ns3Valid strategies for session synchronization are %ss, css|]}t|�VqdS(N(trepr(Rtx((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>�s(tKeyErrorRt
ArgumentErrortjoinR(tclstlookuptsynchronize_sessiontargtklass((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt_factory�s
'cCs@|j�|j�|j�|j�|j�|j�dS(N(t_do_before_compilet_do_pret_do_pre_synchronizet_do_exect_do_post_synchronizet_do_post(R)((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pytexec_�s




cCs.|jj||j�|_|jj|_dS(N(R�t
_execute_crudRR�R�(R)R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt
_execute_stmt�scCs
t��dS(N(R"(R)((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRC�sssqlalchemy.orm.querycCs�|j}|j|�|_t|jd|j�r�t�}xG|jD]<}t||j�sm|j�PqG|jt	|j
��qGWt|�dkr�tj
d��q�|j�|_n|jd�jj|_|j}|jr�|j�ndS(NiisLThis operation requires only one Table or entity be specified as the target.(R�tQueryContextR�R�t	_entitiest
_ColumnEntityR�tclearRXRtcolumnR�RRR�t
primary_tablet_only_entity_zeroRtlocal_tableR t
_autoflush(R)tquerylibR�ttablestentR ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRD�s$		
		cCsdS(N((R)((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRE�scCsdS(N((R)((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRG�s(t__name__t
__module__t__doc__R*R(tpropertyR tclassmethodRBRIRKRCR
tdependenciesRDRERG(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR%ks					#	tBulkEvaluatecBs eZdZd�Zd�ZRS(sDBulkUD which does the 'evaluate' method of session state resolution.cCsdS(N((R)tevaluator_compiler((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt_additional_evaluators�sc
Cs�|j}|j�j}yMtj|�}|jdk	rN|j|j�}n	d�}|j|�Wn)tj	k
r�}t
jd|��nXg|jj
j�D]6\\}}}}	t||�r�||	�r�|	^q�|_dS(NcSstS(N(R)(R((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyteval_condition�sstCould not evaluate current criteria in Python: "%s". Specify 'fetch' or False for the synchronize_session parameter.(R�t_mapper_zerotclass_RtEvaluatorCompilertwhereclauseR
tprocessR`tUnevaluatableErrorRRR RtR&t
issubclasstmatched_objects(
R)R�t
target_clsR_RaR$R=R�tidentity_tokenR((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRE�s		%(RXRYRZR`RE(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR^�s	t	BulkFetchcBseZdZd�ZRS(sABulkUD which does the 'fetch' method of session state resolution.cCsd|j}|j}|j�}|jj|jj�}|j|d|jd|j	�j
�|_dS(NRR(R�R t_compile_contextR�twith_only_columnsRQR�R�Rt_paramstfetchalltmatched_rows(R)R�R R�tselect_stmt((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRE�s			(RXRYRZRE(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRl�st
BulkUpdatecBs_eZdZd�Zed��Zd�Zed��Zed��Z	d�Z
d�ZRS(sBulkUD which handles UPDATEs.cCs,tt|�j|�||_||_dS(N(tsuperRsR*R�t
update_kwargs(R)R�R�Ru((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR*
s	cCs.tjitd6td6tt6||||�S(Ntevaluatetfetch(R%RBtBulkUpdateEvaluatetBulkUpdateFetchRsRF(R=R�R?R�Ru((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pytfactoryscCsZ|jjjrVxD|jjjD]0}||j|�}|dk	r||_qqWndS(N(R�Rhtbefore_compile_updateR
(R)tfnt	new_query((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRCs
cCs�g}x�t|jd�r*|jj�n|jD]�\}}|jr�t|tj�r�t|j|�}|j|j	|��q�t|t
j�r�|j|j	|��q�|j||f�q1|j||f�q1W|S(NR&(
R�R�R&RR�R
tstring_typesRR�t_bulk_update_tuplesRtQueryableAttributeRO(R)R�R=R>tdesc((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt_resolved_values$s!	cCs�g}x�|jD]�\}}t|tj�rJ|j|j|f�qnt|d�rh|j�}n|jr�t|t	j
�r�y|jj|}Wntj
k
r�q�X|j|j|f�qtjd|��qW|S(NR�sInvalid expression type: %r(R�R�RR�ROR-R�R�RRt
ColumnElementR�RxtUnmappedColumnErrorRR(R)R�R=R>R4((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt"_resolved_values_keys_as_propnames8s cCsb|j}|jjdt�s-t|�}ntj|j|jj	||j�}|j
|�dS(Ntpreserve_parameter_order(R�RuR�RFR#R	RXRQR�ReRK(R)R�R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRFOs		cCs |jj}|jj|�dS(N(R�R Rhtafter_bulk_update(R)R ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRH^s(RXRYRZR*R\RzRCR[R�R�RFRH(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRss			t
BulkDeletecBsAeZdZd�Zed��Zd�Zd�Zd�ZRS(sBulkUD which handles DELETEs.cCstt|�j|�dS(N(RtR�R*(R)R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR*fscCs(tjitd6td6tt6||�S(NRvRw(R%RBtBulkDeleteEvaluatetBulkDeleteFetchR�RF(R=R�R?((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRziscCsZ|jjjrVxD|jjjD]0}||j|�}|dk	r||_qqWndS(N(R�Rhtbefore_compile_deleteR
(R)R|R}((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRCus
cCs,tj|j|jj�}|j|�dS(N(R	RlRQR�ReRK(R)R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRF|scCs |jj}|jj|�dS(N(R�R Rhtafter_bulk_delete(R)R ((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRH�s(	RXRYRZR*R\RzRCRFRH(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR�cs			RxcBs eZdZd�Zd�ZRS(sSBulkUD which handles UPDATEs using the "evaluate"
    method of session resolution.cCsLi|_|j}x3|D]+\}}|jtj|��|j|<qWdS(N(tvalue_evaluatorsR�RfRt_literal_as_binds(R)R_R�R-R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR`�s
		c	Cs|jj}t�}t|jj��}x�|jD]�}tj|�tj	|�}}|j
j|�}x%|D]}|j||�||<qrW|jj
j|d|�|j|t|��|j|t|�j|��|j|�q4W|j|�dS(N(R�R R�R$R�RcRiRRut
instance_dictt
unmodifiedR�R�RhtrefreshR
t_commitR�R�taddt_register_altered(	R)R R3tevaluated_keysRRR4tto_evaluateR-((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRG�s	
(RXRYRZR`RG(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRx�s	R�cBseZdZd�ZRS(sSBulkUD which handles DELETEs using the "evaluate"
    method of session resolution.cCs6|jjjg|jD]}tj|�^q�dS(N(R�R t_remove_newly_deletedRiRRu(R)R((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRG�s(RXRYRZRG(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR��sRycBseZdZd�ZRS(sPBulkUD which handles UPDATEs using the "fetch"
    method of session resolution.c
Cs�|jj}|jj�}tgg|jD]}|jt|��^q+D]+}||jkrJtj	|j|�^qJ�}|j
}td�|D��}x9|D]1}|j|j�}	|	r�|j
||	�q�q�W|j|�dS(Ncss|]\}}|VqdS(N((RR=R>((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pys	<genexpr>�s(R�R RbR�Rqtidentity_key_from_primary_keyR$RtRRuR�R�R#t
_expire_stateR�(
R)R t
target_mapperR�tidentity_keyR3R�tattribRt	to_expire((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRG�s,.	
(RXRYRZRG(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRy�sR�cBseZdZd�ZRS(sPBulkUD which handles DELETEs using the "fetch"
    method of session resolution.cCsz|jj}|jj�}xX|jD]M}|jt|��}||jkr%|jtj	|j|�g�q%q%WdS(N(
R�R RbRqR�R$RtR�RRu(R)R R�R�R�((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyRG�s(RXRYRZRG(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyR��s(8RZt	itertoolsRRRR�RRRRxRRtbaseRRRR	R
Rtsql.baseRR;RHRFRMR`RmRNR\RaR(RDR]RfR)RER*R^RgRQR�R�R�RnRRLtobjectR%R^RlRsR�RxR�RyR�(((sM/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyt<module>sb	P	EV	-	.	Q		U�	8	.�{	s	^	F	)	`					e(\#(


Zerion Mini Shell 1.0