
    ih$                    
   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dl m!Z!m"Z" d dl#m$Z$  G d d          Z% G d d          Z& G d de          Z' G d d          Z(e G d de(e&                      Z)d e&j*        e&j+        e&j,        e&j-        e&j.        fD             d e&j*        e&j/        e&j+        e&j,        e&j-        e&j.        fD             d e&j*        e&j/        e&j+        e&j,        e&j-        fD             d e&j0        e&j1        e&j2        e&j3        e&j4        fD             d e&j*        e&j/        e&j+        e&j,        e&j-        e&j.        fD             e&j*        ej5        ej6        ej7        fej7        ej6        ej7        fej6        ej5        ej7        fej6        ej7        ej7        fej6        ej6        ej6        fej8        ej6        ej8        fej6        ej8        ej8        fgie&j/        ej5        ej6        ej7        fej7        ej6        ej7        fej5        ej5        ej6        fej5        ej7        ej6        fej7        ej5        ej6        fej7        ej7        ej6        fej6        ej6        ej6        fej8        ej6        ej8        fej8        ej8        ej6        fg	igZ9 ee:          Z;d Z<e9D ]3Z=e=>                                D ]\  Z?Z@e@D ]\  ZAZBZC e<eAe?eBeC           4 ejD        d !          d"             ZE G d# d$e%e)          ZF G d% d&eF          ZG G d' d(eF          ZH ed)*           G d+ d,e&                      ZI G d- d.eI          ZJ G d/ d0eI          ZK G d1 d2eI          ZL ed3*           G d4 d5e%e)                      ZM ed6*           G d7 d8e%e)                      ZN G d9 d:e)          ZO G d; d<e)          ZP G d= d>e)          ZQ G d? d@e)          ZR G dA dBe)          ZS G dC dDe)          ZT G dE dFeM          ZU G dG dHeU          ZV edI*           G dJ dKe%e)                      ZW G dL dMeW          ZX edN*           G dO dPe)                      ZY edQ*           G dR dSe%e)                      ZZ G dT dUe(e&          Z[ G dV dWe[          Z\ edX*           G dY dZe)                      Z] G d[ d\e%e)          Z^ G d] d^e	          Z_ G d_ d`e)          Z` G da dbe`          Za G dc dde`          ZbdS )e    N)defaultdictDecimal)Enum)chainNoneType)UUID)EmptyResultSet
FieldErrorFullResultSet)DatabaseErrorNotSupportedError
connection)fields)
LOOKUP_SEP)Q)deconstructible)cached_propertyclassproperty)make_hashablec                       e Zd ZdZd ZdS )SQLiteNumericMixinzp
    Some expressions with output_field=DecimalField() must be cast to
    numeric to be properly filtered.
    c                      | j         ||fi |\  }}	 | j                                        dk    rd|z  }n# t          $ r Y nw xY w||fS )NDecimalFieldz(CAST(%s AS NUMERIC)))as_sqloutput_fieldget_internal_typer   )selfcompilerr   extra_contextsqlparamss         S/var/www/histauto/venv/lib/python3.11/site-packages/django/db/models/expressions.py	as_sqlitezSQLiteNumericMixin.as_sqlite   su    !dk(JHH-HHV	 2244FF-3 	 	 	D	F{s   "7 
AAN)__name__
__module____qualname____doc__r%        r$   r   r      s-         
    r+   r   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d'S )(
Combinablezu
    Provide the ability to combine one or two objects with
    some connector. For example F('foo') + F('bar').
    +-*/^z%%&|z<<z>>#c                     t          |d          st          |          }|rt          |||           S t          | ||          S )Nresolve_expression)hasattrValueCombinedExpression)r   other	connectorreverseds       r$   _combinezCombinable._combine?   sL    u233 	!%LLE 	>%eY===!$	5999r+   c                 :    |                      d| j        d          S )NFr>   MULr   s    r$   __neg__zCombinable.__neg__L   s    }}R5111r+   c                 :    |                      || j        d          S NFr>   ADDr   r;   s     r$   __add__zCombinable.__add__O       }}UDHe444r+   c                 :    |                      || j        d          S rF   r>   SUBrI   s     r$   __sub__zCombinable.__sub__R   rK   r+   c                 :    |                      || j        d          S rF   rA   rI   s     r$   __mul__zCombinable.__mul__U   rK   r+   c                 :    |                      || j        d          S rF   r>   DIVrI   s     r$   __truediv__zCombinable.__truediv__X   rK   r+   c                 :    |                      || j        d          S rF   r>   MODrI   s     r$   __mod__zCombinable.__mod__[   rK   r+   c                 :    |                      || j        d          S rF   r>   POWrI   s     r$   __pow__zCombinable.__pow__^   rK   r+   c                     t          | dd          r0t          |dd          rt          |           t          |          z  S t          d          NconditionalFFUse .bitand(), .bitor(), and .bitxor() for bitwise logical operations.getattrr   NotImplementedErrorrI   s     r$   __and__zCombinable.__and__a   V    4.. 	&75-QV3W3W 	&T77QuXX%%!T
 
 	
r+   c                 :    |                      || j        d          S rF   )r>   BITANDrI   s     r$   bitandzCombinable.bitandh       }}UDK777r+   c                 :    |                      || j        d          S rF   )r>   BITLEFTSHIFTrI   s     r$   bitleftshiftzCombinable.bitleftshiftk   s    }}UD$5u===r+   c                 :    |                      || j        d          S rF   )r>   BITRIGHTSHIFTrI   s     r$   bitrightshiftzCombinable.bitrightshiftn   s    }}UD$6>>>r+   c                     t          | dd          r0t          |dd          rt          |           t          |          z  S t          d          r_   rb   rI   s     r$   __xor__zCombinable.__xor__q   rf   r+   c                 :    |                      || j        d          S rF   )r>   BITXORrI   s     r$   bitxorzCombinable.bitxorx   rj   r+   c                     t          | dd          r0t          |dd          rt          |           t          |          z  S t          d          r_   rb   rI   s     r$   __or__zCombinable.__or__{   rf   r+   c                 :    |                      || j        d          S rF   )r>   BITORrI   s     r$   bitorzCombinable.bitor   s    }}UDJ666r+   c                 :    |                      || j        d          S NTrG   rI   s     r$   __radd__zCombinable.__radd__       }}UDHd333r+   c                 :    |                      || j        d          S r|   rM   rI   s     r$   __rsub__zCombinable.__rsub__   r~   r+   c                 :    |                      || j        d          S r|   rA   rI   s     r$   __rmul__zCombinable.__rmul__   r~   r+   c                 :    |                      || j        d          S r|   rS   rI   s     r$   __rtruediv__zCombinable.__rtruediv__   r~   r+   c                 :    |                      || j        d          S r|   rW   rI   s     r$   __rmod__zCombinable.__rmod__   r~   r+   c                 :    |                      || j        d          S r|   r[   rI   s     r$   __rpow__zCombinable.__rpow__   r~   r+   c                      t          d          Nra   rd   rI   s     r$   __rand__zCombinable.__rand__       !T
 
 	
r+   c                      t          d          r   r   rI   s     r$   __ror__zCombinable.__ror__   r   r+   c                      t          d          r   r   rI   s     r$   __rxor__zCombinable.__rxor__   r   r+   c                      t          |           S N)NegatedExpressionrC   s    r$   
__invert__zCombinable.__invert__   s     &&&r+   N))r&   r'   r(   r)   rH   rN   rB   rT   r\   rX   rh   ry   rl   ro   rt   r>   rD   rJ   rO   rQ   rU   rY   r]   re   ri   rm   rp   rr   ru   rw   rz   r}   r   r   r   r   r   r   r   r   r   r*   r+   r$   r-   r-   &   s         C
C
C
C
C C
 FELMF: : :2 2 25 5 55 5 55 5 55 5 55 5 55 5 5
 
 
8 8 8> > >? ? ?
 
 
8 8 8
 
 
7 7 74 4 44 4 44 4 44 4 44 4 44 4 4
 
 


 
 


 
 

' ' ' ' 'r+   r-   c                       e Zd ZdS )OutputFieldIsNoneErrorN)r&   r'   r(   r*   r+   r$   r   r      s        Dr+   r   c                      e Zd ZdZeZdZdZdZdZ	dZ
dZdZd'dZd Zd Zd Zd	 Zd
 Zd Zed             Zed             Zed             Zed             Z	 d(dZed             Zed             Zed             Zed             Zd Ze d             Z!ed             Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d  Z+d! Z,d" Z-d# Z.d$ Z/d% Z0d& Z1dS ))BaseExpressionz%Base class for all query expressions.FTNc                     |	|| _         d S d S r   r   r   r   s     r$   __init__zBaseExpression.__init__   s    # ,D $#r+   c                 d    | j                                         }|                    dd            |S )Nconvert_value)__dict__copypop)r   states     r$   __getstate__zBaseExpression.__getstate__   s.    ""$$		/4(((r+   c                 h    | j         | j        u rg n| j         g| j                            |          z   S r   )r   _convert_value_noopr   get_db_convertersr   r   s     r$   r   z BaseExpression.get_db_converters   sC     !T%=== B$%//
;;	< 	<r+   c                     g S r   r*   rC   s    r$   get_source_expressionsz%BaseExpression.get_source_expressions       	r+   c                     |rJ d S r   r*   r   exprss     r$   set_source_expressionsz%BaseExpression.set_source_expressions   s    r+   c                     d |D             S )Nc                     g | ]G}t          |d           r|n2t          |t                    rt          |          nt	          |          HS r7   )r8   
isinstancestrFr9   .0args     r$   
<listcomp>z5BaseExpression._parse_expressions.<locals>.<listcomp>   sa     
 
 
  3 455F *3 4 4Dafff%**	
 
 
r+   r*   )r   expressionss     r$   _parse_expressionsz!BaseExpression._parse_expressions   s%    
 
 #
 
 
 	
r+   c                      t          d          )a  
        Responsible for returning a (sql, [params]) tuple to be included
        in the current query.

        Different backends can provide their own implementation, by
        providing an `as_{vendor}` method and patching the Expression:

        ```
        def override_as_sql(self, compiler, connection):
            # custom logic
            return super().as_sql(compiler, connection)
        setattr(Expression, 'as_' + connection.vendor, override_as_sql)
        ```

        Arguments:
         * compiler: the query compiler responsible for generating the query.
           Must have a compile method, returning a (sql, [params]) tuple.
           Calling compiler(value) will return a quoted `value`.

         * connection: the database connection used for the current query.

        Return: (sql, params)
          Where `sql` is a string containing ordered sql parameters to be
          replaced with the elements of the list `params`.
        z"Subclasses must implement as_sql()r   r   r    r   s      r$   r   zBaseExpression.as_sql   s    4 ""FGGGr+   c                 X    t          d |                                 D                       S )Nc              3   (   K   | ]}|o|j         V  d S r   )contains_aggregater   exprs     r$   	<genexpr>z4BaseExpression.contains_aggregate.<locals>.<genexpr>   s;       
 
