
    +h                        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  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	 ej                   d      d        Zy)    N   )exc)inspect)text)warn_test_suite)	create_db)#drop_all_schema_objects_post_tables)"drop_all_schema_objects_pre_tables)drop_db)log)prepare_for_drop_tables) set_default_schema_on_connection)temp_table_keyword_args
postgresqlc                    | j                   j                  }|j                  d      j                         5 }|s|j	                  d      j                         }d}	 	 |j	                  d|d|       	 d d d        y # t        j                  $ rY}|dz  }|dk\  r d	t        |      v r7t        j                  d
||j                  |       t        j                  d       Y d }~n	d }~w  xY w# 1 sw Y   y xY w)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/html/venv/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/provision.py_pg_create_dbr*      s    ++33K			|		<	B	B	D ..+fh  $$8={K& ;  '' $1a<,C8HHC# JJsO'  s0   %C/A>>C+AC% C/%C++C//C8c                 *   |j                         j                  d      5 }|j                         5  |j                  t	        d      t        |             |j                  d|z         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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_dbr0   5   s    		(	(	(	F 
=$ZZ\ 		=LL)
 5!   !3e!;<		=
= 
=		= 		=
= 
=s"   B	:A=,B	=B	B		Bc                     ddgiS )Nprefixes	TEMPORARY )r"   r#   s     r)   #_postgresql_temp_table_keyword_argsr5   D   s    &&    c                     |j                   }d|_         |j                         }|j                  d|z         |j                          ||_         y )NTzSET SESSION search_path='%s')
autocommitcursorr.   close)r"   dbapi_connectionschema_nameexisting_autocommitr9   s        r)   ,_postgresql_set_default_schema_on_connectionr>   I   sK     +55"&$$&F
NN1K?@
LLN"5r6   c                     |j                         j                  d      5 }|j                  d      j                         D ]  }|j                  d|z          	 d d d        y # 1 sw Y   y xY w)Nr   r   z!select gid from pg_prepared_xactszROLLBACK PREPARED '%s')r-   r   r.   scalars)r"   r#   r&   xids       r)   r
   r
   U   sd    		(	(	(	F 9$<< CDLLN 	9CLL1C78	99 9 9s   9A$$A-c                    ddl m} t        |      }|j                         5 }|j	                  d      D ]9  }|j                  |j                  |j                  |d   |d                      ; 	 d d d        y # 1 sw Y   y xY w)Nr   )r   *nameschema)rD   rE   )sqlalchemy.dialectsr   r   r   	get_enumsr.   DropEnumTypeENUM)r"   r#   r   	inspectorr&   enums         r)   r	   r	   \   sz    .I	 '', 	DLL''OOfd8nOM	  s   AA::Bc                     |j                  d      }|j                         }|r%t        ddj                  d |D              z         yy)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   :   K   | ]  }|j                   d      yw)queryN)_mapping).0rows     r)   	<genexpr>z*prepare_for_drop_tables.<locals>.<genexpr>{   s     ?3g.?s   N)r   allr   join)config
connectionresultrowss       r)   r   r   j   sS     ''	&F ::<D&yy?$??A	
 r6   )r     r   r   r   testingr   testing.provisionr   r	   r
   r   r   r   r   r   for_dbr*   r0   r5   r>   r4   r6   r)   <module>r]      s       & * D C ( $ 8 A 8 ,    F = =  -' .' )!((66 76 +#**<89 99 ,$++L9
 :
  -
 .
r6   