
    h                     (    d dl mZmZ  G d d      Zy)    )FOrderByc                   R     e Zd Zdd fd
Z fdZ fdZ fdZ fdZd Z xZ	S )	OrderableAggMixin orderingc                    t        |t        t        f      s|g}|xs g }d |D        }t        |   |i |  | j
                  | | _        y )Nc              3      K   | ]7  }t        |t              r!|d    dk(  rt        t        |dd       d      n| 9 yw)r   -   NT)
descending)
isinstancestrr   r   ).0os     l/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/contrib/postgres/aggregates/mixins.py	<genexpr>z-OrderableAggMixin.__init__.<locals>.<genexpr>   sC      
 4>a3E!A$RU+WQquX$/[\\
s   =?)r   listtuplesuper__init___parse_expressionsr	   )selfr	   expressionsextra	__class__s       r   r   zOrderableAggMixin.__init__   sX    (T5M2 zH>r

 	+/////:    c                     | j                   D cg c]  } |j                  |i | c}| _         t        |   |i |S c c}w N)r	   resolve_expressionr   )r   argskwargsexprr   s       r   r!   z$OrderableAggMixin.resolve_expression   sG    NRmm\d000$A&A\w)4:6:: ]s   A c                 2   | j                   ryg }g }| j                   D ]8  }|j                  |      \  }}|j                  |       |j                  |       : t        
|   ||ddj                  |      z         \  }}	||	|z   fS t        
|   ||d      S )Nz	ORDER BY z, r    )r	   compileappendextendr   as_sqljoin)r   compiler
connectionordering_paramsordering_expr_sqlr$   expr_sqlexpr_paramssql
sql_paramsr   s             r   r*   zOrderableAggMixin.as_sql   s    == O " 4(0(8(8(>%+!((2&&{34 $gnXzdii(9:: - OC 
_444w~h
R~@@r   c                 t    || j                         d  | _        t        |   |d | j                                S r    )_get_ordering_expressions_indexr	   r   set_source_expressions)r   exprsr   s     r   r6   z(OrderableAggMixin.set_source_expressions$   s>     dBBDEFw-e4[T5Y5Y5[.\]]r   c                 :    t         |          | j                  z   S r    )r   get_source_expressionsr	   )r   r   s    r   r9   z(OrderableAggMixin.get_source_expressions*   s    w-/$--??r   c                 d    | j                         }t        |      t        | j                        z
  S )z9Return the index at which the ordering expressions start.)r9   lenr	   )r   source_expressionss     r   r5   z1OrderableAggMixin._get_ordering_expressions_index-   s+    !88:%&T]]);;;r   )
__name__
__module____qualname__r   r!   r*   r6   r9   r5   __classcell__)r   s   @r   r   r      s'    .0 
;;A^@<r   r   N)django.db.modelsr   r   r   r   r   r   <module>rB      s    ',< ,<r   