
    g                        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y )!    )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                 Z    |j                   dk(  rd|j                  j                  _        y y )NpyodbcF)driverdialectdbapipooling)urlenginefollower_idents      c/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/sqlalchemy/dialects/mssql/provision.pyr   r      s%    }} ',$ !    c                 *   | j                         }| j                  |d|      }|dvr|j                  d      }|dk(  r|j                  ddi      }|r|j                  |      }	 |j	                          |S # t
        j                  $ r Y y 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ggGV!<g=G**++B+'++->,FG--i8     s   *A< <BBc                 R   |j                         j                  d      5 }|j                  d|z         |j                  d|z         |j                  d|z         |j                  d|z         |j                  d       |j                  d       d d d        y # 1 sw Y   y xY w)	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$1E9:?%G	
 	>F	
 	X-.89:; 
G	F	Fs   A3BB&c                     |j                         j                  d      5 }t        ||       d d d        y # 1 sw Y   y xY w)Nr5   r6   )r8   r9   _mssql_drop_ignorer;   s       r!   _mssql_drop_dbrC   J   s2    		(	(	(	F$4' 
G	F	Fs	   7A c                     	 | j                  d|z         t        j                  d|       y# t        j                  $ r }t        j
                  d|       Y d }~y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   sV     	/%78%( *C0s   *- A  AA c                 4   t        j                  d|        t        |       }|j                         j	                  d      5 }t        j                  ddj                  |             |j                  d      }|D ch c]  \  }|j                          }}t               }|D ]  }||v s|j                  |        dx}	}
t        |d      D ]  \  }
}t        ||      s|	dz  }	 t        j                  d	|	|
       d d d        y c c}w # 1 sw Y   y xY w)
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)r      z-Dropped %d out of %d stale databases detected)r   rE   r   r8   r9   joinr:   lowerr,   add	enumeraterB   )r   identsr=   r?   to_reapdbname	all_namesto_dropnamedroppedtotals              r!   _reap_mssql_dbsrW   a   s   HH)3/

C		(	(	(	F$*DIIf,=>&&/
 6==W	V\\^W	=%Dv~D!  %&w2ME6!$/1 3 	;We	
' 
G	F > 
G	Fs*   ;D=D	D,5D"D	DDc                     i S )N )r<   r=   s     r!   _mssql_temp_table_keyword_argsrZ   }   s    Ir"   c                     d|z   S )Nz##rY   )r<   r=   	base_names      r!   _mssql_get_temp_table_namer]      s    )r"   c                 B   |j                         j                  d      5 }t        |      }d d| j                  | j                  fD ]  }|j                  |      D ]  }t        |t               t        dt              t        dt              |      }t        |      j                  ||      D ]U  }|j                  t        t        |j                  j                  g|j                  j                   g|d                      W   	 d d d        y # 1 sw Y   y xY w)	Nr5   r6   dbo)schemaxyrT   )rT   )r8   r9   r   test_schematest_schema_2get_table_namesr   r   r   r   get_foreign_keysexecuter	   r
   cra   rb   )r<   r=   r?   	inspectorr`   tnametbfks           r!   r   r      s    		(	(	(	F$DM	UCOOS5F5FGF"22&2AJ3(3(! "$-88v8NBLL&0!#24466(F O B H 
G	F	Fs   C*DDc                 ,    |j                   d|_         |S )NrJ   )start)r<   sequences     r!   r   r      s    ~~Or"   N)
sqlalchemyr   r   r'   r   r   r`   r   r	   r
   r   r   testing.provisionr   r   r   r   r   r   r   r   r   r   for_dbr@   rC   rB   rW   rZ   r]   rY   r"   r!   <module>rs      sr        $ *   * C ( 4 4 $ 3 6 - 8 g&- '-
 G$ %, '< < ( (
" W
 
6  ( ) G$ % +#**73 4, 7# $r"   