
    ,h                     r   S SK r S SKrSSKJr  SSKJr  SSKJr  SSKJ	r	  SSKJ
r
  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  1 SkrS r\R(                  " S5      S 5       r\
R(                  " S5      S 5       r\R(                  " S5      S 5       r\R(                  " S5      S 5       r\	R(                  " S5      S 5       rS r\R(                  " S5      S 5       r\R(                  " S5      S 5       r\R(                  " S5      S 5       r\R(                  " S5      SSS.S j5       rg)    N   )exc)url)	create_db)drop_db)follower_url_from_main)generate_driver_url)log)post_configure_engine)run_reap_dbs) stop_test_class_outside_fixtures)temp_table_keyword_args)upsert>   pysqlite	aiosqlitepysqlcipherpysqlite_dollarpysqlite_numericc                 :   [         R                  " U 5      n Uc  U R                  5       nU R                  nUS:H  nSnU(       a  US:w  a  SU;  d   e[        R
                  " SU5      nU H2  nU[        ;   a  Uc  UnM  US;   a  M  Ub  M!  UR                  S5      nM4     U(       d   SU R                   35       eU SU 3nU(       a  USU 3-  nUS	-  nU(       a  US
-  nU R                  US9n U(       a  U R                  SS9n U R                  SU< 3S9n U $ )zMgiven a sqlite url + desired driver + ident, make a canonical
URL out of it

Nr   :memory:test_schemaz[_\.])dbenc_z#sqlite filename has no name token: .dbz.enc)databasetest)passwordzsqlite+)
drivername)	sa_urlmake_urlget_driver_namer   resplit_drivernamesstripset)	r   driveridentfilename	needs_enc
name_tokentokenstokennew_filenames	            \/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/provision.py_format_urlr1   $   s3   
 //#
C~$$&||H-'IJH
*H,,,(H-E$>"F-'#"[[-
  O@OOz$Qvh/awK'LF"Lgg|g,ggvg&
''F4'
5CJ    sqlitec                 t    [        XS 5      n  U R                  5         U $ ! [        R                   a     g f = fN)r1   get_dialectr   NoSuchModuleError)r   r(   	query_strs      r0   r	   r	   S   s>    
c4
(C 
    s     77c                     [        U S U5      $ r5   )r1   )r   r)   s     r0   _sqlite_follower_url_from_mainr:   _   s    sD%((r2   c                    ^ SSK Jn  U(       a  U SUR                   S3mOUR                   S3mUR                  US5      U4S j5       nUR                  US5      U4S j5       ng )	Nr   )eventr   z_test_schema.dbconnectc                 0   > U R                  ST S35        g )NzATTACH DATABASE "z" AS test_schema)execute)dbapi_connectionconnection_recordattach_paths     r0   r=   ._sqlite_post_configure_engine.<locals>.connectm   s      	  },<=	
r2   engine_disposedc                 :  > [         R                  R                  T5      (       a  [         R                  " T5        U R                  R
                  nU(       aC  US:w  a<  [         R                  R                  U5      (       a  [         R                  " U5        gggg)zmost databases should be dropped using
stop_test_class_outside_fixtures

however a few tests like AttachedDBTest might not get triggered on
that main hook

r   N)ospathexistsremover   r   )enginer*   rB   s     r0   dispose._sqlite_post_configure_engine.<locals>.dispose{   sf     77>>+&&IIk"::&&J.277>>(3K3KIIh 4L.8r2   )
sqlalchemyr<   r(   listens_for)r   rJ   follower_identr<   r=   rK   rB   s         @r0   _sqlite_post_configure_enginerP   d   sq     '(&--H7
vy)
 *
 v01  2 r2   c                     g r5    cfgengr)   s      r0   _sqlite_create_dbrV      s    r2   c                 Z    [        UR                  R                  UR                  U5        g r5   )_drop_dbs_w_identr   r   r(   rS   s      r0   _sqlite_drop_dbrY      s    cgg&&

E:r2   c                     [         R                  " S5       H`  n[         R                  R                  U5      u  pEX$;   d  M+  US;   d  M3  [        R
                  " SU5        [         R                  " U5        Mb     g )N.)r   z.db.encz!deleting SQLite database file: %s)rF   listdirrG   r$   r
   inforI   )databasenamer(   r)   rG   fnameexts         r0   rX   rX      sO    

3WW]]4(
>c%77HH8$?IIdO	  r2   c                 $    UR                  5         g r5   )rK   )configr   clss      r0   r   r      s    JJLr2   c                     SS/0$ )Nprefixes	TEMPORARYrR   )rT   rU   s     r0   _sqlite_temp_table_keyword_argsrg      s    &&r2   c                    [         R                  " SU 5        [         R                  " SSR                  U5      5        [        R                  " U 5      n U H&  n[
         H  n[        U R                  X25        M     M(     g )Nzdb reaper connecting to %rzidentifiers in file: %sz, )r
   r]   joinr    r!   r%   rX   r   )r   identsr)   r   s       r0   _reap_sqlite_dbsrk      sY    HH)3/HH&		&(9:
//#
C&JcllJ> ' r2   F)
set_lambdasort_by_parameter_orderc                    SSK Jn  U" U5      nU(       a   UR                  U" UR                  5      S9nOUR	                  5       nUR
                  " USU06nU$ )Nr   )insert)set_rm   )sqlalchemy.dialects.sqlitero   on_conflict_do_updateexcludedon_conflict_do_nothing	returning)rT   tableru   rl   rm   ro   stmts          r0   _upsertrx      s]     2%=D))z$--/H)I**,>>	,CD Kr2   )rF   r#    r   rJ   r   r    testing.provisionr   r   r   r	   r
   r   r   r   r   r   r%   r1   for_dbr:   rP   rV   rY   rX   rg   rk   rx   rR   r2   r0   <module>r|      s\   
 	  # * ( 7 4 $ 6 - A 8 ',^ H% & x() )) h'&  (& R (	 	 	; ; "((2 3 )' *' X? ? x)-u r2   