
v^                 @   sV   d  d l  Z  d  d l m Z d  d l m Z d  d l m Z Gd d   d e  Z d S)    N)
errorcodes)BaseDatabaseCreation)strip_quotesc                   sj   e  Z d  Z d d   Z d d d d  Z d d   Z d d	   Z d
   f d d  Z d
 d d  Z   S)DatabaseCreationc             C   s   |  j  j j |  S)N)
connectionopsZ
quote_name)selfname r
   H/tmp/pip-build-8lau8j11/django/django/db/backends/postgresql/creation.py_quote_name   s    zDatabaseCreation._quote_nameNc             C   sO   d } | r | d j  |  7} | rA | d j  |  j |   7} | oN d | 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   sO   |  j  j d } | d d  k s, t d   |  j d | d d | j d   S)NZTESTZ	COLLATIONzHPostgreSQL does not support collation setting at database creation time.r   CHARSETr   TEMPLATE)r   settings_dictAssertionErrorr   get)r   Ztest_settingsr
   r
   r   sql_table_creation_suffix   s    		
z*DatabaseCreation.sql_table_creation_suffixc             C   s)   | j  d t |  g  | j   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# |  j  | | d  r# d  St   j | | |  Wnp t k
 r } zP t | j d d  t j k r |  j d |  t	 j
 d  n | s |  WYd  d  } ~ Xn Xd  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   Z
parameterskeepdbe)	__class__r
   r   r   $   s    z(DatabaseCreation._execute_create_test_dbc       	      C   s:  |  j  j   |  j  j d } |  j |  d } d |  j |  d |  j d |  i } |  j j    } y |  j | | |  Wn t	 k
 r.yT | d k r |  j
 d |  j | |  f  | j d |  |  j | | |  WnC t	 k
 r)} z# |  j
 d |  t j d	  WYd  d  } ~ Xn XYn XWd  QRXd  S)
NNAMEr   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_connectionr   r   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)	__name__
__module____qualname__r   r   r   r   r   r-   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   