
     h                     	   d dl Z 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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 d dlmZ d dlmZ  G d d          Z  G d d          Z! G d d          Z"e G d de"e!                      Z# e$d          Z%d e!j&        e!j'        e!j(        e!j)        e!j*        e!j+        fD             d e!j&        e!j'        e!j(        e!j)        fD             d e!j,        e!j-        e!j.        e!j/        e!j0        fD             d e!j&        e!j'        e!j(        e!j)        e!j*        e!j+        fD             e!j&        ej1        ej2        ej3        fej3        ej2        ej3        fej2        ej1        ej3        fej2        ej3        ej3        fej2        ej2        ej2        fej4        ej2        ej4        fej2        ej4        ej4        fgie!j'        ej1        ej2        ej3        fej3        ej2        ej3        fej1        ej1        ej2        fej1        ej3        ej2        fej3        ej1        ej2        fej3        ej3        ej2        fej2        ej2        ej2        fej4        ej2        ej4        fej4        ej4        ej2        fg	igZ5 ee6          Z7d Z8e5D ]3Z9e9:                                D ]\  Z;Z<e<D ]\  Z=Z>Z? e8e=e;e>e?           4 ej@        d          d             ZA G d de e#          ZB G d  d!eB          ZC G d" d#eB          ZD ed$%           G d& d'e!                      ZE G d( d)eE          ZF G d* d+eE          ZG ed,%           G d- d.e e#                      ZH ed/%           G d0 d1e e#                      ZI G d2 d3e#          ZJ G d4 d5e#          ZK G d6 d7e#          ZL G d8 d9e#          ZM G d: d;eH          ZN G d< d=eH          ZO ed>%           G d? d@e e#                      ZP edA%           G dB dCe#                      ZQ edD%           G dE dFe e#                      ZR G dG dHe"e!          ZS G dI dJeS          ZT edK%           G dL dMe#                      ZU G dN dOe e#          ZV G dP dQe#          ZW G dR dSeW          ZX G dT dUeW          ZYdS )V    N)defaultdictDecimal)UUID)EmptyResultSet
FieldError)DatabaseErrorNotSupportedError
connection)fields)
LOOKUP_SEP)Q)deconstructible)RemovedInDjango50Warning)cached_property)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         X/var/www/html/Sam_Eipo/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+c1 	 	 	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&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r9   MULr   s    r   __neg__zCombinable.__neg__K   s    }}R5111r&   c                 :    |                      || j        d          S NFr9   ADDr   r6   s     r   __add__zCombinable.__add__N       }}UDHe444r&   c                 :    |                      || j        d          S rA   r9   SUBrD   s     r   __sub__zCombinable.__sub__Q   rF   r&   c                 :    |                      || j        d          S rA   r<   rD   s     r   __mul__zCombinable.__mul__T   rF   r&   c                 :    |                      || j        d          S rA   r9   DIVrD   s     r   __truediv__zCombinable.__truediv__W   rF   r&   c                 :    |                      || j        d          S rA   r9   MODrD   s     r   __mod__zCombinable.__mod__Z   rF   r&   c                 :    |                      || j        d          S rA   r9   POWrD   s     r   __pow__zCombinable.__pow__]   rF   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   NotImplementedErrorrD   s     r   __and__zCombinable.__and__`   V    4.. 	&75-QV3W3W 	&T77QuXX%%!T
 
 	
r&   c                 :    |                      || j        d          S rA   )r9   BITANDrD   s     r   bitandzCombinable.bitandg       }}UDK777r&   c                 :    |                      || j        d          S rA   )r9   BITLEFTSHIFTrD   s     r   bitleftshiftzCombinable.bitleftshiftj   s    }}UD$5u===r&   c                 :    |                      || j        d          S rA   )r9   BITRIGHTSHIFTrD   s     r   bitrightshiftzCombinable.bitrightshiftm   s    }}UD$6>>>r&   c                     t          | dd          r0t          |dd          rt          |           t          |          z  S t          d          rZ   r]   rD   s     r   __xor__zCombinable.__xor__p   ra   r&   c                 :    |                      || j        d          S rA   )r9   BITXORrD   s     r   bitxorzCombinable.bitxorw   re   r&   c                     t          | dd          r0t          |dd          rt          |           t          |          z  S t          d          rZ   r]   rD   s     r   __or__zCombinable.__or__z   ra   r&   c                 :    |                      || j        d          S rA   )r9   BITORrD   s     r   bitorzCombinable.bitor   s    }}UDJ666r&   c                 :    |                      || j        d          S NTrB   rD   s     r   __radd__zCombinable.__radd__       }}UDHd333r&   c                 :    |                      || j        d          S rw   rH   rD   s     r   __rsub__zCombinable.__rsub__   ry   r&   c                 :    |                      || j        d          S rw   r<   rD   s     r   __rmul__zCombinable.__rmul__   ry   r&   c                 :    |                      || j        d          S rw   rN   rD   s     r   __rtruediv__zCombinable.__rtruediv__   ry   r&   c                 :    |                      || j        d          S rw   rR   rD   s     r   __rmod__zCombinable.__rmod__   ry   r&   c                 :    |                      || j        d          S rw   rV   rD   s     r   __rpow__zCombinable.__rpow__   ry   r&   c                      t          d          Nr\   r_   rD   s     r   __rand__zCombinable.__rand__       !T
 
 	
r&   c                      t          d          r   r   rD   s     r   __ror__zCombinable.__ror__   r   r&   c                      t          d          r   r   rD   s     r   __rxor__zCombinable.__rxor__   r   r&   N)(r!   r"   r#   r$   rC   rI   r=   rO   rW   rS   rc   rt   rg   rj   ro   r9   r?   rE   rJ   rL   rP   rT   rX   r`   rd   rh   rk   rm   rp   rr   ru   rx   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                   x   e Zd ZdZe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	 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$dZ%d Z&d Z'd  Z(d! Z)d" Z*d# Z+dS )&BaseExpressionz%Base class for all query expressions.FTNc                     |	|| _         d S d S N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%   r>   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    yr&   c                     d |D             S )Nc                     g | ]G}t          |d           r|n2t          |t                    rt          |          nt	          |          HS r2   )r3   
isinstancestrFr4   .0args     r   
<listcomp>z5BaseExpression._parse_expressions.<locals>.<listcomp>   sa     
 
 
  s011BCC&sC00@!C&&&eCjj
 
 
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   r>   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   r>   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   r>   s    r   r   z)BaseExpression.contains_column_references   s<     
 
