
     hS                     	   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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*        e"j+        fD             d e"j-        e"j.        e"j/        e"j0        e"j1        fD             d e"j'        e"j(        e"j)        e"j*        e"j+        e"j,        fD             e"j'        ej2        ej3        ej4        fej4        ej3        ej4        fej3        ej2        ej4        fej3        ej4        ej4        fej3        ej3        ej3        fej5        ej3        ej5        fej3        ej5        ej5        fgie"j(        ej2        ej3        ej4        fej4        ej3        ej4        fej2        ej2        ej3        fej2        ej4        ej3        fej4        ej2        ej3        fej4        ej4        ej3        fej3        ej3        ej3        fej5        ej3        ej5        fej5        ej5        ej3        fg	igZ6 ee7          Z8d Z9e6D ]3Z:e:;                                D ]\  Z<Z=e=D ]\  Z>Z?Z@ e9e>e<e?e@           4 ejA        d          d             ZB G d de!e$          ZC G d  d!eC          ZD G d" d#eC          ZE ed$%           G d& d'e"                      ZF G d( d)eF          ZG G d* d+eF          ZH ed,%           G d- d.e!e$                      ZI ed/%           G d0 d1e!e$                      ZJ G d2 d3e$          ZK G d4 d5e$          ZL G d6 d7e$          ZM G d8 d9e$          ZN G d: d;eI          ZO G d< d=eI          ZP ed>%           G d? d@e!e$                      ZQ G dA dBeQ          ZR edC%           G dD dEe$                      ZS edF%           G dG dHe!e$                      ZT G dI dJe#e"          ZU G dK dLeU          ZV edM%           G dN dOe$                      ZW G dP dQe!e$          ZX G dR dSe$          ZY G dT dUeY          ZZ G dV dWeY          Z[dS )X    N)defaultdictDecimal)UUID)EmptyResultSet
FieldErrorFullResultSet)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         [/var/www/surfInsights/venv3-11/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& 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__K   s    }}R5111r'   c                 :    |                      || j        d          S NFr:   ADDr   r7   s     r    __add__zCombinable.__add__N       }}UDHe444r'   c                 :    |                      || j        d          S rB   r:   SUBrE   s     r    __sub__zCombinable.__sub__Q   rG   r'   c                 :    |                      || j        d          S rB   r=   rE   s     r    __mul__zCombinable.__mul__T   rG   r'   c                 :    |                      || j        d          S rB   r:   DIVrE   s     r    __truediv__zCombinable.__truediv__W   rG   r'   c                 :    |                      || j        d          S rB   r:   MODrE   s     r    __mod__zCombinable.__mod__Z   rG   r'   c                 :    |                      || j        d          S rB   r:   POWrE   s     r    __pow__zCombinable.__pow__]   rG   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   NotImplementedErrorrE   s     r    __and__zCombinable.__and__`   V    4.. 	&75-QV3W3W 	&T77QuXX%%!T
 
 	
r'   c                 :    |                      || j        d          S rB   )r:   BITANDrE   s     r    bitandzCombinable.bitandg       }}UDK777r'   c                 :    |                      || j        d          S rB   )r:   BITLEFTSHIFTrE   s     r    bitleftshiftzCombinable.bitleftshiftj   s    }}UD$5u===r'   c                 :    |                      || j        d          S rB   )r:   BITRIGHTSHIFTrE   s     r    bitrightshiftzCombinable.bitrightshiftm   s    }}UD$6>>>r'   c                     t          | dd          r0t          |dd          rt          |           t          |          z  S t          d          r[   r^   rE   s     r    __xor__zCombinable.__xor__p   rb   r'   c                 :    |                      || j        d          S rB   )r:   BITXORrE   s     r    bitxorzCombinable.bitxorw   rf   r'   c                     t          | dd          r0t          |dd          rt          |           t          |          z  S t          d          r[   r^   rE   s     r    __or__zCombinable.__or__z   rb   r'   c                 :    |                      || j        d          S rB   )r:   BITORrE   s     r    bitorzCombinable.bitor   s    }}UDJ666r'   c                 :    |                      || j        d          S NTrC   rE   s     r    __radd__zCombinable.__radd__       }}UDHd333r'   c                 :    |                      || j        d          S rx   rI   rE   s     r    __rsub__zCombinable.__rsub__   rz   r'   c                 :    |                      || j        d          S rx   r=   rE   s     r    __rmul__zCombinable.__rmul__   rz   r'   c                 :    |                      || j        d          S rx   rO   rE   s     r    __rtruediv__zCombinable.__rtruediv__   rz   r'   c                 :    |                      || j        d          S rx   rS   rE   s     r    __rmod__zCombinable.__rmod__   rz   r'   c                 :    |                      || j        d          S rx   rW   rE   s     r    __rpow__zCombinable.__rpow__   rz   r'   c                      t          d          Nr]   r`   rE   s     r    __rand__zCombinable.__rand__       !T
 
 	
r'   c                      t          d          r   r   rE   s     r    __ror__zCombinable.__ror__   r   r'   c                      t          d          r   r   rE   s     r    __rxor__zCombinable.__rxor__   r   r'   c                      t          |           S N)NegatedExpressionr?   s    r    
__invert__zCombinable.__invert__   s     &&&r'   N))r"   r#   r$   r%   rD   rJ   r>   rP   rX   rT   rd   ru   rh   rk   rp   r:   r@   rF   rK   rM   rQ   rU   rY   ra   re   ri   rl   rn   rq   rs   rv   ry   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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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% Z-d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&   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    r'   c                     d |D             S )Nc                     g | ]G}t          |d           r|n2t          |t                    rt          |          nt	          |          HS r3   )r4   
isinstancestrFr5   .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   <     
 
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)r_   contains_subqueryr   s     r    r   z3BaseExpression.contains_subquery.<locals>.<genexpr>  sO       
 
 QgdJ66P$:P
 
 
 
 
 
