3
[                 @   s(   d dl Z d dlmZ G dd deZdS )    N)BaseDatabaseSchemaEditorc                   sn   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
Zdd Z fddZdd Z fddZd fdd	Z  ZS )DatabaseSchemaEditorz@ALTER COLUMN %(column)s TYPE %(type)s USING %(column)s::%(type)szCREATE SEQUENCE %(sequence)sz,DROP SEQUENCE IF EXISTS %(sequence)s CASCADEz=SELECT setval('%(sequence)s', MAX(%(column)s)) FROM %(table)szBCREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s)%(extra)szMCREATE INDEX %(name)s ON %(table)s (%(columns)s varchar_pattern_ops)%(extra)szJCREATE INDEX %(name)s ON %(table)s (%(columns)s text_pattern_ops)%(extra)szDROP INDEX IF EXISTS %(name)szRSET CONSTRAINTS %(name)s IMMEDIATE; ALTER TABLE %(table)s DROP CONSTRAINT %(name)sz,DROP FUNCTION %(procedure)s(%(param_types)s)c             C   s   t jj|S )N)psycopg2
extensionsZadapt)selfvalue r   H/tmp/pip-install-j7i95hgp/django/django/db/backends/postgresql/schema.pyquote_value   s    z DatabaseSchemaEditor.quote_valuec                s0   t  j||}| j||}|d k	r,|j| |S )N)super_field_indexes_sql_create_like_index_sqlappend)r   modelfieldoutputlike_index_statement)	__class__r   r	   r      s
    
z'DatabaseSchemaEditor._field_indexes_sqlc             C   sr   |j | jd}|dk	rn|js"|jrnd|kr.dS |jdrN| j||gd| jdS |jdrn| j||gd| jdS dS )z
        Return the statement to create an index with varchar operator pattern
        when the column type is 'varchar' or 'text', otherwise return None.
        )
connectionN[varchar_like)suffixZsqltext)db_typer   db_indexunique
startswithZ_create_index_sqlsql_create_varchar_indexsql_create_text_index)r   r   r   r   r   r   r	   r   #   s    

z+DatabaseSchemaEditor._create_like_index_sqlc       	   
      s   |j j}|j dkr|j}d||f }|j dkr6dnd}| j| j||d g f| jd| j|i g f| jd| j|i g f| j| j|| j	| j|d| j| d	 d
 g f| j
| j|| j|| j|d g fgfS t j||||S dS )z'Make ALTER TYPE with SERIAL make sense.serial	bigserialz	%s_%s_seqintegerZbigint)columntypesequenceznextval('%s'))r#   default)tableZchanges)r'   r#   r%   N)r    r!   )_metadb_tablelowerr#   sql_alter_column_typeZ
quote_namesql_delete_sequencesql_create_sequenceZsql_alter_columnZsql_alter_column_defaultsql_set_sequence_maxr   _alter_column_type_sql)	r   r   	old_field	new_fieldnew_typer'   r#   Zsequence_nameZcol_type)r   r   r	   r/   9   s6    
z+DatabaseSchemaEditor._alter_column_type_sqlFc	          	      s  |j s|jr||jdr"|jd sN|jdr8|jd sN|jdr||jd r|| j|jj|jgdd}	| j| j| j	||	 t
 j|||||||| |j p|j r|j s|j r|jr| j||}
|
d k	r| j|
 |jo|j p|j r| j|jj|jgdd}| j| j| j	|| d S )Nr   r   Zcitextr   )r   )r   r   r   Z_create_index_namer(   r)   r#   executeZ_delete_constraint_sqlsql_delete_indexr   _alter_fieldr   )r   r   r0   r1   Zold_typer2   Zold_db_paramsZnew_db_paramsstrictZ
index_namer   Zindex_to_remove)r   r   r	   r5   l   s"    
z!DatabaseSchemaEditor._alter_field)F)__name__
__module____qualname__r+   r-   r,   r.   Zsql_create_indexr   r   r4   Zsql_delete_fkZsql_delete_procedurer
   r   r   r/   r5   __classcell__r   r   )r   r	   r      s   4r   )r   Zdjango.db.backends.base.schemar   r   r   r   r   r	   <module>   s   