Ë
    ðmxi+  ã                   óì  — d dl 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 ddlmZ ddlmZ ddlmZ  ej6                  d«      d„ «       Z e
j6                  d«      d„ «       Z e	j6                  d«      d„ «       Zd„ Z ej6                  d«      d„ «       Z  ej6                  d«      d„ «       Z! ej6                  d«      d„ «       Z" ej6                  d«      d „ «       Z#d+d!„Z$ ej6                  d«      d"„ «       Z%d#„ Z& ej6                  d«      d$„ «       Z' ej6                  d«      d%„ «       Z( ej6                  d«      d&„ «       Z) ej6                  d«      d'„ «       Z* ej6                  d«      d(„ «       Z+ ej6                  d«      d)„ «       Z, ej6                  d«      d*„ «       Z-y),é    Né   )Ú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)Úgenerate_driver_url)Úis_preferred_driver)Úlog)Úpost_configure_engine)Úpost_configure_testing_engine)Úrun_reap_dbs)Ú set_default_schema_on_connection)Ú stop_test_class_outside_fixtures)Útemp_table_keyword_args)Úupdate_db_opts)Úwarn_test_suiteÚoraclec                 óþ   — | j                  «       }| j                  |›d|›�¬«      }|dv r|j                  ddg«      }n|j                  ddg«      }	 |j	                  «        |S # t
        j                  $ r Y y w xY w)Nú+)Ú
drivername)ÚoracledbÚoracledb_async)Úretry_countÚ5)Úretry_delayÚ2r   r!   )Úget_backend_nameÚsetÚupdate_query_pairsÚdifference_update_queryÚget_dialectr   ÚNoSuchModuleError)r   ÚdriverÚ	query_strÚbackendÚnew_urls        ú[/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/dialects/oracle/provision.pyÚ_oracle_generate_driver_urlr.   "   sŸ   € ð ×"Ñ"Ó$€Gà�g‰gÚ%¡vÐ.ð ó €Gð Ð/Ñ/ð ×,Ñ,Ø!Ð#7Ð8ó
‰ð ×1Ñ1Ø˜MÐ*ó
ˆðØ×ÑÔð ˆøô × Ñ ò Ùðús   ÁA& Á&A<Á;A<c                 óÞ  — |j                  «       5 }|j                  d|z  «       |j                  d|z  «       |j                  d|z  «       |j                  d|›�«       |j                  d|z  «       |j                  d|z  «       |j                  d|z  «       |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_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       r-   Ú_oracle_create_dbr7   C   sí   € ð
 
