B
    CVvg  ã               @   s@   d dl 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)Ú
errorcodes)ÚBaseDatabaseCreation)Ústrip_quotesc                   sJ   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‡  Z	S )ÚDatabaseCreationc             C   s   | j j |¡S )N)Ú
connectionÚopsZ
quote_name)ÚselfÚname© r
   úJ/tmp/pip-install-o3oxmrkh/Django/django/db/backends/postgresql/creation.pyÚ_quote_name   s    zDatabaseCreation._quote_nameNc             C   s:   d}|r|d  |¡7 }|r.|d  |  |¡¡7 }|o8d| S )NÚ z ENCODING '{}'z TEMPLATE {}ZWITH)Úformatr   )r   ÚencodingÚtemplateÚsuffixr
   r
   r   Ú_get_database_create_suffix   s    z,DatabaseCreation._get_database_create_suffixc             C   s8   | j jd }|d d ks tdƒ‚| j|d | d¡dS )NZTESTZ	COLLATIONzHPostgreSQL does not support collation setting at database creation time.ÚCHARSETÚTEMPLATE)r   r   )r   Úsettings_dictÚAssertionErrorr   Úget)r   Ztest_settingsr
   r
   r   Úsql_table_creation_suffix   s    z*DatabaseCreation.sql_table_creation_suffixc             C   s   |  dt|ƒg¡ | ¡ d k	S )Nz7SELECT 1 FROM pg_catalog.pg_database WHERE datname = %s)Úexecuter   Zfetchone)r   ÚcursorZdatabase_namer
   r
   r   Ú_database_exists    s    z!DatabaseCreation._database_existsFc          
      sˆ   y,|r|   ||d ¡rd S tƒ  |||¡ W nV tk
r‚ } z8t|jddƒtjkrl|  d| ¡ t	 
d¡ n|sr‚ W d d }~X Y nX d S )NÚdbnameZpgcoder   z+Got an error creating the test database: %sé   )r   ÚsuperÚ_execute_create_test_dbÚ	ExceptionÚgetattrÚ	__cause__r   ZDUPLICATE_DATABASEÚlogÚsysÚexit)r   r   Ú
parametersÚkeepdbÚe)Ú	__class__r
   r   r   $   s    z(DatabaseCreation._execute_create_test_dbc       	      C   sø   | j  ¡  | j jd }|  |¡d }|  |¡| j|ddœ}|  ¡ ª}y|  |||¡ W n tk
rè   y@|dkrŠ|  	d|  
||¡f ¡ | d| ¡ |  |||¡ W n: tk
râ } z|  	d| ¡ t d¡ W d d }~X Y nX Y nX W d Q R X 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   Úcloser   Zget_test_db_clone_settingsr   r   Z_nodb_cursorr   r    r#   Z_get_database_display_strr   r$   r%   )	r   r   Ú	verbosityr'   Zsource_database_nameZtarget_database_nameZtest_db_paramsr   r(   r
   r
   r   Ú_clone_test_db5   s$    

zDatabaseCreation._clone_test_db)NN)F)F)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r.   Ú__classcell__r
   r
   )r)   r   r   	   s   

r   )r$   Zpsycopg2r   Z django.db.backends.base.creationr   Zdjango.db.backends.utilsr   r   r
   r
   r
   r   Ú<module>   s   