
    h                         d dl mZ d dlmZ d dlmZ g dZ G d de      Z G d de      Z G d	 d
e      Z	 G d de      Z
 G d de      Z G d de      Z G d de      Z G d de      Zy)    )NotSupportedError)Index)cached_property)
BloomIndex	BrinIndex
BTreeIndexGinIndex	GistIndex	HashIndexSpGistIndexc                   <     e Zd Zed        Zd fd	Zd Zd Z xZS )PostgresIndexc                     t         j                  t        t         j                        z
  t        | j                        z   S N)r   max_name_lengthlensuffixselfs    b/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/contrib/postgres/indexes.pyr   zPostgresIndex.max_name_length   s,     $$s5<<'883t{{;KKK    c                     | j                  |       t        |   ||fdd| j                  z  i|}| j	                         }|r1ddj                  |      d|j                  d   |j                  d<   |S )Nusingz	 USING %szWITH (z, z) extra)check_supportedsuper
create_sqlr   get_with_paramsjoinparts)r   modelschema_editorr   kwargs	statementwith_params	__class__s          r   r   zPostgresIndex.create_sql   sz    ]+G&umg;QUQ\Q\C\g`fg	**,		+&((IOOG$ r   c                      y r    r   r"   s     r   r   zPostgresIndex.check_supported    s    r   c                     g S r   r(   r   s    r   r   zPostgresIndex.get_with_params#   s    	r   ) )	__name__
__module____qualname__r   r   r   r   r   __classcell__r&   s   @r   r   r      s&    L L	r   r   c                   @     e Zd ZdZddd fd
Z fdZd Zd Z xZS )	r   bloomNr(   )lengthcolumnsc                   t        |   d
i | t        | j                        dkD  rt	        d      t        |t        t        f      st	        d      t        |      t        | j                        kD  rt	        d      t        d |D              st	        d      |"d|cxk  rdk  st	        d	       t	        d	      || _	        || _
        y )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              3   <   K   | ]  }d |cxk  xr dk  nc   yw)r   i  Nr(   ).0cols     r   	<genexpr>z&BloomIndex.__init__.<locals>.<genexpr>4   s     6s1s?d??6s   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(   )r   __init__r   fields
ValueError
isinstancelisttupleallr3   r4   )r   r3   r4   r#   r&   s       r   r;   zBloomIndex.__init__*   s    "6"t{{b LMM'D%=1JKKw<#dkk**I  6g66J  a&&8D&8N  '9N  r   c                     t         |          \  }}}| j                  | j                  |d<   | j                  r| j                  |d<   |||fS )Nr3   r4   )r   deconstructr3   r4   r   pathargsr#   r&   s       r   rC   zBloomIndex.deconstruct?   sQ    "W02dF;;"#{{F8<< $F9T6!!r   c                 Z    |j                   j                  j                  st        d      y )Nz&Bloom indexes require PostgreSQL 9.6+.)
connectionfeatureshas_bloom_indexr   r)   s     r   r   zBloomIndex.check_supportedG   s)    ''00@@#$LMM Ar   c                     g }| j                   |j                  d| j                   z         | j                  r-|j                  d t	        | j                  d      D               |S )Nzlength = %dc              3   0   K   | ]  \  }}d ||fz    yw)z
col%d = %dNr(   )r8   ivs      r   r:   z-BloomIndex.get_with_params.<locals>.<genexpr>P   s%      Aq 1v%s      )start)r3   appendr4   extend	enumerater   r%   s     r   r   zBloomIndex.get_with_paramsK   s]    ;;"}t{{:;<< %dll!<  r   	r,   r-   r.   r   r;   rC   r   r   r/   r0   s   @r   r   r   '   s"    F!%r *"N	r   r   c                   @     e Zd ZdZddd fd
Z fdZd Zd Z xZS )r   brinN)autosummarizepages_per_rangec                d    ||dk  rt        d      || _        || _        t        |   di | y )Nr   z2pages_per_range must be None or a positive integerr(   )r=   rX   rY   r   r;   )r   rX   rY   r#   r&   s       r   r;   zBrinIndex.__init__Z   s<    &?a+?QRR*."6"r   c                     t         |          \  }}}| j                  | j                  |d<   | j                  | j                  |d<   |||fS )NrX   rY   )r   rC   rX   rY   rD   s       r   rC   zBrinIndex.deconstructa   s]    "W02dF)&*&8&8F?#+(,(<(<F$%T6!!r   c                 t    | j                   r,|j                  j                  j                  st	        d      y y )Nz2BRIN option autosummarize requires PostgreSQL 10+.)rX   rH   rI   has_brin_autosummarizer   r)   s     r   r   zBrinIndex.check_supportedi   s4    m&>&>&G&G&^&^#$XYY '_r   c                     g }| j                   "|j                  d| j                   rdndz         | j                  |j                  d| j                  z         |S )Nzautosummarize = %sonoffzpages_per_range = %d)rX   rQ   rY   rT   s     r   r   zBrinIndex.get_with_paramsm   s^    )3t?Q?QtW\]^+58L8LLMr   rU   r0   s   @r   r   r   W   s"    F(,d #"Zr   r   c                   8     e Zd ZdZdd fd
Z fdZd Z xZS )r   btreeN
fillfactorc                2    || _         t        |   di | y Nr(   rd   r   r;   r   rd   r#   r&   s      r   r;   zBTreeIndex.__init__y       $"6"r   c                 h    t         |          \  }}}| j                  | j                  |d<   |||fS Nrd   r   rC   rd   rD   s       r   rC   zBTreeIndex.deconstruct}   <    "W02dF??&#'??F< T6!!r   c                 ^    g }| j                   |j                  d| j                   z         |S Nfillfactor = %drd   rQ   rT   s     r   r   zBTreeIndex.get_with_params   /    ??&04??BCr   r,   r-   r.   r   r;   rC   r   r/   r0   s   @r   r   r   v   s    F%) #"r   r   c                   :     e Zd ZdZddd fd
Z fdZd Z xZS )r	   ginN)
fastupdategin_pending_list_limitc                @    || _         || _        t        |   di | y rf   )rv   rw   r   r;   )r   rv   rw   r#   r&   s       r   r;   zGinIndex.__init__   s"    $&<#"6"r   c                     t         |          \  }}}| j                  | j                  |d<   | j                  | j                  |d<   |||fS )Nrv   rw   )r   rC   rv   rw   rD   s       r   rC   zGinIndex.deconstruct   sY    "W02dF??&#'??F< &&2/3/J/JF+,T6!!r   c                     g }| j                   |j                  d| j                   z         | j                  "|j                  d| j                  rdndz         |S )Nzgin_pending_list_limit = %dzfastupdate = %sr_   r`   )rw   rQ   rv   rT   s     r   r   zGinIndex.get_with_params   sZ    &&2<t?Z?ZZ[??&0DOODQVWXr   rs   r0   s   @r   r	   r	      s    F%)$ #
"r   r	   c                   :     e Zd ZdZddd fd
Z fdZd Z xZS )r
   gistN)	bufferingrd   c                @    || _         || _        t        |   di | y rf   )r}   rd   r   r;   )r   r}   rd   r#   r&   s       r   r;   zGistIndex.__init__   s!    "$"6"r   c                     t         |          \  }}}| j                  | j                  |d<   | j                  | j                  |d<   |||fS )Nr}   rd   )r   rC   r}   rd   rD   s       r   rC   zGistIndex.deconstruct   sT    "W02dF>>%"&..F;??&#'??F< T6!!r   c                     g }| j                   "|j                  d| j                   rdndz         | j                  |j                  d| j                  z         |S )Nzbuffering = %sr_   r`   rp   )r}   rQ   rd   rT   s     r   r   zGistIndex.get_with_params   sU    >>%/4>>4uUV??&04??BCr   rs   r0   s   @r   r
   r
      s    F$(T #
"r   r
   c                   8     e Zd ZdZdd fd
Z fdZd Z xZS )r   hashNrc   c                2    || _         t        |   di | y rf   rg   rh   s      r   r;   zHashIndex.__init__   ri   r   c                 h    t         |          \  }}}| j                  | j                  |d<   |||fS rk   rl   rD   s       r   rC   zHashIndex.deconstruct   rm   r   c                 ^    g }| j                   |j                  d| j                   z         |S ro   rq   rT   s     r   r   zHashIndex.get_with_params   rr   r   rs   r0   s   @r   r   r      s    F%) #"r   r   c                   8     e Zd ZdZdd fd
Z fdZd Z xZS )r   spgistNrc   c                2    || _         t        |   di | y rf   rg   rh   s      r   r;   zSpGistIndex.__init__   ri   r   c                 h    t         |          \  }}}| j                  | j                  |d<   |||fS rk   rl   rD   s       r   rC   zSpGistIndex.deconstruct   rm   r   c                 ^    g }| j                   |j                  d| j                   z         |S ro   rq   rT   s     r   r   zSpGistIndex.get_with_params   rr   r   rs   r0   s   @r   r   r      s    F%) #"r   r   N)	django.dbr   django.db.modelsr   django.utils.functionalr   __all__r   r   r   r   r	   r
   r   r   r(   r   r   <module>r      sv    ' " 3E 8- -` > (} 2 2 (- r   