15D,T,
 
 
 
 
 
r+   anyr   rC   s    r$   r   z!BaseExpression.contains_aggregate   s<     
 
9=9T9T9V9V
 
 
 
 
 	
r+   c                 X    t          d |                                 D                       S )Nc              3   (   K   | ]}|o|j         V  d S r   )contains_over_clauser   s     r$   r   z6BaseExpression.contains_over_clause.<locals>.<genexpr>  s;       
 
37D.T.
 
 
 
 
 
r+   r   rC   s    r$   r   z#BaseExpression.contains_over_clause  s<     
 
;?;V;V;X;X
 
 
 
 
 	
r+   c                 X    t          d |                                 D                       S )Nc              3   (   K   | ]}|o|j         V  d S r   )contains_column_referencesr   s     r$   r   z<BaseExpression.contains_column_references.<locals>.<genexpr>  s>       
 
 4T4
 
 
 
 
 
r+   r   rC   s    r$   r   z)BaseExpression.contains_column_references	  <     
 
3355
 
 
 
 
 	
r+   c                 X    t          d |                                 D                       S )Nc              3   J   K   | ]}|ot          |d d          p|j        V  dS )subqueryFN)rc   contains_subqueryr   s     r$   r   z3BaseExpression.contains_subquery.<locals>.<genexpr>  sO       
 
 QgdJ66P$:P
 
 
 
 
 
r+   r   rC   s    r$   r   z BaseExpression.contains_subquery  r   r+   c                 0   |                                  }|_        fd|                                D             }| j        s5t	          d |D                       rt          | j        j         d          |                    |           |S )a
  
        Provide the chance to do any preprocessing or validation before being
        added to the query.

        Arguments:
         * query: the backend query implementation
         * allow_joins: boolean allowing or denying use of joins
           in this query
         * reuse: a set of reusable joins for multijoins
         * summarize: a terminal aggregate clause
         * for_save: whether this expression about to be used in a save or update

        Return: an Expression to be added to the query.
        c           	      J    g | ]}||                               nd  S r   r   )r   r   allow_joinsfor_savequeryreuse	summarizes     r$   r   z5BaseExpression.resolve_expression.<locals>.<listcomp>*  sO     
 
 
  # ''{E9hWWW	
 
 
r+   c              3   @   K   | ]}t          |t                    V  d S r   )r   ColPairsr   s     r$   r   z4BaseExpression.resolve_expression.<locals>.<genexpr>2  s=       9
 9
+/JtX&&9
 9
 9
 9
 9
 9
r+   z4 expression does not support composite primary keys.)	r   
is_summaryr   allows_composite_expressionsr   
ValueError	__class__r&   r   )r   r   r   r   r   r   csource_expressionss    `````  r$   r7   z!BaseExpression.resolve_expression  s    " IIKK 
 
 
 
 
 
 
 
 0022
 
 
 0 	S 9
 9
3E9
 9
 9
 6
 6
 	 >* * * *   	
  !3444r+   c                 @    t          | j        t          j                  S r   )r   r   r   BooleanFieldrC   s    r$   r`   zBaseExpression.conditional<  s    $+V-@AAAr+   c                     | j         S r   r   rC   s    r$   fieldzBaseExpression.field@  s      r+   c                 P    |                                  }|t          d          |S )z+Return the output type of this expressions.Nz4Cannot resolve expression type, unknown output_field)_resolve_output_fieldr   r   s     r$   r   zBaseExpression.output_fieldD  s8     1133(F   r+   c                 4    	 | j         S # t          $ r Y dS w xY w)z
        Return the output field of this expression, or None if
        _resolve_output_field() didn't return an output type.
        N)r   r   rC   s    r$   _output_field_or_nonez$BaseExpression._output_field_or_noneN  s2    	$$% 	 	 	FF	s   	 
c           	          d |                                  D             }|D ]I}|D ]A}t          ||j                  s*t          d|j        j        d|j        j        d          B|c S dS )a}  
        Attempt to infer the output type of the expression.

        As a guess, if the output fields of all source fields match then simply
        infer the same type here.

        If a source's output field resolves to None, exclude it from this check.
        If all sources are None, then an error is raised higher up the stack in
        the output_field property.
        c              3      K   | ]}||V  	d S r   r*   )r   sources     r$   r   z7BaseExpression._resolve_output_field.<locals>.<genexpr>g  s0       
 
V=OF=O=O=O=O
 
r+   z!Expression contains mixed types: , . You must set output_field.N)get_source_fieldsr   r   r   r&   )r   sources_iterr   r   s       r$   r   z$BaseExpression._resolve_output_fieldY  s    
 
!%!7!7!9!9
 
 
 ) 	  	 L& 	 	!,0@AA $* )2;;;",555	    	  	 r+   c                     | S r   r*   value
expressionr   s      r$   r   z"BaseExpression._convert_value_noopw  s    r+   c                     | j         }|                                }|dk    rd S |                    d          rd S |dk    rd S | j        S )z
        Expressions provide their own converters because users have the option
        of manually specifying the output_field which may be a different type
        from the one the database returns.
        
FloatFieldc                 (    | d nt          |           S r   )floatr   s      r$   <lambda>z.BaseExpression.convert_value.<locals>.<lambda>  s    5<< r+   IntegerFieldc                 (    | d nt          |           S r   )intr   s      r$   r   z.BaseExpression.convert_value.<locals>.<lambda>  s    3u:: r+   r   c                 (    | d nt          |           S r   r   r   s      r$   r   z.BaseExpression.convert_value.<locals>.<lambda>  s    75>> r+   )r   r   endswithr   )r   r   internal_types      r$   r   zBaseExpression.convert_value{  s     !//11L((   ##N33 	   n,,   ''r+   c                 6    | j                             |          S r   )r   
get_lookup)r   lookups     r$   r   zBaseExpression.get_lookup  s     ++F333r+   c                 6    | j                             |          S r   )r   get_transformr   names     r$   r  zBaseExpression.get_transform  s     ..t444r+   c                     |                                  }|                    fd|                                 D                        |S )Nc                 B    g | ]}||                               nd S r   )relabeled_clone)r   e
change_maps     r$   r   z2BaseExpression.relabeled_clone.<locals>.<listcomp>  s@        23!!*---D  r+   r   r   r   )r   r	  clones    ` r$   r  zBaseExpression.relabeled_clone  sa    		$$   4466  	
 	
 	
 r+   c                     s| S                      |           x}r|S |                                 x}s| S |                                 }|                    fd|D                        |S )Nc                 B    g | ]}|r|                               nd S r   )replace_expressions)r   r   replacementss     r$   r   z6BaseExpression.replace_expressions.<locals>.<listcomp>  sA        ;?H((666D  r+   )getr   r   r   )r   r  replacementr   r  s    `   r$   r  z"BaseExpression.replace_expressions  s     	K&**4000; 	&*&A&A&C&CC" 	K		$$   .  	
 	
 	
 r+   c                     t                      }|                                 D ]}|||                                z  }|S r   )setr   get_refs)r   refsr   s      r$   r  zBaseExpression.get_refs  sG    uu//11 	$ 	$D|DMMOO#DDr+   c                 *    t          j         |           S r   r   rC   s    r$   r   zBaseExpression.copy      yr+   c                     |                                  }|                    fd|                                 D                        |S )Nc                     g | ]D}t          |t                    rt           |j                   n|                              ES r*   )r   r   r  prefix_references)r   r   prefixs     r$   r   z4BaseExpression.prefix_references.<locals>.<listcomp>  se         "$**8A,,,---//77	  r+   r
  )r   r  r  s    ` r$   r  z BaseExpression.prefix_references  sc    		$$    !7799  		
 		
 		
 r+   c                     | j         s| gS g }|                                 D ])}|                    |                                           *|S r   )r   r   extendget_group_by_colsr   colsr   s      r$   r  z BaseExpression.get_group_by_cols  sZ    & 	6M1133 	4 	4FKK00223333r+   c                 >    d |                                  D             S )z9Return the underlying field types used by this aggregate.c                     g | ]	}|j         
S r*   )r   )r   r  s     r$   r   z4BaseExpression.get_source_fields.<locals>.<listcomp>  s    OOOA'OOOr+   )r   rC   s    r$   r   z BaseExpression.get_source_fields  s"    OO1L1L1N1NOOOOr+   c                     t          | fi |S r   OrderByr   kwargss     r$   asczBaseExpression.asc      t&&v&&&r+   c                      t          | fddi|S N
descendingTr%  r'  s     r$   desczBaseExpression.desc      t777777r+   c                     | S r   r*   rC   s    r$   reverse_orderingzBaseExpression.reverse_ordering      r+   c              #      K   | V  |                                  D ]3}|r/t          |d          r|                                E d{V  /|V  4dS )zi
        Recursively yield this expression and all subexpressions, in
        depth-first order.
        flattenN)r   r8   r4  )r   r   s     r$   r4  zBaseExpression.flatten  s}      
 


//11 	 	D 4++ #||~~--------JJJ	 	r+   c                 l    t          | j        d          r| j                            |||          S ||fS )z
        Custom format for select clauses. For example, EXISTS expressions need
        to be wrapped in CASE WHEN on Oracle.
        select_format)r8   r   r6  r   r    r"   r#   s       r$   r6  zBaseExpression.select_format  s?    
 4$o66 	J$228S&IIIF{r+   c                     t          | dd          s;	 |                                 \  }|S # t          $ r}t          d          |d }~ww xY w| S )N constraint_validation_compatibleTzdExpressions with constraint_validation_compatible set to False must have only one source expression.)rc   r   r   )r   r   r  s      r$   get_expression_for_validationz,BaseExpression.get_expression_for_validation  s{    t?FF 		"" $ ; ; = = "!     <   s   + 
A
AA
r   NTNFF)2r&   r'   r(   r)   NotImplementedempty_result_set_valuer   
filterablewindow_compatibleallowed_defaultr9  set_returningr   r   r   r   r   r   r   r   r   r   r   r   r   r7   propertyr`   r   r   r   r   staticmethodr   r   r   r  r  r  r  r   r  r  r   r)  r.  r1  r4  r6  r:  r*   r+   r$   r   r      s       //+JJO'+$M#( - - - -  
< < <    
 
 
H H H8 
 
 _

 
 
 _

 
 
 _
 
 
 _
 SX# # # #J B B XB ! ! X!   _   X     <   \ ( ( _(,4 4 45 5 5             P P P' ' '8 8 8          r+   r   c                       e Zd ZdZe ej        d          d                         Zed             Z	e