3355
 
 
 
 
 	
r&   c                     |                                  }|_        |                    fd|                                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                 H    g | ]}|r|                               nd S r   r   )r   r   allow_joinsqueryreuse	summarizes     r   r   z5BaseExpression.resolve_expression.<locals>.<listcomp>  sL         ''{E9MMM  r&   )r   
is_summaryr   r   r   r   r   r   r   for_savecs    ````  r   r2   z!BaseExpression.resolve_expression   s~    " IIKK 	         4466	  	
 	
 	
 r&   c                 @    t          | j        t          j                  S r   )r   r   r   BooleanFieldr>   s    r   r[   zBaseExpression.conditional  s    $+V-@AAAr&   c                     | j         S r   r   r>   s    r   fieldzBaseExpression.field   s      r&   c                 ^    |                                  }|d| _        t          d          |S )z+Return the output type of this expressions.NTz4Cannot resolve expression type, unknown output_field)_resolve_output_field_output_field_resolved_to_noner   r   s     r   r   zBaseExpression.output_field$  s8     113326D/STTTr&   c                 D    	 | j         S # t          $ r | j        s 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   r   r>   s    r   _output_field_or_nonez$BaseExpression._output_field_or_none-  sH    	$$ 	 	 	6   	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   	__class__r   r!   )r   sources_iterr   r   s       r   r   z$BaseExpression._resolve_output_field9  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>f  s    = 7;d5\\ r&   IntegerFieldc                 (    | d nt          |           S r   )intr   s      r   r   z.BaseExpression.convert_value.<locals>.<lambda>l  s    = 7;dZZ r&   r   c                 (    | d nt          |           S r   r   r   s      r   r   z.BaseExpression.convert_value.<locals>.<lambda>r  s    = 7;dU^^ 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_lookupx  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                     |                                  }|                    fd|                                 D                        |S )Nc                 :    g | ]}|                               S r%   )replace_references)r   r   references_maps     r   r   z5BaseExpression.replace_references.<locals>.<listcomp>  s7        ''77  r&   r   )r   r   r   s    ` r   r   z!BaseExpression.replace_references  sa    		$$    7799  	
 	
 	
 r&   c                 *    t          j         |           S r   )r   r>   s    r   r   zBaseExpression.copy  s    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         dA&&4V(TY(()))++F33  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   alias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   r>   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%   r>   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   r3   r  )r   r   s     r   r  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)r3   r   r  r   r   r   r   s       r   r  zBaseExpression.select_format  s?    
 4$o66 	J$228S&IIIF{r&   r   NTNFF),r!   r"   r#   r$   NotImplementedempty_result_set_valuer   r   
filterablewindow_compatibler   r   r   r   r   r   r   r   r   r   r   r2   propertyr[   r   r   r   r   staticmethodr   r   r   r   r   r   r   r  r  r   r  r  r  r  r  r%   r&   r   r   r      s       //+J%*"J- - - -  
< < <    
 
 
H H H8 
 
 _

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

 
 
 _
 SX   : B B XB ! ! X!   _ 	 	 _	     <   \ ( ( _(84 4 45 5 5      
 
 
   P P P' ' '8 8 8        r&   r   c                   4    e Zd ZdZed             Zd Zd ZdS )
Expressionz:An expression that can be combined with other expressions.c                    t          j        | j                  }| j        \  }} |j        |i |}|                                 |j                                        }| j        g}|D ]|\  }}t          |t          j                  r7|j        r |j        r|j        j        j        |j        f}nt!          |          }nt#          |          }|                    ||f           }t'          |          S r   )inspect	signaturer   _constructor_argsbind_partialapply_defaults	argumentsitemsr   r   r   Fieldr   model_metalabeltyper   appendtuple)	r   constructor_signatureargsr  r*  r.  identityr   r   s	            r   r9  zExpression.identity  s     ' 1$- @ @-f6)6GGG	  """'--//	N## 	* 	*JC%.. -: (%+ ("[.4ejAEE KKEE%e,,OOS%L))))Xr&   c                 Z    t          |t                    st          S |j        | j        k    S r   )r   r'  r   r9  rD   s     r   __eq__zExpression.__eq__  s)    %,, 	"!!~..r&   c                 *    t          | j                  S r   )hashr9  r>   s    r   __hash__zExpression.__hash__  s    DM"""r&   N)r!   r"   r#   r$   r   r9  r;  r>  r%   r&   r   r'  r'    sQ        DD  _$/ / /
# # # # #r&   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   r   r7   s     r   
<dictcomp>rA    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   r@  s     r   rA  rA  	  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   r@  s     r   rA  rA    sB         	 &"5v7JK
  r&   c                     i | ]=}t           j        t           j        t           j        fD ]}||t          |ft          ||fg>S r%   )r   r   r   r   NoneType)r   r7   
