B
    ©0H[  ã               @   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 |¡S )N)Úpsycopg2Ú
extensionsZadapt)ÚselfÚvalue© r   úhC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\db\backends\postgresql\schema.pyÚquote_value   s    z DatabaseSchemaEditor.quote_valuec                s0   t ƒ  ||¡}|  ||¡}|d k	r,| |¡ |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 | d¡rN| j||gd| jd�S | 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}| ¡ dkrÞ|j}d||f }| ¡ dkr6dnd}| j|  |¡|dœ g f| jd|  |¡i g f| jd|  |¡i g f| j|  |¡| j	|  |¡d|  |¡ d	œ d
œ g f| j
|  |¡|  |¡|  |¡dœ g fgfS tƒ  ||||¡S dS )z'Make ALTER TYPE with SERIAL make sense.)ÚserialZ	bigserialz	%s_%s_seqr    ÚintegerZbigint)ÚcolumnÚtypeÚsequenceznextval('%s'))r"   Údefault)ÚtableZchanges)r&   r"   r$   N)Ú_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rv| d¡r | d¡rH| d¡r4| d¡rH| d¡rv| d¡sv| j|jj|jgdd�}	|  |  | j	||	¡¡ t
ƒ  ||||||||¡ |j s¢|js¢|j s®|jsÌ|jrÌ|  ||¡}
|
d k	rÌ|  |
¡ |j�r|j �s|j�s| j|jj|jgdd�}|  |  | 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   r/   r0   Zold_typer1   Zold_db_paramsZnew_db_paramsÚstrictZ
index_namer   Zindex_to_remove)r   r   r	   r4   l   s"    
z!DatabaseSchemaEditor._alter_field)F)Ú__name__Ú
__module__Ú__qualname__r*   r,   r+   r-   Zsql_create_indexr   r   r3   Zsql_delete_fkZsql_delete_procedurer
   r   r   r.   r4   Ú__classcell__r   r   )r   r	   r      s   4r   )r   Zdjango.db.backends.base.schemar   r   r   r   r   r	   Ú<module>   s   