d             Zd Zd Zd	S )

Expressionz:An expression that can be combined with other expressions.   maxsizec                 4    t          j        | j                  S r   )inspect	signaturer   )clss    r$   _constructor_signaturez!Expression._constructor_signature	  s      ...r+   c                     t          |t                    r"t          t           j        |                    S t          |t                    r-t           fd|                                D                       S t          |t          j                  r5|j        r|j	        r|j	        j
        j        |j        fS t          |          S t          |          S )Nc              3   L   K   | ]\  }}|                     |          fV  d S r   )	_identity)r   keyvalrL  s      r$   r   z'Expression._identity.<locals>.<genexpr>  s8      QQxsC#s}}S112QQQQQQr+   )r   tuplemaprP  dictitemsr   Fieldr  model_metalabeltyper   )rL  r   s   ` r$   rP  zExpression._identity  s    eU## 	4S]E22333eT"" 	RQQQQ5;;==QQQQQQeV\** 	z ;ek ;{(.
::;;U###r+   c                 j   | j         \  }} | j        j        | g|R i |}|                                 t	          |j                                                  }t          |           | j        g}|D ]1\  }}| 	                    |          }|
                    ||f           2t          |          S r   )_constructor_argsrM  bind_partialapply_defaultsiter	argumentsrV  nextr   rP  appendrS  )r   argsr(  rK  ra  identityr   r   s           r$   re  zExpression.identity  s    -f<D/<TSDSSSFSS	  """,224455	YN## 	* 	*JC NN5))EOOS%L))))Xr+   c                 Z    t          |t                    st          S |j        | j        k    S r   )r   rE  r<  re  rI   s     r$   __eq__zExpression.__eq__*  s)    %,, 	"!!~..r+   c                 *    t          | j                  S r   )hashre  rC   s    r$   __hash__zExpression.__hash__/  s    DM"""r+   N)r&   r'   r(   r)   r   	functools	lru_cacherM  classmethodrP  r   re  rg  rj  r*   r+   r$   rE  rE    s        DDY%%%/ / &% ]/ 	$ 	$ [	$   _/ / /
# # # # #r+   rE  c                 X    i | ]'}|t           j        t           j        t           j        fg(S r*   )r   PositiveIntegerFieldr   r<   s     r$   
<dictcomp>rq  >  sF         	+++
  r+   c                     i | ]k}|t           j        t           j        t           j        ft           j        t           j        t           j        ft           j        t           j        t           j        fglS r*   )r   r   r   r   rp  s     r$   rq  rq  O  sh         	 &"5v7JK 163DE &"5v7JK
  r+   c           	      $   i | ]}|t           j        t           j        t           j        ft           j        t           j        t           j        ft           j        t           j        t           j        ft           j        t           j        t           j        fgS r*   )r   r   r   r   rp  s     r$   rq  rq  a  s{         	 &"5v7JK &"5v7JK &"3V5FG 3V5FG	
  r+   c                 X    i | ]'}|t           j        t           j        t           j        fg(S r*   )r   r   rp  s     r$   rq  rq  q  sB         	 &"5v7JK
  r+   c                     i | ]O}|t          t          j        d  t          j        t          j        t          j        fD                                 PS )c              3   >   K   | ]}|t           |ft           ||fgV  d S r   r   )r   
field_types     r$   r   z<dictcomp>.<genexpr>  sI           h
3h
J5WX           r+   )listr   from_iterabler   r   r   r   rp  s     r$   rq  rq  ~  sx         	4     ''%#       	
 	
  r+   c                 L    t           |                             | ||f           dS )z
    Register combinable types:
        lhs <connector> rhs -> result
    e.g.
        register_combinable_fields(
            IntegerField, Combinable.ADD, FloatField, FloatField
        )
    N)_connector_combinatorsrc  )lhsr<   rhsresults       r$   register_combinable_fieldsr    s*     9%,,c3-?@@@@@r+   rF  rG  c                     t                               | d          }|D ]*\  }}}t          ||          rt          ||          r|c S +d S )Nr*   )r{  r  
issubclass)r<   lhs_typerhs_typecombinatorscombinator_lhs_typecombinator_rhs_typecombined_types          r$   _resolve_combined_typer    sr    (,,Y;;KCN ! !?0-h 344 	!):
 :
 	! !   	! !r+   c                   h     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z		 d fd	Z
ed             Z xZS )r:   Nc                 v    t                                          |           || _        || _        || _        d S Nr   )superr   r<   r|  r}  )r   r|  r<   r}  r   r   s        r$   r   zCombinedExpression.__init__  s7    l333"r+   c                 B    d                     | j        j        |           S )Nz<{}: {}>)formatr   r&   rC   s    r$   __repr__zCombinedExpression.__repr__  s      !8$???r+   c                 N    d                     | j        | j        | j                  S )Nz{} {} {})r  r|  r<   r}  rC   s    r$   __str__zCombinedExpression.__str__  s       4>48DDDr+   c                     | j         | j        gS r   r|  r}  rC   s    r$   r   z)CombinedExpression.get_source_expressions  s    $(##r+   c                 $    |\  | _         | _        d S r   r  r   s     r$   r   z)CombinedExpression.set_source_expressions  s    "$(((r+   c           	      .   t          | j        t          | j        j                  t          | j        j                            }|Ft          d| j        d| j        j        j        j	         d| j        j        j        j	         d           |            S )NzCannot infer type of z# expression involving these types: r   r   )
r  r<   r[  r|  r   r}  r   r   r   r&   )r   r  s     r$   r   z(CombinedExpression._resolve_output_field  s     /N/00/00
 

  ! ! !(/9B! !8(2;! ! !   }r+   c                 x   g }g }|                     | j                  \  }}|                    |           |                    |           |                     | j                  \  }}|                    |           |                    |           d}|j                            | j        |          }||z  |fS Nz(%s))compiler|  rc  r  r}  opscombine_expressionr<   )r   r    r   r   expression_paramsr"   r#   expression_wrappers           r$   r   zCombinedExpression.as_sql  s    &&tx00V3  (((&&tx00V3  (((#n//LL!C'):::r+   TFc                 6   t                                          |||||          }t          | t          t          f          s	 |j        j                                        }n# t          t          f$ r d }Y nw xY w	 |j
        j                                        }n# t          t          f$ r d }Y nw xY wd||hv r&||k    r t          |j        |j        |j
                  S h d}	| j        | j        k    r$||	v r ||k    rt	          |j        |j
                  S |S )NDurationField>   	DateField	TimeFieldDateTimeField)r  r7   r   DurationExpressionTemporalSubtractionr|  r   r   AttributeErrorr   r}  r<   rN   )r   r   r   r   r   r   resolvedr  r  datetime_fieldsr   s             r$   r7   z%CombinedExpression.resolve_expression  s[    77--
 
 $!35H IJJ 	G #<4FFHH"J/        #<4FFHH"J/       8X"6668x;O;O)L("4hl   JIIO$(**//((*8<FFFs$   A# #A98A9=B B21B2c                 2    | j         j        o| j        j        S r   )r|  r@  r}  rC   s    r$   r@  z"CombinedExpression.allowed_default$  s    x'DDH,DDr+   r   r;  )r&   r'   r(   r   r  r  r   r   r   r   r7   r   r@  __classcell__r   s   @r$   r:   r:     s             @ @ @E E E$ $ $# # #  "; ; ; SX     @ E E _E E E E Er+   r:   c                   *     e Zd Zd Z fdZd Z xZS )r  c                     	 |j         }|                                dk    r4|                    |          \  }}|j                            |          |fS n# t
          $ r Y nw xY w|                    |          S )Nr  )r   r   r  r  format_for_duration_arithmeticr   )r   sider    r   outputr"   r#   s          r$   r  zDurationExpression.compile*  s    	R&F ''))_<<&..t44V!~DDSII6QQ =  	 	 	D	 %%%s   A 
A#"A#c                    |j         j        r"t                                          ||          S |j                            |            g }g }|                     | j        ||          \  }}|                    |           |	                    |           |                     | j
        ||          \  }}|                    |           |	                    |           d}|j                            | j        |          }||z  |fS r  )featureshas_native_duration_fieldr  r   r  check_expression_supportr  r|  rc  r  r}  combine_duration_expressionr<   )	r   r    r   r   r  r"   r#   r  r   s	           r$   r   zDurationExpression.as_sql5  s    8 	877>>(J777//555ll48XzBBV3  (((ll48XzBBV3  (((#n88UU!C'):::r+   c                 ^    | j         ||fi |\  }}| j        t          j        t          j        hv ry	 | j        j                                        }| j        j                                        }h d}||vs||vrt          d| j         d          n# t          t          f$ r Y nw xY w||fS )N>   r   r   r   r  zInvalid arguments for operator .)r   r<   r-   rB   rT   r|  r   r   r}  r   r  r   )	r   r    r   r!   r"   r#   r  r  allowed_fieldss	            r$   r%   zDurationExpression.as_sqliteF  s    !dk(JHH-HHV>jnjn===80BBDD80BBDD" " " >11X^5S5S'K$.KKK   6T #J/    F{s   <B B('B()r&   r'   r(   r  r   r%   r  r  s   @r$   r  r  )  sV        	& 	& 	&; ; ; ; ;"      r+   r  c                   B     e Zd Z ej                    Z fdZd Z xZS )r  c                 X    t                                          || j        |           d S r   )r  r   rN   )r   r|  r}  r   s      r$   r   zTemporalSubtraction.__init___  s'    dh,,,,,r+   c                    |j                             |            |                    | j                  }|                    | j                  }|j                             | j        j                                        ||          S r   )r  r  r  r|  r}  subtract_temporalsr   r   )r   r    r   r|  r}  s        r$   r   zTemporalSubtraction.as_sqlb  st    //555tx((tx((~00H!3355sC
 
 	
r+   )	r&   r'   r(   r   r  r   r   r   r  r  s   @r$   r  r  \  sW        '6'))L- - - - -
 
 
 
 
 
 
r+   r  zdjango.db.models.F)pathc                   \    e Zd ZdZdZd Zd Zd Zd Z	 dd	Z	d
 Z
d Zd Zd Zd Zd ZdS )r   zDAn object capable of resolving references to existing query objects.Fc                     || _         dS )z^
        Arguments:
         * name: the name of the field this expression references
        N)r  r  s     r$   r   z
F.__init__q  s    
 			r+   c                 L    d                     | j        j        | j                  S N{}({}))r  r   r&   r  rC   s    r$   r  z
