o
    h                      @   s   d dl mZ d dlmZ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G dd deZdS )    )NotSupportedError)Func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   g/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/django/contrib/postgres/indexes.pyr      s   zPostgresIndex.max_name_length c                    sX   |  | t j||fdd| j i|}|  }|r*d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          zPostgresIndex.check_supportedc                 C   s   g S r   r   r   r   r   r   r   #   r&   zPostgresIndex.get_with_params)r   )	__name__
__module____qualname__r   r   r   r   r   __classcell__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bloomNr   )lengthcolumnsc                   s   t  j|i | t| jdkrtdt|ttfstdt|t| jkr,tdtdd |D s9td|d urOd|  k rJd	ksOtd
 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   s   & 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,   expressionsr!   r#   r   r   r1   *   s.   
zBloomIndex.__init__c                    s>   t   \}}}| jd ur| j|d< | jr| j|d< |||fS )Nr+   r,   )r   deconstructr+   r,   r   pathargsr!   r#   r   r   r9   ?   s   



zBloomIndex.deconstructc                 C   sF   g }| j d ur|d| j   | jr!|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   r0   L   s
    

z-BloomIndex.get_with_params.<locals>.<genexpr>   )start)r+   appendr,   extend	enumerater   r"   r   r   r   r   G   s   

zBloomIndex.get_with_paramsr'   r(   r)   r   r1   r9   r   r*   r   r   r#   r   r   '   s
    r   c                       D   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|i | d S )Nr   z2pages_per_range must be None or a positive integer)r3   rG   rH   r   r1   )r   rG   rH   r8   r!   r#   r   r   r1   V   s
   zBrinIndex.__init__c                    B   t   \}}}| jd ur| j|d< | jd ur| j|d< |||fS )NrG   rH   )r   r9   rG   rH   r:   r#   r   r   r9   ]      




zBrinIndex.deconstructc                 C       | j r|jjjstdd S d S )Nz2BRIN option autosummarize requires PostgreSQL 10+.)rG   
connectionfeaturesZhas_brin_autosummarizer   r%   r   r   r   r   e      zBrinIndex.check_supportedc                 C   D   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)rG   rA   rH   rD   r   r   r   r   i      

zBrinIndex.get_with_params)	r'   r(   r)   r   r1   r9   r   r   r*   r   r   r#   r   r   S   s    r   c                       :   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                      || _ t j|i | d S r   rU   r   r1   r   rU   r8   r!   r#   r   r   r1   u      zBTreeIndex.__init__c                    .   t   \}}}| jd ur| j|d< |||fS NrU   r   r9   rU   r:   r#   r   r   r9   y      


zBTreeIndex.deconstructc                 C   "   g }| j d ur|d| j   |S Nfillfactor = %drU   rA   rD   r   r   r   r         
zBTreeIndex.get_with_paramsrE   r   r   r#   r   r   r   
    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                   "   || _ || _t j|i | d S r   )rd   re   r   r1   )r   rd   re   r8   r!   r#   r   r   r1         zGinIndex.__init__c                    rI   )Nrd   re   )r   r9   rd   re   r:   r#   r   r   r9      rJ   zGinIndex.deconstructc                 C   sD   g }| j d ur|d| j   | jd ur |d| jrdnd  |S )Nzgin_pending_list_limit = %dzfastupdate = %srP   rQ   )re   rA   rd   rD   r   r   r   r      s   

zGinIndex.get_with_paramsrE   r   r   r#   r   r	      s
    r	   c                       rF   )r
   ZgistN)	bufferingrU   c                   rf   r   )rh   rU   r   r1   )r   rh   rU   r8   r!   r#   r   r   r1      rg   zGistIndex.__init__c                    rI   )Nrh   rU   )r   r9   rh   rU   r:   r#   r   r   r9      rJ   zGistIndex.deconstructc                 C   rO   )Nzbuffering = %srP   rQ   r`   )rh   rA   rU   rD   r   r   r   r      rR   zGistIndex.get_with_paramsc                 C   rK   )Nz.Covering GiST indexes requires PostgreSQL 12+.)includerL   rM   Zsupports_covering_gist_indexesr   r%   r   r   r   r      rN   zGistIndex.check_supported)	r'   r(   r)   r   r1   r9   r   r   r*   r   r   r#   r   r
      s    r
   c                       rS   )
r   hashNrT   c                   rV   r   rW   rX   r#   r   r   r1      rY   zHashIndex.__init__c                    rZ   r[   r\   r:   r#   r   r   r9      r]   zHashIndex.deconstructc                 C   r^   r_   ra   rD   r   r   r   r      rb   zHashIndex.get_with_paramsrE   r   r   r#   r   r      rc   r   c                       rS   )
r   ZspgistNrT   c                   rV   r   rW   rX   r#   r   r   r1      rY   zSpGistIndex.__init__c                    rZ   r[   r\   r:   r#   r   r   r9      r]   zSpGistIndex.deconstructc                 C   r^   r_   ra   rD   r   r   r   r      rb   zSpGistIndex.get_with_paramsrE   r   r   r#   r   r      rc   r   c                       s    e Zd ZdZ fddZ  ZS )OpClassz%(expressions)s %(name)sc                    s   t  j||d d S )N)name)r   r1   )r   
expressionrl   r#   r   r   r1      s   zOpClass.__init__)r'   r(   r)   templater1   r*   r   r   r#   r   rk      s    rk   N)Z	django.dbr   Zdjango.db.modelsr   r   Zdjango.utils.functionalr   __all__r   r   r   r   r	   r
   r   r   rk   r   r   r   r   <module>   s    ,