field_types      r   rA  rA  %  sl       
  ".0CVEVW   	:.z:.
   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_combinatorsr5  )lhsr7   rhsresults       r   register_combinable_fieldsrL  X  s*     9%,,c3-?@@@@@r&      )maxsizec                     t                               | d          }|D ]*\  }}}t          ||          rt          ||          r|c S +d S )Nr%   )rH  get
issubclass)r7   lhs_typerhs_typecombinatorscombinator_lhs_typecombinator_rhs_typecombined_types          r   _resolve_combined_typerX  j  sr    (,,Y;;KCN ! !?0-h 344 	!):
 :
 	! !   	! !r&   c                   N     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z		 ddZ
 xZS )r5   Nc                 v    t                                          |           || _        || _        || _        d S Nr   )superr   r7   rI  rJ  )r   rI  r7   rJ  r   r   s        r   r   zCombinedExpression.__init__u  s7    l333"r&   c                 B    d                     | j        j        |           S )Nz<{}: {}>)formatr   r!   r>   s    r   __repr__zCombinedExpression.__repr__{  s      !8$???r&   c                 N    d                     | j        | j        | j                  S )Nz{} {} {})r^  rI  r7   rJ  r>   s    r   __str__zCombinedExpression.__str__~  s       4>48DDDr&   c                     | j         | j        gS r   rI  rJ  r>   s    r   r   z)CombinedExpression.get_source_expressions  s    $(##r&   c                 $    |\  | _         | _        d S r   rc  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   )
rX  r7   r4  rI  r   rJ  r   r   r   r!   )r   rW  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))compilerI  r5  r  rJ  opscombine_expressionr7   )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                    | j                             |||||          }| j                            |||||          }t          | t          t
          f          s	 |j                                        }n# t          t          f$ r d }Y nw xY w	 |j                                        }	n# t          t          f$ r d }	Y nw xY wd||	hv r=||	k    r7t	          | j         | j
        | j                                      |||||          S h d}
| j
        | j        k    r;||
v r7||	k    r1t          | j         | j                                      |||||          S |                                 }||_        ||_         ||_        |S )NDurationField>   	DateField	TimeFieldDateTimeField)rI  r2   rJ  r   DurationExpressionTemporalSubtractionr   r   AttributeErrorr   r7   rI   r   r   )r   r   r   r   r   r   rI  rJ  rR  rS  datetime_fieldsr   s               r   r2   z%CombinedExpression.resolve_expression  s    h));y(
 
 h));y(
 
 $!35H IJJ 	 +==??"J/        +==??"J/       8X"6668x;O;O)Hdndh $$  JIIO$(**//((*48TX>>QQ   IIKK s$   A4 4B
	B
B( (B>=B>r   r  )r!   r"   r#   r   r_  ra  r   r   r   r   r2   __classcell__r   s   @r   r5   r5   t  s             @ @ @E E E$ $ $# # #  "; ; ; SX- - - - - - - -r&   r5   c                   *     e Zd Zd Z fdZd Z xZS )rr  c                     	 |j         }|                                dk    r4|                    |          \  }}|j                            |          |fS n# t
          $ r Y nw xY w|                    |          S )Nrn  )r   r   rh  ri  format_for_duration_arithmeticr   )r   sider   r   outputr   r   s          r   rh  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 rg  )featureshas_native_duration_fieldr\  r   ri  check_expression_supportrh  rI  r5  r  rJ  combine_duration_expressionr7   )	r   r   r   r   rk  r   r   rl  r   s	           r   r   zDurationExpression.as_sql  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   rn  zInvalid arguments for operator .)r   r7   r(   r=   rO   rI  r   r   rJ  r	   rt  r   )	r   r   r   r   r   r   rR  rS  allowed_fieldss	            r   r    zDurationExpression.as_sqlite  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#   rh  r   r    rv  rw  s   @r   rr  rr    sV        	& 	& 	&; ; ; ; ;"      r&   rr  c                   B     e Zd Z ej                    Z fdZd Z xZS )rs  c                 X    t                                          || j        |           d S r   )r\  r   rI   )r   rI  rJ  r   s      r   r   zTemporalSubtraction.__init__  s'    dh,,,,,r&   c                    |j                             |            |                    | j                  }|                    | j                  }|j                             | j        j                                        ||          S r   )ri  r  rh  rI  rJ  subtract_temporalsr   r   )r   r   r   rI  rJ  s        r   r   zTemporalSubtraction.as_sql  st    //555tx((tx((~00H!3355sC
 
 	
r&   )	r!   r"   r#   r   rn  r   r   r   rv  rw  s   @r   rs  rs  	  sW        '6'))L- - - - -
 
 
 
 
 
 
r&   rs  zdjango.db.models.F)pathc                   F    e Zd ZdZd Zd Z	 d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.c                     || _         dS )z^
        Arguments:
         * name: the name of the field this expression references
        N)r   r   s     r   r   z
F.__init__  s    
 			r&   c                 L    d                     | j        j        | j                  S N{}({}))r^  r   r!   r   r>   s    r   r_  z
