o
    ô<âg.  ã                   @   sL   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ G dd„ deƒZ	dS )é    N)ÚImproperlyConfigured)ÚBaseDatabaseCreation)Úerrors)Ústrip_quotesc                       sV   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd‡ fdd„	Zddd„Z‡ fdd„Z	‡  Z
S )ÚDatabaseCreationc                 C   s   | j j |¡S ©N)Ú
connectionÚopsÚ
quote_name)ÚselfÚname© r   úY/var/www/html/venv/lib/python3.10/site-packages/django/db/backends/postgresql/creation.pyÚ_quote_name
   s   zDatabaseCreation._quote_nameNc                 C   s:   d}|r|d  |¡7 }|r|d  |  |¡¡7 }|od| S )NÚ z ENCODING '{}'z TEMPLATE {}ÚWITH)Úformatr   )r   ÚencodingÚtemplateÚsuffixr   r   r   Ú_get_database_create_suffix   s   z,DatabaseCreation._get_database_create_suffixc                 C   s:   | j jd }| d¡d urtdƒ‚| j|d | d¡dS )NÚTESTÚ	COLLATIONzHPostgreSQL does not support collation setting at database creation time.ÚCHARSETÚTEMPLATE)r   r   )r   Úsettings_dictÚgetr   r   )r   Útest_settingsr   r   r   Úsql_table_creation_suffix   s   ÿþz*DatabaseCreation.sql_table_creation_suffixc                 C   s   |  dt|ƒg¡ | ¡ d uS )Nz7SELECT 1 FROM pg_catalog.pg_database WHERE datname = %s)Úexecuter   Úfetchone)r   ÚcursorÚdatabase_namer   r   r   Ú_database_exists!   s
   þz!DatabaseCreation._database_existsFc              
      s”   z|r|   ||d ¡rW d S tƒ  |||¡ W d S  tyI } z%t|jtjƒs4|  d| ¡ t	 
d¡ n
|s7‚ W Y d }~d S W Y d }~d S d }~ww )NÚdbnamez+Got an error creating the test database: %sé   )r#   ÚsuperÚ_execute_create_test_dbÚ	ExceptionÚ
isinstanceÚ	__cause__r   ÚDuplicateDatabaseÚlogÚsysÚexit)r   r!   Ú
parametersÚkeepdbÚe©Ú	__class__r   r   r'   (   s   ýÿ€üz(DatabaseCreation._execute_create_test_dbc           	      C   s(  | j  ¡  | j  ¡  | j jd }|  |¡d }|  |¡| j|ddœ}|  ¡ c}z	|  |||¡ W nH t	yy   z |dkrI|  
d|  ||¡f ¡ | d| ¡ |  |||¡ W n t	yv } z|  
d| ¡ t d¡ W Y d }~nd }~ww Y n	w W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )	NÚNAME)r   )r$   r   é   z,Destroying old test database for alias %s...zDROP DATABASE %(dbname)sz*Got an error cloning the test database: %sr%   )r   ÚcloseÚ
close_poolr   Úget_test_db_clone_settingsr   r   Ú_nodb_cursorr'   r(   r,   Ú_get_database_display_strr   r-   r.   )	r   r   Ú	verbosityr0   Úsource_database_nameÚtarget_database_nameÚtest_db_paramsr!   r1   r   r   r   Ú_clone_test_db9   sD   


þ
ÿÿÿÿ€þ€óÿþ€" zDatabaseCreation._clone_test_dbc                    s   | j  ¡  tƒ  ||¡S r   )r   r7   r&   Ú_destroy_test_db)r   Útest_database_namer;   r2   r   r   r@   Y   s   
z!DatabaseCreation._destroy_test_db)NN)F)Ú__name__Ú
__module__Ú__qualname__r   r   r   r#   r'   r?   r@   Ú__classcell__r   r   r2   r   r   	   s    

 r   )
r-   Údjango.core.exceptionsr   Ú django.db.backends.base.creationr   Ú)django.db.backends.postgresql.psycopg_anyr   Údjango.db.backends.utilsr   r   r   r   r   r   Ú<module>   s    