3
a                 @   s8  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 ddlmZ ddlmZ ddlmZ ejddd Zejddd Zdd Zejddd Zejddd Zejddd Zejddd  Zd!S )"    )inspect)Integer   )create_engine)exc)Column)DropConstraint)ForeignKeyConstraint)MetaData)Table)	create_db)"drop_all_schema_objects_pre_tables)drop_db)get_temp_table_name)log)run_reap_dbs)temp_table_keyword_argsZmssqlc          
   C   sl   |j  jddR}|jd|  |jd|  |jd|  |jd|  |jd |jd W d Q R X d S )	N
AUTOCOMMIT)isolation_levelzcreate database %sz1ALTER DATABASE %s SET ALLOW_SNAPSHOT_ISOLATION ONz0ALTER DATABASE %s SET READ_COMMITTED_SNAPSHOT ONzuse %szcreate schema test_schemazcreate schema test_schema_2)connectexecution_optionsexec_driver_sql)cfgengidentconn r   I/tmp/pip-build-6_cqtusv/SQLAlchemy/sqlalchemy/dialects/mssql/provision.py_mssql_create_db   s    


r   c          
   C   s*   |j  jdd}t|| W d Q R X d S )Nr   )r   )r   r   _mssql_drop_ignore)r   r   r   r   r   r   r   _mssql_drop_db"   s    r    c             C   sR   y| j d|  tjd| dS  tjk
rL } ztjd| dS d }~X nX d S )Nzdrop database %szReaped db: %sTzcouldn't drop db: %sF)r   r   infor   ZDatabaseErrorwarning)r   r   errr   r   r   r   (   s    r   c             C   s   t jd|  t| }|j jdd}t jddj| |jd}dd |D }t }x|D ]}||kr\|j| q\W d	 }}	x(t	|d
D ]\}	}
t
||
r|d
7 }qW t jd||	 W d Q R X d S )Nzdb reaper connecting to %rr   )r   zidentifiers in file: %sz, zselect 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)c             S   s   h | ]\}|j  qS r   )lower).0dbnamer   r   r   	<setcomp>G   s    z"_reap_mssql_dbs.<locals>.<setcomp>r      z-Dropped %d out of %d stale databases detected)r   r!   r   r   r   joinr   setadd	enumerater   )urlZidentsr   r   Zto_reapZ	all_namesZto_dropnameZdroppedtotalr&   r   r   r   _reap_mssql_dbs9   s"    

r0   c             C   s   i S )Nr   )r   r   r   r   r   _mssql_temp_table_keyword_argsV   s    r1   c             C   s   d| S )Nz##r   )r   r   	base_namer   r   r   _mssql_get_temp_table_name[   s    r3   c             C   s   |j  jdd}t|}xd d| j| jfD ]~}xx|j|dD ]h}t|t tdt	tdt	|d}xBt|j
||dD ],}|jtt|jjg|jjg|d d qvW q>W q,W W d Q R X d S )	Nr   )r   Zdbo)schemaxyr.   )r.   )r   r   r   Ztest_schemaZtest_schema_2Zget_table_namesr   r
   r   r   Zget_foreign_keysexecuter   r	   cr5   r6   )r   r   r   Z	inspectorr4   tnametbZfkr   r   r   r   `   s    r   N)Z
sqlalchemyr   r    r   r   r4   r   r   r	   r
   r   Ztesting.provisionr   r   r   r   r   r   r   Zfor_dbr   r    r   r0   r1   r3   r   r   r   r   <module>   s,   