F.__repr__#  s    t~6	BBBr&   NTFc                 <    |                     | j        |||          S r   )resolve_refr   r   r   r   r   r   r   s         r   r2   zF.resolve_expression&  s        K	JJJr&   c                 8    |                     | j        |           S r   )rP  r   )r   r   s     r   r   zF.replace_references+  s    !!$)T222r&   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.desc1  r  r&   c                 B    | j         |j         k    o| j        |j        k    S r   )r   r   rD   s     r   r;  zF.__eq__4  s    ~0LTY%*5LLr&   c                 *    t          | j                  S r   )r=  r   r>   s    r   r>  z
F.__hash__7  s    DIr&   r  )r!   r"   r#   r$   r   r_  r2   r   r  r  r;  r>  r%   r&   r   r   r     s        NN  C C C SXK K K K
3 3 3' ' '8 8 8M M M    r&   r   c                   :     e Zd ZdZdZd Z fdZd Zd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.)
ValueErrorr   r8  r  s      r   r   zResolvedOuterRef.as_sqlE  s    *
 
 	
r&   c                 `     t                      j        |i |}t          | j        v |_        |S r   )r\  r2   r   r   possibly_multivalued)r   r8  r  colr   s       r   r2   z#ResolvedOuterRef.resolve_expressionK  s4    (egg($9&99 $.#: 
r&   c                     | S r   r%   r   relabelss     r   r   z ResolvedOuterRef.relabeled_cloneS  r  r&   Nc                     g S r   r%   r   r  s     r   r  z"ResolvedOuterRef.get_group_by_colsV  r   r&   r   )
r!   r"   r#   r$   r   r   r2   r   r  rv  rw  s   @r   r  r  ;  s|          
 
 
             r&   r  c                       e 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   r2   zOuterRef.resolve_expression]  s0    di00 	9	***r&   c                     | S r   r%   r  s     r   r   zOuterRef.relabeled_cloneb  r  r&   N)r!   r"   r#   r   r2   r   r%   r&   r   r  r  Z  s8        + + +
    r&   r  zdjango.db.models.Funcc                   r     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	 	 	 ddZ f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     argumentr.  z (z given)r   )
aritylen	TypeErrorr   r!   r\  r   r   source_expressionsextra)r   r   r   r  r   s       r   r   zFunc.__init__o  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>  (      #P#PCHH#P#P#P#P#P#Pr&   r   c              3   `   K   | ])\  }}t          |          d z   t          |          z   V  *dS )=Nr  )r   keyvals      r   r   z Func.__repr__.<locals>.<genexpr>  sL        .6c3C3S)     r&   
{}({}, {})r  )

arg_joinerjoinr  r  _get_repr_optionssortedr/  r^  r   r!   )r   r8  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%   r>   s    r   r  zFunc._get_repr_options  s    	r&   c                     | j         S r   r  r>   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&   TFc                     |                                  }||_        t          |j                  D ]&\  }}|                    |||||          |j        |<   '|S r   )r   r   	enumerater  r2   )	r   r   r   r   r   r   r   posr   s	            r   r2   zFunc.resolve_expression  sh     IIKK !!"677 	 	HC(+(>(>{E9h) )A %% r&   c                    |j                             |            g }g }| j        D ]}		 |                    |	          \  }
}nU# t          $ rH t          |	dt                    }|t          u r |                    t          |                    \  }
}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!  functiontemplater  r   r   )ri  r  r  rh  r   r^   r   r4   r5  r  r  
setdefaultr  rP  r  r  r  )r   r   r   r  r  r  r   	sql_partsr   r   arg_sql
arg_paramsr!  datas                 r   r   zFunc.as_sql  s    	//555	* 	& 	&CV&.&6&6s&;&;#! V V V)01>* *& *^;;&.&6&6u=S7T7T&U&U#V W%%%MM*%%%%.$*.. 'DOOJ666Btxx
DMBBJ488L$/#J#J
.8ooi.H.HH]d7m$&&s   AABBc                     t                                                      }| j        d d          |_        | j                                        |_        |S r   )r\  r   r  r  )r   r   r   s     r   r   z	Func.copy  s@    ww||~~"&"9!!!"<Z__&&
r&   r  )NNN)r!   r"   r#   r$   r  r  r  r  r   r_  r  r   r   r2   r   r   rv  rw  s   @r   r  r  f  s        H.HJE26       > > >  ' ' '( ( ( SX	 	 	 	 #' #' #' #'J        r&   r  zdjango.db.models.Valuec                   f     e Zd ZdZdZd fd	Zd Zd Z	 d fd	Zdd	Z	d
 Z
