o
    (S-gW!  ã                   @   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   ú^/var/www/html/map_library/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   ÚkwargsÚ	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   Ú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>8   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   r3   0   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   r;   C   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   )r0   ÚiÚvr   r   r   r2   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   r3   r;   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   Ú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)r5   rJ   rK   r   r3   )r   rJ   rK   r:   r!   r$   r   r   r3   Y   s
   zBrinIndex.__init__c                    óB   t ƒ  ¡ \}}}| jd ur| j|d< | jd ur| j|d< |||fS )NrJ   rK   )r   r;   rJ   rK   r<   r$   r   r   r;   b   ó   




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)rJ   rC   rK   rF   r   r   r   r   j   s   
ÿ
zBrinIndex.get_with_paramsrG   r   r   r$   r   r   V   s    ÿ	r   c                       rH   )
r   ÚbtreeN)Ú
fillfactorÚdeduplicate_itemsc                   ó"   || _ || _tƒ j|i |¤Ž d S r   )rR   rS   r   r3   )r   rR   rS   r:   r!   r$   r   r   r3   x   ó   zBTreeIndex.__init__c                    rL   )NrR   rS   )r   r;   rR   rS   r<   r$   r   r   r;   }   rM   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 = %srO   rP   )rR   rC   rS   rF   r   r   r   r   …   s   

ÿzBTreeIndex.get_with_paramsrG   r   r   r$   r   r   u   ó
    r   c                       rH   )
r	   ÚginN)Ú
fastupdateÚgin_pending_list_limitc                   rT   r   )rZ   r[   r   r3   )r   rZ   r[   r:   r!   r$   r   r   r3   “   s   zGinIndex.__init__c                    rL   )NrZ   r[   )r   r;   rZ   r[   r<   r$   r   r   r;   š   rM   zGinIndex.deconstructc                 C   rV   )Nzgin_pending_list_limit = %dzfastupdate = %srO   rP   )r[   rC   rZ   rF   r   r   r   r   ¢   s   
ÿ
zGinIndex.get_with_paramsrG   r   r   r$   r   r	   �   s    ÿr	   c                       rH   )
r
   ÚgistN)Ú	bufferingrR   c                   rT   r   )r]   rR   r   r3   )r   r]   rR   r:   r!   r$   r   r   r3   °   rU   zGistIndex.__init__c                    rL   )Nr]   rR   )r   r;   r]   rR   r<   r$   r   r   r;   µ   rM   zGistIndex.deconstructc                 C   rN   )Nzbuffering = %srO   rP   rW   )r]   rC   rR   rF   r   r   r   r   ½   s   

zGistIndex.get_with_paramsrG   r   r   r$   r   r
   ­   rX   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   ÚhashN©rR   c                   ó   || _ tƒ j|i |¤Ž d S r   ©rR   r   r3   ©r   rR   r:   r!   r$   r   r   r3   É   ó   zHashIndex.__init__c                    ó.   t ƒ  ¡ \}}}| jd ur| j|d< |||fS ©NrR   ©r   r;   rR   r<   r$   r   r   r;   Í   ó   


zHashIndex.deconstructc                 C   ó"   g }| j d ur| d| j  ¡ |S ©NrW   ©rR   rC   rF   r   r   r   r   Ó   ó   
zHashIndex.get_with_paramsrG   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   ÚspgistNr_   c                   r`   r   ra   rb   r$   r   r   r3   Ý   rc   zSpGistIndex.__init__c                    rd   re   rf   r<   r$   r   r   r;   á   rg   zSpGistIndex.deconstructc                 C   rh   ri   rj   rF   r   r   r   r   ç   rk   zSpGistIndex.get_with_paramsc                 C   s    | j r|jjjstdƒ‚d S d S )Nz0Covering SP-GiST indexes require PostgreSQL 14+.)ÚincludeÚ
connectionÚfeaturesÚ supports_covering_spgist_indexesr   r&   r   r   r   r   í   s   ÿþüzSpGistIndex.check_supported)	r(   r)   r*   r   r3   r;   r   r   r+   r   r   r$   r   r   Ú   s    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   r3   )r   Ú
expressionrr   r$   r   r   r3   ù   s   zOpClass.__init__)r(   r)   r*   ÚtemplateÚ constraint_validation_compatibler3   r+   r   r   r$   r   rq   õ   s    rq   N)Ú	django.dbr   Údjango.db.modelsr   r   Údjango.utils.functionalr   Ú__all__r   r   r   r   r	   r
   r   r   rq   r   r   r   r   Ú<module>   s    )