r'   r   r?   s    r    r   z BaseExpression.contains_subquery  r   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    r3   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_none7  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>Q  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_fieldC  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_noopa  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>p  s    = 7;d5\\ r'   IntegerFieldc                 (    | d nt          |           S r   )intr   s      r    r   z.BaseExpression.convert_value.<locals>.<lambda>v  s    = 7;dZZ r'   r   c                 (    | d nt          |           S r   r   r   s      r    r   z.BaseExpression.convert_value.<locals>.<lambda>|  s    = 7;dU^^ r'   )r   r   endswithr   )r   r   internal_types      r    r   zBaseExpression.convert_valuee  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                                          |           x}r|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  source_expressionss    `   r    r  z"BaseExpression.replace_expressions  s    &**4000; 			"99;;$$   .  	
 	
 	
 r'   c                 ~    t                      }|                                 D ]}||                                z  }|S r   )setr   get_refs)r   refsr   s      r    r  zBaseExpression.get_refs  s?    uu//11 	$ 	$DDMMOO#DDr'   c                 *    t          j         |           S r   r   r?   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         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   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   r4   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)r4   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   r   r3   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   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    rJ  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   r8  r1  rJ  rE   s     r    __eq__zExpression.__eq__  s)    %,, 	"!!~..r'   c                 *    t          | j                  S r   )hashrJ  r?   s    r    __hash__zExpression.__hash__  s    DM"""r'   N)r"   r#   r$   r%   r   rJ  rL  rO  r&   r'   r    r8  r8    sQ        DD  _$/ / /
# # # # #r'   r8  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   r8   s     r    
<dictcomp>rR  
  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   rQ  s     r    rR  rR    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   rQ  s     r    rR  rR  ,  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   r8   
field_types      r    rR  rR  9  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_combinatorsrF  )lhsr8   rhsresults       r    register_combinable_fieldsr]  l  s*     9%,,c3-?@@@@@r'      )maxsizec                     t                               | d          }|D ]*\  }}}t          ||          rt          ||          r|c S +d S )Nr&   )rY  r  
issubclass)r8   lhs_typerhs_typecombinatorscombinator_lhs_typecombinator_rhs_typecombined_types          r    _resolve_combined_typerh  ~  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 )r6   Nc                 v    t                                          |           || _        || _        || _        d S Nr   )superr   r8   rZ  r[  )r   rZ  r8   r[  r   r   s        r    r   zCombinedExpression.__init__  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{} {} {})rn  rZ  r8   r[  r?   s    r    __str__zCombinedExpression.__str__  s       4>48DDDr'   c                     | j         | j        gS r   rZ  r[  r?   s    r    r   z)CombinedExpression.get_source_expressions  s    $(##r'   c                 $    |\  | _         | _        d S r   rs  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   )
rh  r8   rE  rZ  r   r[  r   r   r   r"   )r   rg  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))compilerZ  rF  r  r[  opscombine_expressionr8   )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)rZ  r3   r[  r   DurationExpressionTemporalSubtractionr   r   AttributeErrorr   r8   rJ   r   r   )r   r   r   r   r   r   rZ  r[  rb  rc  datetime_fieldsr   s               r    r3   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   r0  )r"   r#   r$   r   ro  rq  r   r   r   r   r3   __classcell__r   s   @r    r6   r6     s             @ @ @E E E$ $ $# # #  "; ; ; SX- - - - - - - -r'   r6   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   rx  ry  format_for_duration_arithmeticr   )r   sider   r   outputr   r   s          r    rx  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 rw  )featureshas_native_duration_fieldrl  r   ry  check_expression_supportrx  rZ  rF  r  r[  combine_duration_expressionr8   )	r   r   r   r   r{  r   r   r|  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   r~  zInvalid arguments for operator .)r   r8   r)   r>   rP   rZ  r   r   r[  r
   r  r   )	r   r   r   r   r   r   rb  rc  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$   rx  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   )rl  r   rJ   )r   rZ  r[  r   s      r    r   zTemporalSubtraction.__init__   s'    dh,,,,,r'   c                    |j                             |            |                    | j                  }|                    | j                  }|j                             | j        j                                        ||          S r   )ry  r  rx  rZ  r[  subtract_temporalsr   r   )r   r   r   rZ  r[  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   r~  r   r   r   r  r  s   @r    r  r    sW        '6'))L- - - - -
 
 
 
 
 
 
r'   r  zdjango.db.models.F)pathc                   L    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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__0  s    
 			r'   c                 L    d                     | j        j        | j                  S N{}({}))rn  r   r"   r   r?   s    r    ro  z
F.__repr__7  s    t~6	BBBr'   NTFc                 <    |                     | j        |||          S r   )resolve_refr   r   r   r   r   r   r   s         r    r3   zF.resolve_expression:  s        K	JJJr'   c                 .    |                     | |           S r   )r  )r   r  s     r    r  zF.replace_expressions?  s    d+++r'   c                     t          | fi |S r   r  r  s     r    r!  zF.ascB  r"  r'   c                      t          | fddi|S r$  r  r  s     r    r&  zF.descE  r'  r'   c                 B    | j         |j         k    o| j        |j        k    S r   )r   r   rE   s     r    rL  zF.__eq__H  s    ~0LTY%*5LLr'   c                 *    t          | j                  S r   )rN  r   r?   s    r    rO  z
F.__hash__K  s    DIr'   c                 *    t          j         |           S r   r  r?   s    r    r   zF.copyN  r  r'   r0  )r"   r#   r$   r%   r   ro  r3   r  r!  r&  rL  rO  r   r&   r'   r    r   r   ,  s        NN  C C C 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.)
ValueErrorr   rI  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  )rl  r3   r   r   r   r   possibly_multivalued)r   rI  r   colr   s       r    r3   z#ResolvedOuterRef.resolve_expressionc  sj    (egg($9&99# 	# 9        $.#: 
r'   c                     | S r   r&   r   relabelss     r    r   z ResolvedOuterRef.relabeled_clonep  r*  r'   c                     g S r   r&   r?   s    r    r  z"ResolvedOuterRef.get_group_by_colss  r   r'   )r"   r#   r$   r%   r   r   r   r3   r   r  r  r  s   @r    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    r3   zOuterRef.resolve_expression{  s0    di00 	9	***r'   c                     | S r   r&   r  s     r    r   zOuterRef.relabeled_clone  r*  r'   N)r"   r#   r$   r   r   r3   r   r&   r'   r    r  r  w  s>         + + +
    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"   rl  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>  (      #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@  rn  r   r"   )r   rI  r  s      r    ro  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	  r3   )	r   r   r   r   r   r   r   posr   s	            r    r3   zFunc.resolve_expression  sh     IIKK !!"677 	 	HC(+(>(>{E9h) )A %% 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 )Nr2  Tfunctiontemplater  r   r   )ry  r  r	  rx  r   r_   r1  r5   r	   rF  r  r  
setdefaultr  r  r  r  r  )r   r   r   r  r  r  r   	sql_partsr   r   arg_sql
arg_paramsr2  datas                 r    r   zFunc.as_sql  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   )rl  r   r	  r  )r   r   r   s     r    r   z	Func.copy  s@    ww||~~"&"9!!!"<Z__&&
r'   r0  )NNN)r"   r#   r$   r%   r  r  r  r  r   ro  r  r   r   r3   r   r   r  r  s   @r    r  r    s        H.HJE26       > > >  ' ' '( ( ( SX	 	 	 	 %' %' %' %'N        r'   r  zdjango.db.models.Valuec                   d     e 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 )r5   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)rl  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    ro  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)	ry  r  r   r   r   get_db_prep_saveget_db_prep_valuer4   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   )rl  r3   r   )r   r   r   r   r   r   r   r   s          r    r3   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   datetimer  dater  timer  	timedeltar~  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    r2  zValue.empty_result_set_value4  s
    zr'   r   r0  )r"   r#   r$   r%   r   r   ro  r   r3   r  r   r5  r2  r  r  s   @r    r5   r5     s        CC H
 
 
 
 
 
< < <  & SX       & & &0   X    r'   r5   c                   @     e Zd Zd	 fd	Zd Zd Zd Z	 d
 fd	Z xZS )RawSQLNc                     |t          j                    }||c| _        | _        t	                                          |           d S rk  )r   rA  r   r   rl  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  )rn  r   r"   r   r   r?   s    r    ro  zRawSQL.__repr__@  s#    ""4>#:DHdkRRRr'   c                 $    d| j         z  | j        fS rw  )r   r   r   s      r    r   zRawSQL.as_sqlC  s     $+--r'   c                     | gS r   r&   r?   s    r    r  zRawSQL.get_group_by_colsF  	    vr'   TFc                    |j         r|j         j                                        D ]t}|j        j        D ]e}|                                \  }}	|	                                | j                                        v r|                    |j        |||            nfut                      
                    |||||          S r   )rB  rC  get_parent_listlocal_fieldsget_attname_columnlowerr   r  r   rl  r3   )r   r   r   r   r   r   parentparent_field_column_namer   s             r    r3   zRawSQL.resolve_expressionI  s     ; 	++;;==  $*L$=  L%1%D%D%F%FNA{"((**dhnn.>.>>>))(-{E9   	 ?
 ww));y(
 
 	
r'   r   r0  )	r"   r#   r$   r   ro  r   r  r3   r  r  s   @r    r  r  9  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    ro  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$   ro  r   r&   r'   r    r	  r	  [  s2              r'   r	  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 rk  )rl  r   aliastarget)r   r  r  r   r   s       r    r   zCol.__init__g  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   rn  r   r"   r  )r   r  r  identifierss       r    ro  zCol.__repr__m  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_sqlr  sM    
DK$6v).=ufooVIhhs8;[IIJJBwr'   c                     | j         | S |                     |                    | j         | j                   | j        | j                  S r   )r  r   r  r  r   r  s     r    r   zCol.relabeled_clonex  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_converters  s_    ;$+++$66zBBB 22
 
K))*556 	6r'   r   )r"   r#   r$   r   r  r   ro  r   r   r  r   r  r  s   @r    r  r  c  s        !% 0 0 0 0 0 0P P P
  
 
 
  6 6 6 6 6 6 6r'   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   )rl  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 r  )rn  r   r"   r  r   r?   s    r    ro  zRef.__repr__  s#    ""4>#:DIt{SSSr'   c                     | j         gS r   r   r?   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    r3   zRef.resolve_expression  s	    
 r'   c                     | j         hS r   )r  r?   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   )ry  
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'   r0  )r"   r#   r$   r%   r   ro  r   r   r3   r  r   r   r  r  r  s   @r    r  r    s         
. . . . .T T T     SX       
8 8 8      r'   r  c                   8     e Zd ZdZdZ fdZ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"   rl  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    rq  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'   c                     g }|                                  D ])}|                    |                                           *|S r   r   r  r  )r   group_by_cols	partitions      r    r  z ExpressionList.get_group_by_cols  sM    4466 	@ 	@I  !<!<!>!>????r'   )
r"   r#   r$   r%   r  r   rq  r!   r  r  r  s   @r    r(  r(    s|          !H0 0 0 0 0Q Q QB B B      r'   r(  c                   2     e Zd ZdZ fdZ fdZ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'   )rl  r   r*  s      r    r   zOrderByList.__init__  sG    
 
 $
 
 
 	+//////r'   c                 H    | j         sdS  t                      j        |i |S )N) r&   )r	  rl  r   )r   rI  r   r   s      r    r   zOrderByList.as_sql  s.    & 	6uww~t.v...r'   c                     g }|                                  D ])}|                    |                                           *|S r   r/  )r   r0  order_bys      r    r  zOrderByList.get_group_by_cols  sK    3355 	? 	?H  !;!;!=!=>>>>r'   )r"   r#   r$   r  r   r   r  r  r  s   @r    r3  r3    se        )H	0 	0 	0 	0 	0/ / / / /
      r'   r3  z"django.db.models.ExpressionWrapperc                   D     e Zd ZdZ fdZd Zd Z 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 rk  )rl  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'   c                     t          | j        t                    r9| j                                        }| j        |_        |                                S t                                                      S r   )r   r   r8  r   r   r  rl  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   )rx  r   r   s      r    r   zExpressionWrapper.as_sql  s    000r'   c                 L    d                     | j        j        | j                  S r  )rn  r   r"   r   r?   s    r    ro  zExpressionWrapper.__repr__  s    t~6HHHr'   )r"   r#   r$   r%   r   r   r   r  r   ro  r  r  s   @r    r<  r<    s         
% % % % %# # #! ! !+ + + + +1 1 1I I I I I I I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 rk  )rl  r   r   r   rE  s     r    r   zNegatedExpression.__init__  s/    &2E2G2GHHHHHr'   c                 4    | j                                         S r   )r   r   r?   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 )rl  r   r   r   r  &supports_boolean_expr_in_select_clauserx  r5   ry  0conditional_expression_supported_in_where_clauser   )r   r   r   r   r   r  ry  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.)rl  r3   r_   r   r  )r   r   r   r   r   r   resolvedr   s          r    r3   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   ry  rM  r  rL  r   rn  )r   r   r   r   $expression_supported_in_where_clauses        r    r.  zNegatedExpression.select_format/  s^    
 #T 	- #,S	? 54T_EE	?
 399#>>CF{r'   r0  )
r"   r#   r$   r%   r   r   r   r3   r.  r  r  s   @r    r   r     s        ;;I I I I I& & &$ $ $ $ $" SX           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 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  rl  r   	conditionr   r\  )r   rV  thenlookupsr   s       r    r   zWhen.__init__E  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 rV  r\  r?   s    r    rq  zWhen.__str__V  s     $(NNNDKK@@r'   c                 (    d| j         j        d| dS N<z: >r   r"   r?   s    r    ro  zWhen.__repr__Y       !^444ddd;;r'   c                     | j         | j        gS r   rZ  r?   s    r    r   zWhen.get_source_expressions\  s    ,,r'   c                 $    |\  | _         | _        d S r   rZ  r   s     r    r   zWhen.set_source_expressions_  s    &+#r'   c                     | j         j        gS r   )r\  r   r?   s    r    r   zWhen.get_source_fieldsb  s    122r'   Tc                     |                                  }||_        t          |j        d          r#|j                            ||||d          |_        |j                            |||||          |_        |S )Nr3   F)r   r   r4   rV  r3   r\  r   s          r    r3   zWhen.resolve_expressionf  s~     IIKK 1; 455 	+88{E9e AK 8..;y(
 
 r'   c                     |j                             |            |}g }|                    | j                  \  }}||d<   |                    | j                  \  }	}
|	|d<   |p| j        }||z  g |||
R fS )NrV  r\  )ry  r  rx  rV  r\  r  )r   r   r   r  r   template_params
sql_paramscondition_sqlcondition_params
result_sqlresult_paramss              r    r   zWhen.as_sqlt  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_cols  sH    1133 	4 	4FKK00223333r'   NNr0  r   )r"   r#   r$   r  r\   r   rq  ro  r   r   r   r3   r   r  r  r  s   @r    rT  rT  ?  s        3HK7 7 7 7 7 7"A A A< < <- - -, , ,3 3 3
 SX   
 
 
 
      r'   rT  zdjango.db.models.Casec                   r     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 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   rT  )r   cases     r    r   z Case.__init__.<locals>.<genexpr>  s,      <<d:dD))<<<<<<r'   z.Positional arguments must all be When objects.r   )	allr  rl  r   listcasesr   rp  r  )r   rp  r   rv  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  rv  rp  r?   s    r    rq  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    ro  zCase.__repr__  r`  r'   c                 "    | j         | j        gz   S r   rv  rp  r?   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'   TFc                     |                                  }||_        t          |j                  D ]&\  }}|                    |||||          |j        |<   '|j                            |||||          |_        |S r   )r   r   r  rv  r3   rp  )	r   r   r   r   r   r   r   r  rs  s	            r    r3   zCase.resolve_expression  s     IIKK "17++ 	 	IC22{E9h AGCLL I00;y(
 
	 r'   c                 p    t                                                      }|j        d d          |_        |S r   )rl  r   rv  )r   r   r   s     r    r   z	Case.copy  s*    GGLLNN'!!!*r'   c                    |j                             |            | j        s|                    | j                  S i | j        |}g }g }|                    | j                  \  }	}
