o
    ˜¨Êhœ+  ã                   @   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)ÚBaseDatabaseSchemaEditor)ÚIndexColumns)Ústrip_quotesc                       sÚ   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Zdd„ Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡ fdd„Z	d)‡ fdd„	Z‡ fdd„Zd)dd„Zd)dd „Zd*‡ fd"d#„	Zd!d!d$d$d!d%d!d%d!dd!d!d&œ‡ fd'd(„
Z‡  ZS )+ÚDatabaseSchemaEditorzeUPDATE %(table)s SET %(column)s = %(default)s WHERE %(column)s IS NULL; SET CONSTRAINTS ALL IMMEDIATEz,DROP SEQUENCE IF EXISTS %(sequence)s CASCADEzZCREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s)%(include)s%(extra)s%(condition)szgCREATE INDEX CONCURRENTLY %(name)s ON %(table)s%(using)s (%(columns)s)%(include)s%(extra)s%(condition)szDROP INDEX IF EXISTS %(name)sz*DROP INDEX CONCURRENTLY IF EXISTS %(name)szyCONSTRAINT %(name)s REFERENCES %(to_table)s(%(to_column)s)%(deferrable)s; SET CONSTRAINTS %(namespace)s%(name)s IMMEDIATEzRSET CONSTRAINTS %(name)s IMMEDIATE; ALTER TABLE %(table)s DROP CONSTRAINT %(name)sz,DROP FUNCTION %(procedure)s(%(param_types)s)zRALTER TABLE %(table)s ALTER COLUMN %(column)s ADD GENERATED BY DEFAULT AS IDENTITYzEALTER TABLE %(table)s ALTER COLUMN %(column)s DROP IDENTITY IF EXISTSc                 C   s>   t |tƒr| dd¡}tj |¡}t|dƒrd|_| ¡  	¡ S )Nú%z%%ÚencodingÚutf8)
Ú
isinstanceÚstrÚreplaceÚpsycopg2Ú
extensionsÚadaptÚhasattrr   Ú	getquotedÚdecode)ÚselfÚvalueÚadapted© r   úV/var/www/html/env/lib/python3.10/site-packages/django/db/backends/postgresql/schema.pyÚquote_value4   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   s.   |j r	| | j¡S | jj | ¡ | | j¡¡S r   )Úis_relationÚrel_db_typeÚ
connectionÚ
data_typesÚgetÚget_internal_typeÚdb_type©r   r   r   r   r   Ú_field_data_typeD   s   
þz%DatabaseSchemaEditor._field_data_typec                 c   s8   � |j  ¡ dkr|  |j ¡E d H  d S |  |j ¡V  d S )NÚ
ArrayField)Ú
base_fieldr(   Ú_field_base_data_typesr+   r*   r   r   r   r.   L   s   €z+DatabaseSchemaEditor._field_base_data_typesc                 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.
        )r%   Nú[ÚvarcharÚ_likeÚvarchar_pattern_ops)ÚfieldsÚsuffixÚ	opclassesÚtextÚtext_pattern_ops)r)   r%   Údb_indexÚuniqueÚ
startswithÚ_create_index_sql)r   r   r   r)   r   r   r   r   S   s&   
ü
üz+DatabaseSchemaEditor._create_like_index_sqlc                    sv  d| _ d}| ¡ }| ¡ }|dkr+||kr+t|  |¡ƒt|  |¡ƒkr*|  j |7  _ n|  |¡|  |¡kr<|  j |7  _ t|jjƒ}h d£}	||	v }
||	v }|ru|
sut|jƒ}| j |  	|¡|dœ g f| j
|  	|¡|  	|¡dœ g fgfS |
r²|s²|  | j|  	|¡|  	t|jƒ¡dœ ¡ t|jƒ}d||f }tƒ  ||||¡\}}|| jd|  	|¡i g fgfS tƒ  ||||¡S )	Nz%ALTER COLUMN %(column)s TYPE %(type)sz USING %(column)s::%(type)sr,   >   Ú	AutoFieldÚBigAutoFieldÚSmallAutoField)ÚcolumnÚtype)Útabler?   z	%s_%s_seqÚsequence)Úsql_alter_column_typer(   Úlistr.   r+   r   Ú_metaÚdb_tabler?   Ú
quote_nameÚsql_add_identityÚexecuteÚsql_drop_indentityr   Ú_alter_column_type_sqlÚsql_delete_sequence)r   r   Ú	old_fieldÚ	new_fieldÚnew_typeÚ	using_sqlÚnew_internal_typeÚold_internal_typerA   Úauto_field_typesÚold_is_autoÚnew_is_autor?   Úsequence_nameÚfragmentÚ_r!   r   r   rK   s   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 )Nr0   r6   Úcitextr1   )r4   )r8   r9   r:   Ú_create_index_namerE   rF   r?   rI   Ú_delete_index_sqlr   Ú_alter_fieldr   )r   r   rM   rN   Úold_typerO   Úold_db_paramsÚnew_db_paramsÚstrictÚ
index_namer    Úindex_to_remover!   r   r   r\   ½   sR   ÿÿþþýýÿøÿÿ
ÿüz!DatabaseSchemaEditor._alter_fieldc                    s*   |rt ||| j||d�S tƒ  ||||¡S )N)Úcol_suffixesr5   )r   rG   r   Ú_index_columns)r   rA   Úcolumnsrc   r5   r!   r   r   rd   í   s   ûz#DatabaseSchemaEditor._index_columnsc                 C   s   | j |j|| |d�d d� d S )N©Úconcurrently)Úparams)rI   Ú
create_sql©r   r   Úindexrg   r   r   r   Ú	add_indexø   s   
ÿzDatabaseSchemaEditor.add_indexc                 C   s   |   |j|| |d�¡ d S )Nrf   )rI   Ú
remove_sqlrj   r   r   r   Úremove_indexý   s   z!DatabaseSchemaEditor.remove_indexNc                    s    |r| j n| j}tƒ  |||¡S r   )Úsql_delete_index_concurrentlyÚsql_delete_indexr   r[   )r   r   ÚnameÚsqlrg   r!   r   r   r[      s
   ÿýz&DatabaseSchemaEditor._delete_index_sqlÚ r   )r3   rq   r4   ÚusingÚdb_tablespacerc   rr   r5   Ú	conditionrg   ÚincludeÚexpressionsc                   s4   |s| j n| j}tƒ j|||||||||	|
||d�S )N)r3   rq   r4   rt   ru   rc   rr   r5   rv   rw   rx   )Úsql_create_indexÚsql_create_index_concurrentlyr   r;   )r   r   r3   rq   r4   rt   ru   rc   rr   r5   rv   rg   rw   rx   r!   r   r   r;     s$   ÿýôz&DatabaseSchemaEditor._create_index_sql)F)NF)Ú__name__Ú
__module__Ú__qualname__Úsql_update_with_defaultrL   ry   rz   rp   ro   Úsql_create_column_inline_fkÚsql_delete_fkÚsql_delete_procedurerH   rJ   r   r   r+   r.   r   rK   r\   rd   rl   rn   r[   r;   Ú__classcell__r   r   r!   r   r      sX    ÿÿÿÿÿÿÿ	 S÷0

ñr   )r   Údjango.db.backends.base.schemar   Ú!django.db.backends.ddl_referencesr   Údjango.db.backends.utilsr   r   r   r   r   r   Ú<module>   s
    