ed             Z xZS )r4   z9Represent a wrapped value as a node within an expression.FNc                 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 )N())r   r!   r   r>   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)	ri  r  r   r   r   get_db_prep_saveget_db_prep_valuer3   r  )r   r   r   r  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&   Tc                 `    t                                          |||||          }||_        |S r   )r\  r2   r   )r   r   r   r   r   r   r   r   s          r   r2   zValue.resolve_expression  s0     GG&&uk5)XVV
r&   c                     g S r   r%   r  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   datetimerq  datero  timerp  	timedeltarn  r   r   bytesBinaryFieldr   	UUIDFieldr>   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   r>   s    r   r!  zValue.empty_result_set_value  s
    zr&   r   r  )r!   r"   r#   r$   r   r   r_  r   r2   r  r   r$  r!  rv  rw  s   @r   r4   r4     s        CC H
 
 
 
 
 
< < <  & SX        & & &0   X    r&   r4   c                   B     e Zd Zd	 fd	Zd Zd Zd	dZ	 d
 fd	Z xZS )RawSQLNc                     |t          j                    }||c| _        | _        t	                                          |           d S r[  )r   r0  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   r>   s    r   r_  zRawSQL.__repr__   s#    ""4>#:DHdkRRRr&   c                 $    d| j         z  | j        fS rg  )r   r   r   s      r   r   zRawSQL.as_sql#  s     $+--r&   c                     | gS r   r%   r  s     r   r  zRawSQL.get_group_by_cols&  	    vr&   TFc                    |j         r|j         j                                        D ]t}|j        j        D ]e}|                                \  }}	|	                                | j                                        v r|                    |j        |||            nfut                      
                    |||||          S r   )r1  r2  get_parent_listlocal_fieldsget_attname_columnlowerr   r  r   r\  r2   )r   r   r   r   r   r   parentparent_field_column_namer   s             r   r2   zRawSQL.resolve_expression)  s     ; 	++;;==  $*L$=  L%1%D%D%F%FNA{"((**dhnn.>.>>>))(-{E9   	 ?
 ww));y(
 
 	
r&   r   r  )	r!   r"   r#   r   r_  r   r  r2   rv  rw  s   @r   r  r    s        4 4 4 4 4 4S S S. . .    SX
 
 
 
 
 
 
 
 
 
r&   r  c                       e Zd Zd Zd ZdS )Starc                     dS )Nz'*'r%   r>   s    r   r_  zStar.__repr__<  s    ur&   c                 
    dg fS )Nr+   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                   H     e Zd ZdZdZd
 fd	Zd Zd Zd Zd
dZ	d	 Z
 xZS )ColTFNc                 r    ||}t                                          |           ||c| _        | _        d S r[  )r\  r   r  target)r   r  r   r   r   s       r   r   zCol.__init__H  s=    !Ll333"'
DKKKr&   c                     | j         | j        }}|r|t          |          fnt          |          f}d                    | j        j        d                    |                    S )Nr  r   )r  r   r   r^  r   r!   r  )r   r  r   identifierss       r   r_  zCol.__repr__N  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  )r  r   columnr  mapquote_name_unless_alias)r   r   r   r  r  r  r   s          r   r   z
Col.as_sqlS  sM    
DK$6v).=ufooVIhhs8;[IIJJBwr&   c                     | j         | S |                     |                    | j         | j                   | j        | j                  S r   )r  r   rP  r   r   r  s     r   r   zCol.relabeled_cloneY  sC    :K~~LLTZ00$+t?P
 
 	
r&   c                     | gS r   r%   r  s     r   r  zCol.get_group_by_cols`  r  r&   c                     | j         | j        k    r| j                            |          S | j                            |          | j                             |          z   S r   )r   r   r   r   s     r   r   zCol.get_db_convertersc  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   rv  rw  s   @r   r  r  C  s        !% 0 0 0 0 0 0P P P
  
 
 
   6 6 6 6 6 6 6r&   r  c                   R     e Zd ZdZ fdZd Zd Zd Z	 dd	Zd
 Z	d Z
d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   refsr   )r   r  r   r   s      r   r   zRef.__init__q  s-    !%v	4;;;r&   c                 X    d                     | j        j        | j        | j                  S r  )r^  r   r!   r  r   r>   s    r   r_  zRef.__repr__u  s#    ""4>#:DIt{SSSr&   c                     | j         gS r   r   r>   s    r   r   zRef.get_source_expressionsx  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   r2   zRef.resolve_expression~  s	    
 r&   c                     | S r   r%   r  s     r   r   zRef.relabeled_clone  r  r&   c                 D    |j                             | j                  g fS r   )ri  
quote_namer  r   s      r   r   z
Ref.as_sql  s    ~((33R77r&   c                     | gS r   r%   r  s     r   r  zRef.get_group_by_cols  r  r&   r  r   )r!   r"   r#   r$   r   r_  r   r   r2   r   r   r  rv  rw  s   @r   r  r  k  s         
. . . . .T T T     SX     8 8 8       r&   r  c                   2     e 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                 v    |st          d| j        j        z             t                      j        |i | d S )Nz$%s requires at least one expression.)r  r   r!   r\  r   r   r   r  r   s      r   r   zExpressionList.__init__  sN     	69PP   	+//////r&   c                 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  r>   s    r   ra  zExpressionList.__str__  s*    ###P#P8O#P#P#PPPPr&   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&   )	r!   r"   r#   r$   r  r   ra  r    rv  rw  s   @r   r  r    sq          !H0 0 0 0 0Q Q QB B B B B B Br&   r  c                   ,     e Zd ZdZ fdZ fdZ xZS )OrderByListz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  s      r   r   zOrderByList.__init__  sG    
 
 $
 
 
 	+//////r&   c                 H    | j         sdS  t                      j        |i |S )N) r%   )r  r\  r   )r   r8  r  r   s      r   r   zOrderByList.as_sql  s.    & 	6uww~t.v...r&   )r!   r"   r#   r  r   r   rv  rw  s   @r   r  r    sV        )H	0 	0 	0 	0 	0/ / / / / / / / /r&   r  z"django.db.models.ExpressionWrapperc                   F     e Zd ZdZ fdZd Zd Zd	 fd	Zd Z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[  )r\  r   r   )r   r   r   r   s      r   r   zExpressionWrapper.__init__  s)    l333$r&   c                      |d         | _         d S Nr   r   r   s     r   r   z(ExpressionWrapper.set_source_expressions      (r&   c                     | j         gS r   r*  r>   s    r   r   z(ExpressionWrapper.get_source_expressions        r&   Nc                     t          | j        t                    r;| j                                        }| j        |_        |                    |          S t                                                      S )N)r  )r   r   r'  r   r   r  r\  )r   r  r   r   s      r   r  z#ExpressionWrapper.get_group_by_cols  sd    doz22 	=--//J&*&7J#//e/<<< ww((***r&   c                 6    |                     | j                  S r   )rh  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   r>   s    r   r_  zExpressionWrapper.__repr__  s    t~6HHHr&   r   )r!   r"   r#   r$   r   r   r   r  r   r_  rv  rw  s   @r   r&  r&    s         