| j        D ]}	 |                    |          \  }}n9# t          $ r Y (t          $ r! |                    |j                  \  }	}
Y  n/w xY w|	                    |           |
                    |           |s|	|
fS |p| j        }|                    |          |d<   |	|d<   |
                    |
           |p|                    d| j                  }||z  }| j        "|j                             | j                  |z  }||fS )Nrv  rp  r  )ry  r  rv  rx  rp  r  r   r	   r\  rF  r  case_joinerr  r  r  r   unification_cast_sqlr   )r   r   r   r  r  r   rf  
case_partsrg  default_sqldefault_paramsrs  case_sqlcase_paramsr   s                  r    r   zCase.as_sql  s    	//555z 	2##DL1119TZ9=9

&.&6&6t|&D&D#^J 		+ 		+D(0(8(8(>(>%++!       .6.>.>t{.K.K+^ h'''k**** 	/..!5T%5#.#3#3J#?#? %0	".)))M22:t}MM(%1.55d6GHH3NCJs   2B
C&C Cc                     | j         s| j                                        S t                                                      S r   )rv  rp  r  rl  )r   r   s    r    r  zCase.get_group_by_cols  s7    z 	4<11333ww((***r'   r0  rm  )r"   r#   r$   r%   r  r  r   rq  ro  r   r   r3   r   r   r  r  r  s   @r    ro  ro    s       
 
 5HK'+$       
 
 
< < <+ + +* * * SX        @D   @+ + + + + + + + +r'   ro  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)r_   r  r   r   r  rl  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?  r  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   )rl  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    r  zSubquery.external_aliases  s    z**r'   c                 4    | j                                         S r   )r   get_external_colsr?   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  )ry  r  r  r   r   r  r  )	r   r   r   r  r   rf  subquery_sqlrg  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  r?   s    r    r  zSubquery.get_group_by_cols  s    z++D+999r'   r   )r"   r#   r$   r%   r  r   r2  r   r   r   r   r   r   r5  r  r  r   r  r  r  s   @r    r  r    s         
  H!H' ' ' ' ' '    ' ' '    
 + + X+. . .   : : : : : : :r'   r  c                   J     e Zd ZdZ ej                    ZdZ fdZd Z	 xZ
