a
    Kcòfë-  ã                   @   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   ú_/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/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   s€   |j jdkst |j j|¡s d S |  || j¡sD| d| | j¡ ¡ t	 
¡  t 
¡  t|j ƒ t|j dƒr||j  |j j d¡ 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¡r8| 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:0    Y  d S )Nz-SELECT 1 FROM pg_extension WHERE extname = %s)r   Úcursorr   ÚboolZfetchone)r   r$   Ú	extensionr)   r   r   r   r   6   s    þz CreateExtension.extension_existsc                 C   s
   d| j  S )NzCreates extension %sr   ©r   r   r   r   Údescribe>   s    zCreateExtension.describec                 C   s
   d| j  S )Nzcreate_extension_%sr   r,   r   r   r   Úmigration_name_fragmentA   s    z'CreateExtension.migration_name_fragmentN)Ú__name__Ú
__module__Ú__qualname__Z
reversibler   r   r'   r(   r   r-   Úpropertyr.   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   G   s    zBloomExtension.__init__N©r/   r0   r1   r   r   r   r   r   r3   F   s   r3   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   L   s    zBtreeGinExtension.__init__Nr4   r   r   r   r   r5   K   s   r5   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   Q   s    zBtreeGistExtension.__init__Nr4   r   r   r   r   r6   P   s   r6   c                   @   s   e Zd Zdd„ ZdS )ÚCITextExtensionc                 C   s
   d| _ d S )NZcitextr   r,   r   r   r   r   V   s    zCITextExtension.__init__Nr4   r   r   r   r   r7   U   s   r7   c                   @   s   e Zd Zdd„ ZdS )ÚCryptoExtensionc                 C   s
   d| _ d S )NZpgcryptor   r,   r   r   r   r   [   s    zCryptoExtension.__init__Nr4   r   r   r   r   r8   Z   s   r8   c                   @   s   e Zd Zdd„ ZdS )ÚHStoreExtensionc                 C   s
   d| _ d S )NZhstorer   r,   r   r   r   r   `   s    zHStoreExtension.__init__Nr4   r   r   r   r   r9   _   s   r9   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   e   s    zTrigramExtension.__init__Nr4   r   r   r   r   r:   d   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   j   s    zUnaccentExtension.__init__Nr4   r   r   r   r   r;   i   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_transactiono   s    ÿÿz0NotInTransactionMixin._ensure_not_in_transactionN)r/   r0   r1   r?   r   r   r   r   r<   n   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f S )Nz7Concurrently create index %s on field(s) %s of model %sú, )Úindexr   ÚjoinÚfieldsÚ
model_namer,   r   r   r   r-   |   s
    ýzAddIndexConcurrently.describec                 C   s@   |   |¡ |j || j¡}|  |jj|¡r<|j|| jdd� d S ©NT)Zconcurrently)	r?   ÚappsÚ	get_modelrE   Úallow_migrate_modelr   r   Ú	add_indexrB   ©r   r   r$   r%   r&   Úmodelr   r   r   r'   ƒ   s    
z&AddIndexConcurrently.database_forwardsc                 C   s@   |   |¡ |j || j¡}|  |jj|¡r<|j|| jdd� d S rF   )	r?   rG   rH   rE   rI   r   r   Úremove_indexrB   rK   r   r   r   r(   ‰   s    
z'AddIndexConcurrently.database_backwardsN©r/   r0   r1   Ú__doc__Zatomicr-   r'   r(   r   r   r   r   r@   w   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   rE   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 rF   )r?   rG   rH   rE   rI   r   r   ÚmodelsÚmodel_name_lowerÚget_index_by_namer   rM   )r   r   r$   r%   r&   rL   Zfrom_model_staterB   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 rF   )r?   rG   rH   rE   rI   r   r   rR   rS   rT   r   rJ   )r   r   r$   r%   r&   rL   Zto_model_staterB   r   r   r   r(       s    
z*RemoveIndexConcurrently.database_backwardsNrN   r   r   r   r   rP   �   s
   rP   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   ÚlocalerW   rX   )r   r   rY   rW   rX   r   r   r   r   ª   s    zCollationOperation.__init__c                 C   s   d S r   r   r   r   r   r   r   °   s    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   rY   rV   rW   FrX   )r   rY   rW   rX   r=   r1   )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 )NrY   rV   rW   FÚfalserX   z$CREATE COLLATION %(name)s (%(args)s)rA   c                 s   s    | ]\}}|› d |› �V  qdS )ú=Nr   )Ú.0ÚoptionÚvaluer   r   r   Ú	<genexpr>É   s   z6CollationOperation.create_collation.<locals>.<genexpr>)r   Úargs)r    rY   rW   rX   r   r   rC   Úitems)r   r$   rb   r   r   r   Úcreate_collation¿   s    



ÿþÿÿz#CollationOperation.create_collationc                 C   s   |  d| | j¡ ¡ d S )NzDROP COLLATION %s)r   r    r   r>   r   r   r   Úremove_collationÏ   s    ÿz#CollationOperation.remove_collationN)r/   r0   r1   r   r   r[   rd   re   r   r   r   r   rU   ©   s
   rU   c                   @   s4   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   s.   |j jdkst |j j|¡s d S |  |¡ d S ©Nr   )r   r   r   r   r   rd   r#   r   r   r   r'   Ø   s
    ÿz!CreateCollation.database_forwardsc                 C   s"   t  |jj|¡sd S |  |¡ d S r   )r   r   r   r   re   r#   r   r   r   r(   ß   s    z"CreateCollation.database_backwardsc                 C   s   d| j › �S )NzCreate collation r   r,   r   r   r   r-   ä   s    zCreateCollation.describec                 C   s   d| j  ¡  S )Nzcreate_collation_%s©r   Úlowerr,   r   r   r   r.   ç   s    z'CreateCollation.migration_name_fragmentN©	r/   r0   r1   rO   r'   r(   r-   r2   r.   r   r   r   r   rf   Õ   s   rf   c                   @   s4   e Zd ZdZdd„ Zdd„ Zdd„ Zedd	„ ƒZd
S )ÚRemoveCollationzRemove a collation.c                 C   s.   |j jdkst |j j|¡s d S |  |¡ d S rg   )r   r   r   r   r   re   r#   r   r   r   r'   ï   s
    ÿz!RemoveCollation.database_forwardsc                 C   s"   t  |jj|¡sd S |  |¡ d S r   )r   r   r   r   rd   r#   r   r   r   r(   ö   s    z"RemoveCollation.database_backwardsc                 C   s   d| j › �S )NzRemove collation r   r,   r   r   r   r-   û   s    zRemoveCollation.describec                 C   s   d| j  ¡  S )Nzremove_collation_%srh   r,   r   r   r   r.   þ   s    z'RemoveCollation.migration_name_fragmentNrj   r   r   r   r   rk   ì   s   rk   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   rE   Ú
constraint©r=   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)rp   r   rE   r,   r   r   r   r-     s    þzAddConstraintNotValid.describec                 C   sL   |j  || j¡}|  |jj|¡rH| j ||¡}|rH|jt	|ƒd d d� d S )Nz
 NOT VALID)Úparams)
rG   rH   rE   rI   r   r   rp   Z
create_sqlr   Ústr)r   r   r$   r%   r&   rL   Zconstraint_sqlr   r   r   r'     s
    z'AddConstraintNotValid.database_forwardsc                    s   t ƒ jd S )NZ
_not_valid)ro   r.   r,   rq   r   r   r.      s    z-AddConstraintNotValid.migration_name_fragment)
r/   r0   r1   rO   r   r-   r'   r2   r.   Ú__classcell__r   r   rq   r   rl     s   
rl   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   ©rE   r   )r   rE   r   r   r   r   r   (  s    zValidateConstraint.__init__c                 C   s   d| j | jf S )Nz"Validate constraint %s on model %srQ   r,   r   r   r   r-   ,  s    zValidateConstraint.describec                 C   sH   |j  || j¡}|  |jj|¡rD| d| |jj	¡| | j
¡f ¡ d S )Nz%ALTER TABLE %s VALIDATE CONSTRAINT %s)rG   rH   rE   rI   r   r   r   r    Ú_metaZdb_tabler   rK   r   r   r   r'   /  s    
þÿÿz$ValidateConstraint.database_forwardsc                 C   s   d S r   r   r#   r   r   r   r(   :  s    z%ValidateConstraint.database_backwardsc                 C   s   d S r   r   r   r   r   r   r   >  s    z!ValidateConstraint.state_forwardsc                 C   s   d| j  ¡ | j ¡ f S )Nz%s_validate_%s)rE   ri   r   r,   r   r   r   r.   A  s    z*ValidateConstraint.migration_name_fragmentc                 C   s   | j jg | j| jdœfS )Nrv   )r=   r/   rE   r   r,   r   r   r   r[   E  s    þýzValidateConstraint.deconstructN)r/   r0   r1   rO   r   r-   r'   r(   r   r2   r.   r[   r   r   r   r   ru   %  s   
ru   N) Zdjango.contrib.postgres.signalsr   r   r   Z	django.dbr   r   Zdjango.db.migrationsr   r   r	   Z$django.db.migrations.operations.baser
   Zdjango.db.models.constraintsr   r   r3   r5   r6   r7   r8   r9   r:   r;   r<   r@   rP   rU   rf   rk   rl   ru   r   r   r   r   Ú<module>   s*   :	,"