o
    þÞh�9  ã                   @   sD   d dl mZ d dlmZ d dlmZ d dlmZ G dd„ deƒZdS )é    )ÚBaseDatabaseSchemaEditor)ÚIndexColumns)Úsql)Ú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d4‡ fdd„	ZdZdZdd„ Z‡ fdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡ fd d!„Z	"d5‡ fd#d$„	Z‡ fd%d&„Zd5d'd(„Zd5d)d*„Zd6‡ fd,d-„	Zd+d+d.d.d+dd+dd+d"d+d+d/œ‡ fd0d1„
Zd2d3„ Z‡  Z S )7ÚDatabaseSchemaEditorzeUPDATE %(table)s SET %(column)s = %(default)s WHERE %(column)s IS NULL; SET CONSTRAINTS ALL IMMEDIATEz1ALTER SEQUENCE IF EXISTS %(sequence)s AS %(type)sz,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)© c                    s8   |d u rt ƒ  ||¡S | jj t|ƒ|¡}t ƒ  |d ¡S ©N)ÚsuperÚexecuteÚ
connectionÚopsÚcompose_sqlÚstr)Úselfr   Úparams©Ú	__class__r   úd/var/www/html/premium_crap/venv/lib/python3.10/site-packages/django/db/backends/postgresql/schema.pyr
   *   s   zDatabaseSchemaEditor.executezRALTER 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  || jj¡S r   )r   Úquoter   )r   Úvaluer   r   r   Úquote_value:   s   z DatabaseSchemaEditor.quote_valuec                    s0   t ƒ  ||¡}|  ||¡}|d ur| |¡ |S r   )r	   Ú_field_indexes_sqlÚ_create_like_index_sqlÚappend)r   ÚmodelÚfieldÚoutputÚlike_index_statementr   r   r   r   =   s
   
z'DatabaseSchemaEditor._field_indexes_sqlc                 C   s.   |j r	| | j¡S | jj | ¡ | | j¡¡S r   )Úis_relationÚrel_db_typer   Ú
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   s¨   |j | jd�}|durR|js|jrRd|v rdS t|ddƒ}|s)|jr)t|jddƒ}|r2|  |¡s2dS | d¡rB| j	||gddgd�S | d	¡rR| 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ú[Údb_collationÚvarcharÚ_likeÚvarchar_pattern_ops)ÚfieldsÚsuffixÚ	opclassesÚtextÚtext_pattern_ops)
r#   r   Údb_indexÚuniqueÚgetattrr   Útarget_fieldÚ_is_collation_deterministicÚ
startswithÚ_create_index_sql)r   r   r   r#   Úcollation_namer   r   r   r   S   s0   

ü
üz+DatabaseSchemaEditor._create_like_index_sqlc                 C   sn   |j rdS d}| ¡ }| ¡ }|dkr)||kr)t|  |¡ƒt|  |¡ƒkr'|S dS |  |¡|  |¡kr5|S dS )NÚ z USING %(column)s::%(type)sr&   )Ú	generatedr"   Úlistr(   r%   )r   Ú	new_fieldÚ	old_fieldÚ	using_sqlÚnew_internal_typeÚold_internal_typer   r   r   Ú
_using_sqlz   s   ÿþzDatabaseSchemaEditor._using_sqlc                 C   sl   | j  ¡ �'}| j j ||¡D ]}|d |kr#|d   W  d   ƒ S qW d   ƒ d S 1 s/w   Y  d S )NÚcolumnÚname)r   ÚcursorÚintrospectionÚget_sequences)r   ÚtablerE   rG   Úsequencer   r   r   Ú_get_sequence_nameŠ   s   
ýÿ
ÿüz'DatabaseSchemaEditor._get_sequence_namec                 C   sN   |j s|jo&| d¡r| d¡ p&| d¡o| d¡ p&| d¡o&| d¡ S )Nr,   r2   Úcitext)r4   r5   r9   )r   r@   Úold_typeÚnew_typer   r   r   Ú(_is_changing_type_of_indexed_text_column‘   s   ÿýz=DatabaseSchemaEditor._is_changing_type_of_indexed_text_columnc                    s  |j | jd�}|d }|  |||¡r'| j|jj|jgdd�}	|  |  ||	¡¡ d| _	|  
||¡ }
r9|  j	|
7  _	| ¡ }| ¡ }t|jjƒ}h d£}||v }||v }|r{|s{t|jƒ}| j	|  |¡|ddœ g f| j|  |¡|  |¡d	œ g fgfS |rÀ|sÀ|  | j|  |¡|  t|jƒ¡d	œ ¡ t|jƒ}tƒ  ||||||¡\}}g }|  ||¡ }r¼| jd
|  |¡i g fg}||fS |rþ|rþ||krþtƒ  ||||||¡\}}t|jƒ}ddddœ}g }|  ||¡ }rú| j|  |¡|| dœ g fg}||fS tƒ  ||||||¡S )Nr)   Útyper-   ©r0   z2ALTER COLUMN %(column)s TYPE %(type)s%(collation)s>   Ú	AutoFieldÚBigAutoFieldÚSmallAutoFieldr<   )rE   rQ   Ú	collation)rJ   rE   rK   ÚintegerÚbigintÚsmallint)rS   rT   rU   )rK   rQ   )Údb_parametersr   rP   Ú_create_index_nameÚ_metaÚdb_tablerE   r
   Ú_delete_index_sqlÚsql_alter_column_typerD   r"   r   Ú
