
    e                     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                 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)pyodbcaioodbc )queryr   MARS_ConnectionYes)get_backend_namesetupdate_query_dictupdate_query_stringget_dialectr   NoSuchModuleError)urldriver	query_strbackendnew_urls        Clib/python3.11/site-packages/sqlalchemy/dialects/mssql/provision.pyr   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_dbr8   4   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.   )r0   r1   _mssql_drop_ignorer3   s       r+   _mssql_drop_dbr;   C   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)r2   r   infor   DatabaseErrorwarning)r7   r6   errs      r+   r:   r:   I   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>g   s"    ===	V\\^^===    r      z-Dropped %d out of %d stale databases detected)r   r=   r   r0   r1   joinr2   r!   add	enumerater:   )r&   identsr5   r7   to_reap	all_namesto_dropnamedroppedtotalrF   s              r+   _reap_mssql_dbsrT   Z   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 )NrC   )r4   r5   s     r+   _mssql_temp_table_keyword_argsrV   v   s    IrH   c                     d|z   S )Nz##rC   )r4   r5   	base_names      r+   _mssql_get_temp_table_namerY   {   s    )rH   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yrQ   )rQ   )r0   r1   r   test_schematest_schema_2get_table_namesr   r   r   r   get_foreign_keysexecuter	   r
   cr]   r^   )r4   r5   r7   	inspectorr\   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 )NrI   )start)r4   sequences     r+   r   r      s    ~OrH   N)
sqlalchemyr   r   r   r   r   r\   r   r	   r
   r   r   testing.provisionr   r   r   r   r   r   r   r   r   for_dbr8   r;   r:   rT   rV   rY   rC   rH   r+   <module>ro      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##  $#  rH   