
    ,h                     v   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  SSKJr  SSKJ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
\	R$                  " S5      S 5       r	\R$                  " S5      S 5       r\R$                  " S5      SSS.S j5       rSS/r\R$                  " S5      S 5       rg)    N   )exc)inspect)text)warn_test_suite)	create_db)#drop_all_schema_objects_post_tables)"drop_all_schema_objects_pre_tables)drop_db)log)post_configure_engine)prepare_for_drop_tables) set_default_schema_on_connection)temp_table_keyword_args)upsert
postgresqlc                    U R                   R                  nUR                  SS9R                  5        nU(       d  UR	                  S5      R                  5       nSn  UR	                  SU< SU< 35         S S S 5        g ! [        R                   a^  nUS-  nUS:  a  e S	[        U5      ;   a9  [        R                  " S
UUR                  U5        [        R                  " S5         S nAO	S nAf  e = fM  ! , (       d  f       g = f)N
AUTOCOMMITisolation_levelzselect current_database()r   zCREATE DATABASE z
 TEMPLATE    r   zaccessed by other userszFWaiting to create %s, URI %r, template DB %s is in use sleeping for .5g      ?)optionspostgresql_templatedbexecution_optionsbeginexec_driver_sqlscalarr   OperationalErrorstrr   infourltimesleep)cfgengidenttemplate_dbconnattempterrs          `/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/provision.py_pg_create_dbr,      s    ++33K			|		<	B	B	D..+fh  $$8={K& 9 
E	D '' $1a<,C8HHC# JJsO'  
E	Ds6   *C:B8C:C5AC/*C:/C55C::
Dc           	      2   UR                  5       R                  SS9 nUR                  5          UR                  [	        S5      [        US95        UR                  SU-  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r   zselect pg_terminate_backend(pid) from pg_stat_activity where usename=current_user and pid != pg_backend_pid() and datname=:dname)dnamezDROP DATABASE %s)connectr   r   executer   dictr   )r$   r%   r&   r(   s       r+   _pg_drop_dbr2   >   s{    		(	(	(	F$ZZ\LL)
 5!   !3e!;<  
G	F\ 
G	Fs"   B7A7&B7
B	B
Bc                     SS/0$ )Nprefixes	TEMPORARY )r$   r%   s     r+   #_postgresql_temp_table_keyword_argsr7   M   s    &&    c                     UR                   nSUl         UR                  5       nUR                  SU-  5        UR                  5         X1l         g )NTzSET SESSION search_path='%s')
autocommitcursorr0   close)r$   dbapi_connectionschema_nameexisting_autocommitr;   s        r+   ,_postgresql_set_default_schema_on_connectionr@   R   sH     +55"&$$&F
NN1K?@
LLN"5r8   c                     UR                  5       R                  SS9 nUR                  S5      R                  5        H  nUR                  SU-  5        M     S S S 5        g ! , (       d  f       g = f)Nr   r   z!select gid from pg_prepared_xactszROLLBACK PREPARED '%s')r/   r   r   scalars)r$   r%   r(   xids       r+   r
   r
   ^   sb    		(	(	(	F$''/

')C   !9C!?@ 
G	F	Fs   ;A""
A0c                    SSK Jn  [        U5      nUR                  5        nUR	                  S5       H7  nUR                  UR                  UR                  US   US   S95      5        M9     S S S 5        g ! , (       d  f       g = f)Nr   )r   *nameschema)rF   rG   )sqlalchemy.dialectsr   r   r   	get_enumsr0   DropEnumTypeENUM)r$   r%   r   	inspectorr(   enums         r+   r	   r	   g   sj    .I	'',DLL''OOfd8nOM - 
s   AA88
Bc                     UR                  S5      nUR                  5       nU(       a%  [        SSR                  S U 5       5      -  5        gg)z;Ensure there are no locks on the current username/database.zselect pid, state, wait_event_type, query from pg_stat_activity where usename=current_user and datname=current_database() and state='idle in transaction' and pid != pg_backend_pid()zHPostgreSQL may not be able to DROP tables due to idle in transaction: %sz; c              3   >   #    U  H  oR                   S    v   M     g7f)queryN)_mapping).0rows     r+   	<genexpr>*prepare_for_drop_tables.<locals>.<genexpr>   s     ?$3g.$s   N)r   allr   join)config
connectionresultrowss       r+   r   r   u   sS     ''	&F ::<D&yy?$??A	
 r8   F)
set_lambdasort_by_parameter_orderc                    SSK Jn  U" U5      n[        U5      R                  nU(       a+  UR	                  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)index_elementsset_r]   )	sqlalchemy.dialects.postgresqlr_   r   
selectableon_conflict_do_updateprimary_keyexcludedon_conflict_do_nothing	returning)r$   tablerh   r\   r]   r_   stmttable_pks           r+   _upsertrl      s{     6%=Du~((H))#//j6O * 
 **,>>	,CD Kr8   )citext   )hstorern   c                    UR                  5        n[         HN  u  pEUR                  R                  U:  d  M!  UR	                  [        SU 35      5        UR                  5         MP     S S S 5        g ! , (       d  f       g = f)NzCREATE EXTENSION IF NOT EXISTS )r/   _extensionsdialectserver_version_infor0   r   commit)r!   enginefollower_identr(   	extensionmin_versions         r+   _create_citext_extensionrz      s`    		T&1"I||//;>:9+FG  '2 
		s   $A31A33
B)r"    r   r   r   testingr   testing.provisionr   r	   r
   r   r   r   r   r   r   r   for_dbr,   r2   r7   r@   rl   rr   rz   r6   r8   r+   <module>r      s^       & * D C ( $ 6 8 A 8 ' ,  D 	= = -' .' "((66 76 $**<8A 9A %++L9
 :
 -
 .
( |)-u .  l+ ,r8   