a
    xd                     @   s   d dl mZ d dlmZ d dlmZ g d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dS )    )NotSupportedError)Index)cached_property)
BloomIndex	BrinIndex
BTreeIndexGinIndex	GistIndex	HashIndexSpGistIndexc                       s:   e Zd Zedd Zd
 fdd	Zdd Zdd	 Z  ZS )PostgresIndexc                 C   s   t jtt j t| j S N)r   max_name_lengthlensuffixself r   W/var/www/html/Ranjet/env/lib/python3.9/site-packages/django/contrib/postgres/indexes.pyr      s    zPostgresIndex.max_name_length c                    sX   |  | t j||fdd| j i|}|  }|rTdd||jd f |jd< |S )Nusingz	 USING %szWITH (%s) %sz, extra)check_supportedsuper
create_sqlr   get_with_paramsjoinparts)r   modelschema_editorr   kwargsZ	statementwith_params	__class__r   r   r      s    
 zPostgresIndex.create_sqlc                 C   s   d S r   r   r   r   r   r   r   r       s    zPostgresIndex.check_supportedc                 C   s   g S r   r   r   r   r   r   r   #   s    zPostgresIndex.get_with_params)r   )	__name__
__module____qualname__r   r   r   r   r   __classcell__r   r   r"   r   r      s
   
r   c                       sD   e Zd ZdZddd fdd
Z fddZd	d
 Zdd Z  ZS )r   ZbloomNr   )lengthcolumnsc                   s   t  jf i | t| jdkr(tdt|ttfs>tdt|t| jkrXtdtdd |D srtd|d urd|  k rd	ksn td
|| _	|| _
d S )N    z-Bloom indexes support a maximum of 32 fields.z+BloomIndex.columns must be a list or tuple.z7BloomIndex.columns cannot have more values than fields.c                 s   s&   | ]}d |  k odkn  V  qdS )r   i  Nr   ).0colr   r   r   	<genexpr>4       z&BloomIndex.__init__.<locals>.<genexpr>z8BloomIndex.columns must contain integers from 1 to 4095.r   i   z<BloomIndex.length must be None or an integer from 1 to 4096.)r   __init__r   fields
ValueError
isinstancelisttupleallr)   r*   )r   r)   r*   r    r"   r   r   r0   *   s&    zBloomIndex.__init__c                    s>   t   \}}}| jd ur$| j|d< | jr4| j|d< |||fS )Nr)   r*   )r   deconstructr)   r*   r   pathargsr    r"   r   r   r7   ?   s    


zBloomIndex.deconstructc                 C   s   |j jjstdd S )Nz&Bloom indexes require PostgreSQL 9.6+.)
connectionfeaturesZhas_bloom_indexr   r$   r   r   r   r   G   s    
zBloomIndex.check_supportedc                 C   sF   g }| j d ur|d| j   | jrB|dd t| jddD  |S )Nzlength = %dc                 s   s   | ]\}}d ||f V  qdS )z
col%d = %dNr   )r,   ivr   r   r   r.   P   s   z-BloomIndex.get_with_params.<locals>.<genexpr>   )start)r)   appendr*   extend	enumerater   r!   r   r   r   r   K   s    

zBloomIndex.get_with_params	r%   r&   r'   r   r0   r7   r   r   r(   r   r   r"   r   r   '   s
   r   c                       sD   e Zd ZdZddd fdd
Z fddZdd	 Zd
d Z  ZS )r   ZbrinN)autosummarizepages_per_rangec                   s:   |d ur|dkrt d|| _|| _t jf i | d S )Nr   z2pages_per_range must be None or a positive integer)r2   rF   rG   r   r0   )r   rF   rG   r    r"   r   r   r0   Z   s
    zBrinIndex.__init__c                    sB   t   \}}}| jd ur$| j|d< | jd ur8| j|d< |||fS )NrF   rG   )r   r7   rF   rG   r8   r"   r   r   r7   a   s    



