
    [hy                      L   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d Z ej        d          d             Z e
j        d          d             Z ej        d          d             Z ej        d          d             Zd"dZ e            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$ ej        d          d!             Z%dS )#   )create_engine)exc)inspect)url)configure_follower)	create_db)#drop_all_schema_objects_post_tables)"drop_all_schema_objects_pre_tables)drop_db)follower_url_from_main)log)post_configure_engine)run_reap_dbs) set_default_schema_on_connection) stop_test_class_outside_fixtures)temp_table_keyword_args)update_db_optsoraclec                 @   |                                 5 }|                    d|z             |                    d|z             |                    d|z             |                    d|           |                    d|z             |                    d|z             |                    d|z             |                    d|z             |                    d	|z             |                    d
|z             d d d            d S # 1 swxY w Y   d S )Nzcreate user %s identified by xez#create user %s_ts1 identified by xez#create user %s_ts2 identified by xezgrant dba to z grant unlimited tablespace to %sz$grant unlimited tablespace to %s_ts1z$grant unlimited tablespace to %s_ts2zgrant create table to %szgrant create table to %s_ts1zgrant create table to %s_ts2)beginexec_driver_sqlcfgengidentconns       s/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/dialects/oracle/provision.py_oracle_create_dbr      s   
 
 E>FGGGBUJKKKBUJKKK%%9:::?%GHHHCeKLLLCeKLLL7%?@@@;eCDDD;eCDDDE E E E E E E E E E E E E E E E E Es   C1DDDc                 .    d|z  | _         d|z  | _        d S N%s_ts1%s_ts2)test_schematest_schema_2)configr   s     r   _oracle_configure_followerr&   /   s"    !E)F#e+F    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 user %s cascadezReaped db: %sTzcouldn't drop db: %sF)r   r   infor   DatabaseErrorwarning)r   dbnameerrs      r   _ora_drop_ignorer.   5   sz    3f<===&)))t   *C000uuuuus   -1 A  AA c                 N    t          |           t          || j                   d S N)_purge_recyclebinr#   r   r   s     r   '_ora_drop_all_schema_objects_pre_tablesr3   ?   s(    cc3?+++++r'   c           	         |                                 5 }|j                            |d d d           D ] }|                    d|d                     !|j                            || j        d d           D ](}|                    d| j         d|d                     )t          |                                          D ]}|                    d|            	 d d d            d S # 1 swxY w Y   d S )Nzdrop synonym synonym_name.zdrop table )r   dialect_get_synonymsr   r#   r   get_temp_table_names)r   r   r   syn	tmp_tables        r   (_ora_drop_all_schema_objects_post_tablesr<   E   sj   	 <<--dD$EE 	H 	HC  !F^1D!F!FGGGG<--#/4
 
 	 	C   GGG#n2EGG    !;;== 	< 	<I  !:y!:!:;;;;	<< < < < < < < < < < < < < < < < < <s   CC))C-0C-c                     |                                 5 }t          ||           t          |d|z             t          |d|z             d d d            d S # 1 swxY w Y   d S r    )r   r.   r   s       r   _oracle_drop_dbr>   V   s    	 1 	u%%%x%/000x%/0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   7AA Ac                 0   	 t          |           n1# t          j        $ r}t          j        d|           Y d }~nd }~ww xY wt
          D ]2}	 |j        }d|_        ||_        # |j        j        j	        $ r Y /w xY wt
          
                                 d S )Nz#purge recyclebin command failed: %s    )r1   r   r*   r   r+   