F.__repr__x  s    t~6	BBBr+   c                 "    t          | |          S r   )Sliced)r   	subscripts     r$   __getitem__zF.__getitem__{  s    dI&&&r+   c                 <    t          d| j        j         d          )Nzargument of type 'z' is not iterable)	TypeErrorr   r&   rI   s     r$   __contains__zF.__contains__~  s#     WT^-DWWWXXXr+   NTc                 <    |                     | j        |||          S r   )resolve_refr  r   r   r   r   r   r   s         r$   r7   zF.resolve_expression  s        K	JJJr+   c                 4   |                     |           x}|S | j                            t                    ^}}|s| S |                     t	          |                    x}	 |j        | S |D ](}|                    |          }|| c S  ||          })|S r   )r  r  splitr   r   r   r  )r   r  r  
field_name
transforms	transformtransform_classs          r$   r  zF.replace_expressions  s    '++D111K>"&)//*"="=
Z  	K'++AjMM:::K 6>K# 	7 	7I)77	BBO&)/+66KKr+   c                     t          | fi |S r   r%  r'  s     r$   r)  zF.asc  r*  r+   c                      t          | fddi|S r,  r%  r'  s     r$   r.  zF.desc  r/  r+   c                 B    | j         |j         k    o| j        |j        k    S r   )r   r  rI   s     r$   rg  zF.__eq__  s    ~0LTY%*5LLr+   c                 *    t          | j                  S r   )ri  r  rC   s    r$   rj  z
F.__hash__  s    DIr+   c                 *    t          j         |           S r   r  rC   s    r$   r   zF.copy  r  r+   r;  )r&   r'   r(   r)   r@  r   r  r  r  r7   r  r)  r.  rg  rj  r   r*   r+   r$   r   r   k  s        NNO  C C C' ' 'Y Y Y SXK K K K
  (' ' '8 8 8M M M      r+   r   c                   <     e Zd ZdZdZdZd Z fdZd Zd Z	 xZ
S )ResolvedOuterRefz
    An object that contains a reference to an outer query.

    In this case, the reference to the outer query has been resolved because
    the inner query has been used as a subquery.
    Fc                      t          d          )NzXThis queryset contains a reference to an outer query and may only be used in a subquery.)r   r   rd  r(  s      r$   r   zResolvedOuterRef.as_sql  s    *
 
 	
r+   c                      t                      j        |i |}|j        rt          d| j         d          t
          | j        v |_        |S )Nz<Referencing outer query window expression is not supported: r  )r  r7   r   r   r  r   possibly_multivalued)r   rd  r(  colr   s       r$   r7   z#ResolvedOuterRef.resolve_expression  sj    (egg($9&99# 	# 9        $.#: 
r+   c                     | S r   r*   r   relabelss     r$   r  z ResolvedOuterRef.relabeled_clone  r2  r+   c                     g S r   r*   rC   s    r$   r  z"ResolvedOuterRef.get_group_by_cols  r   r+   )r&   r'   r(   r)   r   r   r   r7   r  r  r  r  s   @r$   r  r    s}           
 
 
            r+   r  c                   "    e Zd ZdZdZd Zd ZdS )OuterRefFc                 l    t          | j        | j                  r| j        S t          | j                  S r   )r   r  r   r  r  s      r$   r7   zOuterRef.resolve_expression  s0    di00 	9	***r+   c                     | S r   r*   r  s     r$   r  zOuterRef.relabeled_clone  r2  r+   N)r&   r'   r(   r   r   r7   r  r*   r+   r$   r  r    s>         + + +
    r+   r  c                   :     e Zd ZdZ fdZd Z	 	 	 	 	 ddZ xZS )	r  z
    An object that contains a slice of an F expression.

    Object resolves the column on which the slicing is applied, and then
    applies the slicing if possible.
    c                    t                                          |j                   || _        t	          |t
                    r(|dk     rt          d          |dz   | _        d| _        d S t	          |t                    r|j        |j        dk     s|j
        |j
        dk     rt          d          |j        t          d          |j
        r&|j        r|j
        |j        k     rt          d          |j        dn	|j        dz   | _        |j
        	d | _        d S |j
        |j        pdz
  | _        d S t          d          )Nr   z#Negative indexing is not supported.   zStep argument is not supported.z,Slice stop must be greater than slice start.z7Argument to slice must be either int or slice instance.)r  r   r  objr   r   r   startlengthslicestopstepr  )r   r  r  r   s      r$   r   zSliced.__init__  sL   """i%% 	W1}} !FGGG"QDJDKKK	5)) 	W+	!0C0C*y~/A/A !FGGG~) !BCCC~ Q)/ Qiny6V6V !OPPP'o59?Q;NDJ~%"'n	0D1EUVVVr+   c                     | j         dz
  }| j        d n	|| j        z   }t          ||          }| j        j         d| j        d|dS )Nr  (r   ))r  r  r  r   r(   r  )r   r  r  r  s       r$   r  zSliced.__repr__  sY    
Q{*tt0C%&&	.-LLLLiLLLLr+   NTFc                    |                     | j        |||          }t          | j        t          | j        f          r| j                            |||||          }n|}|j                            || j	        | j
                  S r   )r  r  r   r  r  r   r7   r   slice_expressionr  r  )r   r   r   r   r   r   r  r   s           r$   r7   zSliced.resolve_expression  s     $$TYUINNdh4> :;; 	8..{E9h DD D$55dDJTTTr+   r;  )r&   r'   r(   r)   r   r  r7   r  r  s   @r$   r  r    s         W W W W W2M M M U U U U U U U Ur+   r  zdjango.db.models.Funcc                   ~     e Zd ZdZdZdZdZdZdd fd
Zd Z	d Z
d	 Zd
 Z	 	 	 ddZ fdZed             Z xZS )FunczAn SQL function call.Nz%(function)s(%(expressions)s)r   r   c                @   | j         ]t          |          | j         k    rEt          d| j        j        d| j         d| j         dk    rdnddt          |          d	          t                                          |	            | j        | | _        || _	        d S )
N'z' takes exactly  r  argumentra  z (z given)r   )
aritylenr  r   r&   r  r   r   r   extra)r   r   r   r  r   s       r$   r   zFunc.__init__   s    :!c+&6&6$*&D&D) N+++JJJ"&*//JJ{BB$$$$   	l333"9$"9;"G


r+   c                    | j                             d | j        D                       }i | j        |                                 }|r_d                    d t          |                                          D                       }d                    | j        j	        ||          S d                    | j        j	        |          S )Nc              3   4   K   | ]}t          |          V  d S r   r   r   s     r$   r   z Func.__repr__.<locals>.<genexpr>0  (      #P#PCHH#P#P#P#P#P#Pr+   r   c              3   `   K   | ])\  }}t          |          d z   t          |          z   V  *dS )=Nr  )r   rQ  rR  s      r$   r   z Func.__repr__.<locals>.<genexpr>3  sL        .6c3C3S)     r+   
{}({}, {})r  )

arg_joinerjoinr   r  _get_repr_optionssortedrV  r  r   r&   )r   rd  r  s      r$   r  zFunc.__repr__/  s    ###P#P8O#P#P#PPP:4::!7!7!9!9: 	MII  :@:O:O    E  &&t~'>eLLLt~6===r+   c                     i S )zAReturn a dict of extra __init__() options to include in the repr.r*   rC   s    r$   r  zFunc._get_repr_options9  s    	r+   c                     | j         S r   r   rC   s    r$   r   zFunc.get_source_expressions=  s    &&r+   c                     || _         d S r   r	  r   s     r$   r   zFunc.set_source_expressions@  s    "'r+   c                    |j                             |            g }g }| j        D ]}		 |                    |	          \  }
}n# t          $ rH t          |	dt                    }|t          u r |                    t          |                    \  }
}Y n4t          $ r( |                    t          d                    \  }
}Y nw xY w|	                    |
           |
                    |           i | j        |}|||d<   n|                    d| j                   |p|                    d| j                  }|p|                    d| j                  }|                    |          x|d<   |d<   ||z  |fS )Nr=  Tfunctiontemplater  r   r   )r  r  r   r  r   rc   r<  r9   r   rc  r  r  
setdefaultr  r  r  r  r  )r   r    r   r  r  r  r!   	sql_partsr#   r   arg_sql
arg_paramsr=  datas                 r$   r   zFunc.as_sqlC  s    	//555	* 	& 	&C
D&.&6&6s&;&;#! V V V)01>* *& *^;;&.&6&6u=S7T7T&U&U#  D D D&.&6&6uT{{&C&C#DW%%%MM*%%%%.$*.. 'DOOJ666Btxx
DMBBJ488L$/#J#J
.8ooi.H.HH]d7m$&&s   AAC.CCc                     t                                                      }| j        d d          |_        | j                                        |_        |S r   )r  r   r   r  )r   r   r   s     r$   r   z	Func.copyj  s@    ww||~~"&"9!!!"<Z__&&
r+   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r   r@  )r   r   s     r$   r   z'Func.allowed_default.<locals>.<genexpr>r  s%      XX*:-XXXXXXr+   )allr   rC   s    r$   r@  zFunc.allowed_defaultp  s"    XX@WXXXXXXr+   NNN)r&   r'   r(   r)   r  r  r  r  r   r  r  r   r   r   r   r   r@  r  r  s   @r$   r  r    s        H.HJE26       > > >  ' ' '( ( ( %' %' %' %'N     Y Y _Y Y Y Y Yr+   r  zdjango.db.models.Valuec                   h     e Zd ZdZdZdZd fd	Zd Zd Z	 d fd	Z	d	 Z
d
 Zed             Z xZS )r9   z9Represent a wrapped value as a node within an expression.FTNc                 Z    t                                          |           || _        dS )a:  
        Arguments:
         * value: the value this expression represents. The value will be
           added into the sql parameter list and properly quoted.

         * output_field: an instance of the model field type that this
           expression will return, such as IntegerField() or CharField().
        r   N)r  r   r   )r   r   r   r   s      r$   r   zValue.__init__~  s+     	l333


