
    
 @g                     t   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j        d          d             Z ej        d          d             Z ej        d          d             Zd Z ej        d          d             Z ej        d          d             Z ej        d          d             Z ej        d          d             Z ej        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)run_reap_dbs)temp_table_keyword_argsmssqlc                    |                                  }|                     |d|          }|dvr|                    d          }|r|                    |          }	 |                                 |S # t          j        $ r Y d S w xY w)N+)
drivername)pyodbcaioodbc )query)get_backend_namesetupdate_query_stringget_dialectr   NoSuchModuleError)urldriver	query_strbackendnew_urls        W/var/www/piapp/venv/lib/python3.11/site-packages/sqlalchemy/dialects/mssql/provision.pyr   r      s    ""$$GggGGGVV!<g==G***++B+'' 9--i88      tts   "A8 8B
Bc                    |                                                     d          5 }|                    d|z             |                    d|z             |                    d|z             |                    d|z             |                    d           |                    d           d d d            d S # 1 swxY 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conns       r(   _mssql_create_dbr5   +   s#   		(	(	(	F	F 
<$1E9:::?%G	
 	
 	
 	>F	
 	
 	
 	X-...8999:;;;
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
<s   BCCCc                     |                                                     d          5 }t          ||           d d d            d S # 1 swxY w Y   d S )Nr*   r+   )r-   r.   _mssql_drop_ignorer0   s       r(   _mssql_drop_dbr8   :   s    		(	(	(	F	F ($4'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AAAc                     	 |                      d|z             t          j        d|           dS # t          j        $ r }t          j        d|           Y d }~dS d }~ww xY w)Nzdrop database %szReaped db: %sTzcouldn't drop db: %sF)r/   r   infor   DatabaseErrorwarning)r4   r3   errs      r(   r7   r7   @   s|     	/%7888%(((t   *C000uuuuus   -1 A  AA c                 D   t          j        d|            t          |           }|                                                    d          5 }t          j        dd                    |                     |                    d          }d |D             }t                      }|D ]}||v r|                    |           dx}}	t          |d	          D ]\  }	}
t          ||
          r|d	z  }t          j        d
||	           d d d            d S # 1 swxY w Y   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                 :    h | ]\  }|                                 S  )lower).0dbnames     r(   	<setcomp>z"_reap_mssql_dbs.<locals>.<setcomp>^   s"    ===	V\\^^===    r      z-Dropped %d out of %d stale databases detected)r   r:   r   r-   r.   joinr/   r   add	enumerater7   )r#   identsr2   r4   to_reap	all_namesto_dropnamedroppedtotalrC   s              r(   _reap_mssql_dbsrQ   Q   s   H)3///


C		(	(	(	F	F 
$*DIIf,=,=>>>&&/
 
 >=W===	%% 	" 	"Dv~~D!!!%&w22 	 	ME6!$// 1;We	
 	
 	
'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   B;DDDc                     i S )Nr@   )r1   r2   s     r(   _mssql_temp_table_keyword_argsrS   m   s    IrE   c                     d|z   S )Nz##r@   )r1   r2   	base_names      r(   _mssql_get_temp_table_namerV   r   s    )rE   c                 v   |                                                     d          5 }t          |          }d d| j        | j        fD ]}|                    |          D ]}t          |t                      t          dt                    t          dt                    |          }t          |          
                    ||          D ]P}|                    t          t          |j        j        g|j        j        g|d                                        Q	 d d d            d S # 1 swxY w Y   d S )	Nr*   r+   dbo)schemaxyrN   )rN   )r-   r.   r   test_schematest_schema_2get_table_namesr   r   r   r   get_foreign_keysexecuter	   r
   crZ   r[   )r1   r2   r4   	inspectorrY   tnametbfks           r(   r   r   w   s   		(	(	(	F	F $DMM	UCOS5FG 	 	F"22&2AA  JJ3((3((!   "$--88v8NN  BLL&0!#246(F      	                 s   C7D..D25D2c                 "    |j         d|_         |S )NrF   )start)r1   sequences     r(   r   r      s    ~OrE   N)
sqlalchemyr   r   r   r   r   rY   r   r	   r
   r   r   testing.provisionr   r   r   r   r   r   r   r   r   for_dbr5   r8   r7   rQ   rS   rV   r@   rE   r(   <module>rl      s                                 $ $ $ $ $ $ * * * * * *             * * * * * * C C C C C C ( ( ( ( ( ( 4 4 4 4 4 4 4 4 4 4 4 4 $ $ $ $ $ $ 3 3 3 3 3 3 - - - - - - 8 8 8 8 8 8 G$$  %$& '< < < ( ( (
  " W
 
 
6  ((  )( G$$  %$ +#*733  43, 7##  $#  rE   