% % % % %# # #! ! !+ + + + + +1 1 1I I I I I I Ir&   r&  zdjango.db.models.Whenc                   `     e Zd ZdZdZd fd	Zd Zd Zd Zd Z	d	 Z
	 ddZddZd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   r^   r  r   r  r\  r   	conditionr   rK  )r   r4  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 r4  rK  r>   s    r   ra  zWhen.__str__  s     $(NNNDKK@@r&   c                 (    d| j         j        d| dS N<z: >r   r!   r>   s    r   r_  zWhen.__repr__       !^444ddd;;r&   c                     | j         | j        gS r   r8  r>   s    r   r   zWhen.get_source_expressions  s    ,,r&   c                 $    |\  | _         | _        d S r   r8  r   s     r   r   zWhen.set_source_expressions  s    &+#r&   c                     | j         j        gS r   )rK  r   r>   s    r   r   zWhen.get_source_fields  s    122r&   Tc                     |                                  }||_        t          |j        d          r#|j                            ||||d          |_        |j                            |||||          |_        |S )Nr2   F)r   r   r3   r4  r2   rK  r   s          r   r2   zWhen.resolve_expression  s~     IIKK 1; 455 	+88{E9e AK 8..;y(
 
 r&   c                 :   |j                             |            |}g }|                    | j                  \  }}||d<   |                    |           |                    | j                  \  }	}
|	|d<   |                    |
           |p| j        }||z  |fS )Nr4  rK  )ri  r  rh  r4  r  rK  r  )r   r   r   r  r   template_params
sql_paramscondition_sqlcondition_params
result_sqlresult_paramss              r   r   zWhen.as_sql  s    //555'
*2*:*:4>*J*J'''4$*+++$,$4$4T[$A$A!
M$.!-(((,t}/):55r&   c                     g }|                                  D ])}|                    |                                           *|S r   r   r  r  r  s       r   r  zWhen.get_group_by_cols  sH    1133 	4 	4FKK00223333r&   NNr  r   )r!   r"   r#   r  r[   r   ra  r_  r   r   r   r2   r   r  rv  rw  s   @r   r2  r2    s        3HK7 7 7 7 7 7"A A A< < <- - -, , ,3 3 3
 SX   6 6 6 6       r&   r2  zdjango.db.models.Casec                   t     e Zd ZdZdZdZddd fd
Zd Zd Zd	 Z	d
 Z
	 ddZ fdZ	 ddZd f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   r2  )r   cases     r   r   z Case.__init__.<locals>.<genexpr>8  s,      <<d:dD))<<<<<<r&   z.Positional arguments must all be When objects.r   )	allr  r\  r   listcasesr   rO  r  )r   rO  r   rU  r  r   s        r   r   zCase.__init__7  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>A  s(      11c!ff111111r&   z, ELSE )r  rU  rO  r>   s    r   ra  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=  r>   s    r   r_  zCase.__repr__E  r>  r&   c                 "    | j         | j        gz   S r   rU  rO  r>   s    r   r   zCase.get_source_expressionsH  s    zT\N**r&   c                 $    |^ | _         | _        d S r   rZ  r   s     r   r   zCase.set_source_expressionsK  s    $)!T\\\r&   TFc                     |                                  }||_        t          |j                  D ]&\  }}|                    |||||          |j        |<   '|j                            |||||          |_        |S r   )r   r   r  rU  r2   rO  )	r   r   r   r   r   r   r   r  rR  s	            r   r2   zCase.resolve_expressionN  s     IIKK "17++ 	 	IC22{E9h AGCLL I00;y(
 
	 r&   c                 p    t                                                      }|j        d d          |_        |S r   )r\  r   rU  )r   r   r   s     r   r   z	Case.copy\  s*    GGLLNN'!!!*r&   c                    |j                             |            | j        s|                    | j                  S i | j        |}g }g }| j        D ]V}		 |                    |	          \  }
}n# t          $ r Y (w xY w|                    |
           |                    |           W|                    | j                  \  }}|s||fS |p| j	        }|
                    |          |d<   ||d<   |                    |           |p|                    d| j                  }||z  }| j        "|j                             | j                  |z  }||fS )NrU  rO  r  )ri  r  rU  rh  rO  r  r   r5  r  case_joinerr  rP  r  r   unification_cast_sqlr   )r   r   r   r  r_  r   rD  
case_partsrE  rR  case_sqlcase_paramsdefault_sqldefault_paramsr   s                  r   r   zCase.as_sqla  s    	//555z 	2##DL1119TZ9=9

J 	+ 	+D(0(8(8(>(>%++!   h'''k****&.&6&6t|&D&D#^ 	/..!5T%5#.#3#3J#?#? %0	".)))M22:t}MM(%1.55d6GHH3NCJs   A..
A;:A;c                     | j         s| j                            |          S t                                          |          S r   )rU  rO  r  r\  r   r  r   s     r   r  zCase.get_group_by_cols~  s;    z 	9<11%888ww((///r&   r  rL  r   )r!   r"   r#   r$   r  r_  r   ra  r_  r   r   r2   r   r   r  rv  rw  s   @r   rN  rN  &  s       
 
 5HK'+$       
 
 
< < <+ + +* * * SX        @D   :0 0 0 0 0 0 0 0 0 0r&   rN  c                   x     e 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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)FNc                     t          |d|                                          | _        d| j        _        || _        t                                          |           d S )Nr   T)r^   r   r   subqueryr  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   r>   s    r   r   zSubquery.get_source_expressions  s    
|r&   c                      |d         | _         d S r)  rn  r   s     r   r   zSubquery.set_source_expressions  s    1X


