o
    ãRcN  ã                   @   sP  d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ e d¡dd„ ƒZe d¡dd„ ƒZdd„ Ze	 d¡dd„ ƒZe d¡dd„ ƒZeƒ Ze d¡dd„ ƒZe d¡dd„ ƒZe
 d¡dd„ ƒZe d¡dd „ ƒZe d¡d!d"„ ƒZd#S )$é   )Úcreate_engine)Úexc)Úurl)Úconfigure_follower)Ú	create_db)Údrop_db)Úfollower_url_from_main)Úlog)Úpost_configure_engine)Úrun_reap_dbs)Ú set_default_schema_on_connection)Ú stop_test_class_outside_fixtures)Útemp_table_keyword_argsZoraclec                 C   s’   |  ¡ ;}| d| ¡ | d| ¡ | d| ¡ | d|f ¡ | d| ¡ | d| ¡ | d| ¡ W d   ƒ d S 1 sBw   Y  d S )Nzcreate user %s identified by xez#create user %s_ts1 identified by xez#create user %s_ts2 identified by xezgrant dba to %sz grant unlimited tablespace to %sz$grant unlimited tablespace to %s_ts1z$grant unlimited tablespace to %s_ts2)ÚbeginÚexec_driver_sql©ÚcfgÚengÚidentÚconn© r   úFD:\Flask\env\Lib\site-packages\sqlalchemy/dialects/oracle/provision.pyÚ_oracle_create_db   s   
"ùr   c                 C   s   d| | _ d| | _d S ©Nú%s_ts1ú%s_ts2)Ztest_schemaZtest_schema_2)Úconfigr   r   r   r   Ú_oracle_configure_follower   ó   
r   c              
   C   sV   z|   d| ¡ t d|¡ W dS  tjy* } zt d|¡ W Y d }~dS d }~ww )Nzdrop user %s cascadezReaped db: %sTzcouldn't drop db: %sF)r   r	   Úinfor   ÚDatabaseErrorÚwarning)r   ZdbnameÚerrr   r   r   Ú_ora_drop_ignore%   s   €þr#   c                 C   sT   |  ¡ }t||ƒ t|d| ƒ t|d| ƒ W d   ƒ d S 1 s#w   Y  d S r   )r   r#   r   r   r   r   Ú_oracle_drop_db/   s
   

"ør$   c              
   C   s°   z|  ¡ }| d¡ W d   ƒ n1 sw   Y  W n tjy4 } zt d|¡ W Y d }~nd }~ww tD ]}z|j}W n |jj	j
yJ   Y q7w d|_||_q7t ¡  d S )Nzpurge recyclebinz#purge recyclebin command failed: %sé    )r   r   r   r    r	   r!   Ú
_all_connsZstmtcachesizeÚdialectZdbapiZInterfaceErrorÚclear)r   ÚdbÚclsr   r"   Zcx_oracle_connÚscr   r   r   r   <   s$   
ý€€ÿ
þr   c                 C   s8   ddl m} | |d¡dd„ ƒ}| |d¡dd„ ƒ}d S )	Nr%   )ÚeventÚcheckoutc                 S   s   t  | ¡ d S )N)r&   Úadd)Z	dbapi_conZ
con_recordZ	con_proxyr   r   r   r-   ]   s   z/_oracle_post_configure_engine.<locals>.checkoutÚcheckinc                 S   s   d|j v r| ¡  d S d S )NZcx_oracle_xid)r   Z
invalidate)Údbapi_connectionZconnection_recordr   r   r   r/   a   s   
ÿz._oracle_post_configure_engine.<locals>.checkin)Z
sqlalchemyr,   Zlistens_for)r   ÚengineZfollower_identr,   r-   r/   r   r   r   Ú_oracle_post_configure_engineY   s
   


r2   c                 C   s  t  d| ¡ t| ƒ}| ¡ r}t  dd |¡¡ | d¡}dd„ |D ƒ}tƒ }|D ]0}| d¡s5| d¡r6q)||v rY| |¡ d	| |v rL| d	| ¡ d
| |v rY| d
| ¡ q)d }}	t	|dƒD ]\}	}
t
||
ƒrp|d7 }qct  d||	¡ W d   ƒ d S 1 sƒw   Y  d S )Nzdb reaper connecting to %rzidentifiers in file: %sz, z‰select u.username from all_users u where username like 'TEST_%' and not exists (select username from v$session where username=u.username)c                 S   s   h | ]\}|  ¡ ’qS r   )Úlower)Ú.0Úusernamer   r   r   Ú	<setcomp>w   s    z#_reap_oracle_dbs.<locals>.<setcomp>Z_ts1Z_ts2r   r   r%   é   z-Dropped %d out of %d stale databases detected)r	   r   r   r   Újoinr   ÚsetÚendswithr.   Ú	enumerater#   )r   Zidentsr   r   Zto_reapZ	all_namesZto_dropÚnameZdroppedÚtotalr5   r   r   r   Ú_reap_oracle_dbsj   s8   
ÿ
€
€ÿ"çr>   c                 C   s   t  | ¡} | j|ddS )NZxe)r5   Úpassword)Úsa_urlZmake_urlr9   )r   r   r   r   r   Ú_oracle_follower_url_from_mainŒ   r   rA   c                 C   s   dgddœS )NzGLOBAL TEMPORARYzPRESERVE ROWS)ÚprefixesZoracle_on_commitr   )r   r   r   r   r   Ú_oracle_temp_table_keyword_args’   s   þrC   c                 C   s"   |  ¡ }| d| ¡ | ¡  d S )Nz#ALTER SESSION SET CURRENT_SCHEMA=%s)ÚcursorÚexecuteÚclose)r   r0   Zschema_namerD   r   r   r   Ú(_oracle_set_default_schema_on_connectionš   s   rG   N)Ú r   r   r1   r   r@   Ztesting.provisionr   r   r   r   r	   r
   r   r   r   r   Zfor_dbr   r   r#   r$   r9   r&   r2   r>   rA   rC   rG   r   r   r   r   Ú<module>   sB    






!

