o
    [h                       @   s   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 )    )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   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/django/contrib/postgres/indexes.pyr      s   zPostgresIndex.max_name_length c                    s\   |  | t j||fdd|p| 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>7   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   r/   /   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   r7   B   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   r.   O   s    
z-BloomIndex.get_with_params.<locals>.<genexpr>   )start)r)   appendr*   extend	enumerater   r!   r   r   r   r   J   s   

zBloomIndex.get_with_paramsr%   r&   r'   r   r/   r7   r   r(   r   r   r"   r   r   ,   s
    r   c                       <   e Zd ZdZddd fdd
Z f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)r1   rE   rF   r   r/   )r   rE   rF   r6   r    r"   r   r   r/   X   s
   zBrinIndex.__init__c                    B   t   \}}}| jd ur| j|d< | jd ur| j|d< |||fS )NrE   rF   )r   r7   rE   rF   r8   r"   r   r   r7   a      




zBrinIndex.deconstructc                 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)rE   r?   rF   rB   r   r   r   r   i   s   

zBrinIndex.get_with_paramsrC   r   r   r"   r   r   U   s    	r   c                       rD   )
r   ZbtreeN)
fillfactordeduplicate_itemsc                   "   || _ || _t j|i | d S r   )rL   rM   r   r/   )r   rL   rM   r6   r    r"   r   r   r/   w      zBTreeIndex.__init__c                    rG   )NrL   rM   )r   r7   rL   rM   r8   r"   r   r   r7   |   rH   zBTreeIndex.deconstructc                 C   D   g }| j d ur|d| j   | jd ur |d| jrdnd  |S )Nfillfactor = %dzdeduplicate_items = %srJ   rK   )rL   r?   rM   rB   r   r   r   r      s   

zBTreeIndex.get_with_paramsrC   r   r   r"   r   r   t   
    r   c                       rD   )
r   ZginN)
fastupdategin_pending_list_limitc                   rN   r   )rS   rT   r   r/   )r   rS   rT   r6   r    r"   r   r   r/      s   zGinIndex.__init__c                    rG   )NrS   rT   )r   r7   rS   rT   r8   r"   r   r   r7      rH   zGinIndex.deconstructc                 C   rP   )Nzgin_pending_list_limit = %dzfastupdate = %srJ   rK   )rT   r?   rS   rB   r   r   r   r      s   

zGinIndex.get_with_paramsrC   r   r   r"   r   r      s    r   c                       rD   )
r	   ZgistN)	bufferingrL   c                   rN   r   )rU   rL   r   r/   )r   rU   rL   r6   r    r"   r   r   r/      rO   zGistIndex.__init__c                    rG   )NrU   rL   )r   r7   rU   rL   r8   r"   r   r   r7      rH   zGistIndex.deconstructc                 C   rI   )Nzbuffering = %srJ   rK   rQ   )rU   r?   rL   rB   r   r   r   r      s   

zGistIndex.get_with_paramsrC   r   r   r"   r   r	      rR   r	   c                       :   e Zd ZdZdd fdd
Z fddZdd	 Z  ZS )
r
   hashNrL   c                      || _ t j|i | d S r   rL   r   r/   r   rL   r6   r    r"   r   r   r/         zHashIndex.__init__c                    .   t   \}}}| jd ur| j|d< |||fS NrL   r   r7   rL   r8   r"   r   r   r7         


zHashIndex.deconstructc                 C   "   g }| j d ur|d| j   |S NrQ   rL   r?   rB   r   r   r   r         
zHashIndex.get_with_paramsrC   r   r   r"   r   r
      
    r
   c                       rV   )
r   ZspgistNrX   c                   rY   r   rZ   r[   r"   r   r   r/      r\   zSpGistIndex.__init__c                    r]   r^   r_   r8   r"   r   r   r7      r`   zSpGistIndex.deconstructc                 C   ra   rb   rc   rB   r   r   r   r      rd   zSpGistIndex.get_with_paramsrC   r   r   r"   r   r      re   r   c                       s$   e Zd ZdZdZ fddZ  ZS )OpClassz%(expressions)s %(name)sFc                    s   t  j||d d S )N)name)r   r/   )r   
expressionrg   r"   r   r   r/      s   zOpClass.__init__)r%   r&   r'   templateZ constraint_validation_compatibler/   r(   r   r   r"   r   rf      s    rf   N)Zdjango.db.modelsr   r   Zdjango.utils.functionalr   __all__r   r   r   r   r   r	   r
   r   rf   r   r   r   r   <module>   s    )