U ÂÏ a¿ã@sddlZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z dd lm Z dd lmZddlmZe d¡dd„ƒZe  d¡dd„ƒZe d¡dd„ƒZe d¡dd„ƒZe  d¡dd„ƒZ e  d¡dd„ƒZ e  d¡dd„ƒZ dS)é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 Csê|jj}|jdd ¡È}zt|||ƒWntk r>YnX|sR| d¡ ¡}d}z| d||f¡WqÜtj k rÊ}z>|d7}|dkr’‚dt |ƒkrºt   d ||j |¡t d ¡W5d}~XYqV‚YqVXqÜqVW5QRXdS) 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Ú _pg_drop_dbÚ ExceptionÚexec_driver_sqlZscalarrZOperationalErrorÚstrr ÚinfoÚurlÚtimeÚsleep)ÚcfgÚengÚidentZ template_dbÚconnÚattemptÚerr©r$úiC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\dialects\postgresql\provision.pyÚ _pg_create_dbs<ÿ ÿ û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%r8s ÿúrcCs 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 r/c CsB| ¡jdd(}| d¡ ¡D]}| d|¡q W5QRXdS)Nrrz!select gid from pg_prepared_xactszROLLBACK PREPARED '%s')r'rr(Zscalars)rrr!Úxidr$r$r%r Xsr c Cs^ddlm}t|ƒ}| ¡8}| d¡D]&}| | |j|d|dd¡¡q(W5QRXdS)Nr)rÚ*ÚnameÚschema)r2r3)Zsqlalchemy.dialectsrrrZ get_enumsr(Z DropEnumTypeZENUM)rrrZ inspectorr!Úenumr$r$r%r_s  ÿÿ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%Ú ~sz*prepare_for_drop_tables..N)rÚallrÚjoin)ÚconfigÚ connectionÚresultÚrowsr$r$r%r msÿþÿr )rÚrrrZtestingrZtesting.provisionrrr r r r r rZfor_dbr&rr,r/r$r$r$r%Ús4             &