o
    uvXj  ã                   @   s4   d dl Z d dlmZ d dlmZ G dd„ deƒZdS )é    N)ÚBaseDatabaseSchemaEditor)ÚIndexColumnsc                       st   e 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‡ 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)szOCREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s)%(extra)s%(condition)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 |tƒr| dd¡}tj |¡ ¡  ¡ S )Nú%z%%)Ú
isinstanceÚstrÚreplaceÚpsycopg2Ú
extensionsÚadaptÚ	getquotedÚdecode)ÚselfÚvalue© r   úa/var/www/html/myproject/venv/lib/python3.10/site-packages/django/db/backends/postgresql/schema.pyÚquote_value   s   
z DatabaseSchemaEditor.quote_valuec                    s0   t ƒ  ||¡}|  ||¡}|d u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ur7|js|jr7d|v rdS | d¡r'| j||gddgd�S | d¡r7| j||gdd	g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Úvarchar_pattern_ops)ÚsuffixÚ	opclassesÚtextÚtext_pattern_ops)Údb_typer   Údb_indexÚuniqueÚ
startswithÚ_create_index_sql)r   r   r   r&   r   r   r   r   %   s   

z+DatabaseSchemaEditor._create_like_index_sqlc           	         sð   |j j}| ¡ dv ro|j}d||f }| ¡ dkrd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 )z'Make ALTER TYPE with SERIAL make sense.)ÚserialÚ	bigserialz	%s_%s_seqr+   ÚintegerÚbigint)ÚcolumnÚtypeÚsequenceznextval('%s'))r/   Údefault)ÚtableÚchanges)r3   r/   r1   )Ú_metaÚdb_tableÚlowerr/   Úsql_alter_column_typeÚ
quote_nameÚsql_delete_sequenceÚsql_create_sequenceÚsql_alter_columnÚsql_alter_column_defaultÚsql_set_sequence_maxr   Ú_alter_column_type_sql)	r   r   Ú	old_fieldÚ	new_fieldÚnew_typer3   r/   Úsequence_nameÚcol_typer   r   r   r?   ;   sP   þû	
ÿü
ÿüþþøýúéø*z+DatabaseSchemaEditor._alter_column_type_sqlFc	              
      s  |j s|jr9| d¡r| d¡r$| d¡r| d¡r$| d¡r9| d¡s9| j|jj|jgdd�}	|  |  ||	¡¡ t	ƒ  
||||||||¡ |j sO|jsO|j sU|jsd|jrd|  ||¡}
|
d urd|  |
¡ |jr„|j s†|jsˆ| j|jj|jgdd�}|  |  ||¡¡ d S d S d S d S )Nr   r$   Úcitextr    )r"   )r'   r(   r)   Ú_create_index_namer5   r6   r/   ÚexecuteÚ_delete_index_sqlr   Ú_alter_fieldr   )r   r   r@   rA   Úold_typerB   Úold_db_paramsÚnew_db_paramsÚstrictÚ
index_namer   Úindex_to_remover   r   r   rI   n   s>   ÿÿþþýýþÿÿ
þz!DatabaseSchemaEditor._alter_fieldc                    s*   |rt ||| j||d�S tƒ  ||||¡S )N)Úcol_suffixesr#   )r   r9   r   Ú_index_columns)r   r3   ÚcolumnsrP   r#   r   r   r   rQ   Š   s   z#DatabaseSchemaEditor._index_columns)F)Ú__name__Ú
__module__Ú__qualname__r8   r;   r:   r>   Úsql_create_indexÚsql_delete_indexÚsql_delete_fkÚsql_delete_procedurer   r   r   r?   rI   rQ   Ú__classcell__r   r   r   r   r      s     4ÿr   )r	   Údjango.db.backends.base.schemar   Ú!django.db.backends.ddl_referencesr   r   r   r   r   r   Ú<module>   s    