o
    ˷e .                     @   sf  d dl mZmZmZ d dlmZmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ G dd deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd dZG dd dee	ZG dd dee
ZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZd(S ))    )get_citext_oidsget_hstore_oidsregister_type_handlers)NotSupportedErrorrouter)AddConstraintAddIndexRemoveIndex)	Operation)CheckConstraintc                   @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )CreateExtensionTc                 C   s
   || _ d S Nname)selfr    r   Y/var/www/ideatree/venv/lib/python3.10/site-packages/django/contrib/postgres/operations.py__init__      
zCreateExtension.__init__c                 C      d S r   r   r   	app_labelstater   r   r   state_forwards      zCreateExtension.state_forwardsc                 C   sb   |j jdkst|j j|sd S | || js"|d|| j  t	
  t
  t|j  d S )N
postgresqlz!CREATE EXTENSION IF NOT EXISTS %s)
connectionvendorr   allow_migratealiasextension_existsr   execute
quote_namer   cache_clearr   r   r   r   schema_editor
from_stateto_stater   r   r   database_forwards   s   
z!CreateExtension.database_forwardsc                 C   sL   t |jj|s
d S | || jr|d|| j  t	  t
	  d S )NzDROP EXTENSION IF EXISTS %s)r   r   r   r   r    r   r!   r"   r   r#   r   r$   r   r   r   database_backwards'   s   z"CreateExtension.database_backwardsc                 C   sH   |j  }|d|g t| W  d    S 1 sw   Y  d S )Nz-SELECT 1 FROM pg_extension WHERE extname = %s)r   cursorr!   boolfetchone)r   r%   	extensionr*   r   r   r   r    2   s   
$z CreateExtension.extension_existsc                 C   
   d| j  S )NzCreates extension %sr   r   r   r   r   describe:   r   zCreateExtension.describec                 C   r.   )Nzcreate_extension_%sr   r/   r   r   r   migration_name_fragment=   s   
z'CreateExtension.migration_name_fragmentN)__name__
__module____qualname__
reversibler   r   r(   r)   r    r0   propertyr1   r   r   r   r   r      s    r   c                   @      e Zd Zdd ZdS )BloomExtensionc                 C   
   d| _ d S )Nbloomr   r/   r   r   r   r   C   r   zBloomExtension.__init__Nr2   r3   r4   r   r   r   r   r   r8   B       r8   c                   @   r7   )BtreeGinExtensionc                 C   r9   )N	btree_ginr   r/   r   r   r   r   H   r   zBtreeGinExtension.__init__Nr;   r   r   r   r   r=   G   r<   r=   c                   @   r7   )BtreeGistExtensionc                 C   r9   )N