S )ExistszEXISTS(%(subquery)s)Fc                 x     t                      j        |fi | | j                                        | _        d S r   )rl  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 rQ  )r   r  rL  rn  r/  s       r    r.  zExists.select_format*  s2     "+R 	?299#>>CF{r'   )r"   r#   r$   r  r   r   r   r2  r   r.  r  r  s   @r    r  r  !  sb        %H&6&((L") ) ) ) )      r'   r  zdjango.db.models.OrderByc                   V    e 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)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.   )
stacklevelr3   z%expression must be an expression type)	r  warningswarnr   nulls_first
nulls_lastr%  r4   r   )r   r   r%  r  r  s        r    r   zOrderBy.__init__8  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={}))rn  r   r"   r   r%  r?   s    r    ro  zOrderBy.__repr__M  s*    &--N#T_do
 
 	
r'   c                      |d         | _         d S r?  r@  r   s     r    r   zOrderBy.set_source_expressionsR  rA  r'   c                     | j         gS r   r@  r?   s    r    r   zOrderBy.get_source_expressionsU  rC  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_firstry  r  rx  r   countrstrip)r   r   r   r  r   expression_sqlr   placeholderss           r    r   zOrderBy.as_sqlX  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)rW  F)rp  )ry  rM  r   r   ro  rT  r   )r   r   r   r   s       r    	as_oraclezOrderBy.as_oracler  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   r/  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 rx   )r%  r  r  r?   s    r    r)  zOrderBy.reverse_ordering  sI    "o- 	#"DO#D_ 	##D"DOr'   c                     d| _         d S rB   r6  r?   s    r    r!  zOrderBy.asc  s    r'   c                     d| _         d S rx   r6  r?   s    r    r&  zOrderBy.desc  s    r'   )FNNr   )r"   r#   r$   r  r\   r   ro  r   r   r   r  r  r)  r!  r&  r&   r'   r    r  r  3  s        ,HK% % % %*
 
 

