a
    Kcòf»  ã                   @   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   ú\/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/contrib/postgres/indexes.pyr      s    zPostgresIndex.max_name_lengthÚ c                    s\   |   |¡ tƒ j||fdd|p"| j i|¤Ž}|  ¡ }|rXd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                       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rXtdƒ‚tdd„ |D ƒƒsrtdƒ‚|d ur˜d|  k rŽd	ks˜n 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>8   ó    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   0   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   r9   C   s    


zBloomIndex.deconstructc                 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   r1   r9   r   r)   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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   rF   rG   r   r1   )r   rF   rG   r8   r!   r#   r   r   r1   Y   s
    zBrinIndex.__init__c                    sB   t ƒ  ¡ \}}}| jd ur$| j|d< | jd ur8| j|d< |||fS )NrF   rG   )r   r9   rF   rG   r:   r#   r   r   r9   b   s    



zBrinIndex.deconstructc                 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   j   s    
ÿ
zBrinIndex.get_with_paramsrE   r   r   r#   r   r   V   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|i |¤Ž d S r   ©rK   r   r1   ©r   rK   r8   r!   r#   r   r   r1   x   s    zBTreeIndex.__init__c                    s.   t ƒ  ¡ \}}}| jd ur$| j|d< |||fS ©NrK   ©r   r9   rK   r:   r#   r   r   r9   |   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_paramsrE   r   r   r#   r   r   u   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|i |¤Ž d S r   )rS   rT   r   r1   )r   rS   rT   r8   r!   r#   r   r   r1   Œ   s    zGinIndex.__init__c                    sB   t ƒ  ¡ \}}}| jd ur$| j|d< | jd ur8| j|d< |||fS )NrS   rT   )r   r9   rS   rT   r:   r#   r   r   r9   “   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   )rT   rA   rS   rD   r   r   r   r   ›   s    
ÿ
zGinIndex.get_with_paramsrE   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|i |¤Ž d S r   )rU   rK   r   r1   )r   rU   rK   r8   r!   r#   r   r   r1   ©   s    zGistIndex.__init__c                    sB   t ƒ  ¡ \}}}| jd ur$| j|d< | jd ur8| j|d< |||fS )NrU   rK   )r   r9   rU   rK   r:   r#   r   r   r9   ®   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   )rU   rA   rK   rD   r   r   r   r   ¶   s    

zGistIndex.get_with_paramsrE   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|i |¤Ž d S r   rL   rM   r#   r   r   r1   Â   s    zHashIndex.__init__c                    s.   t ƒ  ¡ \}}}| jd ur$| j|d< |||fS rN   rO   r:   r#   r   r   r9   Æ   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_paramsrE   r   r   r#   r   r   ¿   s   r   c                       sB   e Zd ZdZddœ‡ fdd„
Z‡ fdd„Zdd	„ Zd
d„ Z‡  ZS )r   ZspgistNrJ   c                   s   || _ tƒ j|i |¤Ž d S r   rL   rM   r#   r   r   r1   Ö   s    zSpGistIndex.__init__c                    s.   t ƒ  ¡ \}}}| jd ur$| j|d< |||fS rN   rO   r:   r#   r   r   r9   Ú   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_paramsc                 C   s   | j r|jjjstdƒ‚d S )Nz0Covering SP-GiST indexes require PostgreSQL 14+.)ÚincludeÚ
connectionÚfeaturesZ supports_covering_spgist_indexesr   r%   r   r   r   r   æ   s
    ÿþzSpGistIndex.check_supported)	r&   r'   r(   r   r1   r9   r   r   r)   r   r   r#   r   r   Ó   s
   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   Z
expressionr[   r#   r   r   r1   ñ   s    zOpClass.__init__)r&   r'   r(   Útemplater1   r)   r   r   r#   r   rZ   î   s   rZ   N)Z	django.dbr   Zdjango.db.modelsr   r   Zdjango.utils.functionalr   Ú__all__r   r   r   r   r	   r
   r   r   rZ   r   r   r   r   Ú<module>   s   )