r+   c                 0    | j         j         d| j        dS )Nr  r  )r   r&   r   rC   s    r$   r  zValue.__repr__  s     .);;DJ;;;;r+   c                 ,   |j                             |            | j        }| j        }|`| j        r|                    ||          }n|                    ||          }t          |d          r|                    |||          |gfS |dg fS d|gfS )N)r   get_placeholderNULLz%s)	r  r  r   r   r   get_db_prep_saveget_db_prep_valuer8   r  )r   r    r   rR  r   s        r$   r   zValue.as_sql  s    //555j1#} Q"33CJ3OO"44SZ4PP|%677 V#33C:NNQTPUUU; 2:cU{r+   c                 `    t                                          |||||          }||_        |S r   )r  r7   r   r   r   r   r   r   r   r   r   s          r$   r7   zValue.resolve_expression  s0     GG&&uk5)XVV
r+   c                     g S r   r*   rC   s    r$   r  zValue.get_group_by_cols  r   r+   c                    t          | j        t                    rt          j                    S t          | j        t
                    rt          j                    S t          | j        t                    rt          j                    S t          | j        t                    rt          j
                    S t          | j        t          j                  rt          j                    S t          | j        t          j                  rt          j                    S t          | j        t          j                  rt          j                    S t          | j        t          j                  rt          j                    S t          | j        t&                    rt          j                    S t          | j        t*                    rt          j                    S t          | j        t.                    rt          j                    S d S r   )r   r   r   r   	CharFieldboolr   r   r   r   r   datetimer  dater  timer  	timedeltar  r   r   bytesBinaryFieldr
   	UUIDFieldrC   s    r$   r   zValue._resolve_output_field  s   dj#&& 	&#%%%dj$'' 	)&(((dj#&& 	)&(((dj%(( 	'$&&&dj("344 	*')))dj(-00 	&#%%%dj(-00 	&#%%%dj("455 	*')))dj'** 	)&(((dj%(( 	(%'''dj$'' 	&#%%%	& 	&r+   c                     | j         S r   )r   rC   s    r$   r=  zValue.empty_result_set_value  s
    zr+   r   r;  )r&   r'   r(   r)   r   r@  r   r  r   r7   r  r   rB  r=  r  r  s   @r$   r9   r9   u  s        CC HO
 
 
 
 
 
< < <  & SX       & & &0   X    r+   r9   c                   D     e Zd ZdZd	 fd	Zd Zd Zd Z	 d
 fd	Z xZ	S )RawSQLTNc                     |t          j                    }||c| _        | _        t	                                          |           d S r  )r   rW  r"   r#   r  r   )r   r"   r#   r   r   s       r$   r   zRawSQL.__init__  sE    !<>>L #V$+l33333r+   c                 X    d                     | j        j        | j        | j                  S Nr  )r  r   r&   r"   r#   rC   s    r$   r  zRawSQL.__repr__  s#    ""4>#:DHdkRRRr+   c                 $    d| j         z  | j        fS r  )r"   r#   r   s      r$   r   zRawSQL.as_sql  s     $+--r+   c                     | gS r   r*   rC   s    r$   r  zRawSQL.get_group_by_cols  	    vr+   Fc                 D   |j         rt|j         j        j        D ]b}|j        j        D ]S}|j                                        | j                                        v r|                    |j        |||            nTct                      
                    |||||          S r   )rX  rY  all_parentslocal_fieldscolumnlowerr"   r  r  r  r7   )	r   r   r   r   r   r   parentparent_fieldr   s	           r$   r7   zRawSQL.resolve_expression  s     ; 	++7  $*L$=  L#*0022dhnn6F6FFF))(-{E9   	 G
 ww));y(
 
 	
r+   r   r;  )
r&   r'   r(   r@  r   r  r   r  r7   r  r  s   @r$   r0  r0    s        O4 4 4 4 4 4S S S. . .   SX
 
 
 
 
 
 
 
 
 
r+   r0  c                       e Zd Zd Zd ZdS )Starc                     dS )Nz'*'r*   rC   s    r$   r  zStar.__repr__  s    ur+   c                 
    dg fS )Nr0   r*   r   s      r$   r   zStar.as_sql  s    Bwr+   N)r&   r'   r(   r  r   r*   r+   r$   r?  r?    s2              r+   r?  c                   @     e Zd ZdZd
 fd	Zd Zd Z	 ddZd	 Z xZ	S )DatabaseDefaultz^
    Expression to use DEFAULT keyword during insert otherwise the underlying expression.
    Nc                 X    t                                          |           || _        d S r   r  r   r   r   r   r   r   s      r$   r   zDatabaseDefault.__init__  s&    &&&$r+   c                     | j         gS r   r   rC   s    r$   r   z&DatabaseDefault.get_source_expressions        r+   c                     |\  | _         d S r   rH  r   s     r$   r   z&DatabaseDefault.set_source_expressions  s    "r+   TFc                 t    | j                             |||||          }|s|S t          || j                  S )N)r   r   r   r   r   r   )r   r7   rC  r   )r   r   r   r   r   r   resolved_expressions          r$   r7   z"DatabaseDefault.resolve_expression   s`     #o@@# A 
 
  	'&&d.H
 
 
 	
r+   c                 V    |j         j        s|                    | j                  S dg fS )NDEFAULT)r  "supports_default_keyword_in_insertr  r   r   s      r$   r   zDatabaseDefault.as_sql  s0    "E 	5##DO444"}r+   r   r;  )
r&   r'   r(   r)   r   r   r   r7   r   r  r  s   @r$   rC  rC    s         % % % % % %! ! !# # # SX
 
 
 
$      r+   rC  c                   F     e Zd ZdZdZd
 fd	Zd Zd Zd Zd Z	d	 Z
 xZS )ColTFNc                 r    ||}t                                          |           ||c| _        | _        d S r  )r  r   aliastarget)r   rS  rT  r   r   s       r$   r   zCol.__init__  s=    !Ll333"'
DKKKr+   c                     | j         | j        }}|r|t          |          fnt          |          f}d                    | j        j        d                    |                    S )Nr  r   )rS  rT  r   r  r   r&   r  )r   rS  rT  identifierss       r$   r  zCol.__repr__"  sV    
DKv.3Guc&kk**#f++t~6		+8N8NOOOr+   c                     | j         | j        j        }}|r||fn|f}d                    t	          |j        |                    }|g fS Nr  )rS  rT  r:  r  rT  quote_name_unless_alias)r   r    r   rS  r:  rV  r"   s          r$   r   z
Col.as_sql'  sM    
DK$6v).=ufooVIhhs8;[IIJJBwr+   c                     | j         | S |                     |                    | j         | j                   | j        | j                  S r   )rS  r   r  rT  r   r  s     r$   r  zCol.relabeled_clone-  sC    :K~~LLTZ00$+t?P
 
 	
r+   c                     | gS r   r*   rC   s    r$   r  zCol.get_group_by_cols4  r6  r+   c                     | j         | j        k    r| j                            |          S | j                            |          | j                             |          z   S r   )rT  r   r   r   s     r$   r   zCol.get_db_converters7  s_    ;$+++$66zBBB 22
 
K))*556 	6r+   r   )r&   r'   r(   r   r  r   r  r   r  r  r   r  r  s   @r$   rQ  rQ    s        !% 0 0 0 0 0 0P P P
  
 
 
  6 6 6 6 6 6 6r+   rQ  c                   Z     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )r   c                 v    t                                          |           || _        || _        || _        d S r  )r  r   rS  targetssources)r   rS  r_  r`  r   r   s        r$   r   zColPairs.__init__@  s7    l333
r+   c                 *    t          | j                  S r   )r  r_  rC   s    r$   __len__zColPairs.__len__F  s    4<   r+   c                 D    t          |                                           S r   )r`  get_colsrC   s    r$   __iter__zColPairs.__iter__I  s    DMMOO$$$r+   c           
      `    | j         j         d| j        d| j        d| j        d| j        d
S )Nr  r   r  )r   r&   rS  r_  r`  r   rC   s    r$   r  zColPairs.__repr__L  sY    ~& 8 8 8 8 8 8|8 8!%!28 8 8	
r+   c                 P      fdt           j         j                  D             S )Nc                 B    g | ]\  }}t          j        ||          S r*   )rQ  rS  )r   rT  r   r   s      r$   r   z%ColPairs.get_cols.<locals>.<listcomp>S  s;     
 
 
 
FF++
 
 
r+   )zipr_  r`  rC   s   `r$   rd  zColPairs.get_colsR  s<    
 
 
 
"%dlDL"A"A
 
 
 	
r+   c                 *    |                                  S r   )rd  rC   s    r$   r   zColPairs.get_source_expressionsX  s    }}r+   c                      t           fd|D                       sJ d |D              _        d |D              _        d S )Nc              3   b   K   | ])}t          |t                    o|j        j        k    V  *d S r   )r   rQ  rS  )r   r   r   s     r$   r   z2ColPairs.set_source_expressions.<locals>.<genexpr>\  s;      XX$:dC((ETZ4:-EXXXXXXr+   c                     g | ]	}|j         
S r*   )rT  r   r  s     r$   r   z3ColPairs.set_source_expressions.<locals>.<listcomp>]  s    444s
444r+   c                     g | ]	}|j         
S r*   )r   rn  s     r$   r   z3ColPairs.set_source_expressions.<locals>.<listcomp>^  s    333c	333r+   )r  r_  r`  r   s   ` r$   r   zColPairs.set_source_expressions[  s[    XXXXRWXXXXXXXX44e44433U333r+   c                     g }g }|                                  }|D ]E}|                    ||          \  }}|                    |           |                    |           Fd                    |          |fS )Nr   )rd  r   rc  r  r  )	r   r    r   cols_sqlcols_paramsr!  r  r"   r#   s	            r$   r   zColPairs.as_sql`  s    }} 	' 	'C**Xz::KCOOC   v&&&&yy""K//r+   c                     |                      |                    | j        | j                  | j        | j        | j                  S r   )r   r  rS  r_  r`  r   r  s     r$   r  zColPairs.relabeled_clonel  s9    ~~LLTZ00$,dj
 
 	
r+   c                     | S r   r*   r  s      r$   r7   zColPairs.resolve_expressionq  r2  r+   c                 
    ||fS r   r*   r7  s       r$   r6  zColPairs.select_formatt  s    F{r+   )r&   r'   r(   r   rb  re  r  rd  r   r   r   r  r7   r6  r  r  s   @r$   r   r   ?  s            ! ! !% % %
 
 

 
 
  4 4 4

0 
0 
0
 
 

        r+   r   c                   V     e Zd ZdZ fdZd Zd Zd Z	 dd	Zd
 Z	d Z
d Zd Z xZS )Refz~
    Reference to column alias of the query. For example, Ref('sum_cost') in
    qs.annotate(sum_cost=Sum('cost')) query.
    c                 f    t                                                       ||c| _        | _        d S r   )r  r   r  r   )r   r  r   r   s      r$   r   zRef.__init__~  s-    !%v	4;;;r+   c                 X    d                     | j        j        | j        | j                  S r3  )r  r   r&   r  r   rC   s    r$   r  zRef.__repr__  s#    ""4>#:DIt{SSSr+   c                     | j         gS r   r   rC   s    r$   r   zRef.get_source_expressions  s    }r+   c                     |\  | _         d S r   r{  r   s     r$   r   zRef.set_source_expressions  s    r+   NTFc                     | S r   r*   r  s         r$   r7   zRef.resolve_expression  s	    
 r+   c                     | j         hS r   )r  rC   s    r$   r  zRef.get_refs  s    	{r+   c                 l    |                                  }| j                            |          |_        |S r   )r   r   r  )r   r  r  s      r$   r  zRef.relabeled_clone  s+    		{228<<r+   c                 D    |j                             | j                  g fS r   )r  
