o
    Šå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_argsÚmssqlc                 C   s   |j dkrd|jj_d S d S )NÚpyodbcF)ÚdriverÚdialectÚdbapiÚpooling)ÚurlÚengineÚfollower_ident© r   ú_/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/dialects/mssql/provision.pyr      s   
ÿr   c                 C   sz   |   ¡ }| jd||f d�}|dvr|jdd�}|dkr#| ddi¡}|r*| |¡}z| ¡  W |S  tjy<   Y d S w )	Nz%s+%s)Ú
drivername)r   ÚaioodbcÚ )Úqueryr"   ÚMARS_ConnectionÚYes)Úget_backend_nameÚsetÚupdate_query_dictÚupdate_query_stringÚget_dialectr   ÚNoSuchModuleError)r   r   Ú	query_strÚbackendÚnew_urlr   r   r    r   $   s   

ýÿr   c                 C   s‚   |  ¡ jdd��/}| d| ¡ | d| ¡ | d| ¡ | d| ¡ | d¡ | d¡ W d   ƒ d S 1 s:w   Y  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Úconnr   r   r    Ú_mssql_create_db;   s   ÿÿ
"ör;   c                 C   s@   |  ¡ jdd��}t||ƒ W d   ƒ d S 1 sw   Y  d S )Nr0   r1   )r3   r4   Ú_mssql_drop_ignorer6   r   r   r    Ú_mssql_drop_dbJ   s   "ÿ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 database %szReaped db: %sTzcouldn't drop db: %sF)r5   r   Úinfor   ÚDatabaseErrorÚwarning)r:   r9   Úerrr   r   r    r<   P   s   €þr<   c                 C   sÒ   t  d| ¡ t| ƒ}| ¡ jdd��M}t  dd |¡¡ | d¡}dd„ |D ƒ}tƒ }|D ]}||v r8| |¡ q-d	 }}	t	|d
ƒD ]\}	}
t
||
ƒrO|d
7 }qBt  d||	¡ W d   ƒ d S 1 sbw   Y  d S )Nzdb reaper connecting to %rr0   r1   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   r>   r   r3   r4   Újoinr5   r(   ÚaddÚ	enumerater<   )r   Úidentsr8   r:   Úto_reapÚ	all_namesÚto_dropÚnameÚdroppedÚtotalrD   r   r   r    Ú_reap_mssql_dbsa   s,   ÿ
€
€ÿ"írQ   c                 C   s   i S )Nr   )r7   r8   r   r   r    Ú_mssql_temp_table_keyword_args}   s   rR   c                 C   s   d| S )Nz##r   )r7   r8   Ú	base_namer   r   r    Ú_mssql_get_temp_table_name‚   s   rT   c                 C   sÆ   |  ¡ jdd��Q}t|ƒ}d d| j| jfD ];}|j|d�D ]2}t|tƒ tdt	ƒtdt	ƒ|d�}t|ƒj
||d�D ]}| tt|jjg|jjg|d d�ƒ¡ q8qqW d   ƒ d S 1 s\w   Y  d S )	Nr0   r1   Údbo)ÚschemaÚxÚyrN   )rN   )r3   r4   r   Útest_schemaÚtest_schema_2Úget_table_namesr   r
   r   r   Úget_foreign_keysÚexecuter   r	   ÚcrW   rX   )r7   r8   r:   Ú	inspectorrV   ÚtnameÚtbÚfkr   r   r    r   ‡   s.   ûÿÿÿÿøÿ"þr   c                 C   s   |j d u rd|_ |S )NrF   )Ústart)r7   Úsequencer   r   r    r   ž   s   
r   N)Ú
sqlalchemyr   r   r#   r   r   rV   r   r   r	   r
   r   Útesting.provisionr   r   r   r   r   r   r   r   r   r   Úfor_dbr;   r=   r<   rQ   rR   rT   r   r   r   r    Ú<module>   sL   