r&   c                     | j         j        S r   )r   r   r>   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_aliasesr>   s    r   rs  zSubquery.external_aliases  s    z**r&   c                 4    | j                                         S r   )r   get_external_colsr>   s    r   ru  zSubquery.get_external_cols  s    z++---r&   c                     |j                             |            i | j        |}|p| j        }|                    ||          \  }}|dd         |d<   |p|                    d| j                  }||z  }	|	|fS )Nr  r;   rk  r  )ri  r  r  r   r   rP  r  )
r   r   r   r  r   r   rD  subquery_sqlrE  r   s
             r   r   zSubquery.as_sql  s    //5559TZ9=9##(<<*#E#E j&21R4&8
#M22:t}MM(Jr&   c                 Z    |rt          ||           gS | j                                        S r   )r  r   r  r  s     r   r  zSubquery.get_group_by_cols  s3    
  	&t$$%%z++---r&   r   rL  )r!   r"   r#   r$   r  r   r!  r   r   r   r   r   r$  rs  ru  r   r  rv  rw  s   @r   ri  ri    s         
  H!' ' ' ' ' '    ' ' '    
 + + X+. . .	 	 	 	. . . . . . . .r&   ri  c                   f     e Zd ZdZ ej                    Zd	 fd	Zd Zd
 fd	Z	d
 fd	Z
d Z xZS )ExistszEXISTS(%(subquery)s)Fc                 J    || _          t                      j        |fi | d S r   )negatedr\  r   )r   rl  r|  r  r   s       r   r   zExists.__init__  s/    ,,V,,,,,r&   c                 H    |                                  }| j         |_        |S r   )r   r|  )r   r   s     r   
__invert__zExists.__invert__  s     		 L(r&   Nc                 P    || gS t                                          |          S r   )r\  r  rg  s     r   r  zExists.get_group_by_cols  s)     =6Mww((///r&   c                 j   | j                             |j                  }	  t                      j        ||f||d|\  }}nP# t
          $ rC | j        r:|j        j        }|j	        sY dS |
                    t          d                    cY S  w xY w| j        rd                    |          }||fS )N)using)r  r   )z1=1r%   TzNOT {})r   existsr  r\  r   r   r|  r   r~  &supports_boolean_expr_in_select_clauserh  r4   r^  )
r   r   r   r  r   r   r   r   r~  r   s
            r   r   zExists.as_sql  s    
!!
(8!99	(%''. "	 
   KC  	 	 	| 5#.7F %$99''d44444	 < 	'//#&&CF{s   !A $B,"BBc                 V    |j         j        j        sd                    |          }||fS )NzCASE WHEN {} THEN 1 ELSE 0 END)r   r~  r  r^  r  s       r   r  zExists.select_format  s2     "+R 	?299#>>CF{r&   )Fr   )r!   r"   r#   r  r   r   r   r   r~  r  r   r  rv  rw  s   @r   rz  rz    s        %H&6&((L- - - - - -  
0 0 0 0 0 0     *      r&   rz  zdjango.db.models.OrderByc                   X    e Zd ZdZdZddZd Zd Zd ZddZ	d	 Z
dd
Zd Zd Zd ZdS )r  z%(expression)s %(ordering)sFNc                     |r|rt          d          |du s|du rt          j        dt          d           || _        || _        || _        t          |d          st          d          || _        d S )Nz1nulls_first and nulls_last are mutually exclusiveFzNPassing nulls_first=False or nulls_last=False is deprecated, use None instead.   )
stacklevelr2   z%expression must be an expression type)	r  warningswarnr   nulls_first
nulls_lastr  r3   r   )r   r   r  r  r  s        r   r   zOrderBy.__init__  s     	R: 	RPQQQ%:#6#6
 M(	    '$$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  r>   s    r   r_  zOrderBy.__repr__  s*    &--N#T_do
 
 	
r&   c                      |d         | _         d S r)  r*  r   s     r   r   zOrderBy.set_source_expressions  r+  r&   c                     | j         gS r   r*  r>   s    r   r   zOrderBy.get_source_expressions  r-  r&   c                    |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 )	Nz%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~   supports_order_by_nulls_modifierr  r  r  order_by_nulls_firstri  r  rh  r   countrstrip)r   r   r   r  r   expression_sqlr   placeholderss           r   r   zOrderBy.as_sql  s:   ,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                  rO|                                 }t	          t          | j        d          d          |_         |j        ||          S |                     ||          S )NT)r5  F)rO  )ri  0conditional_expression_supported_in_where_clauser   r   rN  r2  r   )r   r   r   r   s       r   	as_oraclezOrderBy.as_oracle1  s     >JJO
 
 	5 99;;D"T_4000  DO 4;x444{{8Z000r&   c                     g }|                                  D ])}|                    |                                           *|S r   rK  r  s       r   r  zOrderBy.get_group_by_cols?  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 rw   )r  r  r  r>   s    r   r  zOrderBy.reverse_orderingE  sI    "o- 	#"DO#D_ 	##D"DOr&   c                     d| _         d S rA   r"  r>   s    r   r  zOrderBy.ascO  s    r&   c                     d| _         d S rw   r"  r>   s    r   r  zOrderBy.descR  s    r&   )FNNr   )r!   r"   r#   r  r[   r   r_  r   r   r   r  r  r  r  r  r%   r&   r   r  r    s        ,HK% % % %*
 
 

# # #! ! !: : : :41 1 1              r&   r  c                   p     e Zd 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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framer^   r  r   r!   r   r6  rT  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   r>   s    r   r   zWindow._resolve_output_field  s    %22r&   c                 6    | j         | j        | j        | j        gS r   r  r  r  r  r>   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)ri  r  r~  supports_over_clauser
   rh  r  r  r   r5  r6  r  r  r  r  strip)r   r   r   r  expr_sqlr   
