
    [h                        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j        d          d             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)post_configure_engine)run_reap_dbs)temp_table_keyword_argsmssqlc                 B    |j         dk    rd|j        j        _        d S d S )NpyodbcF)driverdialectdbapipooling)urlenginefollower_idents      r/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/dialects/mssql/provision.pyr   r      s*    }  ',$$$ !     c                 V   |                                  }|                     |d|          }|dvr|                    d          }|dk    r|                    ddi          }|r|                    |          }	 |                                 |S # t
          j        $ r Y d S w xY w)	N+)
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_urls        r!   r   r   $   s    ""$$GggGGGVV!<g==G***++B+''++->,FGG 9--i88      tts   ?B 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_dbr@   ;   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 )Nr5   r6   )r8   r9   _mssql_drop_ignorer;   s       r!   _mssql_drop_dbrC   J   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)r?   r>   errs      r!   rB   rB   P   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 %rr5   r6   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>n   s"    ===	V\\^^===r"   r      z-Dropped %d out of %d stale databases detected)r   rE   r   r8   r9   joinr:   r,   add	enumeraterB   )r   identsr=   r?   to_reap	all_namesto_dropnamedroppedtotalrN   s              r!   _reap_mssql_dbsr[   a   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 )NrK   )r<   r=   s     r!   _mssql_temp_table_keyword_argsr]   }   s    Ir"   c                     d|z   S )Nz##rK   )r<   r=   	base_names      r!   _mssql_get_temp_table_namer`      s    )r"   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 )	Nr5   r6   dbo)schemaxyrX   )rX   )r8   r9   r   test_schematest_schema_2get_table_namesr   r   r   r   get_foreign_keysexecuter	   r
   crd   re   )r<   r=   r?   	inspectorrc   tnametbfks           r!   r   r      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 )NrP   )start)r<   sequences     r!   r   r      s    ~Or"   N)
sqlalchemyr   r   r'   r   r   rc   r   r	   r
   r   r   testing.provisionr   r   r   r   r   r   r   r   r   r   for_dbr@   rC   rB   r[   r]   r`   rK   r"   r!   <module>rv      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 6 6 6 6 6 6 - - - - - - 8 8 8 8 8 8 g&&- - '&-
 G$$  %$, '< < < ( ( (
  " W
 
 
6  ((  )( G$$  %$ +#*733  43, 7##  $#  r"   