zBrinIndex.deconstructc                 C   s   | j r|jjjstdd S )Nz2BRIN option autosummarize requires PostgreSQL 10+.)rF   r;   r<   Zhas_brin_autosummarizer   r$   r   r   r   r   i   s    zBrinIndex.check_supportedc                 C   sD   g }| j d ur&|d| j rdnd  | jd ur@|d| j  |S )Nzautosummarize = %sonoffzpages_per_range = %d)rF   rA   rG   rD   r   r   r   r   m   s    

zBrinIndex.get_with_paramsrE   r   r   r"   r   r   W   s
   r   c                       s:   e Zd ZdZdd fdd
Z fddZdd	 Z  ZS )
r   ZbtreeN
fillfactorc                   s   || _ t jf i | d S r   rK   r   r0   r   rK   r    r"   r   r   r0   y   s    zBTreeIndex.__init__c                    s.   t   \}}}| jd ur$| j|d< |||fS NrK   r   r7   rK   r8   r"   r   r   r7   }   s    

zBTreeIndex.deconstructc                 C   s"   g }| j d ur|d| j   |S Nfillfactor = %drK   rA   rD   r   r   r   r      s    
zBTreeIndex.get_with_paramsr%   r&   r'   r   r0   r7   r   r(   r   r   r"   r   r   v   s   r   c                       s<   e Zd ZdZddd fdd
Z fddZdd	 Z  ZS )
r   ZginN)
fastupdategin_pending_list_limitc                   s"   || _ || _t jf i | d S r   )rT   rU   r   r0   )r   rT   rU   r    r"   r   r   r0      s    zGinIndex.__init__c                    sB   t   \}}}| jd ur$| j|d< | jd ur8| j|d< |||fS )NrT   rU   )r   r7   rT   rU   r8   r"   r   r   r7      s    



zGinIndex.deconstructc                 C   sD   g }| j d ur|d| j   | jd ur@|d| jr8dnd  |S )Nzgin_pending_list_limit = %dzfastupdate = %srH   rI   )rU   rA   rT   rD   r   r   r   r      s    

zGinIndex.get_with_paramsrS   r   r   r"   r   r      s   r   c                       s<   e Zd ZdZddd fdd
Z fddZdd	 Z  ZS )
r	   ZgistN)	bufferingrK   c                   s"   || _ || _t jf i | d S r   )rV   rK   r   r0   )r   rV   rK   r    r"   r   r   r0      s    zGistIndex.__init__c                    sB   t   \}}}| jd ur$| j|d< | jd ur8| j|d< |||fS )NrV   rK   )r   r7   rV   rK   r8   r"   r   r   r7      s    



zGistIndex.deconstructc                 C   sD   g }| j d ur&|d| j rdnd  | jd ur@|d| j  |S )Nzbuffering = %srH   rI   rQ   )rV   rA   rK   rD   r   r   r   r      s    

zGistIndex.get_with_paramsrS   r   r   r"   r   r	      s   r	   c                       s:   e Zd ZdZdd fdd
Z fddZdd	 Z  ZS )
r
   hashNrJ   c                   s   || _ t jf i | d S r   rL   rM   r"   r   r   r0      s    zHashIndex.__init__c                    s.   t   \}}}| jd ur$| j|d< |||fS rN   rO   r8   r"   r   r   r7      s    

zHashIndex.deconstructc                 C   s"   g }| j d ur|d| j   |S rP   rR   rD   r   r   r   r      s    
zHashIndex.get_with_paramsrS   r   r   r"   r   r
      s   r
   c                       s:   e Zd ZdZdd fdd
Z fddZdd	 Z  ZS )
r   ZspgistNrJ   c                   s   || _ t jf i | d S r   rL   rM   r"   r   r   r0      s    zSpGistIndex.__init__c                    s.   t   \}}}| jd ur$| j|d< |||fS rN   rO   r8   r"   r   r   r7      s    

zSpGistIndex.deconstructc                 C   s"   g }| j d ur|d| j   |S rP   rR   rD   r   r   r   r      s    
zSpGistIndex.get_with_paramsrS   r   r   r"   r   r      s   r   N)Z	django.dbr   Zdjango.db.modelsr   Zdjango.utils.functionalr   __all__r   r   r   r   r   r	   r
   r   r   r   r   r   <module>   s   0