�‰‹ð E˜Ø×ÑÐ>ÀÑFÔGØ×ÑÐBÀUÑJÔKØ×ÑÐBÀUÑJÔKØ×Ò±%Ð9Ô:Ø×ÑÐ?À%ÑGÔHØ×ÑÐCÀeÑKÔLØ×ÑÐCÀeÑKÔLà×ÑÐ7¸%Ñ?Ô@Ø×ÑÐ;¸eÑCÔDØ×ÑÐ;¸eÑCÔD÷E÷ Eñ Eús   ‘C	C#Ã#C,c                 ó,   — d|z  | _         d|z  | _        y ©Nú%s_ts1ú%s_ts2)Útest_schemaÚtest_schema_2)Úconfigr5   s     r-   Ú_oracle_configure_followerr?   V   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)r1   r   Úinfor   ÚDatabaseErrorÚwarning)r6   ÚdbnameÚerrs      r-   Ú_ora_drop_ignorerG   \   sT   € ðØ×ÑÐ3°fÑ<Ô=Ü�‰� &Ô)ØøÜ×Ñò Ü�‰Ð*¨CÔ0Üûðús   ‚*- ­A Á AÁA c                 óF   — t        |«       t        || j                  «       y ©N)Ú_purge_recyclebinr<   ©r3   r4   s     r-   Ú'_ora_drop_all_schema_objects_pre_tablesrL   f   s   € ä�cÔÜ�c˜3Ÿ?™?Õ+r@   c           	      óÊ  — |j                  «       5 }|j                  j                  |d d d «      D ]  }|j                  d|d   › �«       Œ |j                  j                  || j                  d d «      D ]&  }|j                  d| j                  › d|d   › �«       Œ( t        |«      j                  «       D ]  }|j                  d|› �«       Œ 	 d d d «       y # 1 sw Y   y xY w)Nzdrop synonym Úsynonym_nameú.zdrop table )r0   ÚdialectÚ_get_synonymsr1   r<   r   Úget_temp_table_names)r3   r4   r6   ÚsynÚ	tmp_tables        r-   Ú(_ora_drop_all_schema_objects_post_tablesrU   l   sî   € à	�‰‹ð <˜Ø—<‘<×-Ñ-¨d°D¸$ÀÓEò 	HˆCØ× Ñ  =°°^Ñ1DÐ0EÐ!FÕGð	Hð —<‘<×-Ñ-Ø�#—/‘/ 4¨ó
ò 	ˆCð × Ñ Ø §¡Ð0°°#°nÑ2EÐ1FÐGõð	ô ! ›×;Ñ;Ó=ò 	<ˆIØ× Ñ  ;¨y¨kÐ!:Õ;ñ	<÷<÷ <ñ <ús   ‘B>CÃC"c                 ó¢   — |j                  «       5 }t        ||«       t        |d|z  «       t        |d|z  «       d d d «       y # 1 sw Y   y xY wr9   )r0   rG   r2   s       r-   Ú_oracle_drop_dbrW   }   sL   € à	�‰‹ð 1˜ô 	˜˜uÔ%Ü˜˜x¨%Ñ/Ô0Ü˜˜x¨%Ñ/Ô0÷1÷ 1ñ 1ús   ‘+AÁAc                 óˆ   — 	 t        |«       y # t        j                  $ r }t        j                  d|«       Y d }~y d }~ww xY w)Nz#purge recyclebin command failed: %s)rJ   r   rC   r   rD   )r>   ÚdbÚclsrF   s       r-   Ú%_ora_stop_test_class_outside_fixturesr[   Š   s:   € ð@Ü˜"ÕøÜ×Ñò @Ü�‰Ð9¸3×?Ñ?ûð@ús   ‚ ŽA¡<¼Ac                 ó4  — | j                  «       5 }|€|j                  d«       n_|j                  dd|j                  j                  |«      i«      j	                  «       D ]!  \  }}}|j                  d|› d|› d|› d�«       Œ# d d d «       y # 1 sw Y   y xY w)Nzpurge recyclebinzWselect owner, object_name,type from dba_recyclebin where owner=:schema and type='TABLE'Úschemazpurge ú z."ú")r0   r1   rP   Údenormalize_nameÚall)r4   r]   r6   ÚownerÚobject_nameÚtype_s         r-   rJ   rJ   ’   s¬   € Ø	�‰‹ð O˜Øˆ>ð × Ñ Ð!3Õ4ð .2×-AÑ-AðFà˜4Ÿ<™<×8Ñ8¸Ó@ÐAó.÷ ‰c‹eò	OÑ)��{ Eð
 ×$Ñ$ v¨e¨W°A°e°W¸B¸{¸mÈ1Ð%MÕNðO÷O÷ Oñ Oús   ‘A4BÂBc                 óf   — |j                   j                  dk(  xr |j                   j                   S )ztestablish oracledb as the preferred driver to use for tests, even
    though cx_Oracle is still the "default" driverr   )rP   r)   Úis_async)r3   Úengines     r-   Ú_oracle_is_preferred_driverrh   ¢   s+   € ð
 �>‰>× Ñ  JÑ.ÒN°v·~±~×7NÑ7NÐ3NÐNr@   c                 óv  — | j                   dk(  sJ ‚d„ }d }t        d«      D ]   }	  | j                  j                  |i |¤Žc S  |�t        d«      |‚y # | j                  j                  | j                  j
                  f$ r5}|} ||«      r%t        d«       t        j                  d«       Y d }~Œ�‚ d }~ww xY w)NÚ	cx_oraclec                 ó:   — dt        | «      v xs dt        | «      v S )NzDPY-6005z	ORA-12516)Ústr)rF   s    r-   Ú_is_couldnt_connectz0_connect_with_retry.<locals>._is_couldnt_connect­   s   € ØœS ›XÐ%Ò@¨¼¸C»Ð)@Ð@r@   é   zOracle database reconnecting...é   z"connect failed after five attempts)
r)   ÚrangeÚloaded_dbapiÚconnectrC   ÚOperationalErrorr   ÚtimeÚsleepÚ	Exception)rP   Úconn_recÚcargsÚcparamsrm   Úerr_Ú_rF   s           r-   Ú_connect_with_retryr|   ª   sÍ   € Ø�>‰>˜[Ò(Ð(Ð(òAð €DÜ�1‹Xò ˆð	Ø/�7×'Ñ'×/Ñ/°ÐB¸'ÑBÒBðð ÐÜÐ<Ó=À4ÐGð øð × Ñ ×.Ñ.Ø× Ñ ×1Ñ1ð
ò 
	ð ˆDÙ" 3Ô'ÜÐ AÔBÜ—
‘
˜1”Üàûð
	ús   ¦AÁ/B8Â*B3Â2B3Â3B8c                 ór   — ddl m} |j                  j                  dk(  r|j	                  |dt
        «       y y )Nr   ©Úeventrj   Ú
do_connect)Ú r   rP   r)   Úlistenr|   )r   rg   ÚoptionsÚscoper   s        r-   Ú%_oracle_post_configure_testing_enginer…   Ã   s-   € åà‡~�~×Ñ Ò+Ø�‰�V˜\Ô+>Õ?ð ,r@   c                 ó@   — ddl m} |j                  |d«      d„ «       }y )Nr   r~   Úcheckinc                 óH   — 	 | j                   }d| _         || _         y #  Y y xY w)Nr   )Ústmtcachesize)Údbapi_connectionÚconnection_recordÚscs      r-   r‡   z._oracle_post_configure_engine.<locals>.checkinÐ   s0   € ð 	0Ø!×/Ñ/ˆBð
 ./ÐÔ*Ø-/ÐÕ*øð	áús   ‚ �!)r�   r   Úlistens_for)r   rg   Úfollower_identr   r‡   s        r-   Ú_oracle_post_configure_enginer�   Ë   s&   € õ à