window_sqlwindow_paramssql_exprrE  	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  r>   s    r   ra  zWindow.__str__  sl    !((&''8<8IQOc$"34444r#$$
 b!!	
 
 	
r&   c                 (    d| j         j        d| dS r:  r=  r>   s    r   r_  zWindow.__repr__  r>  r&   c                     g S r   r%   r  s     r   r  zWindow.get_group_by_cols  r   r&   )NNNNr   )r!   r"   r#   r  r   r   r"  r   r   r   r   r   r    ra  r_  r  rv  rw  s   @r   r  r  V  s        1H J
 "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                   J    e Zd ZdZdZddZd Zd Zd Zd Z	d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).
    z,%(frame_type)s BETWEEN %(start)s AND %(end)sNc                 V    t          |          | _        t          |          | _        d S r   )r4   startendr   r  r  s      r   r   zWindowFrame.__init__  s     5\\
::r&   c                 $    |\  | _         | _        d S r   r  r  r   s     r   r   z"WindowFrame.set_source_expressions  s    $
DHHHr&   c                     | j         | j        gS r   r  r>   s    r   r   z"WindowFrame.get_source_expressions  s    
DH%%r&   c                     |j                             |            |                     || j        j        | j        j                  \  }}| j        | j        ||dz  g fS )N
frame_typer  r  )ri  r  window_frame_start_endr  r   r  r  r  )r   r   r   r  r  s        r   r   zWindowFrame.as_sql  sq    //55500
($(.
 

s M"o  
 	
r&   c                 (    d| j         j        d| dS r:  r=  r>   s    r   r_  zWindowFrame.__repr__  r>  r&   c                     g S r   r%   r  s     r   r  zWindowFrame.get_group_by_cols  r   r&   c                 2   | 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        }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t          j        j
        }| j        | j        ||dz  S )Nr   z%d %sr  )r  r   absr   ri  	PRECEDINGCURRENT_ROWUNBOUNDED_PRECEDINGr  	FOLLOWINGUNBOUNDED_FOLLOWINGr  r  r  s      r   ra  zWindowFrame.__str__  s    :'DJ,<q,@,@s4:#344jn6NOOEEZ)dj.>!.C.CN.EEN6E8>%$(.1*<*<TX^Z^-EFFCCX^'DHNa,?,?.,CC.4C}/ 
  
 
 	
r&   c                      t          d          )Nz3Subclasses must implement window_frame_start_end().r   r   r   r  r  s       r   r  z"WindowFrame.window_frame_start_end  s    !"WXXXr&   rL  r   )r!   r"   r#   r$   r  r   r   r   r   r_  r  ra  r  r%   r&   r   r  r    s          >H   % % %& & &
 
 
< < <   
 
 
(Y Y Y Y Yr&   r  c                       e Zd ZdZd ZdS )RowRangeROWSc                 8    |j                             ||          S r   )ri  window_frame_rows_start_endr  s       r   r  zRowRange.window_frame_start_end  s    ~99%EEEr&   Nr!   r"   r#   r  r  r%   r&   r   r  r    s-        JF F F F Fr&   r  c                       e Zd ZdZd ZdS )
ValueRangeRANGEc                 8    |j                             ||          S r   )ri  window_frame_range_start_endr  s       r   r  z!ValueRange.window_frame_start_end  s    ~::5#FFFr&   Nr  r%   r&   r   r  r    s-        JG G G G Gr&   r  )Zr   r  	functoolsr)  r  collectionsr   decimalr   uuidr   django.core.exceptionsr   r   	django.dbr	   r
   r   django.db.modelsr   django.db.models.constantsr   django.db.models.query_utilsr   django.utils.deconstructr   django.utils.deprecationr   django.utils.functionalr   django.utils.hashabler   r   r(   r   r'  r4  rE  rC   rI   r=   rO   rS   rW   rc   rt   rg   rj   ro   ro  rn  rq  rp  _connector_combinationsrT  rH  rL  dr/  r7   field_typesrI  rJ  rK  	lru_cacherX  r5   rr  rs  r   r  r  r  r4   r  r  r  r  r  r  r&  r2  rN  ri  rz  r  r  r  r  r  r%   r&   r   <module>r     s<
           # # # # # #             = = = = = = = = B B B B B B B B B B # # # # # # 1 1 1 1 1 1 * * * * * * 4 4 4 4 4 4 = = = = = = 3 3 3 3 3 3 / / / / / /        ~
 ~
 ~
 ~
 ~
 ~
 ~
 ~
Bd d d d d d d dN	 # # # # # # # #J 4::  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
]^ @ %T** 	A 	A 	A 
! D DA"#'')) D D	; + 	D 	DCf&&sIsFCCCC	DD
 S!!!! ! "!!_ _ _ _ _+Z _ _ _D0 0 0 0 0+ 0 0 0f
 
 
 
 
, 
 
 
 *+++    
   ,+D    q   >	 	 	 	 	q 	 	 	 -..._ _ _ _ _z _ _ /._D .///L L L L L
 L L 0/L^
 
 
 
 
Z 
 
 
D    :   %6 %6 %6 %6 %6* %6 %6 %6P! ! ! ! !* ! ! !HB B B B BT B B B0/ / / / /$ / / /( :;;;I I I I I*J I I <;I@ -...F F F F F: F F /.FR -...Z0 Z0 Z0 Z0 Z0z Z0 Z0 /.Z0z8. 8. 8. 8. 8.~z 8. 8. 8.v0 0 0 0 0X 0 0 0f 0111` ` ` ` `j ` ` 21`Fm m m m m m m m`?Y ?Y ?Y ?Y ?Y* ?Y ?Y ?YDF F F F F{ F F FG G G G G G G G G Gr&   