o
    [h/                     @   sj  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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OperationCategory)CheckConstraintc                   @   sR   e Zd ZdZej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   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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   s   |j jdkst|j j|sd S | || js"|d|| j  t	
  t
  t|j  t|j dr@|j |j j d d S d S )N
postgresqlz!CREATE EXTENSION IF NOT EXISTS %sregister_geometry_adaptersT)
connectionvendorr   allow_migratealiasextension_existsr   execute
quote_namer   cache_clearr   r   hasattrr   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#   boolZfetchone)r   r(   	extensionr-   r   r   r   r"   7   s   
$z CreateExtension.extension_existsc                 C   
   d| j  S )NzCreates extension %sr   r   r   r   r   describe?   r   zCreateExtension.describec                 C   r0   )Nzcreate_extension_%sr   r1   r   r   r   migration_name_fragmentB   s   
z'CreateExtension.migration_name_fragmentN)__name__
__module____qualname__Z
reversibler   ADDITIONcategoryr   r   r+   r,   r"   r2   propertyr3   r   r   r   r   r      s    r   c                   @      e Zd Zdd ZdS )BloomExtensionc                 C   
   d| _ d S )NZbloomr   r1   r   r   r   r   H   r   zBloomExtension.__init__Nr4   r5   r6   r   r   r   r   r   r;   G       r;   c                   @   r:   )BtreeGinExtensionc                 C   r<   )NZ	btree_ginr   r1   r   r   r   r   M   r   zBtreeGinExtension.__init__Nr=   r   r   r   r   r?   L   r>   r?   c                   @   r:   )BtreeGistExtensionc                 C   r<   )NZ
btree_gistr   r1   r   r   r   r   R   r   zBtreeGistExtension.__init__Nr=   r   r   r   r   r@   Q   r>   r@   c                   @   r:   )CITextExtensionc                 C   r<   )NZcitextr   r1   r   r   r   r   W   r   zCITextExtension.__init__Nr=   r   r   r   r   rA   V   r>   rA   c                   @   r:   )CryptoExtensionc                 C   r<   )NZpgcryptor   r1   r   r   r   r   \   r   zCryptoExtension.__init__Nr=   r   r   r   r   rB   [   r>   rB   c                   @   r:   )HStoreExtensionc                 C   r<   )NZhstorer   r1   r   r   r   r   a   r   zHStoreExtension.__init__Nr=   r   r   r   r   rC   `   r>   rC   c                   @   r:   )TrigramExtensionc                 C   r<   )NZpg_trgmr   r1   r   r   r   r   f   r   zTrigramExtension.__init__Nr=   r   r   r   r   rD   e   r>   rD   c                   @   r:   )UnaccentExtensionc                 C   r<   )NZunaccentr   r1   r   r   r   r   k   r   zUnaccentExtension.__init__Nr=   r   r   r   r   rE   j   r>   rE   c                   @   r:   )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   Zin_atomic_blockr   	__class__r4   r   r(   r   r   r   _ensure_not_in_transactionp   s   z0NotInTransactionMixin._ensure_not_in_transactionN)r4   r5   r6   rI   r   r   r   r   rF   o   r>   rF   c                   @   2   e Zd ZdZdZej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_namer1   r   r   r   r2   ~   s
   zAddIndexConcurrently.describec                 C   sD   |  | |j|| j}| |jj|r |j|| jdd d S d S NT)Zconcurrently)	rI   apps	get_modelrP   allow_migrate_modelr   r!   	add_indexrM   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 rQ   )	rI   rR   rS   rP   rT   r   r!   remove_indexrM   rV   r   r   r   r,      rX   z'AddIndexConcurrently.database_backwardsN)r4   r5   r6   __doc__atomicr   r7   r8   r2   r+   r,   r   r   r   r   rK   x   s    rK   c                   @   rJ   )
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   rP   r1   r   r   r   r2         z RemoveIndexConcurrently.describec                 C   s^   |  | |j|| j}| |jj|r-|j|| jf }|	| j
}|j||dd d S d S rQ   )rI   rR   rS   rP   rT   r   r!   modelsmodel_name_lowerget_index_by_namer   rY   )r   r   r(   r)   r*   rW   Zfrom_model_staterM   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 rQ   )rI   rR   rS   rP   rT   r   r!   r`   ra   rb   r   rU   )r   r   r(   r)   r*   rW   Zto_model_staterM   r   r   r   r,      rc   z*RemoveIndexConcurrently.database_backwardsN)r4   r5   r6   rZ   r[   r   REMOVALr8   r2   r+   r,   r   r   r   r   r\      s    r\   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   localerg   rh   )r   r   ri   rg   rh   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   ri   rf   rg   Frh   )r   ri   rg   rh   rG   r6   )r   kwargsr   r   r   deconstruct   s   


