§ <ˆjóãó^—dZddlmZddlmZddlZddlmZddlmZddlmZ dd lm Z dd lm Z dd l 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;„dz _bulk_insert..7s€Ð@Ð@Ð@¨e�u˜eœjÐ)Ð@Ð@Ð@ócó—g|]\}}|‘ŒSrr)rrÚdict_s rrz _bulk_insert..8s€Ð;Ð;Ð;¡. 5¨%˜Ð;Ð;Ð;rcó—g|] }|j‘Œ Srrrs rrz _bulk_insert..:ó€Ð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ú z_bulk_insert..Cskøèè€ð ð ñ ØØØØØØØØ ð#ØØØØØØØ ð ð ð ð ð ð ð rc3ó$•K—|] }d|‰‰fV—Œ dSr"r©rÚmappingr*r+s €€rr,z_bulk_insert..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..ks€ÐDÐDÐD A˜!œ%ÐDÐDÐDrcó •—g|] }‰|‘Œ Srr)rr7rs €rrz _bulk_insert..osø€Ð<Ð<Ð< c�u˜S”zÐ<Ð<Д>ˆà$×/Ò/° Ñ<Ô<€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.._changed_dict..sOøèè€ð ð á��1Ø�EÔ)Ð)Ð)¨Q°+Ð-=Ð-=ð�ˆFà-=Ð-=Ð-=Ð-=ð ð r)rrA)r+rrYs `€rÚ _changed_dictz#_bulk_update.._changed_dict~sOøø€Ýð ð ð ð ð àœ ×(Ò(Ñ*Ô*ð ñ ô ñ ô ð rcó(•—g|]}‰‰|¦«‘ŒSrr)rrrZr+s €€rrz _bulk_update..‡s%ø€ÐKÐKÐK¸˜ ˜  f¨eÑ4Ô4ÐKÐKÐKrcó—g|] }|j‘Œ Srrrs rrz _bulk_update..‰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..œ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..üsIèè€ð ð á;�U˜J¨° 𘠠F¨J¸Ð>ð ð ð ð ð ð rc3ó0K—|]\}}}}}||||dfV—ŒdS)TNr)rrr#r+r*Úupdate_version_ids rr,zsave_obj..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..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..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..XsIøèè€ððàð  Ô(Ô,¨j¸Ô.AÐBððððððrTr¦NFc3ó\•K—|]&}‰|j‰ |¦«fV—Œ'dSr")Ú_labelÚgetrÀs €€rr,z+_collect_update_commands..¬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..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úz)_emit_update_statements..zó8€Ø �ŒFÝ ��A”‰KŒKÝ ��Q”‰LŒLØ �ŒFØ �ŒFð  €rrFTcó—g|] }|d‘Œ S©r r©rrûs rrz+_emit_update_statements..Ü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.."rýrcó—g|] }|d‘Œ Srÿrrs rrz+_emit_insert_statements..9s€Ð5Ð5Ð5 c˜3˜qœ6Ð5Ð5Ð5rFNr)rrvrr´rÚimplicit_returningr?rÚzipr r r Ú_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||‰||||j j d¦«| |j z } ŒTnyd„| D¦«}| p| ot|¦«dk}||   ||¦«}| |j z } | D]-\}}}} }t||‰||||j j 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..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..»s€�S˜”V�S  Q¤™[œ[Ð)€rrcó—g|] \}}}}}|‘Œ Srr)rrr#r$r&r$s rrz0_emit_post_update_statements..Üs2€ðððá?�E˜: z°4¸ððððrrrr)rzr·rrr?rrrrrÚ_postfetch_post_updater r r 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 } Œ#nYtj d |jj z¦«| || ¦«n!| || ¦«}‰sd } |j } |j rm| dkrg| | kra|jjst | ¦«d krB| r!tj d ‰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..delete_stmtsÇø€Ý”‘”ˆØÔ'¨Ô.ð ð ˆCØ ŒN× !Ò !Ø•s”} S¤W°C´HÐ=Ñ=Ô=Ò=ñ ô ð ð ð ð Ø ŒN× !Ò !ØÔ%Ý”=ØÔ)Ô-°VÔ5JÔ5Oðñôòñ ô ð ð�|Š|˜FÑ#Ô#Ð#rrŽcó—|dS)Nrrrús rrüz)_emit_delete_statements.. s €¸¸A¼€rcó—g|]\}}|‘ŒSrr)rr$r*s rrz+_emit_delete_statements..!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|j j ‰ j vr | |j j g¦«|rO| ‰ ¦«‰ _ tj|j |¦«‰ j ‰ |¬¦«|s|j ||‰ ¦«n|j ||‰ ¦«|j dur-|j �&||j j €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..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..Çó<ø€ð ð ð àØ˜Ô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..s:ø€ð ð ð àØ”?ð ð(+°.Ð'@Ð'@ðà'@Ð'@Ð'@rcóF•—g|]}|‰jv¯ ‰j|j‘ŒSrrQrRs €rrz_postfetch..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—Œ.Qs"ø€�T×+Ò+Ø&Ô6ð,ñ ô €r)rÚ PopulateDict)r:s`rr;r;Ns,ø€å Ô ð ð ð ð ñ ô ðrcó|—t|¦«}td„|D¦«¦«}| |¦« t||j¬¦«}nB#t$r5}t jtjd|z¦«|¬¦«Yd}~nd}~wwxYwt|tj d¦«¬¦«|zS)Nc3ó(K—|] }|j® |V—ŒdSr"r6)rÚss rr,z_sort_states..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„Z d„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 d dtjfd d dtjffD]>\}}}}|t|j|¦«|¦«st jd|›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..–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..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..ö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Ôt|j|¦«}| |  |¦«¦«Œdt |tj ¦«r)| |  |¦«¦«Œ§|  ||f¦«Œ¿|  ||f¦«Œ×|S)NrA) r­rÌrAr+r®rÚ string_typesr rEÚ_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¦«ŒÑ*Ô*×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..À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..Í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..ÏsFø€ð%ð%ð%ð$ð"×?Ò?ݘ[Ñ)Ô)ñôð%ð%ð%rc3ó K—|] \}}|V—Œ dSr"r)rrWrXs rr,z7BulkUpdateFetch._do_post_synchronize..Ú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 Úbaser r r{rrrÚsql.baserrRrdrlr�r�rmr}rƒrCrar~rˆrbrDrr‰rpr.r r!r‘r;rkÚobjectr„rÌrárêrrórrôrrrrú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