quote_namer  r   s      r$   r   z
Ref.as_sql  s    ~((33R77r+   c                     | gS r   r*   rC   s    r$   r  zRef.get_group_by_cols  r6  r+   r;  )r&   r'   r(   r)   r   r  r   r   r7   r  r  r   r  r  r  s   @r$   rw  rw  x  s         
. . . . .T T T     SX       
8 8 8      r+   rw  c                   8     e Zd ZdZdZd Z fdZd Zd Z xZ	S )ExpressionListz
    An expression containing multiple expressions. Can be used to provide a
    list of expressions as an argument to another expression, like a partition
    clause.
    z%(expressions)sc                 T    | j                             d | j        D                       S )Nc              3   4   K   | ]}t          |          V  d S r   r  r   s     r$   r   z)ExpressionList.__str__.<locals>.<genexpr>  r  r+   )r  r  r   rC   s    r$   r  zExpressionList.__str__  s*    ###P#P8O#P#P#PPPPr+   c                 H    | j         sdS  t                      j        |i |S )N) r*   )r   r  r   )r   rd  r(  r   s      r$   r   zExpressionList.as_sql  s.    & 	6uww~t.v...r+   c                       | j         ||fi |S r   )r   )r   r    r   r!   s       r$   r%   zExpressionList.as_sqlite  s    t{8ZAA=AAAr+   c                     g }|                                  D ])}|                    |                                           *|S r   r   r  r  )r   group_by_colsr   s      r$   r  z ExpressionList.get_group_by_cols  sK    //11 	; 	;D  !7!7!9!9::::r+   )
r&   r'   r(   r)   r  r  r   r%   r  r  r  s   @r$   r  r    s|          !HQ Q Q/ / / / /
B B B      r+   r  c                   &     e Zd ZdZdZ fdZ xZS )OrderByListFzORDER BY %(expressions)sc                 R    d |D             } t                      j        |i | d S )Nc              3      K   | ]M}t          |t                    r2|d          dk    r&t          t          |dd                   d          n|V  NdS )r   r/   r  NTr-  )r   r   r&  r   r   s     r$   r   z'OrderByList.__init__.<locals>.<genexpr>  sz       
 
  dC((-1!W^^ $qrr(5555	
 
 
 
 
 
r+   )r  r   )r   r   r  r   s      r$   r   zOrderByList.__init__  sG    
 
 $
 
 
 	+//////r+   )r&   r'   r(   r@  r  r   r  r  s   @r$   r  r    sB        O)H	0 	0 	0 	0 	0 	0 	0 	0 	0r+   r  z"django.db.models.ExpressionWrapperc                   Z     e Zd ZdZ fdZd Zd Z fdZd Zd Z	e
d             Z xZS )	ExpressionWrapperz
    An expression that can wrap another expression so that it can provide
    extra context to the inner expression, such as the output_field.
    c                 Z    t                                          |           || _        d S r  rE  rF  s      r$   r   zExpressionWrapper.__init__  s)    l333$r+   c                      |d         | _         d S Nr   rH  r   s     r$   r   z(ExpressionWrapper.set_source_expressions      (r+   c                     | j         gS r   rH  rC   s    r$   r   z(ExpressionWrapper.get_source_expressions  rI  r+   c                     t          | j        t                    r9| j                                        }| j        |_        |                                S t                                                      S r   )r   r   rE  r   r   r  r  r   r   r   s     r$   r  z#ExpressionWrapper.get_group_by_cols  s_    doz22 	2--//J&*&7J#//111 ww((***r+   c                 6    |                     | j                  S r   )r  r   r   s      r$   r   zExpressionWrapper.as_sql  s    000r+   c                 L    d                     | j        j        | j                  S r  )r  r   r&   r   rC   s    r$   r  zExpressionWrapper.__repr__  s    t~6HHHr+   c                     | j         j        S r   )r   r@  rC   s    r$   r@  z!ExpressionWrapper.allowed_default  s    ..r+   )r&   r'   r(   r)   r   r   r   r  r   r  rB  r@  r  r  s   @r$   r  r    s         
% % % % %# # #! ! !+ + + + +1 1 1I I I / / X/ / / / /r+   r  c                   F     e Zd ZdZ fdZd Z fdZ	 d
 fd	Zd	 Z xZ	S )r   z1The logical negation of a conditional expression.c                 p    t                                          |t          j                               d S r  )r  r   r   r   r  s     r$   r   zNegatedExpression.__init__  s/    &2E2G2GHHHHHr+   c                 4    | j                                         S r   )r   r   rC   s    r$   r   zNegatedExpression.__invert__  s    ##%%%r+   c                 L   	 t                                          ||          \  }}nH# t          $ r; |j        j        }|j        sY dS |                    t          d                    cY S w xY w|j        j        }|	                    | j
                  sd| d|fS d| |fS )N)z1=1r*   Tz
CASE WHEN z = 0 THEN 1 ELSE 0 ENDzNOT )r  r   r   r   r  &supports_boolean_expr_in_select_clauser  r9   r  0conditional_expression_supported_in_where_clauser   )r   r    r   r"   r#   r  r  r   s          r$   r   zNegatedExpression.as_sql  s    	1''..:>>KC 	1 	1 	1*3HB ! yy##E$KK00000		1
 !% CCDOTT 	D;;;;VCCc||V##s   %) A.	"A.-A.NTFc                     t                                          |||||          }t          |j        dd          st	          d          |S )Nr`   Fz*Cannot negate non-conditional expressions.)r  r7   rc   r   r  )r   r   r   r   r   r   r  r   s          r$   r7   z$NegatedExpression.resolve_expression  sW     77--;y(
 
 x*M5AA 	JHIIIr+   c                     |j         j        j        }|j         j        j        s% || j                  rd                    |          }||fS NzCASE WHEN {} THEN 1 ELSE 0 END)r   r  r  r  r  r   r  )r   r    r"   r#   $expression_supported_in_where_clauses        r$   r6  zNegatedExpression.select_format  s^    
 #T 	- #,S	? 54T_EE	?
 399#>>CF{r+   r;  )
r&   r'   r(   r)   r   r   r   r7   r6  r  r  s   @r$   r   r     s        ;;I I I I I& & &$ $ $ $ $" SX           r+   r   zdjango.db.models.Whenc                   x     e Zd ZdZdZd fd	Zd Zd Zd Zd Z		 d fd
	Z
d ZddZd Zed             Z xZS )Whenz"WHEN %(condition)s THEN %(result)sFNc                    |r1|t          di |d }}n t          |dd          rt          |fi |d }}|t          |dd          r|rt          d          t          |t                     r|st	          d          t                                          d            || _        |                     |          d         | _	        d S )Nr`   FzLWhen() supports a Q object, a boolean expression, or lookups as a condition.z1An empty Q() can't be used as a When() condition.r   r   r*   )
r   rc   r  r   r   r  r   	conditionr   r~  )r   r  thenlookupsr   s       r$   r   zWhen.__init__+  s     	C %&\\\\47		M599 C%&y%<%<G%<%<d7	GI}e$L$LPW"   i## 	RI 	RPQQQd+++"--d33A6r+   c                 &    d| j         d| j        S )NzWHEN z THEN r  r~  rC   s    r$   r  zWhen.__str__<  s     $(NNNDKK@@r+   c                 (    d| j         j        d| dS N<z: >r   r&   rC   s    r$   r  zWhen.__repr__?       !^444ddd;;r+   c                     | j         | j        gS r   r  rC   s    r$   r   zWhen.get_source_expressionsB  s    ,,r+   c                 $    |\  | _         | _        d S r   r  r   s     r$   r   zWhen.set_source_expressionsE  s    &+#r+   Tc                     t                                          |||||          }|r+|j        $| j                            ||||d          |_        |S )NF)r   )r  r7   r  r"  s          r$   r7   zWhen.resolve_expressionH  sc     GG&&uk5)XVV 	/.;;{E9u <  AK r+   c                     | j         j        gS r   )r~  r   rC   s    r$   r   zWhen.get_source_fieldsS  s    122r+   c                     |j                             |            |}g }|                    | j                  \  }}||d<   |                    | j                  \  }	}
|	|d<   |p| j        }||z  g |||
R fS )Nr  r~  )r  r  r  r  r~  r  )r   r    r   r  r!   template_params
sql_paramscondition_sqlcondition_params
result_sqlresult_paramss              r$   r   zWhen.as_sqlW  s    //555'
*2*:*:4>*J*J'''4$$,$4$4T[$A$A!
M$.!,t}/) ,
,
,
 ,
 ,
 
 	
r+   c                     g }|                                  D ])}|                    |                                           *|S r   r  r   s      r$   r  zWhen.get_group_by_colsf  sH    1133 	4 	4FKK00223333r+   c                 2    | j         j        o| j        j        S r   )r  r@  r~  rC   s    r$   r@  zWhen.allowed_defaultm  s    ~-M$+2MMr+   NNr;  r   )r&   r'   r(   r  r`   r   r  r  r   r   r7   r   r   r  r   r@  r  r  s   @r$   r  r  %  s        3HK7 7 7 7 7 7"A A A< < <- - -, , , SX	 	 	 	 	 	3 3 3
 
 
 
   N N _N N N N Nr+   r  zdjango.db.models.Casec                   ~     e Zd ZdZdZdZddd fd
Zd Zd Zd	 Z	d
 Z
 fdZ	 ddZ fdZed             Z xZS )Casez
    An SQL searched CASE expression:

        CASE
            WHEN n > 0
                THEN 'positive'
            WHEN n < 0
                THEN 'negative'
            ELSE 'zero'
        END
    z#CASE %(cases)s ELSE %(default)s ENDr  N)defaultr   c                   t          d |D                       st          d          t                                          |           t	          |          | _        |                     |          d         | _        || _        d S )Nc              3   @   K   | ]}t          |t                    V  d S r   )r   r  )r   cases     r$   r   z Case.__init__.<locals>.<genexpr>  s,      <<d:dD))<<<<<<r+   z.Positional arguments must all be When objects.r   )	r  r  r  r   rx  casesr   r  r  )r   r  r   r  r  r   s        r$   r   zCase.__init__  s|    <<e<<<<< 	NLMMM&&&%[[
..w77:


r+   c                 `    dd                     d | j        D                       d| j        S )NzCASE r   c              3   4   K   | ]}t          |          V  d S r   r  )r   r   s     r$   r   zCase.__str__.<locals>.<genexpr>  s(      11c!ff111111r+   z, ELSE )r  r  r  rC   s    r$   r  zCase.__str__  s;     II11dj1111111LL
 	
r+   c                 (    d| j         j        d| dS r  r  rC   s    r$   r  zCase.__repr__  r  r+   c                 "    | j         | j        gz   S r   r  r  rC   s    r$   r   zCase.get_source_expressions  s    zT\N**r+   c                 $    |^ | _         | _        d S r   r  r   s     r$   r   zCase.set_source_expressions  s    $)!T\\\r+   c                 p    t                                                      }|j        d d          |_        |S r   )r  r   r  )r   r   r   s     r$   r   z	Case.copy  s*    GGLLNN'!!!*r+   c                    |j                             |            | j        s|                    | j                  S i | j        |}g }g }| j        D ]}		 |                    |	          \  }
}n9# t          $ r Y (t          $ r! |                    |	j                  \  }}Y  nLw xY w|	                    |
           |
                    |           |                    | j                  \  }}|s||fS |p| j        }|                    |          |d<   ||d<   |
                    |           |p|                    d| j                  }||z  }| j        "|j                             | j                  |z  }||fS )Nr  r  r  )r  r  r  r  r  r  r   r   r~  rc  r  case_joinerr  r  r  r   unification_cast_sqlr   )r   r    r   r  r  r!   r  
case_partsr  r  case_sqlcase_paramsdefault_sqldefault_paramsr"   s                  r$   r   zCase.as_sql  s    	//555z 	2##DL1119TZ9=9

J 	I 	ID(0(8(8(>(>%++!       .6.>.>t{.K.K+^ h'''k*****2*:*:4<*H*H'K 	/..!5T%5#.#3#3J#?#? %0	".)))M22:t}MM(%1.55d6GHH3NCJs   A..
B$:&B$#B$c                     | j         s| j                                        S t                                                      S r   )r  r  r  r  )r   r   s    r$   r  zCase.get_group_by_cols  s7    z 	4<11333ww((***r+   c                 V    | j         j        ot          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r   r  )r   case_s     r$   r   z'Case.allowed_default.<locals>.<genexpr>  s6       4
 4