quote_nameÚsql_add_identityÚsql_drop_indentityr	   Ú_alter_column_type_sqlrL   Úsql_delete_sequenceÚsql_alter_sequence_type)r   r   r@   r?   rO   Úold_collationÚnew_collationÚold_db_paramsrN   Ú
index_namerA   rB   rC   rJ   Úauto_field_typesÚold_is_autoÚnew_is_autorE   ÚfragmentÚ_Úother_actionsÚsequence_nameÚdb_typesr   r   r   rc   ˜   s¢   ÿÿ
ýÿùþÿúÿöþÿÿ
ÿ
ÿÿûÿ	ÿ
ýþÿúÿ
ÿz+DatabaseSchemaEditor._alter_column_type_sqlFc	              
      s°   t ƒ  ||||||||¡ |js|js|js#|js|js#|  |||¡r2|  ||¡}	|	d ur2|  |	¡ |jrR|jsT|jsV| j|jj	|j
gdd�}
|  |  ||
¡¡ d S d S d S d S )Nr-   rR   )r	   Ú_alter_fieldr4   r5   rP   r   r
   r[   r\   r]   rE   r^   )r   r   r@   r?   rN   rO   rh   Únew_db_paramsÚstrictr   Úindex_to_remover   r   r   rr     sB   øÿÿÿþþÿü	
ÿüz!DatabaseSchemaEditor._alter_fieldc                    s*   |rt ||| j||d�S tƒ  ||||¡S )N)Úcol_suffixesr1   )r   r`   r	   Ú_index_columns)r   rJ   Úcolumnsrv   r1   r   r   r   rw   1  s   ûz#DatabaseSchemaEditor._index_columnsc                 C   s   | j |j|| |d�d d� d S )N©Úconcurrently)r   )r
   Ú
create_sql©r   r   Úindexrz   r   r   r   Ú	add_index<  s   
ÿzDatabaseSchemaEditor.add_indexc                 C   s   |   |j|| |d�¡ d S )Nry   )r
   Ú
remove_sqlr|   r   r   r   Úremove_indexA  s   z!DatabaseSchemaEditor.remove_indexNc                    s    |r| j n| j}tƒ  |||¡S r   )Úsql_delete_index_concurrentlyÚsql_delete_indexr	   r^   )r   r   rF   r   rz   r   r   r   r^   D  s
   ÿýz&DatabaseSchemaEditor._delete_index_sqlr<   )r/   rF   r0   ÚusingÚdb_tablespacerv   r   r1   Ú	conditionrz   ÚincludeÚexpressionsc                   s8   |p	|s| j n| j}tƒ j|||||||||	|
||d�S )N)r/   rF   r0   rƒ   r„   rv   r   r1   r…   r†   r‡   )Úsql_create_indexÚsql_create_index_concurrentlyr	   r:   )r   r   r/   rF   r0   rƒ   r„   rv   r   r1   r…   rz   r†   r‡   r   r   r   r:   L  s&   ÿýôz&DatabaseSchemaEditor._create_index_sqlc                 C   sT   | j  ¡ �}| d|g¡ | ¡ }|r|d nd W  d   ƒ S 1 s#w   Y  d S )Nz‚
                SELECT collisdeterministic
                FROM pg_collation
                WHERE collname = %s
                r   )r   rG   r
   Úfetchone)r   r;   rG   Úrowr   r   r   r8   q  s   ú$öz0DatabaseSchemaEditor._is_collation_deterministic)r   )F)NF)!Ú__name__Ú
__module__Ú__qualname__Úsql_update_with_defaultre   rd   rˆ   r‰   r‚   r�   Úsql_create_column_inline_fkÚsql_delete_fkÚsql_delete_procedurer
   ra   rb   r   r   r%   r(   r   rD   rL   rP   rc   rr   rw   r~   r€   r^   r:   r8   Ú__classcell__r   r   r   r   r      sd    ÿÿÿÿÿ	ÿÿ'x÷*

ñ%r   N)	Údjango.db.backends.base.schemar   Ú!django.db.backends.ddl_referencesr   Ú)django.db.backends.postgresql.psycopg_anyr   Údjango.db.backends.utilsr   r   r   r   r   r   Ú<module>   s
    