_all_connsstmtcachesizer7   dbapiInterfaceErrorclear)r%   dbclsr-   cx_oracle_connscs         r   %_ora_stop_test_class_outside_fixturesrJ   c   s    @" @ @ @93????????@ % . .	.-B
 ,-N(+-N(( z. 	 	 	D	 s$    A ;A A##A:9A:Nc                 `   |                                  5 }||                    d           nh|                    dd|j                            |          i                                          D ]%\  }}}|                    d| d| d| d           &d d d            d S # 1 swxY w Y   d S )Nzpurge recyclebinzWselect owner, object_name,type from dba_recyclebin where owner=:schema and type='TABLE'schemazpurge  z."")r   r   r7   denormalize_nameall)r   rL   r   ownerobject_nametype_s         r   r1   r1   y   s+   	 O>   !34444 .2-A-AF4<88@@A. . cee	O O){E
 $$%Me%M%Me%M%M{%M%M%MNNNNO O O O O O O O O O O O O O O O O Os   BB##B'*B'c                     ddl m} |                    |d          d             }|                    |d          d             }d S )Nr@   )eventcheckoutc                 :    t                               |            d S r0   )rA   add)	dbapi_con
con_record	con_proxys      r   rV   z/_oracle_post_configure_engine.<locals>.checkout   s    y!!!!!r'   checkinc                 D    d|j         v r|                                 d S d S )Ncx_oracle_xid)r)   
invalidate)dbapi_connectionconnection_records     r   r\   z._oracle_post_configure_engine.<locals>.checkin   s3    
 /444((***** 54r'   )
sqlalchemyrU   listens_for)r   enginefollower_identrU   rV   r\   s         r   _oracle_post_configure_enginerf      st          
vz**" " +*" vy))+ + *)+ + +r'   c                    t          j        d|            t          |           }|                                5 }t          j        dd                    |                     |                    d          }d |D             }t                      }|D ]}|                    d          s|                    d          r-||v rS|                    |           d|z  |v r|                    d|z             d	|z  |v r|                    d	|z             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 %rzidentifiers in file: %sz, zselect u.username from all_users u where username like 'TEST_%' and not exists (select username from v$session where username=u.username)c                 :    h | ]\  }|                                 S  )lower).0usernames     r   	<setcomp>z#_reap_oracle_dbs.<locals>.<setcomp>   s$    AAA+8X^^%%AAAr'   _ts1_ts2r!   r"   r@      z-Dropped %d out of %d stale databases detected)r   r)   r   r   joinr   setendswithrX   	enumerater.   )r   identsr   r   to_reap	all_namesto_dropnamedroppedtotalrl   s              r   _reap_oracle_dbsr|      s   H)3///


C	 
*DIIf,=,=>>>&&8
 

 BAAAA	%% 	1 	1D}}V$$ 1f(=(= 1D!!!d?i//KK4000d?i//KK4000%(!44 	 	OE8h// 1;We	
 	
 	
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   D$E**E.1E.c                 X    t          j        |           } |                     |d          S )Nxe)rl   password)sa_urlmake_urlrr   )r   r   s     r   _oracle_follower_url_from_mainr      s'    
/#

C77ED7111r'   c                     dgddS )NzGLOBAL TEMPORARYzPRESERVE ROWS)prefixesoracle_on_commitri   r2   s     r   _oracle_temp_table_keyword_argsr      s     ((+  r'   c                     |                                 }|                    d|z             |                                 d S )Nz#ALTER SESSION SET CURRENT_SCHEMA=%s)cursorexecuteclose)r   r`   schema_namer   s       r   (_oracle_set_default_schema_on_connectionr      s>     $$&&F
NN8;FGGG
LLNNNNNr'   c                 z    |j         r1t          j        |                                           dk    r	d|d<   dS dS dS )zCSet database options (db_opts) for a test database that we created.oracledbT
thick_modeN)oracledb_thick_moder   r   get_driver_name)db_urldb_optsoptionss      r   _update_db_optsr      sP     	#%OF##3355CC $	% %CCr'   r0   )& r   r   r   rd   r   r   testing.provisionr   r   r	   r
   r   r   r   r   r   r   r   r   r   for_dbr   r&   r.   r3   r<   r>   rJ   r1   rr   rA   rf   r|   r   r   r   r   ri   r'   r   <module>r      sn                     # # # # # # 3 3 3 3 3 3 * * * * * * D D D D D D C C C C C C ( ( ( ( ( ( 7 7 7 7 7 7 $ $ $ $ $ $ 6 6 6 6 6 6 - - - - - - A A A A A A A A A A A A 8 8 8 8 8 8 / / / / / / (E E E$ 8$$, , %$,
   +#*844, , 54,
 ,$+H55< < 65<  	1 	1 	1 )!(22  32*O O O O  SUU
 h''+ + ('+  X
 
 
@ x((2 2 )(2
  ))  *) )!(22  32 x  % % ! % % %r'   