&+E!4
 4
 4
 4
 4
 4
r+   )r  r@  r  r  rC   s    r$   r@  zCase.allowed_default  s>    |+ 
 4
 4
/3z4
 4
 4
 1
 1
 	
r+   r  )r&   r'   r(   r)   r  r  r   r  r  r   r   r   r   r  r   r@  r  r  s   @r$   r  r  r  s       
 
 5HK'+$       
 
 
< < <+ + +* * *     @D   B+ + + + +
 
 
 _
 
 
 
 
r+   r  c                   z     e Zd ZdZdZdZdZdZd fd	Zd Z	d Z
d	 Z fd
Zed             Zd ZddZd Z xZS )Subqueryz
    An explicit subquery. It may contain OuterRef() references to the outer
    query which will be resolved when it is applied to that query.
    z(%(subquery)s)FNTc                     t          |d|                                          | _        d| j        _        || _        t                                          |           d S )Nr   T)rc   r  r   r   r  r  r   )r   querysetr   r  r   s       r$   r   zSubquery.__init__  sQ    Xw99??AA
"

&&&&&r+   c                     | j         gS r   r   rC   s    r$   r   zSubquery.get_source_expressions  s    
|r+   c                      |d         | _         d S r  r  r   s     r$   r   zSubquery.set_source_expressions  s    1X


r+   c                     | j         j        S r   )r   r   rC   s    r$   r   zSubquery._resolve_output_field  s    z&&r+   c                     t                                                      }|j                                        |_        |S r   )r  r   r   r  )r   r  r   s     r$   r   zSubquery.copy  s.    k''))r+   c                     | j         j        S r   )r   external_aliasesrC   s    r$   r  zSubquery.external_aliases  s    z**r+   c                 4    | j                                         S r   )r   get_external_colsrC   s    r$   r  zSubquery.get_external_cols  s    z++---r+   c                     |j                             |            i | j        |}| j                            ||          \  }}|dd         |d<   |p|                    d| j                  }||z  }||fS )Nr  r@   r   r  )r  r  r  r   r   r  r  )	r   r    r   r  r!   r  subquery_sqlr  r"   s	            r$   r   zSubquery.as_sql  s    //5559TZ9=9#':#4#4Xz#J#J j&21R4&8
#M22:t}MM(Jr+   c                 8    | j                             |           S )N)wrapper)r   r  rC   s    r$   r  zSubquery.get_group_by_cols  s    z++D+999r+   r   )r&   r'   r(   r)   r  r   r=  r   r   r   r   r   r   rB  r  r  r   r  r  r  s   @r$   r  r    s         
  H!H' ' ' ' ' '    ' ' '    
 + + X+. . .   : : : : : : :r+   r  c                   T     e Zd ZdZ ej                    ZdZ fdZd Z	 fdZ
 xZS )ExistszEXISTS(%(subquery)s)Fc                 x     t                      j        |fi | | j                                        | _        d S r   )r  r   r   exists)r   r  r(  r   s      r$   r   zExists.__init__  s;    ,,V,,,Z&&((


r+   c                 V    |j         j        j        sd                    |          }||fS r  )r   r  r  r  r7  s       r$   r6  zExists.select_format
  s2     "+R 	?299#>>CF{r+   c                     	  t                      j        |g|R i |S # t          $ r; |j        j        }|j        sY dS |                    t          d                    cY S w xY w)N)z1=0r*   F)r  r   r   r   r  r  r  r9   )r   r    rd  r(  r  r   s        r$   r   zExists.as_sql  s    	2!577>(<T<<<V<<< 	2 	2 	2*3HB ! yy##E%LL11111		2s     A% "A%$A%)r&   r'   r(   r  r   r   r   r=  r   r6  r   r  r  s   @r$   r  r    s{        %H&6&((L") ) ) ) )  2 2 2 2 2 2 2 2 2r+   r  zdjango.db.models.OrderByc                   ^    e Zd ZdZdZdZdZddZd Zd Z	d Z
dd	Zd
 Zd Zd Zd Zd ZdS )r&  z%(expression)s %(ordering)sFTNc                     |r|rt          d          |du s|du rt          d          || _        || _        || _        t	          |d          st          d          || _        d S )Nz1nulls_first and nulls_last are mutually exclusiveFz7nulls_first and nulls_last values must be True or None.r7   z%expression must be an expression type)r   nulls_first
nulls_lastr-  r8   r   )r   r   r-  r  r  s        r$   r   zOrderBy.__init__#  s     	R: 	RPQQQ%:#6#6VWWW&$$z#788 	FDEEE$r+   c                 X    d                     | j        j        | j        | j                  S )Nz{}({}, descending={}))r  r   r&   r   r-  rC   s    r$   r  zOrderBy.__repr__/  s*    &--N#T_do
 
 	
r+   c                      |d         | _         d S r  rH  r   s     r$   r   zOrderBy.set_source_expressions4  r  r+   c                     | j         gS r   rH  rC   s    r$   r   zOrderBy.get_source_expressions7  rI  r+   c                 >   t          | j        t                    rg }g }| j                                        D ]i}|                                 } |j        |g           |                    |          \  }	}
|                    |	           |                    |
           jd	                    |          |fS |p| j
        }|j        j        r| j        rd|z  }nL| j        rd|z  }n?| j        r| j        r|j        j        sd|z  }n| j        r| j        s|j        j        sd|z  }|j                            |            |                    | j                  \  }}|| j        rdndd|}||                    d	          z  }||z                                  |fS )
