1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
U
¸ý°d.ã@sfddlZddlmZddlmZddlmZddlmZddlmZddlm    Z    dd    lm
Z
dd
lm Z dd lm Z dd lm Z dd lmZddlmZddlmZddlmZe d¡dd„ƒZe  d¡dd„ƒZe d¡dd„ƒZe d¡dd„ƒZe
 d¡dd„ƒZ
e     d¡dd„ƒZ    e d¡dd„ƒZe d¡dd d!œd"d#„ƒZd$d%gZe  d¡d&d'„ƒZdS)(é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 CsÄ|jj}|jdd ¡¢}|s,| d¡ ¡}d}z| d||f¡Wq¶tjk
r¤}z>|d7}|dkrl‚dt|ƒkr”t     
d    ||j |¡t   d
¡W5d}~XYq0‚Yq0Xq¶q0W5QRXdS) NÚ
AUTOCOMMIT©Zisolation_levelzselect current_database()rzCREATE DATABASE %s TEMPLATE %sérzaccessed by other userszFWaiting to create %s, URI %r, template DB %s is in use sleeping for .5gà?)ÚoptionsZpostgresql_templatedbÚexecution_optionsÚbeginÚexec_driver_sqlZscalarrZOperationalErrorÚstrr ÚinfoÚurlÚtimeÚsleep)ÚcfgÚengÚidentZ template_dbÚconnÚattemptÚerr©r$ú_d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/dialects/postgresql/provision.pyÚ _pg_create_dbs4ÿ
ÿ ûr&c
CsX| ¡jdd>}| ¡*| tdƒt|d¡| d|¡W5QRXW5QRXdS)Nrrz€select pg_terminate_backend(pid) from pg_stat_activity where usename=current_user and pid != pg_backend_pid() and datname=:dname)ZdnamezDROP DATABASE %s)ÚconnectrrÚexecuterÚdictr)rrr r!r$r$r%Ú _pg_drop_db8s
ÿúr*cCs
ddgiS)NÚprefixesÚ    TEMPORARYr$)rrr$r$r%Ú#_postgresql_temp_table_keyword_argsGsr-cCs4|j}d|_| ¡}| d|¡| ¡||_dS)NTzSET SESSION search_path='%s')Z
autocommitÚcursorr(Úclose)rZdbapi_connectionZ schema_nameZexisting_autocommitr.r$r$r%Ú,_postgresql_set_default_schema_on_connectionLs r0c    CsB| ¡jdd(}| d¡ ¡D]}| d|¡q W5QRXdS)Nrrz!select gid from pg_prepared_xactszROLLBACK PREPARED '%s')r'rrZscalarsr()rrr!Úxidr$r$r%r    Xs
ÿ r    c
Cs^ddlm}t|ƒ}| ¡8}| d¡D]&}| | |j|d|dd¡¡q(W5QRXdS)Nr)rÚ*ÚnameÚschema)r3r4)Zsqlalchemy.dialectsrrrZ    get_enumsr(Z DropEnumTypeZENUM)rrrZ    inspectorr!Úenumr$r$r%ras 
ÿÿrcCs6| d¡}| ¡}|r2tdd dd„|Dƒ¡ƒdS)z;Ensure there are no locks on the current username/database.zµselect 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; css|]}|jdVqdS)ÚqueryN)Ú_mapping)Ú.0Úrowr$r$r%Ú    <genexpr>€sz*prepare_for_drop_tables.<locals>.<genexpr>N)rÚallrÚjoin)ÚconfigÚ
connectionÚresultÚrowsr$r$r%r osÿþÿr F)Ú
set_lambdaÚsort_by_parameter_ordercCsVddlm}||ƒ}t|ƒj}|r:|j|j||jƒd}n| ¡}|j|d|iŽ}|S)Nr)Úinsert)Zindex_elementsÚset_rB)    Zsqlalchemy.dialects.postgresqlrCrZ
selectableZon_conflict_do_updateZ primary_keyZexcludedZon_conflict_do_nothingÚ    returning)rÚtablerErArBrCZstmtZtable_pkr$r$r%Ú_upsert„s 
ÿÿÿrG)Zcitext©é )ZhstorerHc    CsN| ¡<}tD]0\}}|jj|kr| td|›ƒ¡| ¡qW5QRXdS)NzCREATE EXTENSION IF NOT EXISTS )r'Ú _extensionsÚdialectZserver_version_infor(rÚcommit)rZengineZfollower_identr!Ú    extensionÚ min_versionr$r$r%Ú_create_citext_extension¡s
   ÿrO)rÚrrrZtestingrZtesting.provisionrrr    r
r r r rrrZfor_dbr&r*r-r0rGrJrOr$r$r$r%Ú<module>sJ              
"
 
 
 
 
 
ÿþ