zCollationOperation.deconstructc              	   C   sp   d| | ji}| jdkr| | j|d< | jdu rd|d< |d| | jdd	d
 | D d  d S )Nri   rf   rg   Ffalserh   z$CREATE COLLATION %(name)s (%(args)s)rL   c                 s   s"    | ]\}}| d | V  qdS )=Nr   ).0optionvaluer   r   r   	<genexpr>   s    
z6CollationOperation.create_collation.<locals>.<genexpr>)r   args)r$   ri   rg   rh   r#   r   rN   items)r   r(   rr   r   r   r   create_collation   s   



z#CollationOperation.create_collationc                 C   s   | d|| j  d S )NzDROP COLLATION %s)r#   r$   r   rH   r   r   r   remove_collation   s   z#CollationOperation.remove_collationN)r4   r5   r6   r   r   rk   rt   ru   r   r   r   r   re      s    re   c                       sJ   e Zd ZdZejZdd Zdd Zdd Z	e
dd	 Z fd
dZ  Z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!   rt   r'   r   r   r   r+      
   z!CreateCollation.database_forwardsc                 C   "   t |jj|s
d S | | d S r   )r   r    r   r!   ru   r'   r   r   r   r,         z"CreateCollation.database_backwardsc                 C      d| j  S )NzCreate collation r   r1   r   r   r   r2         zCreateCollation.describec                 C      d| j   S )Nzcreate_collation_%sr   lowerr1   r   r   r   r3         z'CreateCollation.migration_name_fragmentc                    s(   t |tr| j|jkrg S t ||S r   )
isinstanceRemoveCollationr   superreduce)r   Z	operationr   rG   r   r   r      s   zCreateCollation.reduce)r4   r5   r6   rZ   r   r7   r8   r+   r,   r2   r9   r3   r   __classcell__r   r   r   r   rv      s    
rv   c                   @   s:   e Zd ZdZejZdd Zdd Zdd Z	e
dd	 Zd
S )r   zRemove a collation.c                 C   rw   rx   )r   r   r   r    r!   ru   r'   r   r   r   r+      ry   z!RemoveCollation.database_forwardsc                 C   rz   r   )r   r    r   r!   rt   r'   r   r   r   r,     r{   z"RemoveCollation.database_backwardsc                 C   r|   )NzRemove collation r   r1   r   r   r   r2     r}   zRemoveCollation.describec                 C   r~   )Nzremove_collation_%sr   r1   r   r   r   r3   
  r   z'RemoveCollation.migration_name_fragmentN)r4   r5   r6   rZ   r   rd   r8   r+   r,   r2   r9   r3   r   r   r   r   r      s    r   c                       sF   e Zd ZdZej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.)r   r   	TypeErrorr   r   )r   rP   
constraintr   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   rP   r1   r   r   r   r2     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)
rR   rS   rP   rT   r   r!   r   Z
create_sqlr#   str)r   r   r(   r)   r*   rW   Zconstraint_sqlr   r   r   r+   $  s   z'AddConstraintNotValid.database_forwardsc                    s   t  jd S )NZ
_not_valid)r   r3   r1   r   r   r   r3   .  s   z-AddConstraintNotValid.migration_name_fragment)r4   r5   r6   rZ   r   r7   r8   r   r2   r+   r9   r3   r   r   r   r   r   r     s    
r   c                   @   sR   e Zd ZdZej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   rP   r   )r   rP   r   r   r   r   r   8  s   
zValidateConstraint.__init__c                 C   r]   )Nz"Validate constraint %s on model %sr^   r1   r   r   r   r2   <  r_   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)rR   rS   rP   rT   r   r!   r#   r$   _metaZdb_tabler   rV   r   r   r   r+   ?  s   
z$ValidateConstraint.database_forwardsc                 C   r   r   r   r'   r   r   r   r,   J  s   z%ValidateConstraint.database_backwardsc                 C   r   r   r   r   r   r   r   r   N  r   z!ValidateConstraint.state_forwardsc                 C   s   d| j  | j f S )Nz%s_validate_%s)rP   r   r   r1   r   r   r   r3   Q  s   z*ValidateConstraint.migration_name_fragmentc                 C   s   | j jg | j| jdfS )Nr   )rG   r4   rP   r   r1   r   r   r   rk   U  s   zValidateConstraint.deconstructN)r4   r5   r6   rZ   r   Z
ALTERATIONr8   r   r2   r+   r,   r   r9   r3   rk   r   r   r   r   r   3  s    
r   N)!Zdjango.contrib.postgres.signalsr   r   r   Z	django.dbr   r   Zdjango.db.migrationsr   r   r	   Z$django.db.migrations.operations.baser
   r   Zdjango.db.models.constraintsr   r   r;   r?   r@   rA   rB   rC   rD   rE   rF   rK   r\   re   rv   r   r   r   r   r   r   r   <module>   s,    ;	,$