×Ñ�v˜yÓ)ñ0ó *ñ0r@   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, z‰select 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   rB   r   r0   Újoinr1   Úlowerr$   ÚendswithÚaddÚ	enumeraterG   )r   Úidentsr4   r6   Úto_reapÚusernameÚ	all_namesÚto_dropÚnameÚdroppedÚtotals              r-   Ú_reap_oracle_dbsr¡   ê   s[  € ä‡H�HÐ)¨3Ô/Ü
˜Ó
€CØ	�‰‹ð 
˜Ü�‰Ð*¨D¯I©I°fÓ,=Ô>à×&Ñ&ð8ó
ˆð
 :AÖA©+¨8�X—^‘^Õ%ÐAˆ	ÐAÜ“%ˆØò 	1ˆDØ�}‰}˜VÔ$¨¯©°fÔ(=ØØ˜’Ø—‘˜DÔ!Ø˜d‘? iÑ/Ø—K‘K ¨4¡Ô0Ø˜d‘? iÒ/Ø—K‘K ¨4¡Õ0ð	1ð Ðˆ�%Ü(¨°!Ó4ò 	‰OˆE�8Ü  hÕ/Ø˜1‘‘ð	ô 	�‰Ø;¸WÀeô	
÷1
ð 
ùò B÷
ð 
ús/   ²;EÁ-EÂ8EÂ?3EÃ38EÄ,EÅEÅE!c                 óR   — t        j                  | «      } | j                  |d¬«      S )NÚxe)r›   Úpassword)Úsa_urlÚmake_urlr$   )r   r5   s     r-   Ú_oracle_follower_url_from_mainr§     s#   € ä
�/‰/˜#Ó
€CØ�7‰7˜E¨Dˆ7Ó1Ð1r@   c                 ó   — dgddœS )NzGLOBAL TEMPORARYzPRESERVE ROWS)ÚprefixesÚoracle_on_commit© rK   s     r-   Ú_oracle_temp_table_keyword_argsr¬     s   € ð (Ð(Ø+ñð r@   c                 ól   — |j                  «       }|j                  d|z  «       |j                  «        y )Nz#ALTER SESSION SET CURRENT_SCHEMA=%s)ÚcursorÚexecuteÚclose)r3   rŠ   Úschema_namer®   s       r-   Ú(_oracle_set_default_schema_on_connectionr²     s-   € ð ×$Ñ$Ó&€FØ
‡N�NÐ8¸;ÑFÔGØ
‡L�L…Nr@   c                 óv   — |j                   r-t        j                  | «      j                  «       dk(  rd|d<   yyy)zCSet database options (db_opts) for a test database that we created.r   TÚ
thick_modeN)Úoracledb_thick_moder¥   r¦   Úget_driver_name)Údb_urlÚdb_optsrƒ   s      r-   Ú_update_db_optsr¹   "  s<   € ð 	×#Ò#Ü�O‰O˜FÓ#×3Ñ3Ó5¸ÒCà $ˆ�Òð Dð 	$r@   rI   ).rt   r�   r   r   r   rg   r   r¥   Útesting.provisionr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Útesting.warningsr   Úfor_dbr.   r7   r?   rG   rL   rU   rW   r[   rJ   rh   r|   r…   r�   r¡   r§   r¬   r²   r¹   r«   r@   r-   ú<module>r½      s\  ðó å Ý Ý Ý #Ý 3Ý *Ý DÝ CÝ (Ý 7Ý 4Ý 4Ý $Ý 6Ý >Ý -Ý AÝ AÝ 8Ý /Ý /ð Ð×Ñ˜HÓ%ñó &ðð@ €×Ñ�(ÓñEó ðEð$ Ð×Ñ˜8Ó$ñ,ó %ð,ò
ð +Ð#×*Ñ*¨8Ó4ñ,ó 5ð,ð
 ,Ð$×+Ñ+¨HÓ5ñ<ó 6ð<ð  €‡��Óñ	1ó ð	1ð )Ð!×(Ñ(¨Ó2ñ@ó 3ð@óOð  Ð×Ñ˜HÓ%ñOó &ðOòHð2 &Ð×%Ñ% hÓ/ñ@ó 0ð@ð Ð×Ñ˜hÓ'ñ0ó (ð0ð< €×Ñ�XÓñ
ó ð
ð@ Ð×Ñ˜xÓ(ñ2ó )ð2ð
  Ð×Ñ Ó)ñó *ðð )Ð!×(Ñ(¨Ó2ñó 3ðð €×Ñ�xÓ ñ%ó !ñ%r@   