U
    ov¨gÙ  ã                   @   s’  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 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e d¡dd„ ƒZe d¡dd„ ƒZdd„ 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 )+é    )Úinspect)ÚIntegeré   )Úcreate_engine)Úexc)ÚColumn)ÚDropConstraint)ÚForeignKeyConstraint)ÚMetaData)ÚTable)Ú	create_db)Ú"drop_all_schema_objects_pre_tables)Údrop_db)Úgenerate_driver_url)Úget_temp_table_name)Úlog)Únormalize_sequence)Úpost_configure_engine)Úrun_reap_dbs)Útemp_table_keyword_argsZmssqlc                 C   s   |j dkrd|jj_d S )NÚpyodbcF)ÚdriverÚdialectZdbapiZpooling)ÚurlZengineZfollower_ident© r   úG/tmp/pip-unpacked-wheel-uqd9otp_/sqlalchemy/dialects/mssql/provision.pyr      s    
r   c                 C   s‚   |   ¡ }| jd||f d}|dkr0|jdd}|dkrF| ddi¡}|rT| |¡}z| ¡  W n tjk
rx   Y d S X |S d S )	Nz%s+%s)Z
drivername)r   ÚaioodbcÚ )Úqueryr   ZMARS_ConnectionZYes)Zget_backend_nameÚsetZupdate_query_dictZupdate_query_stringÚget_dialectr   ZNoSuchModuleError)r   r   Z	query_strÚbackendÚnew_urlr   r   r   r   $   s    
r   c              	   C   sl   |  ¡ jddR}| d| ¡ | d| ¡ | d| ¡ | d| ¡ | d¡ | d¡ W 5 Q R X d S )	NÚ
AUTOCOMMIT©Z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Úconnr   r   r   Ú_mssql_create_db;   s    ÿÿ
r-   c              	   C   s*   |  ¡ jdd}t||ƒ W 5 Q R X d S )Nr#   r$   )r%   r&   Ú_mssql_drop_ignorer(   r   r   r   Ú_mssql_drop_dbJ   s    r/   c              
   C   s\   z |   d| ¡ t d|¡ W dS  tjk
rV } zt d|¡ W Y ¢dS d }~X Y 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.   P   s    r.   c              	   C   s¼   t  d| ¡ t| ƒ}| ¡ jddŽ}t  dd |¡¡ | d¡}dd„ |D ƒ}tƒ }|D ]}||krZ| |¡ qZd	 }}	t	|d
ƒD ]\}	}
t
||
ƒr„|d
7 }q„t  d||	¡ W 5 Q R X d S )Nzdb reaper connecting to %rr#   r$   zidentifiers in file: %sz, z›select 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 | ]\}|  ¡ ’qS r   )Úlower)Ú.0Údbnamer   r   r   Ú	<setcomp>n   s     z"_reap_mssql_dbs.<locals>.<setcomp>r   é   z-Dropped %d out of %d stale databases detected)r   r0   r   r%   r&   Újoinr'   r   ÚaddÚ	enumerater.   )r   Zidentsr*   r,   Zto_reapZ	all_namesZto_dropÚnameZdroppedÚtotalr5   r   r   r   Ú_reap_mssql_dbsa   s*    ÿ

  ÿr=   c                 C   s   i S )Nr   )r)   r*   r   r   r   Ú_mssql_temp_table_keyword_args}   s    r>   c                 C   s   d| S )Nz##r   )r)   r*   Ú	base_namer   r   r   Ú_mssql_get_temp_table_name‚   s    r@   c                 C   s°   |  ¡ jdd–}t|ƒ}d d| j| jfD ]v}|j|dD ]d}t|tƒ tdt	ƒtdt	ƒ|d}t|ƒj
||dD ],}| tt|jjg|jjg|d dƒ¡ qpq:q*W 5 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	   ÚcrB   rC   )r)   r*   r,   Z	inspectorrA   ZtnameÚtbZfkr   r   r   r   ‡   s*    û  ÿÿÿr   c                 C   s   |j d krd|_ |S )Nr7   )Ústart)r)   Úsequencer   r   r   r   ž   s    
r   N)Z
sqlalchemyr   r   r   r   r   rA   r   r   r	   r
   r   Ztesting.provisionr   r   r   r   r   r   r   r   r   r   Zfor_dbr-   r/   r.   r=   r>   r@   r   r   r   r   Ú<module>	   sJ   







