
    +h                     d   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       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)   )create_engine)exc)url)configure_follower)	create_db)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oraclec                 f   |j                         5 }|j                  d|z         |j                  d|z         |j                  d|z         |j                  d|       |j                  d|z         |j                  d|z         |j                  d|z         d d d        y # 1 sw Y   y xY w)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_ts2)beginexec_driver_sqlcfgengidentconns       W/var/www/html/venv/lib/python3.12/site-packages/sqlalchemy/dialects/oracle/provision.py_oracle_create_dbr      s    
 
 M>FGBUJKBUJK%9:?%GHCeKLCeKLM M Ms   BB''B0c                 ,    d|z  | _         d|z  | _        y N%s_ts1%s_ts2)test_schematest_schema_2)configr   s     r   _oracle_configure_followerr"      s    !E)F#e+F    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 user %s cascadezReaped db: %sTzcouldn't drop db: %sF)r   r
   infor   DatabaseErrorwarning)r   dbnameerrs      r   _ora_drop_ignorer*   %   sT    3f<=&) *C0s   *- A  AA c                     |j                         5 }t        ||       t        |d|z         t        |d|z         d d d        y # 1 sw Y   y xY wr   )r   r*   r   s       r   _oracle_drop_dbr,   /   sL    	 1 	u%x%/0x%/01 1 1s   +AAc                    	 |j                         5 }|j                  d       d d d        t        D ]  }	 |j                  }d|_        ||_         t        j                          y # 1 sw Y   DxY w# t        j                  $ r }t	        j
                  d|       Y d }~ud }~ww xY w# |j                  j                  j                  $ r Y w xY w)Nzpurge recyclebinz#purge recyclebin command failed: %s    )r   r   r   r&   r
   r'   
_all_connsstmtcachesizedialectdbapiInterfaceErrorclear)r!   dbclsr   r)   cx_oracle_connscs          r   r   r   <   s    @XXZ 	54   !34	5 % .	.--B
 ,-N(+-N(. '	5 	5  @93??@ zz.. 		s>   A3 A'A3 B)'A0,A3 3B&B!!B&)#CCc                 p    ddl m} |j                  |d      d        }|j                  |d      d        }y )Nr.   )eventcheckoutc                 .    t         j                  |        y )N)r/   add)	dbapi_con
con_record	con_proxys      r   r;   z/_oracle_post_configure_engine.<locals>.checkout]   s    y!r#   checkinc                 B    d|j                   v r|j                          y y )Ncx_oracle_xid)r%   
invalidate)dbapi_connectionconnection_records     r   rA   z._oracle_post_configure_engine.<locals>.checkina   s$    
 /444((* 5r#   )
sqlalchemyr:   listens_for)r   enginefollower_identr:   r;   rA   s         r   _oracle_post_configure_enginerK   Y   sE     
vz*" +" vy)+ *+r#   c                    t        j                  d|        t        |       }|j                         5 }t        j                  ddj	                  |             |j                  d      }|D ch c]  \  }|j                          }}t               }|D ]r  }|j                  d      s|j                  d      r&||v s+|j                  |       d|z  |v r|j                  d|z         d|z  |v s_|j                  d|z         t 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 %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)_ts1_ts2r   r   r.      z-Dropped %d out of %d stale databases detected)r
   r%   r   r   joinr   lowersetendswithr=   	enumerater*   )r   identsr   r   to_reapusername	all_namesto_dropnamedroppedtotals              r   _reap_oracle_dbsr]   j   s[   HH)3/

C	 
*DIIf,=>&&8

 :AA+8X^^%A	A% 	1D}}V$f(=D!d?i/KK40d?i/KK40	1 %(!4 	OE8h/1	 	;We	
3
 
 B
 
s/   ;E-E8E?3E38E,EEE!c                 R    t        j                  |       } | j                  |d      S )Nxe)rW   password)sa_urlmake_urlrR   )r   r   s     r   _oracle_follower_url_from_mainrc      s#    
//#
C77ED711r#   c                     dgddS )NzGLOBAL TEMPORARYzPRESERVE ROWS)prefixesoracle_on_commit )r   r   s     r   _oracle_temp_table_keyword_argsrh      s     ((+ r#   c                 l    |j                         }|j                  d|z         |j                          y )Nz#ALTER SESSION SET CURRENT_SCHEMA=%s)cursorexecuteclose)r   rE   schema_namerj   s       r   (_oracle_set_default_schema_on_connectionrn      s-     $$&F
NN8;FG
LLNr#   N) r   r   rI   r   ra   testing.provisionr   r   r   r	   r
   r   r   r   r   r   for_dbr   r"   r*   r,   rR   r/   rK   r]   rc   rh   rn   rg   r#   r   <module>rr      sj     # 3 * ( 7 $ 6 - A A 8 (M M 8$, %,
 	1 	1 )!((2 32 U
 h'+ (+  X
 
B x(2 )2
  ) * )!((2 3r#   