Nr   z%s NULLS LASTz%s NULLS FIRSTz%%(expression)s IS NULL, %sz%%(expression)s IS NOT NULL, %sDESCASC)r   orderingz%(expression)s)r   r   r   rd  r   r   r  rc  r  r  r  r   supports_order_by_nulls_modifierr  r  r-  order_by_nulls_firstr  r  countrstrip)r   r    r   r  r!   r  r#   r  r   r"   
col_paramsexpression_sqlplaceholderss                r$   r   zOrderBy.as_sql:  s   dox00 		0IF//11 * *yy{{++SE222"*"2"24"8"8Z  %%%j))))99Y''//,t}? 	H 7*X5! 7+h6 HH$.$7$LH 98C! HOH(2(;(PH =xG//555!)!1!1$/!B!B("&/<u
 
 

 	(..!1222<'//11699r+   c                 "   |j         j        sn|j                            | j                  rO|                                 }t          t          | j        d          d          |_         |j        ||          S |                     ||          S )NT)r  F)r  )	r  r  r  r  r   r   r  r  r   )r   r    r   r   s       r$   	as_oraclezOrderBy.as_oracle^  s     #J	5OO 	5 99;;D"T_4000  DO 4;x444{{8Z000r+   c                     g }|                                  D ])}|                    |                                           *|S r   r  r   s      r$   r  zOrderBy.get_group_by_colso  sH    1133 	4 	4FKK00223333r+   c                 v    | j          | _         | j        rd| _        d | _        n| j        rd| _        d | _        | S r|   )r-  r  r  rC   s    r$   r1  zOrderBy.reverse_orderingu  sI    "o- 	#"DO#D_ 	##D"DOr+   c                     d| _         d S rF   r  rC   s    r$   r)  zOrderBy.asc  s    r+   c                     d| _         d S r|   r  rC   s    r$   r.  zOrderBy.desc  s    r+   )FNNr   )r&   r'   r(   r  r`   r9  r   r   r  r   r   r   r  r  r1  r)  r.  r*   r+   r$   r&  r&    s        ,HK',$#' 
% 
% 
% 
%
 
 

# # #! ! !": ": ": ":H1 1 1"             r+   r&  c                   j     e Zd ZdZdZdZ	 	 	 	 d fd	Zd Zd Zd Z	dd	Z
 fd
Zd Zd Zd Z xZS )Windowz %(expression)s OVER (%(window)s)FTNc                    || _         || _        || _        t          |dd          st	          d|j        j        z            | j         At          | j         t          t          f          s| j         f| _         t          | j          | _         | j        t          | j        t          t          f          rt          | j         | _        nJt          | j        t          t          f          rt          | j                  | _        nt	          d          t                                          |           |                     |          d         | _        d S )Nr?  Fz3Expression '%s' isn't compatible with OVER clauses.zhWindow.order_by must be either a string reference to a field, an expression, or a list or tuple of them.r   r   )partition_byorder_byframerc   r   r   r&   r   rS  rx  r  r  r   r   r  r   r   source_expression)r   r   r  r  r  r   r   s         r$   r   zWindow.__init__  sG    ) 
z#6>> 	E&/0  
 (d/%?? 9%)%6$8! .0A BD=$$-$77  +T] ;DMNC+@AA  +DM : : H   	l333!%!8!8!D!DQ!Gr+   c                     | j         j        S r   )r  r   rC   s    r$   r   zWindow._resolve_output_field  s    %22r+   c                 6    | j         | j        | j        | j        gS r   r  r  r  r  rC   s    r$   r   zWindow.get_source_expressions  s    &(94=$*UUr+   c                 <    |\  | _         | _        | _        | _        d S r   r  r   s     r$   r   zWindow.set_source_expressions  s    OTL 14=$***r+   c                    |j                             |            |j        j        st	          d          |                    | j                  \  }}g d}}| j        G| j                            ||d          \  }}	|	                    |           |t          |	          z  }| j        D|                    | j                  \  }
}|	                    |
           |t          |          z  }| j        rD|                    | j                  \  }}|	                    |           |t          |          z  }|p| j        }||d                    |                                          dz  g ||R fS )Nz1This backend does not support window expressions.r*   zPARTITION BY %(expressions)s)r    r   r  r  )r   window)r  r  r  supports_over_clauser   r  r  r  r   rc  rS  r  r  r  r  strip)r   r    r   r  expr_sqlr#   
window_sqlwindow_paramssql_exprr  	order_sqlorder_params	frame_sqlframe_paramss                 r$   r   zWindow.as_sql  s   //555"7 	Y#$WXXX#++D,BCC&$&M
(#'#4#;#;!%7 $< $ $ Hj
 h'''U:...M=$&.&6&6t}&E&E#I|i(((U<000M: 	1&.&6&6tz&B&B#I|i(((U<000M,t} h#((::N:N:T:T:V:VWWW%f%}%%
 	
r+   c                 b   t          | j        t          j                  rz|                                 } |j                    }t          j                    |d         _         |j        |           t          t          |          
                    ||          S |                     ||          S r  )r   r   r   r   r   r   r   r   r  r  r%   r   )r   r    r   r   r   r   s        r$   r%   zWindow.as_sqlite  s    d')<== 	G99;;D!<!<!>!>171B1D1Dq!.'D'(:;;;&&00:FFF{{8Z000r+   c                     d                     t          | j                  | j        rdt          | j                  z   ndt          | j        pd          t          | j        pd                    S )Nz{} OVER ({}{}{})zPARTITION BY r  )r  r   r  r  r  r  rC   s    r$   r  zWindow.__str__  sl    !((&''8<8IQOc$"34444r#$$
 b!!	
 
 	
r+   c                 (    d| j         j        d| dS r  r  rC   s    r$   r  zWindow.__repr__  r  r+   c                     g }| j         r,|                    | j                                                    | j        ,|                    | j                                                   |S r   )r  r  r  r  )r   r  s     r$   r  zWindow.get_group_by_cols  sf     	H  !2!D!D!F!FGGG=$  !@!@!B!BCCCr+   )NNNNr   )r&   r'   r(   r  r   r   r   r   r   r   r   r%   r  r  r  r  r  s   @r$   r  r    s        1H 
 "H "H "H "H "H "HH3 3 3V V VU U U
 
 
 
B1 1 1 1 1
 
 
< < <      r+   r  c                   $    e Zd ZdZdZdZdZd ZdS )WindowFrameExclusionzCURRENT ROWGROUPTIESz	NO OTHERSc                 .    | j         j         d| j         S rX  )r   r(   _name_rC   s    r$   r  zWindowFrameExclusion.__repr__   s    .-=====r+   N)r&   r'   r(   CURRENT_ROWr*  r+  	NO_OTHERSr  r*   r+   r$   r)  r)    s7        KEDI> > > > >r+   r)  c                   N    e Zd ZdZdZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZdS )WindowFrameaV  
    Model the frame clause in window expressions. There are two types of frame
    clauses which are subclasses, however, all processing and validation (by no
    means intended to be complete) is done here. Thus, providing an end for a
    frame is optional (the default is UNBOUNDED FOLLOWING, which is the last
    row in the frame).
    z7%(frame_type)s BETWEEN %(start)s AND %(end)s%(exclude)sNc                     t          |          | _        t          |          | _        t          |t          t
          f          st          | j        j         d          || _	        d S )Nz3.exclusion must be a WindowFrameExclusion instance.)
r9   r  endr   r	   r)  r  r   r(   	exclusion)r   r  r3  r4  s       r$   r   zWindowFrame.__init__  sj    5\\
::)h0D%EFF 	>. 1 1 1   #r+   c                 $    |\  | _         | _        d S r   r  r3  r   s     r$   r   z"WindowFrame.set_source_expressions  s    $
DHHHr+   c                     | j         | j        gS r   r6  rC   s    r$   r   z"WindowFrame.get_source_expressions  s    
DH%%r+   c                 2    | j         dS d| j         j         S )Nr  z	 EXCLUDE )r4  r   rC   s    r$   get_exclusionzWindowFrame.get_exclusion  s"    >!214>/111r+   c                 &   |j                             |            |                     || j        j        | j        j                  \  }}| j        r|j        j        st          d          | j
        | j        |||                                 dz  g fS )Nz6This backend does not support window frame exclusions.
frame_typer  r3  exclude)r  r  window_frame_start_endr  r   r3  r4  r  supports_frame_exclusionr   r  r<  r9  )r   r    r   r  r3  s        r$   r   zWindowFrame.as_sql$  s    //55500
($(.
 

s > 	*"5"N 	#H   M"o--//	  	
 		
r+   c                 (    d| j         j        d| dS r  r  rC   s    r$   r  zWindowFrame.__repr__8  r  r+   c                     g S r   r*   rC   s    r$   r  zWindowFrame.get_group_by_cols;  r   r+   c                 f   | j         j        >| j         j        dk     r.dt          | j         j                  t          j        j        fz  }n|| j         j        "| j         j        dk    rt          j        j        }nN| j         j        1| j         j        dk    r!d| j         j        t          j        j        fz  }nt          j        j        }| j	        j        1| j	        j        dk    r!d| j	        j        t          j        j        fz  }n| j	        j        "| j	        j        dk    rt          j        j        }n[| j	        j        >| j	        j        dk     r.dt          | j	        j                  t          j        j        fz  }nt          j        j
        }| j        | j        |||                                 dz  S )Nr   z%d %sr;  )r  r   absr   r  	PRECEDINGr.  	FOLLOWINGUNBOUNDED_PRECEDINGr3  UNBOUNDED_FOLLOWINGr  r<  r9  )r   r  r3  s      r$   r  zWindowFrame.__str__>  sq   :'DJ,<q,@,@s4:#344jn6NOOEEZ)dj.>!.C.CN.EEZ)dj.>.B.Btz/1IJJEEN6E8>%$(.1*<*<TX^Z^-EFFCCX^'DHNa,?,?.,CCX^'DHNQ,>,>S00*.2JKKCC.4C}/))++	 
  
 
 	
r+   c                      t          d          )Nz3Subclasses must implement window_frame_start_end().r   r   r   r  r3  s       r$   r>  z"WindowFrame.window_frame_start_endW  s    !"WXXXr+   r  )r&   r'   r(   r)   r  r   r   r   r9  r   r  r  r  r>  r*   r+   r$   r1  r1    s          IH# # # #% % %& & &2 2 2

 
 
(< < <  
 
 
2Y Y Y Y Yr+   r1  c                       e Zd ZdZd ZdS )RowRangeROWSc                 8    |j                             ||          S r   )r  window_frame_rows_start_endrI  s       r$   r>  zRowRange.window_frame_start_end^  s    ~99%EEEr+   Nr&   r'   r(   r<  r>  r*   r+   r$   rK  rK  [  s-        JF F F F Fr+   rK  c                       e Zd ZdZd ZdS )
ValueRangeRANGEc                 8    |j                             ||          S r   )r  window_frame_range_start_endrI  s       r$   r>  z!ValueRange.window_frame_start_ende  s    ~::5#FFFr+   NrO  r*   r+   r$   rQ  rQ  b  s-        JG G G G Gr+   rQ  )cr   r'  rk  rJ  collectionsr   decimalr   enumr   	itertoolsr   typesr	   uuidr
   django.core.exceptionsr   r   r   	django.dbr   r   r   django.db.modelsr   django.db.models.constantsr   django.db.models.query_utilsr   django.utils.deconstructr   django.utils.functionalr   r   django.utils.hashabler   r   r-   r   r   rE  rH   rB   rT   rX   r\   rN   rh   ry   rl   ro   rt   r  r  r  r  _connector_combinationsrx  r{  r  drV  r<   field_typesr|  r}  r~  rl  r  r:   r  r  r   r  r  r  r  r9   r0  r?  rC  rQ  r   rw  r  r  r  r   r  r  r  r  r&  r  r)  r1  rK  rQ  r*   r+   r$   <module>rf     s          # # # # # #                               L L L L L L L L L L B B B B B B B B B B # # # # # # 1 1 1 1 1 1 * * * * * * 4 4 4 4 4 4 B B B B B B B B / / / / / /        A' A' A' A' A' A' A' A'H	 	 	 	 	Z 	 	 	T T T T T T T Tn
 *# *# *# *# *# *# *# *#p  NNNNN
  "  NNN NNN	
  $  NNNNN
    
 #$
	    NNNNNN
  , 	v3V5IJ!6#79MN!6#3V5IJ!6#79MN!6#79MNv3V5EF!6#3V5EF
 	v3V5IJ!6#79MNv/1EFv3V5IJ!6#3V5IJ!6#79MN!6#79MNv3V5EFv/1EF
Ow r %T** 	A 	A 	A 
! D DA"#'')) D D	; + 	D 	DCf&&sIsFCCCC	DD
 S!!!! ! "!!TE TE TE TE TE+Z TE TE TEn0 0 0 0 0+ 0 0 0f
 
 
 
 
, 
 
 
 *+++= = = = =
 = = ,+=@" " " " "q " " "J
 
 
 
 
q 
 
 
6U 6U 6U 6U 6UQ 6U 6U 6Ur -...ZY ZY ZY ZY ZYz ZY ZY /.ZYz .///M M M M M
 M M 0/M` 
  
  
  
  
Z  
  
  
F    :   $ $ $ $ $j $ $ $N$6 $6 $6 $6 $6* $6 $6 $6N6 6 6 6 6z 6 6 6r& & & & &* & & &R    T   80 0 0 0 0. 0 0 0  :;;;!/ !/ !/ !/ !/*J !/ !/ <;!/H0 0 0 0 0) 0 0 0f -...IN IN IN IN IN: IN IN /.INX -...V
 V
 V
 V
 V
z V
 V
 /.V
r2: 2: 2: 2: 2:~z 2: 2: 2:j2 2 2 2 2X 2 2 26 0111f f f f fj f f 21fRq q q q q q q qh> > > > >4 > > >TY TY TY TY TY* TY TY TYnF F F F F{ F F FG G G G G G G G G Gr+   