btree_gistr   r/   r   r   r   r   M   r   zBtreeGistExtension.__init__Nr;   r   r   r   r   r?   L   r<   r?   c                   @   r7   )CITextExtensionc                 C   r9   )Ncitextr   r/   r   r   r   r   R   r   zCITextExtension.__init__Nr;   r   r   r   r   rA   Q   r<   rA   c                   @   r7   )CryptoExtensionc                 C   r9   )Npgcryptor   r/   r   r   r   r   W   r   zCryptoExtension.__init__Nr;   r   r   r   r   rC   V   r<   rC   c                   @   r7   )HStoreExtensionc                 C   r9   )Nhstorer   r/   r   r   r   r   \   r   zHStoreExtension.__init__Nr;   r   r   r   r   rE   [   r<   rE   c                   @   r7   )TrigramExtensionc                 C   r9   )Npg_trgmr   r/   r   r   r   r   a   r   zTrigramExtension.__init__Nr;   r   r   r   r   rG   `   r<   rG   c                   @   r7   )UnaccentExtensionc                 C   r9   )Nunaccentr   r/   r   r   r   r   f   r   zUnaccentExtension.__init__Nr;   r   r   r   r   rI   e   r<   rI   c                   @   r7   )NotInTransactionMixinc                 C   s   |j jrtd| jj d S )Nz_The %s operation cannot be executed inside a transaction (set atomic = False on the migration).)r   in_atomic_blockr   	__class__r2   r   r%   r   r   r   _ensure_not_in_transactionk   s   z0NotInTransactionMixin._ensure_not_in_transactionN)r2   r3   r4   rO   r   r   r   r   rK   j   r<   rK   c                   @   ,   e Zd ZdZdZdd Zdd Zdd Zd	S )
AddIndexConcurrentlyzDCreate an index using PostgreSQL's CREATE INDEX CONCURRENTLY syntax.Fc                 C   s   d| j jd| j j| jf S )Nz7Concurrently create index %s on field(s) %s of model %s, )indexr   joinfields
model_namer/   r   r   r   r0   x   s
   zAddIndexConcurrently.describec                 C   sD   |  | |j|| j}| |jj|r |j|| jdd d S d S NT)concurrently)	rO   apps	get_modelrV   allow_migrate_modelr   r   	add_indexrS   r   r   r%   r&   r'   modelr   r   r   r(      
   
z&AddIndexConcurrently.database_forwardsc                 C   sD   |  | |j|| j}| |jj|r |j|| jdd d S d S rW   )	rO   rY   rZ   rV   r[   r   r   remove_indexrS   r]   r   r   r   r)      r_   z'AddIndexConcurrently.database_backwardsNr2   r3   r4   __doc__atomicr0   r(   r)   r   r   r   r   rQ   s   s    rQ   c                   @   rP   )
RemoveIndexConcurrentlyzBRemove an index using PostgreSQL's DROP INDEX CONCURRENTLY syntax.Fc                 C      d| j | jf S )Nz$Concurrently remove index %s from %sr   rV   r/   r   r   r   r0         z RemoveIndexConcurrently.describec                 C   s^   |  | |j|| j}| |jj|r-|j|| jf }|	| j
}|j||dd d S d S rW   )rO   rY   rZ   rV   r[   r   r   modelsmodel_name_lowerget_index_by_namer   r`   )r   r   r%   r&   r'   r^   from_model_staterS   r   r   r   r(         
z)RemoveIndexConcurrently.database_forwardsc                 C   s^   |  | |j|| j}| |jj|r-|j|| jf }|	| j
}|j||dd d S d S rW   )rO   rY   rZ   rV   r[   r   r   rh   ri   rj   r   r\   )r   r   r%   r&   r'   r^   to_model_staterS   r   r   r   r)      rl   z*RemoveIndexConcurrently.database_backwardsNra   r   r   r   r   rd      s    rd   c                   @   s<   e Zd ZdddddZdd Zdd	 Zd
d Zdd ZdS )CollationOperationlibcT)providerdeterministicc                C   s   || _ || _|| _|| _d S r   )r   localerp   rq   )r   r   rr   rp   rq   r   r   r   r      s   
zCollationOperation.__init__c                 C   r   r   r   r   r   r   r   r      r   z!CollationOperation.state_forwardsc                 C   sJ   | j | jd}| jr| jdkr| j|d< | jdu r| j|d< | jjg |fS )N)r   rr   ro   rp   Frq   )r   rr   rp   rq   rM   r4   )r   kwargsr   r   r   deconstruct   s   


zCollationOperation.deconstructc              	   C   s   | j du r|jjjstdd|| ji}| jdkr#|| j|d< | j du r,d|d< |d|| j	d	
d
d | D d  d S )NFz4Non-deterministic collations require PostgreSQL 12+.rr   ro   rp   falserq   z$CREATE COLLATION %(name)s (%(args)s)rR   c                 s   s"    | ]\}}| d | V  qdS )=Nr   ).0optionvaluer   r   r   	<genexpr>   s    
z6CollationOperation.create_collation.<locals>.<genexpr>)r   args)rq   r   features%supports_non_deterministic_collationsr   r"   rr   rp   r!   r   rT   items)r   r%   r{   r   r   r   create_collation   s(   




