U
    8ÄT_  ã                   @   s  d dl mZmZmZ d dl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dS )é    )Úget_citext_oidsÚget_hstore_oidsÚregister_type_handlers)ÚNotSupportedErrorÚrouter)ÚAddIndexÚRemoveIndex)Ú	Operationc                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚCreateExtensionTc                 C   s
   || _ d S ©N©Úname)Úselfr   © r   úF/tmp/pip-unpacked-wheel-dv63caxw/django/contrib/postgres/operations.pyÚ__init__   s    zCreateExtension.__init__c                 C   s   d S r   r   )r   Ú	app_labelÚstater   r   r   Ústate_forwards   s    zCreateExtension.state_forwardsc                 C   sT   |j jdkst |j j|¡s d S | d| | j¡ ¡ t 	¡  t
 	¡  t|j ƒ d S )NZ
postgresqlz!CREATE EXTENSION IF NOT EXISTS %s)Ú
connectionÚvendorr   Úallow_migrateÚaliasÚexecuteÚ
quote_namer   r   Úcache_clearr   r   ©r   r   Úschema_editorÚ
from_stateÚto_stater   r   r   Údatabase_forwards   s    
ÿþz!CreateExtension.database_forwardsc                 C   s>   t  |jj|¡sd S | d| | j¡ ¡ t ¡  t	 ¡  d S )NzDROP EXTENSION %s)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   Údatabase_backwards!   s
    z"CreateExtension.database_backwardsc                 C   s
   d| j  S )NzCreates extension %sr   ©r   r   r   r   Údescribe)   s    zCreateExtension.describeN)	Ú__name__Ú
__module__Ú__qualname__Z
reversibler   r   r    r!   r#   r   r   r   r   r
   	   s   r
   c                   @   s   e Zd Zdd„ ZdS )ÚBloomExtensionc                 C   s
   d| _ d S )NZbloomr   r"   r   r   r   r   /   s    zBloomExtension.__init__N©r$   r%   r&   r   r   r   r   r   r'   -   s   r'   c                   @   s   e Zd Zdd„ ZdS )ÚBtreeGinExtensionc                 C   s
   d| _ d S )NZ	btree_ginr   r"   r   r   r   r   5   s    zBtreeGinExtension.__init__Nr(   r   r   r   r   r)   3   s   r)   c                   @   s   e Zd Zdd„ ZdS )ÚBtreeGistExtensionc                 C   s
   d| _ d S )NZ
btree_gistr   r"   r   r   r   r   ;   s    zBtreeGistExtension.__init__Nr(   r   r   r   r   r*   9   s   r*   c                   @   s   e Zd Zdd„ ZdS )ÚCITextExtensionc                 C   s
   d| _ d S )NZcitextr   r"   r   r   r   r   A   s    zCITextExtension.__init__Nr(   r   r   r   r   r+   ?   s   r+   c                   @   s   e Zd Zdd„ ZdS )ÚCryptoExtensionc                 C   s
   d| _ d S )NZpgcryptor   r"   r   r   r   r   G   s    zCryptoExtension.__init__Nr(   r   r   r   r   r,   E   s   r,   c                   @   s   e Zd Zdd„ ZdS )ÚHStoreExtensionc                 C   s
   d| _ d S )NZhstorer   r"   r   r   r   r   M   s    zHStoreExtension.__init__Nr(   r   r   r   r   r-   K   s   r-   c                   @   s   e Zd Zdd„ ZdS )ÚTrigramExtensionc                 C   s
   d| _ d S )NZpg_trgmr   r"   r   r   r   r   S   s    zTrigramExtension.__init__Nr(   r   r   r   r   r.   Q   s   r.   c                   @   s   e Zd Zdd„ ZdS )ÚUnaccentExtensionc                 C   s
   d| _ d S )NZunaccentr   r"   r   r   r   r   Y   s    zUnaccentExtension.__init__Nr(   r   r   r   r   r/   W   s   r/   c                   @   s   e Zd Zdd„ ZdS )Ú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__r$   )r   r   r   r   r   Ú_ensure_not_in_transaction^   s    þÿz0NotInTransactionMixin._ensure_not_in_transactionN)r$   r%   r&   r2   r   r   r   r   r0   ]   s   r0   c                   @   s,   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 %sz, )Úindexr   ÚjoinÚfieldsÚ
model_namer"   r   r   r   r#   k   s
    ýzAddIndexConcurrently.describec                 C   s@   |   |¡ |j || j¡}|  |jj|¡r<|j|| jdd� d S ©NT)Zconcurrently)	r2   ÚappsÚ	get_modelr7   Úallow_migrate_modelr   r   Ú	add_indexr4   ©r   r   r   r   r   Úmodelr   r   r   r    r   s    
z&AddIndexConcurrently.database_forwardsc                 C   s@   |   |¡ |j || j¡}|  |jj|¡r<|j|| jdd� d S r8   )	r2   r9   r:   r7   r;   r   r   Úremove_indexr4   r=   r   r   r   r!   x   s    
z'AddIndexConcurrently.database_backwardsN©r$   r%   r&   Ú__doc__Zatomicr#   r    r!   r   r   r   r   r3   g   s
   r3   c                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚRemoveIndexConcurrentlyzBRemove an index using PostgreSQL's DROP INDEX CONCURRENTLY syntax.Fc                 C   s   d| j | jf S )Nz$Concurrently remove index %s from %s)r   r7   r"   r   r   r   r#   ƒ   s    z RemoveIndexConcurrently.describec                 C   sZ   |   |¡ |j || j¡}|  |jj|¡rV|j|| jf }| 	| j
¡}|j||dd� d S r8   )r2   r9   r:   r7   r;   r   r   ÚmodelsÚmodel_name_lowerÚget_index_by_namer   r?   )r   r   r   r   r   r>   Zfrom_model_stater4   r   r   r   r    †   s    
z)RemoveIndexConcurrently.database_forwardsc                 C   sZ   |   |¡ |j || j¡}|  |jj|¡rV|j|| jf }| 	| j
¡}|j||dd� d S r8   )r2   r9   r:   r7   r;   r   r   rC   rD   rE   r   r<   )r   r   r   r   r   r>   Zto_model_stater4   r   r   r   r!   Ž   s    
z*RemoveIndexConcurrently.database_backwardsNr@   r   r   r   r   rB      s
   rB   N)Zdjango.contrib.postgres.signalsr   r   r   Z	django.dbr   r   Zdjango.db.migrationsr   r   Z$django.db.migrations.operations.baser	   r
   r'   r)   r*   r+   r,   r-   r.   r/   r0   r3   rB   r   r   r   r   Ú<module>   s   $
