ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c@s-ddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlm Z dd l m Z dd l mZejeZdZd efd YZd ZdZdZdZdZejdZejdZejdZejdZejdZ ejdZ!ej"ddZ#e!j"ddZ$e j"ddZ%ej"ddZ&ej"dd Z'ej"dd!Z(ej"dd"Z)ej"dd#Z*ej"dd$Z+ej"dd%Z,ej"d&d'Z-ej"d&d(Z.d)Z/ej"d&d*Z0ej"d&d+Z1d,Z2d-Z3e!j"d&d.Z4ej"dd/Z5ej"dd0Z6d1Z7d2Z8dS(3iNi(tconfig(tenginesi(t create_engine(texc(ttext(turl(tcompattregistercBs2eZdZedZdZdZRS(cCs i|_dS(N(tfns(tself((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyt__init__scCstjd|S(Nt*(Rtfor_db(tclstfn((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pytinitscsfd}|S(Ncs|j<S(N(R(R(tdbnameR (sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pytdecorates ((R RR((RR sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR scGst|tjr$tj|}n't|tjr?|}n |jj}|j}||j krz|j |||S|j d||SdS(NR ( t isinstanceRt string_typestsa_urltmake_urltURLtdbRtget_backend_nameR(R tcfgtargRtbackend((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyt__call__#s   (t__name__t __module__R t classmethodRR R(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyRs  cCsDx=tD]2}tjd||jjt||j|q WdS(NsCREATE database %s, URI %r(t_configs_for_db_operationtlogtinfoRRt _create_db(tfollower_identR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pytcreate_follower_db1scCs+x$tjjD]}t||qWdS(N(RtConfigt all_configst_configure_follower(R$R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pytconfigure_follower7scCs|rt||}ni}t||tj||}t||||jjtjj ||||}|rt ||n|S(N( t_follower_url_from_maint_update_db_optsRttesting_enginet_post_configure_enginetconnecttcloseRR&RR((tdb_urltoptionst file_configR$tdb_optstengR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyt setup_config<s cCsDx=tD]2}tjd||jjt||j|q WdS(NsDROP database %s, URI %r(R R!R"RRt_drop_db(R$R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pytdrop_follower_dbKsccst}x$tjjD]}|jjqWxktjjD]Z}|jj}|j}||j|j |j f}||kr@|V|j |q@q@Wx$tjjD]}|jjqWdS(N( tsetRR&R'RtdisposeRRtusernamethosttdatabasetadd(thostsRRRt host_conf((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR Qs    cCstd|jdS(Ns"no DB creation routine for cfg: %s(tNotImplementedErrorR(RR4tident((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR#dscCstd|jdS(Nsno DB drop routine for cfg: %s(R@R(RR4RA((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR6iscCsdS(N((R0R3((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR+nscCsdS(N((RRA((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR(sscCsdS(N((RtengineR$((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR-xscCstj|}||_|S(N(RRR<(RRA((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR*}s tmssqlcCst|dZs t_ts1t_ts2s%s_ts1s%s_ts2iis-Dropped %d out of %d stale databases detected( R!R"RR.tjoinRJR8tendswithR=t enumerateRr( RRR4R^tto_reapt all_namestto_droptnametdroppedttotalR:((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR|Ns.       cCs%tj|}||_d|_|S(Ntxe(RRR:tpassword(RRA((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyt_oracle_follower_url_from_mainos  cCs|jjdde}|jd||jd||jd||jd||jd|jdWdQXdS( NRQRRscreate database %ss1ALTER DATABASE %s SET ALLOW_SNAPSHOT_ISOLATION ONs0ALTER DATABASE %s SET READ_COMMITTED_SNAPSHOT ONsuse %sscreate schema test_schemascreate schema test_schema_2(R.RTRJ(RR4RAR^((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyt_mssql_create_dbws   cCs2|jjdd}t||WdQXdS(NRQRR(R.RTt_mssql_drop_ignore(RR4RAR^((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyt_mssql_drop_dbscCsWy)|jd|tjd|tSWn'tjk rR}tjd|tSXdS(Nsdrop database %ss Reaped db: %sscouldn't drop db: %s(RJR!R"RXRRpRqRE(R^RAR`((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyRs c Cstjd|t|}|jjdd}tjddj||jd}d|D}t}x*|D]"}||kr|j|qqWd}} x9t |d D](\} } t || r|d 7}qqWtjd || WdQXdS( Nsdb reaper connecting to %rRQRRsidentifiers in file: %ss, sselect d.name from sys.databases as d where name like 'TEST_%' and not exists (select session_id from sys.dm_exec_sessions where database_id=d.database_id)cSsh|]\}|jqS((R(RR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pys s iis-Dropped %d out of %d stale databases detected( R!R"RR.RTRRJR8R=RR( RRR4R^RRRRRRR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyR}s"      (9RvtloggingRjR[tRRRRRRBRRtutilRt getLoggerRR!tNonetFOLLOWER_IDENTtobjectRR%R)R5R7R RR#R6R+R(R-R*R RFRHRORaRdRgRhRURlRcRnRoRrRsRtRR|RRRRR}(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/provision.pyts\          %    !