# # #! ! !: : : :4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 )Nr4  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_byr:  framer_   r  r   r"   r   rG  ru  r(  r3  r   r   rl  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)ry  r  r  supports_over_clauser   rx  r  r  r   rF  rG  r:  r  r  r  strip)r   r   r   r  expr_sqlr   
window_sqlwindow_paramssql_exprrg  	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   rl  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 r8  )rn  r   r  r  r:  r  r?   s    r    rq  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    ro  zWindow.__repr__  r`  r'   c                     g }| j         r,|                    | j                                                    | j        ,|                    | j                                                   |S r   )r  r  r  r:  )r   r0  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!   rq  ro  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                   H    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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   )r5   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  )ry  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    ro  zWindowFrame.__repr__/  r`  r'   c                     g S r   r&   r?   s    r    r  zWindowFrame.get_group_by_cols2  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   ry  	PRECEDINGCURRENT_ROWUNBOUNDED_PRECEDINGr  	FOLLOWINGUNBOUNDED_FOLLOWINGr  r  r  s      r    rq  zWindowFrame.__str__5  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_endI  s    !"WXXXr'   rm  )r"   r#   r$   r%   r  r   r   r   r   ro  r  rq  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   )ry  window_frame_rows_start_endr  s       r    r  zRowRange.window_frame_start_endP  s    ~99%EEEr'   Nr"   r#   r$   r  r  r&   r'   r    r  r  M  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   )ry  window_frame_range_start_endr  s       r    r  z!ValueRange.window_frame_start_endW  s    ~::5#FFFr'   Nr  r&   r'   r    r  r  T  s-        JG G G G Gr'   r  )\r   r  	functoolsr:  r  collectionsr   decimalr   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.deprecationr   django.utils.functionalr   django.utils.hashabler   r   r)   r   r8  rE  rV  rD   rJ   r>   rP   rT   rX   rd   ru   rh   rk   rp   r  r~  r  r  _connector_combinationsru  rY  r]  dr@  r8   field_typesrZ  r[  r\  	lru_cacherh  r6   r  r  r   r  r  r  r5   r  r	  r  r  r(  r3  r<  r   rT  ro  r  r  r  r  r  r  r  r&   r'   r    <module>r     sk
           # # # # # #             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 = = = = = = 3 3 3 3 3 3 / / / / / /        A' A' A' A' A' A' A' A'Ht t t t t t t tn	 # # # # # # # #J 4::  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
__ B %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
 
 
 
 
, 
 
 
 *+++" " " " "
 " " ,+"J" " " " "q " " "J
 
 
 
 
q 
 
 
 -...a a a a az a a /.aH .///L L L L L
 L L 0/L^
 
 
 
 
Z 
 
 
D    :   $6 $6 $6 $6 $6* $6 $6 $6N& & & & &* & & &R    T   <    $   4 :;;;I I I I I*J I I <;I@0 0 0 0 0) 0 0 0f -...H H H H H: H H /.HV -...]+ ]+ ]+ ]+ ]+z ]+ ]+ /.]+@2: 2: 2: 2: 2:~z 2: 2: 2:j    X   $ 0111` ` ` ` `j ` ` 21`Fq q q q q q q qh?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'   