z#CollationOperation.create_collationc                 C   s   | d|| j  d S )NzDROP COLLATION %s)r!   r"   r   rN   r   r   r   remove_collation   s   z#CollationOperation.remove_collationN)r2   r3   r4   r   r   rt   r   r   r   r   r   r   rn      s    rn   c                   @   4   e Zd ZdZdd Zdd Zdd Zedd	 Zd
S )CreateCollationzCreate a collation.c                 C   .   |j jdkst|j j|sd S | | d S Nr   )r   r   r   r   r   r   r$   r   r   r   r(      
   z!CreateCollation.database_forwardsc                 C   "   t |jj|s
d S | | d S r   )r   r   r   r   r   r$   r   r   r   r)         z"CreateCollation.database_backwardsc                 C      d| j  S )NzCreate collation r   r/   r   r   r   r0         zCreateCollation.describec                 C      d| j   S )Nzcreate_collation_%sr   lowerr/   r   r   r   r1         z'CreateCollation.migration_name_fragmentN	r2   r3   r4   rb   r(   r)   r0   r6   r1   r   r   r   r   r          r   c                   @   r   )RemoveCollationzRemove a collation.c                 C   r   r   )r   r   r   r   r   r   r$   r   r   r   r(      r   z!RemoveCollation.database_forwardsc                 C   r   r   )r   r   r   r   r   r$   r   r   r   r)      r   z"RemoveCollation.database_backwardsc                 C   r   )NzRemove collation r   r/   r   r   r   r0      r   zRemoveCollation.describec                 C   r   )Nzremove_collation_%sr   r/   r   r   r   r1      r   z'RemoveCollation.migration_name_fragmentNr   r   r   r   r   r      r   r   c                       s@   e Zd ZdZ fddZdd Zdd Ze fdd	Z  Z	S )
AddConstraintNotValidzg
    Add a table constraint without enforcing validation, using PostgreSQL's
    NOT VALID syntax.
    c                    s$   t |ts	tdt || d S )Nz<AddConstraintNotValid.constraint must be a check constraint.)
isinstancer   	TypeErrorsuperr   )r   rV   
constraintrM   r   r   r     s
   
zAddConstraintNotValid.__init__c                 C   s   d| j j| jf S )Nz*Create not valid constraint %s on model %s)r   r   rV   r/   r   r   r   r0     s   zAddConstraintNotValid.describec                 C   sT   |j || j}| |jj|r&| j||}|r(|jt	|d d d d S d S d S )Nz
 NOT VALID)params)
rY   rZ   rV   r[   r   r   r   
create_sqlr!   str)r   r   r%   r&   r'   r^   constraint_sqlr   r   r   r(     s   z'AddConstraintNotValid.database_forwardsc                    s   t  jd S )N
_not_valid)r   r1   r/   r   r   r   r1   "  s   z-AddConstraintNotValid.migration_name_fragment)
r2   r3   r4   rb   r   r0   r(   r6   r1   __classcell__r   r   r   r   r     s    
r   c                   @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dd Z
dd ZdS )ValidateConstraintz&Validate a table NOT VALID constraint.c                 C   s   || _ || _d S r   rV   r   )r   rV   r   r   r   r   r   *  s   
zValidateConstraint.__init__c                 C   re   )Nz"Validate constraint %s on model %srf   r/   r   r   r   r0   .  rg   zValidateConstraint.describec                 C   sL   |j || j}| |jj|r$|d||jj	|| j
f  d S d S )Nz%ALTER TABLE %s VALIDATE CONSTRAINT %s)rY   rZ   rV   r[   r   r   r!   r"   _metadb_tabler   r]   r   r   r   r(   1  s   
z$ValidateConstraint.database_forwardsc                 C   r   r   r   r$   r   r   r   r)   <  s   z%ValidateConstraint.database_backwardsc                 C   r   r   r   r   r   r   r   r   @  r   z!ValidateConstraint.state_forwardsc                 C   s   d| j  | j f S )Nz%s_validate_%s)rV   r   r   r/   r   r   r   r1   C  s   z*ValidateConstraint.migration_name_fragmentc                 C   s   | j jg | j| jdfS )Nr   )rM   r2   rV   r   r/   r   r   r   rt   G  s   zValidateConstraint.deconstructN)r2   r3   r4   rb   r   r0   r(   r)   r   r6   r1   rt   r   r   r   r   r   '  s    
r   N) django.contrib.postgres.signalsr   r   r   	django.dbr   r   django.db.migrationsr   r   r	   $django.db.migrations.operations.baser
   django.db.models.constraintsr   r   r8   r=   r?   rA   rC   rE   rG   rI   rK   rQ   rd   rn   r   r   r   r   r   r   r   r   <module>   s,    6	2"