
vÅÏ^è  ã               @   sK  d  d l  m Z m Z m Z d  d l m Z m Z d  d l m Z d  d l	 m
 Z
 Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd	 d
 „  d
 e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d ƒ Z Gd d „  d e e ƒ Z Gd d „  d e e ƒ Z d S)é    )Úget_citext_oidsÚget_hstore_oidsÚregister_type_handlers)ÚAddIndexÚRemoveIndex)Ú	Operation)ÚNotSupportedErrorc               @   sR   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   úD/tmp/pip-build-8lau8j11/django/django/contrib/postgres/operations.pyÚ__init__   s    zCreateExtension.__init__c             C   s   d  S)Nr   )r   Ú	app_labelÚstater   r   r   Ústate_forwards   s    zCreateExtension.state_forwardsc             C   sX   | j  j d k r d  S| j d | j |  j ƒ ƒ t j ƒ  t j ƒ  t | j  ƒ d  S)NZ
postgresqlz!CREATE EXTENSION IF NOT EXISTS %s)	Ú
connectionÚvendorÚ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   s5   | j  d | j |  j ƒ ƒ t j ƒ  t j ƒ  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 %s)r
   )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)ÚBtreeGinExtensionc             C   s   d |  _  d  S)NZ	btree_gin)r
   )r   r   r   r   r   *   s    zBtreeGinExtension.__init__N)r   r   r   r   r   r   r   r   r    (   s   r    c               @   s   e  Z d  Z d d „  Z d S)ÚBtreeGistExtensionc             C   s   d |  _  d  S)NZ
btree_gist)r
   )r   r   r   r   r   0   s    zBtreeGistExtension.__init__N)r   r   r   r   r   r   r   r   r!   .   s   r!   c               @   s   e  Z d  Z d d „  Z d S)ÚCITextExtensionc             C   s   d |  _  d  S)NZcitext)r
   )r   r   r   r   r   6   s    zCITextExtension.__init__N)r   r   r   r   r   r   r   r   r"   4   s   r"   c               @   s   e  Z d  Z d d „  Z d S)ÚCryptoExtensionc             C   s   d |  _  d  S)NZpgcrypto)r
   )r   r   r   r   r   <   s    zCryptoExtension.__init__N)r   r   r   r   r   r   r   r   r#   :   s   r#   c               @   s   e  Z d  Z d d „  Z d S)ÚHStoreExtensionc             C   s   d |  _  d  S)NZhstore)r
   )r   r   r   r   r   B   s    zHStoreExtension.__init__N)r   r   r   r   r   r   r   r   r$   @   s   r$   c               @   s   e  Z d  Z d d „  Z d S)ÚTrigramExtensionc             C   s   d |  _  d  S)NZpg_trgm)r
   )r   r   r   r   r   H   s    zTrigramExtension.__init__N)r   r   r   r   r   r   r   r   r%   F   s   r%   c               @   s   e  Z d  Z d d „  Z d S)ÚUnaccentExtensionc             C   s   d |  _  d  S)NZunaccent)r
   )r   r   r   r   r   N   s    zUnaccentExtension.__init__N)r   r   r   r   r   r   r   r   r&   L   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_transactionS   s    z0NotInTransactionMixin._ensure_not_in_transactionN)r   r   r   r)   r   r   r   r   r'   R   s   r'   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 ƒ |  j f S)Nz7Concurrently create index %s on field(s) %s of model %sz, )Úindexr
   ÚjoinÚfieldsÚ
model_name)r   r   r   r   r   `   s    	zAddIndexConcurrently.describec             C   sZ   |  j  | ƒ | j j | |  j ƒ } |  j | j j | ƒ rV | j | |  j d d ƒd  S)NÚconcurrentlyT)	r)   ÚappsÚ	get_modelr.   Úallow_migrate_modelr   ÚaliasÚ	add_indexr+   )r   r   r   r   r   Úmodelr   r   r   r   g   s    z&AddIndexConcurrently.database_forwardsc             C   sZ   |  j  | ƒ | j j | |  j ƒ } |  j | j j | ƒ rV | j | |  j d d ƒd  S)Nr/   T)	r)   r0   r1   r.   r2   r   r3   Úremove_indexr+   )r   r   r   r   r   r5   r   r   r   r   m   s    z'AddIndexConcurrently.database_backwardsN)r   r   r   Ú__doc__Úatomicr   r   r   r   r   r   r   r*   \   s
   r*   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
   r.   )r   r   r   r   r   x   s    z RemoveIndexConcurrently.describec             C   s   |  j  | ƒ | j j | |  j ƒ } |  j | j j | ƒ r{ | j | |  j f } | j	 |  j
 ƒ } | j | | d d ƒd  S)Nr/   T)r)   r0   r1   r.   r2   r   r3   ÚmodelsÚmodel_name_lowerÚget_index_by_namer
   r6   )r   r   r   r   r   r5   Zfrom_model_stater+   r   r   r   r   {   s    z)RemoveIndexConcurrently.database_forwardsc             C   s   |  j  | ƒ | j j | |  j ƒ } |  j | j j | ƒ r{ | j | |  j f } | j	 |  j
 ƒ } | j | | d d ƒd  S)Nr/   T)r)   r0   r1   r.   r2   r   r3   r:   r;   r<   r
   r4   )r   r   r   r   r   r5   Zto_model_stater+   r   r   r   r   ƒ   s    z*RemoveIndexConcurrently.database_backwardsN)r   r   r   r7   r8   r   r   r   r   r   r   r   r9   t   s
   r9   N)Zdjango.contrib.postgres.signalsr   r   r   Zdjango.db.migrationsr   r   Z$django.db.migrations.operations.baser   Zdjango.db.utilsr   r	   r    r!   r"   r#   r$   r%   r&   r'   r*   r9   r   r   r   r   Ú<module>   s   
