
    Ui)                       d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlm Z m!Z! d dl"m#Z# d dl$m%Z%  G d d      Z& G d d      Z' G d de      Z( G d d      Z)e G d de)e'             Z*e'jV                  e'jX                  e'jZ                  e'j\                  e'j^                  fD  ci c]'  } | ej`                  ej`                  ej`                  fg) c} e'jV                  e'jb                  e'jX                  e'jZ                  e'j\                  e'j^                  fD  ci c]k  } | ejd                  ejd                  ejd                  fejf                  ejf                  ejf                  fejh                  ejh                  ejh                  fgm c} e'jV                  e'jb                  e'jX                  e'jZ                  e'j\                  fD  ci c]  } | ejd                  ejh                  ejh                  fejh                  ejd                  ejh                  fejd                  ejf                  ejf                  fejf                  ejd                  ejf                  fg c} e'jj                  e'jl                  e'jn                  e'jp                  e'jr                  fD  ci c]'  } | ejd                  ejd                  ejd                  fg) c} e'jV                  e'jb                  e'jX                  e'jZ                  e'j\                  e'j^                  fD  ci c]C  } |  e: e
jv                  d ejd                  ejh                  ejf                  fD                    E c} e'jV                  ejx                  ejz                  ej|                  fej|                  ejz                  ej|                  fejz                  ejx                  ej|                  fejz                  ej|                  ej|                  fejz                  ejz                  ejz                  fej~                  ejz                  ej~                  fejz                  ej~                  ej~                  fgie'jb                  ejx                  ejz                  ej|                  fej|                  ejz                  ej|                  fejx                  ejx                  ejz                  fejx                  ej|                  ejz                  fej|                  ejx                  ejz                  fej|                  ej|                  ejz                  fejz                  ejz                  ejz                  fej~                  ejz                  ej~                  fej~                  ej~                  ejz                  fg	igZ@ ee:      ZAd ZBe@D ]0  ZCeCj                         D ]  \  ZEZFeFD ]  \  ZGZHZI eBeGeEeHeI         2  ej                  d      d        ZK G d  d!e&e*      ZL G d" d#eL      ZM G d$ d%eL      ZN ed&'       G d( d)e'             ZO G d* d+eO      ZP G d, d-eO      ZQ G d. d/eO      ZR ed0'       G d1 d2e&e*             ZS ed3'       G d4 d5e&e*             ZT G d6 d7e*      ZU G d8 d9e*      ZV G d: d;e*      ZW G d< d=e*      ZX G d> d?e*      ZY G d@ dAe*      ZZ G dB dCeS      Z[ G dD dEe[      Z\ edF'       G dG dHe&e*             Z] G dI dJe]      Z^ edK'       G dL dMe*             Z_ edN'       G dO dPe&e*             Z` G dQ dRe)e'      Za G dS dTea      Zb edU'       G dV dWe*             Zc G dX dYe&e*      Zd G dZ d[e      Ze G d\ d]e*      Zf G d^ d_ef      Zg G d` daef      Zhyc c} w c c} w c c} w c c} w c c} w )b    N)defaultdictDecimal)Enum)chainNoneType)UUID)EmptyResultSet
FieldErrorFullResultSet)DatabaseErrorNotSupportedError
connection)fields)
LOOKUP_SEP)Q)deconstructible)cached_propertyclassproperty)make_hashable)	signaturec                       e Zd ZdZd Zy)SQLiteNumericMixinzp
    Some expressions with output_field=DecimalField() must be cast to
    numeric to be properly filtered.
    c                      | j                   ||fi |\  }}	 | j                  j                         dk(  rd|z  }||fS # t        $ r Y ||fS w xY w)NDecimalFieldz(CAST(%s AS NUMERIC)))as_sqloutput_fieldget_internal_typer   )selfcompilerr   extra_contextsqlparamss         O/var/www/opsc/venv/lib/python3.12/site-packages/django/db/models/expressions.py	as_sqlitezSQLiteNumericMixin.as_sqlite   sm    !dkk(JH-HV	  224F-3 F{  	F{	s   "? 	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(y')(
Combinablezu
    Provide the ability to combine one or two objects with
    some connector. For example F('foo') + F('bar').
    +-*/^z%%&|z<<z>>#c                 h    t        |d      st        |      }|rt        |||       S t        | ||      S Nresolve_expression)hasattrValueCombinedExpression)r    other	connectorreverseds       r%   _combinezCombinable._combine?   s7    u23%LE%eY==!$	599r,   c                 <    | j                  d| j                  d      S )NFr@   MULr    s    r%   __neg__zCombinable.__neg__L   s    }}R511r,   c                 <    | j                  || j                  d      S NFr@   ADDr    r=   s     r%   __add__zCombinable.__add__O       }}UDHHe44r,   c                 <    | j                  || j                  d      S rH   r@   SUBrK   s     r%   __sub__zCombinable.__sub__R   rM   r,   c                 <    | j                  || j                  d      S rH   rC   rK   s     r%   __mul__zCombinable.__mul__U   rM   r,   c                 <    | j                  || j                  d      S rH   r@   DIVrK   s     r%   __truediv__zCombinable.__truediv__X   rM   r,   c                 <    | j                  || j                  d      S rH   r@   MODrK   s     r%   __mod__zCombinable.__mod__[   rM   r,   c                 <    | j                  || j                  d      S rH   r@   POWrK   s     r%   __pow__zCombinable.__pow__^   rM   r,   c                 z    t        | dd      r$t        |dd      rt        |       t        |      z  S t        d      NconditionalFFUse .bitand(), .bitor(), and .bitxor() for bitwise logical operations.getattrr   NotImplementedErrorrK   s     r%   __and__zCombinable.__and__a   =    4.75-QV3WT7QuX%%!T
 	
r,   c                 <    | j                  || j                  d      S rH   )r@   BITANDrK   s     r%   bitandzCombinable.bitandh       }}UDKK77r,   c                 <    | j                  || j                  d      S rH   )r@   BITLEFTSHIFTrK   s     r%   bitleftshiftzCombinable.bitleftshiftk   s    }}UD$5$5u==r,   c                 <    | j                  || j                  d      S rH   )r@   BITRIGHTSHIFTrK   s     r%   bitrightshiftzCombinable.bitrightshiftn   s    }}UD$6$6>>r,   c                 z    t        | dd      r$t        |dd      rt        |       t        |      z  S t        d      ra   rd   rK   s     r%   __xor__zCombinable.__xor__q   rh   r,   c                 <    | j                  || j                  d      S rH   )r@   BITXORrK   s     r%   bitxorzCombinable.bitxorx   rl   r,   c                 z    t        | dd      r$t        |dd      rt        |       t        |      z  S t        d      ra   rd   rK   s     r%   __or__zCombinable.__or__{   rh   r,   c                 <    | j                  || j                  d      S rH   )r@   BITORrK   s     r%   bitorzCombinable.bitor   s    }}UDJJ66r,   c                 <    | j                  || j                  d      S NTrI   rK   s     r%   __radd__zCombinable.__radd__       }}UDHHd33r,   c                 <    | j                  || j                  d      S r~   rO   rK   s     r%   __rsub__zCombinable.__rsub__   r   r,   c                 <    | j                  || j                  d      S r~   rC   rK   s     r%   __rmul__zCombinable.__rmul__   r   r,   c                 <    | j                  || j                  d      S r~   rU   rK   s     r%   __rtruediv__zCombinable.__rtruediv__   r   r,   c                 <    | j                  || j                  d      S r~   rY   rK   s     r%   __rmod__zCombinable.__rmod__   r   r,   c                 <    | j                  || j                  d      S r~   r]   rK   s     r%   __rpow__zCombinable.__rpow__   r   r,   c                     t        d      Nrc   rf   rK   s     r%   __rand__zCombinable.__rand__       !T
 	
r,   c                     t        d      r   r   rK   s     r%   __ror__zCombinable.__ror__   r   r,   c                     t        d      r   r   rK   s     r%   __rxor__zCombinable.__rxor__   r   r,   c                     t        |       S N)NegatedExpressionrE   s    r%   
__invert__zCombinable.__invert__   s     &&r,   N))r'   r(   r)   r*   rJ   rP   rD   rV   r^   rZ   rj   r{   rn   rq   rv   r@   rF   rL   rQ   rS   rW   r[   r_   rg   rk   ro   rr   rt   rw   ry   r|   r   r   r   r   r   r   r   r   r   r   r+   r,   r%   r.   r.   &   s     C
C
C
C
C C
 FELMF:2555555
8>?
8
7444444





'r,   r.   c                       e Zd Zy)OutputFieldIsNoneErrorN)r'   r(   r)   r+   r,   r%   r   r      s    r,   r   c                   f   e Zd ZdZeZdZdZdZdZ	dZ
dZdZd'dZd Zd Zd Zd	 Zd
 Zd Zed        Zed        Zed        Zed        Z	 d(dZed        Zed        Zed        Zed        Zd Ze d        Z!ed        Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d  Z+d! Z,d" Z-d# Z.d$ Z/d% Z0d& Z1y))BaseExpressionz%Base class for all query expressions.FTNc                     ||| _         y y r   r   r    r   s     r%   __init__zBaseExpression.__init__   s    # ,D $r,   c                 ^    | j                   j                         }|j                  dd        |S )Nconvert_value)__dict__copypop)r    states     r%   __getstate__zBaseExpression.__getstate__   s'    ""$		/4(r,   c                     | j                   | j                  u rg n| j                   g| j                  j                  |      z   S r   )r   _convert_value_noopr   get_db_convertersr    r   s     r%   r   z BaseExpression.get_db_converters   sG     !!T%=%== $$%//
;	< 	<r,   c                     g S r   r+   rE   s    r%   get_source_expressionsz%BaseExpression.get_source_expressions       	r,   c                     |rJ y r   r+   r    exprss     r%   set_source_expressionsz%BaseExpression.set_source_expressions   s    y5r,   c                     |D cg c]6  }t        |d      r|n%t        |t              rt        |      n
t	        |      8 c}S c c}w r8   )r:   
isinstancestrFr;   )r    expressionsargs      r%   _parse_expressionsz!BaseExpression._parse_expressions   sO     #
  3 45  *3 4af%*F
 	
 
s   ;A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Gr,   c                 B    t        d | j                         D              S )Nc              3   <   K   | ]  }|xr |j                     y wr   )contains_aggregate.0exprs     r%   	<genexpr>z4BaseExpression.contains_aggregate.<locals>.<genexpr>   s#      
15D,T,,,
   anyr   rE   s    r%   r   z!BaseExpression.contains_aggregate   s%     
9=9T9T9V
 
 	
r,   c                 B    t        d | j                         D              S )Nc              3   <   K   | ]  }|xr |j                     y wr   )contains_over_clauser   s     r%   r   z6BaseExpression.contains_over_clause.<locals>.<genexpr>  s#      
37D.T...
r   r   rE   s    r%   r   z#BaseExpression.contains_over_clause  s%     
;?;V;V;X
 
 	
r,   c                 B    t        d | j                         D              S )Nc              3   <   K   | ]  }|xr |j                     y wr   )contains_column_referencesr   s     r%   r   z<BaseExpression.contains_column_references.<locals>.<genexpr>  s&      
 4T444
r   r   rE   s    r%   r   z)BaseExpression.contains_column_references	  %     
335
 
 	
r,   c                 B    t        d | j                         D              S )Nc              3   Z   K   | ]#  }|xr t        |d d      xs |j                   % yw)subqueryFN)re   contains_subqueryr   s     r%   r   z3BaseExpression.contains_subquery.<locals>.<genexpr>  s4      
 QgdJ6P$:P:PQ
s   )+r   rE   s    r%   r   z BaseExpression.contains_subquery  r   r,   c           
      H   | j                         }||_        |j                         D cg c]  }||j                  |||||      nd }}| j                  s4t        d |D              r"t        | j                  j                   d      |j                  |       |S c c}w )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.
        Nc              3   <   K   | ]  }t        |t                y wr   )r   ColPairsr   s     r%   r   z4BaseExpression.resolve_expression.<locals>.<genexpr>3  s      9
+/JtX&9
r   z4 expression does not support composite primary keys.)
r   
is_summaryr   r9   allows_composite_expressionsr   
ValueError	__class__r'   r   )	r    queryallow_joinsreuse	summarizefor_savecr   source_expressionss	            r%   r9   z!BaseExpression.resolve_expression  s    $ IIK  002
  # ''{E9hW
 
 00S 9
3E9
 6
 >>**+ ,* *  	
  !34!
s    Bc                 J    t        | j                  t        j                        S r   )r   r   r   BooleanFieldrE   s    r%   rb   zBaseExpression.conditional=  s    $++V-@-@AAr,   c                     | j                   S r   r   rE   s    r%   fieldzBaseExpression.fieldA  s       r,   c                 @    | j                         }|t        d      |S )z+Return the output type of this expressions.z4Cannot resolve expression type, unknown output_field)_resolve_output_fieldr   r   s     r%   r   zBaseExpression.output_fieldE  s0     113(F  r,   c                 :    	 | j                   S # t        $ r Y y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   rE   s    r%   _output_field_or_nonez$BaseExpression._output_field_or_noneO  s%    	$$$% 		s    	c           	          d | j                         D        }|D ]\  }|D ]R  }t        ||j                        rt        d|j                  j                  d|j                  j                  d       |c S  y)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   | ]	  }||  y wr   r+   )r   sources     r%   r   z7BaseExpression._resolve_output_field.<locals>.<genexpr>h  s      
V=OF
s   z!Expression contains mixed types: , . You must set output_field.N)get_source_fieldsr   r   r   r'   )r    sources_iterr   r   s       r%   r   z$BaseExpression._resolve_output_fieldZ  s    
!%!7!7!9
 ) 	 L& 	!,0@0@A$ )22;;",,55	 	  	 r,   c                     | S r   r+   value
expressionr   s      r%   r   z"BaseExpression._convert_value_noopx  s    r,   c                     | j                   }|j                         }|dk(  rd S |j                  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 S t        |       S r   )floatr   s      r%   <lambda>z.BaseExpression.convert_value.<locals>.<lambda>  s     +0< r,   IntegerFieldc                      | d S t        |       S r   )intr   s      r%   r   z.BaseExpression.convert_value.<locals>.<lambda>  s     +.u: r,   r   c                      | d S t        |       S r   r   r   s      r%   r   z.BaseExpression.convert_value.<locals>.<lambda>  s     +25> r,   )r   r   endswithr   )r    r   internal_types      r%   r   zBaseExpression.convert_value|  sk     !!//1L(  ##N3  n,  '''r,   c                 8    | j                   j                  |      S r   )r   
get_lookup)r    lookups     r%   r   zBaseExpression.get_lookup  s      ++F33r,   c                 8    | j                   j                  |      S r   )r   get_transformr    names     r%   r   zBaseExpression.get_transform  s      ..t44r,   c                     | j                         }|j                  | j                         D cg c]  }||j                  |      nd  c}       |S c c}w r   )r   r   r   relabeled_clone)r    
change_mapclonees       r%   r  zBaseExpression.relabeled_clone  s\    		$$ 446 23!!*-DH	
 s   Ac                     |s| S |j                  |       x}r|S | j                         x}s| S | j                         }|j                  |D cg c]  }|d n|j	                  |       c}       |S c c}w r   )getr   r   r   replace_expressions)r    replacementsreplacementr   r  r   s         r%   r
  z"BaseExpression.replace_expressions  s    K&**400;0&*&A&A&CC"CK		$$ / $*B*B<*PP	
 s   A2c                 p    t               }| j                         D ]  }|||j                         z  } |S r   )setr   get_refs)r    refsr   s      r%   r  zBaseExpression.get_refs  s@    u//1 	$D|DMMO#D	$ r,   c                 ,    t        j                   |       S r   r   rE   s    r%   r   zBaseExpression.copy      yyr,   c           	          | j                         }|j                  | j                         D cg c]<  }t        |t              rt	        | |j
                         n|j                  |      > c}       |S c c}w r   )r   r   r   r   r   r  prefix_references)r    prefixr  r   s       r%   r  z BaseExpression.prefix_references  s{    		$$ !779  "$* ,-//78		
 s   AA8c                     | j                   s| gS g }| j                         D ]!  }|j                  |j                                # |S r   )r   r   extendget_group_by_colsr    colsr   s      r%   r  z BaseExpression.get_group_by_cols  sI    &&6M113 	4FKK0023	4r,   c                 \    | j                         D cg c]  }|j                   c}S c c}w )z9Return the underlying field types used by this aggregate.)r   r   )r    r  s     r%   r   z BaseExpression.get_source_fields  s%    151L1L1NOA''OOOs   )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7r,   c                     | S r   r+   rE   s    r%   reverse_orderingzBaseExpression.reverse_ordering      r,   c              #      K   |  | j                         D ].  }|st        |d      r|j                         E d{    +| 0 y7 w)zi
        Recursively yield this expression and all subexpressions, in
        depth-first order.
        flattenN)r   r:   r-  )r    r   s     r%   r-  zBaseExpression.flatten  sK     
 
//1 	D4+#||~--J	 .s   AAA	Ac                 p    t        | j                  d      r| j                  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)r:   r   r/  r    r!   r#   r$   s       r%   r/  zBaseExpression.select_format  s9    
 4$$o6$$228S&IIF{r,   c                     t        | dd      s	 | j                         \  }|S | S # t        $ r}t        d      |d }~ww xY w)N constraint_validation_compatibleTzdExpressions with constraint_validation_compatible set to False must have only one source expression.)re   r   r   )r    r   r  s      r%   get_expression_for_validationz,BaseExpression.get_expression_for_validation  s\     t?F" $ ; ; = "!   < s   % 	?:?r   NTNFF)2r'   r(   r)   r*   NotImplementedempty_result_set_valuer   
filterablewindow_compatibleallowed_defaultr2  set_returningr   r   r   r   r   r   r   r   r   r   r   r   r   r9   propertyrb   r   r   r   r   staticmethodr   r   r   r   r  r
  r  r   r  r  r   r"  r'  r*  r-  r/  r3  r+   r,   r%   r   r      s}   /+JJO'+$M#( -
<
H8 
 

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

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

Expressionz:An expression that can be combined with other expressions.   maxsizec                 ,    t        | j                        S r   )r   r   )clss    r%   _constructor_signaturez!Expression._constructor_signature  s     &&r,   c                     t        |t              rt        t         j                  |            S t        |t              r"t         fd|j                         D              S t        |t        j                        rO|j                  r8|j                  r,|j                  j                  j                  |j                  fS t        |      S t        |      S )Nc              3   J   K   | ]  \  }}|j                  |      f  y wr   )	_identity)r   keyvalrC  s      r%   r   z'Expression._identity.<locals>.<genexpr>  s#     QxsC#s}}S12Qs    #)r   tuplemaprG  dictitemsr   Fieldr  model_metalabeltyper   )rC  r   s   ` r%   rG  zExpression._identity  s    eU#S]]E233eT"Q5;;=QQQeV\\*zzekk{{((..

::;U##r,   c                 j   | j                   \  }} | j                  j                  | g|i |} |j                          t	        |j
                  j                               }t        |       | j                  g}|D ])  \  }}| j                  |      }|j                  ||f       + t        |      S r   )_constructor_argsrD  bind_partialapply_defaultsiter	argumentsrM  nextr   rG  appendrJ  )r    argsr!  r   rX  identityr   r   s           r%   r\  zExpression.identity  s    --f<D//<<TSDSFS	 	  ",,2245	YNN## 	*JC NN5)EOOS%L)	* Xr,   c                 `    t        |t              st        S |j                  | j                  k(  S r   )r   r>  r5  r\  rK   s     r%   __eq__zExpression.__eq__,  s%    %,!!~~..r,   c                 ,    t        | j                        S r   )hashr\  rE   s    r%   __hash__zExpression.__hash__1  s    DMM""r,   N)r'   r(   r)   r*   r   	functools	lru_cacherD  classmethodrG  r   r\  r^  ra  r+   r,   r%   r>  r>    s^    DY%' & ' 	$ 	$  /
#r,   r>  c              3   @   K   | ]  }|t         |ft         ||fg  y wr   r   )r   
field_types     r%   r   r     s+        h
3h
J5WX s   c                 :    t         |   j                  | ||f       y)z
    Register combinable types:
        lhs <connector> rhs -> result
    e.g.
        register_combinable_fields(
            IntegerField, Combinable.ADD, FloatField, FloatField
        )
    N)_connector_combinatorsrZ  )lhsr>   rhsresults       r%   register_combinable_fieldsrl    s     9%,,c3-?@r,   r?  r@  c                     t         j                  | d      }|D ]#  \  }}}t        ||      st        ||      s!|c S  y )Nr+   )rh  r	  
issubclass)r>   lhs_typerhs_typecombinatorscombinator_lhs_typecombinator_rhs_typecombined_types          r%   _resolve_combined_typeru    sL    (,,Y;KCN !?0-h 34):
 ! 	!r,   c                   b     e Zd Zd
 fd	Zd Zd Zd Zd Zd Zd Z		 d fd	Z
ed	        Z xZS )r<   c                 P    t         |   |       || _        || _        || _        y Nr   )superr   r>   ri  rj  )r    ri  r>   rj  r   r   s        r%   r   zCombinedExpression.__init__  s(    l3"r,   c                 N    dj                  | j                  j                  |       S )Nz<{}: {}>)formatr   r'   rE   s    r%   __repr__zCombinedExpression.__repr__  s      !8!8$??r,   c                 d    dj                  | j                  | j                  | j                        S )Nz{} {} {})r{  ri  r>   rj  rE   s    r%   __str__zCombinedExpression.__str__  s#      4>>488DDr,   c                 2    | j                   | j                  gS r   ri  rj  rE   s    r%   r   z)CombinedExpression.get_source_expressions  s    $((##r,   c                 "    |\  | _         | _        y r   r  r   s     r%   r   z)CombinedExpression.set_source_expressions  s    "$(r,   c           	         t        | j                  t        | j                  j                        t        | j
                  j                              }|ot        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   )
ru  r>   rR  ri  r   rj  r   r   r   r'   )r    rt  s     r%   r   z(CombinedExpression._resolve_output_field  s     /NN//0//0

  ''9 :((//99BBC288((22;;< = !  r,   c                 h   g }g }|j                  | j                        \  }}|j                  |       |j                  |       |j                  | j                        \  }}|j                  |       |j                  |       d}|j
                  j                  | j                  |      }||z  |fS Nz(%s))compileri  rZ  r  rj  opscombine_expressionr>   )r    r!   r   r   expression_paramsr#   r$   expression_wrappers           r%   r   zCombinedExpression.as_sql  s    &&txx0V3  (&&txx0V3  (#nn//L!C'):::r,   c                 B   t         
|   |||||      }t        | t        t        f      s	 |j
                  j                  j                         }	 |j                  j                  j                         }d||hv r0||k7  r+t        |j
                  |j                  |j                        S h d}	| j                  | j                  k(  r)||	v r%||k(  r t	        |j
                  |j                        S |S # t        t        f$ r d }Y w xY w# t        t        f$ r d }Y w xY w)NDurationField>   	DateField	TimeFieldDateTimeField)ry  r9   r   DurationExpressionTemporalSubtractionri  r   r   AttributeErrorr   rj  r>   rP   )r    r   r   r   r   r   resolvedro  rp  datetime_fieldsr   s             r%   r9   z%CombinedExpression.resolve_expression  s    7-
 $!35H IJ #<<44FFH #<<44FFH 8X"668x;O)LL("4"4hll  JO$((*/(*8<<FF# #J/    #J/   s#   $C3 $D
 3DD
DDc                 ^    | j                   j                  xr | j                  j                  S r   )ri  r9  rj  rE   s    r%   r9  z"CombinedExpression.allowed_default&  s!    xx''DDHH,D,DDr,   r   r4  )r'   r(   r)   r   r|  r~  r   r   r   r   r9   r   r9  __classcell__r   s   @r%   r<   r<     sK    @E$#"; SX@ E Er,   r<   c                   *     e Zd Zd Z fdZd Z xZS )r  c                     	 |j                   }|j                         dk(  r1|j                  |      \  }}|j                  j	                  |      |fS |j                  |      S # t
        $ r Y w xY w)Nr  )r   r   r  r  format_for_duration_arithmeticr   )r    sider!   r   outputr#   r$   s          r%   r  zDurationExpression.compile,  sy    	R&&F '')_<&..t4V!~~DDSI6QQ%%  		s   A# #	A/.A/c                    |j                   j                  rt        |   ||      S |j                  j                  |        g }g }| j                  | j                  ||      \  }}|j                  |       |j                  |       | j                  | j                  ||      \  }}|j                  |       |j                  |       d}|j                  j                  | j                  |      }||z  |fS r  )featureshas_native_duration_fieldry  r   r  check_expression_supportr  ri  rZ  r  rj  combine_duration_expressionr>   )	r    r!   r   r   r  r#   r$   r  r   s	           r%   r   zDurationExpression.as_sql7  s    887>(J77//5ll488XzBV3  (ll488XzBV3  (#nn88U!C'):::r,   c                     | j                   ||fi |\  }}| j                  t        j                  t        j                  hv rr	 | j
                  j                  j                         }| j                  j                  j                         }h d}||vs||vrt        d| j                   d      ||fS ||fS # t        t        f$ r Y ||fS w xY w)N>   r   r   r   r  zInvalid arguments for operator .)r   r>   r.   rD   rV   ri  r   r   rj  r   r  r   )	r    r!   r   r"   r#   r$   ro  rp  allowed_fieldss	            r%   r&   zDurationExpression.as_sqliteH  s    !dkk(JH-HV>>jnnjnn==8800BBD8800BBD" >1X^5S'9$..9IK  F{sF{ #J/  F{s   AB: :CC)r'   r(   r)   r  r   r&   r  r  s   @r%   r  r  +  s    	&;"r,   r  c                   F     e Zd Z ej                         Z fdZd Z xZS )r  c                 <    t         |   || j                  |       y r   )ry  r   rP   )r    ri  rj  r   s      r%   r   zTemporalSubtraction.__init__a  s    dhh,r,   c                 "   |j                   j                  |        |j                  | j                        }|j                  | j                        }|j                   j                  | j                  j                  j                         ||      S r   )r  r  r  ri  rj  subtract_temporalsr   r   )r    r!   r   ri  rj  s        r%   r   zTemporalSubtraction.as_sqld  sm    //5txx(txx(~~00HH!!335sC
 	
r,   )	r'   r(   r)   r   r  r   r   r   r  r  s   @r%   r  r  ^  s    '6'')L-
r,   r  zdjango.db.models.F)pathc                   Z    e Zd ZdZdZd Zd Zd Zd Z	 ddZ	d	 Z
d
 Zd Zd Zd Zd Zy)r   zDAn object capable of resolving references to existing query objects.Fc                     || _         y)z^
        Arguments:
         * name: the name of the field this expression references
        N)r  r  s     r%   r   z
F.__init__s  s    
 	r,   c                 b    dj                  | j                  j                  | j                        S N{}({}))r{  r   r'   r  rE   s    r%   r|  z
F.__repr__z  s!    t~~66		BBr,   c                     t        | |      S r   )Sliced)r    	subscripts     r%   __getitem__zF.__getitem__}  s    dI&&r,   c                 H    t        d| j                  j                   d      )Nzargument of type 'z' is not iterable)	TypeErrorr   r'   rK   s     r%   __contains__zF.__contains__  s%     ,T^^-D-D,EEVWXXr,   Nc                 >    |j                  | j                  |||      S r   )resolve_refr  r    r   r   r   r   r   s         r%   r9   zF.resolve_expression  s       K	JJr,   c                    |j                  |       x}|S | j                  j                  t              ^}}|s| S |j                  t	        |            x}	 |j
                  | S |D ]!  }|j                  |      }|| c S  ||      }# |S r   )r	  r  splitr   r   r   r   )r    r  r  
field_name
transforms	transformtransform_classs          r%   r
  zF.replace_expressions  s    '++D11K>"&))//*"=
Z K'++AjM::K 66>K# 	7I)77	BO&)+6K		7
 r,   c                     t        | fi |S r   r  r   s     r%   r"  zF.asc  r#  r,   c                     t        | fddi|S r%  r  r   s     r%   r'  zF.desc  r(  r,   c                 j    | j                   |j                   k(  xr | j                  |j                  k(  S r   )r   r  rK   s     r%   r^  zF.__eq__  s'    ~~0LTYY%**5LLr,   c                 ,    t        | j                        S r   )r`  r  rE   s    r%   ra  z
F.__hash__  s    DIIr,   c                 ,    t        j                   |       S r   r  rE   s    r%   r   zF.copy  r  r,   r4  )r'   r(   r)   r*   r9  r   r|  r  r  r9   r
  r"  r'  r^  ra  r   r+   r,   r%   r   r   m  sL    NOC'Y SXK
('8Mr,   r   c                   <     e Zd ZdZdZdZd Z fdZd Zd Z	 xZ
S )ResolvedOuterRefz
    An object that contains a reference to an outer query.

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

    Object resolves the column on which the slicing is applied, and then
    applies the slicing if possible.
    c                    t         |   |j                         || _        t	        |t
              r"|dk  rt        d      |dz   | _        d| _        y t	        |t              r|j                  |j                  dk  s|j                  |j                  dk  rt        d      |j                  t        d      |j                  r0|j                  r$|j                  |j                  k  rt        d      |j                  dn|j                  dz   | _        |j                  d | _        y |j                  |j                  xs dz
  | _        y t        d      )Nr   z#Negative indexing is not supported.   zStep argument is not supported.z,Slice stop must be greater than slice start.z7Argument to slice must be either int or slice instance.)ry  r   r  objr   r   r   startlengthslicestopstepr  )r    r  r  r   s      r%   r   zSliced.__init__  s   "i%1} !FGG"QDJDK	5)+	!0C*y~~/A !FGG~~) !BCC~~)//inny6V !OPP'oo59??Q;NDJ~~%"'nn	0D1EUVVr,   c                     | j                   dz
  }| j                  d n|| j                  z   }t        ||      }| j                  j                   d| j
                  d|dS )Nr  (r   ))r  r  r  r   r)   r  )r    r  r  r  s       r%   r|  zSliced.__repr__  s\    

Q{{*t0C%&	..--.a|2i]!LLr,   c                 0   |j                  | j                  |||      }t        | j                  t        | j
                  f      r | j                  j                  |||||      }n|}|j                  j                  || j                  | j                        S r   )r  r  r   r  r  r   r9   r   slice_expressionr  r  )r    r   r   r   r   r   r  r   s           r%   r9   zSliced.resolve_expression  s~     $$TYYUINdhh4>> :;88..{E9hD D$$55dDJJTTr,   r4  )r'   r(   r)   r*   r   r|  r9   r  r  s   @r%   r  r    s+    W2M Ur,   r  zdjango.db.models.Funcc                   x     e Zd ZdZdZdZdZdZdd fd
Zd Z	d Z
d	 Zd
 Z	 	 	 ddZ fdZed        Z xZS )FunczAn SQL function call.Nz%(function)s(%(expressions)s)r   r   c                D   | j                   ht        |      | j                   k7  rPt        d| j                  j                  d| j                   d| j                   dk(  rdnddt        |      d	      t
        |   |	        | j                  | | _        || _	        y )
N'z' takes exactly  r  argumentrX  z (z given)r   )
aritylenr  r   r'   ry  r   r   r   extra)r    r   r   r  r   s       r%   r   zFunc.__init__"  s    ::!c+&6$**&D NN++JJ"&**/J{B$  	l3"9$"9"9;"G
r,   c                    | j                   j                  d | j                  D              }i | j                  | j	                         }|rVdj                  d t        |j                               D              }dj                  | j                  j                  ||      S dj                  | j                  j                  |      S )Nc              3   2   K   | ]  }t        |        y wr   r   r   r   s     r%   r   z Func.__repr__.<locals>.<genexpr>2       #PCH#P   r   c              3   V   K   | ]!  \  }}t        |      d z   t        |      z    # yw)=Nr  )r   rH  rI  s      r%   r   z Func.__repr__.<locals>.<genexpr>5  s*      .6c3C3S)s   ')
{}({}, {})r  )

arg_joinerjoinr   r  _get_repr_optionssortedrM  r{  r   r'   )r    r[  r  s      r%   r|  zFunc.__repr__1  s    ###P8O8O#PP:4:::!7!7!9:II :@:O E  &&t~~'>'>eLLt~~66==r,   c                     i S )zAReturn a dict of extra __init__() options to include in the repr.r+   rE   s    r%   r  zFunc._get_repr_options;  s    	r,   c                     | j                   S r   r   rE   s    r%   r   zFunc.get_source_expressions?  s    &&&r,   c                     || _         y r   r  r   s     r%   r   zFunc.set_source_expressionsB  s
    "'r,   c                    |j                   j                  |        g }g }| j                  D ]9  }		 |j                  |	      \  }
}|j                  |
       |j                  |       ; i | j                  |}|||d<   n|j                  d| j                         |xs |j                  d| j                        }|xs |j                  d| j                         }|j#                  |      x|d<   |d<   ||z  t%        |      fS # t        $ r; t        |	dt              }|t        u r |j                  t        |            \  }
}Y t        $ r! |j                  t        d            \  }
}Y ,w xY w)Nr6  Tfunctiontemplater  r   r   )r  r  r   r  r   re   r5  r;   r   rZ  r  r  
setdefaultr  r	  r  r  r  rJ  )r    r!   r   r  r  r  r"   	sql_partsr$   r   arg_sql
arg_paramsr6  datas                 r%   r   zFunc.as_sqlE  sv    	//5	** 	&C
D&.&6&6s&;# W%MM*%	& /$**.. 'DOOJ6Btxx
DMMBJ488L$//#J
.8ooi.HH]d7m$f--- " V)01>*& *^;&.&6&6u=S7T&U#  D&.&6&6uT{&C#Ds   DA E1%E10E1c                     t         |          }| j                  d d  |_        | j                  j                         |_        |S r   )ry  r   r   r  )r    r   r   s     r%   r   z	Func.copyl  s8    w|~"&"9"9!"<ZZ__&
r,   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr   r9  )r   r   s     r%   r   z'Func.allowed_default.<locals>.<genexpr>t  s     X*:--X   )allr   rE   s    r%   r9  zFunc.allowed_defaultr  s    X@W@WXXXr,   NNN)r'   r(   r)   r*   r  r  r  r  r   r|  r  r   r   r   r   r   r9  r  r  s   @r%   r  r    sb    H.HJE26 >'( %.N Y Yr,   r  zdjango.db.models.Valuec                   b     e Zd ZdZdZdZd fd	Zd Zd Z	 d fd	Z	d Z
d	 Zed
        Z xZS )r;   z9Represent a wrapped value as a node within an expression.FTc                 4    t         |   |       || _        y)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)ry  r   r   )r    r   r   r   s      r%   r   zValue.__init__  s     	l3
r,   c                 N    | j                   j                   d| j                  dS )Nr  r  )r   r'   r   rE   s    r%   r|  zValue.__repr__  s$    ..))*!DJJ>;;r,   c                 ,   |j                   j                  |        | j                  }| j                  }|U| j                  r|j                  ||      }n|j                  ||      }t        |d      r|j                  |||      |gfS |dg fS d|gfS )N)r   get_placeholderNULLz%s)	r  r  r   r   r   get_db_prep_saveget_db_prep_valuer:   r  )r    r!   r   rI  r   s        r%   r   zValue.as_sql  s    //5jj11#}}"33CJ3O"44SZ4P|%67#33C:NQTPUUU; 2:cU{r,   c                 <    t         |   |||||      }||_        |S r   )ry  r9   r   r    r   r   r   r   r   r   r   s          r%   r9   zValue.resolve_expression  s(     G&uk5)XV
r,   c                     g S r   r+   rE   s    r%   r  zValue.get_group_by_cols  r   r,   c                 H   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        j0                         S y r   )r   r   r   r   	CharFieldboolr   r   r   r   r   datetimer  dater  timer  	timedeltar  r   r   bytesBinaryFieldr
   	UUIDFieldrE   s    r%   r   zValue._resolve_output_field  sZ   djj#&##%%djj$'&&((djj#&&&((djj%($$&&djj("3"34''))djj(--0##%%djj(--0##%%djj("4"45''))djj'*&&((djj%(%%''djj$'##%% (r,   c                     | j                   S r   )r   rE   s    r%   r6  zValue.empty_result_set_value  s    zzr,   r   r4  )r'   r(   r)   r*   r   r9  r   r|  r   r9   r  r   r;  r6  r  r  s   @r%   r;   r;   w  sK    C HO
<& SX&0  r,   r;   c                   D     e Zd ZdZd fd	Zd Zd Zd Z	 d fd	Z xZ	S )	RawSQLTc                 p    |t        j                         }||c| _        | _        t        |   |       y rx  )r   rN  r#   r$   ry  r   )r    r#   r$   r   r   s       r%   r   zRawSQL.__init__  s4    !<<>L #V$+l3r,   c                 x    dj                  | j                  j                  | j                  | j                        S Nr  )r{  r   r'   r#   r$   rE   s    r%   r|  zRawSQL.__repr__  s)    ""4>>#:#:DHHdkkRRr,   c                 8    d| j                   z  | j                  fS r  )r#   r$   r   s      r%   r   zRawSQL.as_sql  s     $++--r,   c                     | gS r   r+   rE   s    r%   r  zRawSQL.get_group_by_cols  	    vr,   c                 j   |j                   r|j                   j                  j                  D ]q  }|j                  j                  D ]V  }|j                  j                         | j                  j                         v s8|j                  |j                  |||        q s t        | )  |||||      S r   )rO  rP  all_parentslocal_fieldscolumnlowerr#   r  r  ry  r9   )	r    r   r   r   r   r   parentparent_fieldr   s	           r%   r9   zRawSQL.resolve_expression  s     ;;++++77 $*LL$=$= L#**002dhhnn6FF))(--{E9  w);y(
 	
r,   r   r4  )
r'   r(   r)   r9  r   r|  r   r  r9   r  r  s   @r%   r   r     s.    O4S. SX
 
r,   r   c                       e Zd Zd Zd Zy)Starc                      y)Nz'*'r+   rE   s    r%   r|  zStar.__repr__  s    r,   c                 
    dg fS )Nr1   r+   r   s      r%   r   zStar.as_sql  s    Bwr,   N)r'   r(   r)   r|  r   r+   r,   r%   r/  r/    s    r,   r/  c                   @     e Zd ZdZd fd	Zd Zd Z	 ddZd Z xZ	S )	DatabaseDefaultzb
    Expression to use DEFAULT keyword during insert otherwise the underlying
    expression.
    c                 2    t         |   |       || _        y r   ry  r   r   r    r   r   r   s      r%   r   zDatabaseDefault.__init__  s    &$r,   c                     | j                   gS r   r   rE   s    r%   r   z&DatabaseDefault.get_source_expressions        r,   c                     |\  | _         y r   r8  r   s     r%   r   z&DatabaseDefault.set_source_expressions   s    "r,   c                 x    | j                   j                  |||||      }|s|S t        || j                        S )N)r   r   r   r   r   r   )r   r9   r3  r   )r    r   r   r   r   r   resolved_expressions          r%   r9   z"DatabaseDefault.resolve_expression  sQ     #oo@@# A 
 &&d.H.H
 	
r,   c                 l    |j                   j                  s|j                  | j                        S dg fS )NDEFAULT)r  "supports_default_keyword_in_insertr  r   r   s      r%   r   zDatabaseDefault.as_sql  s0    ""EE##DOO44"}r,   r   r4  )
r'   r(   r)   r*   r   r   r   r9   r   r  r  s   @r%   r3  r3    s(    
%!# SX
$r,   r3  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 )
ColTFc                 L    ||}t         |   |       ||c| _        | _        y rx  )ry  r   aliastarget)r    rC  rD  r   r   s       r%   r   zCol.__init__  s.    !Ll3"'
DKr,   c                     | j                   | j                  }}|r|t        |      fnt        |      f}dj                  | j                  j
                  dj                  |            S )Nr  r   )rC  rD  r   r{  r   r'   r  )r    rC  rD  identifierss       r%   r|  zCol.__repr__%  sO    

DKKv.3uc&k*#f+t~~66		+8NOOr,   c                     | j                   | j                  j                  }}|r||fn|f}dj                  t	        |j
                  |            }|dfS )Nr  r+   )rC  rD  r*  r  rK  quote_name_unless_alias)r    r!   r   rC  r*  rF  r#   s          r%   r   z
Col.as_sql*  sL    

DKK$6$6v).ufoVIhhs8;;[IJBwr,   c                     | j                   | S | j                  |j                  | j                   | j                         | j                  | j                        S r   )rC  r   r	  rD  r   r  s     r%   r  zCol.relabeled_clone0  sF    ::K~~LLTZZ0$++t?P?P
 	
r,   c                     | gS r   r+   rE   s    r%   r  zCol.get_group_by_cols7  r&  r,   c                     | j                   | j                  k(  r| j                  j                  |      S | j                  j                  |      | j                   j                  |      z   S r   )rD  r   r   r   s     r%   r   zCol.get_db_converters:  s^    ;;$+++$$66zBB  22
KK))*56 	6r,   r   )r'   r(   r)   r   r  r   r|  r   r  r  r   r  r  s   @r%   rA  rA    s.    !% 0P

6r,   rA  c                   Z     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )r   c                 P    t         |   |       || _        || _        || _        y rx  )ry  r   rC  targetssources)r    rC  rN  rO  r   r   s        r%   r   zColPairs.__init__C  s(    l3
r,   c                 ,    t        | j                        S r   )r  rN  rE   s    r%   __len__zColPairs.__len__I  s    4<<  r,   c                 4    t        | j                               S r   )rW  get_colsrE   s    r%   __iter__zColPairs.__iter__L  s    DMMO$$r,   c           
          | j                   j                   d| j                  d| j                  d| j                  d| j
                  d
S )Nr  r   r  )r   r'   rC  rN  rO  r   rE   s    r%   r|  zColPairs.__repr__O  sL    ~~&&'qb8H||b!2!2 5Q8	
r,   c           	          t        | j                  | j                        D cg c]  \  }}t        | j                  ||       c}}S c c}}w r   )ziprN  rO  rA  rC  )r    rD  r   s      r%   rS  zColPairs.get_colsU  sD     #&dllDLL"A
 

FF+
 	
 
s   !A	c                 "    | j                         S r   )rS  rE   s    r%   r   zColPairs.get_source_expressions[  s    }}r,   c                      t         fd|D              sJ |D cg c]  }|j                   c} _        |D cg c]  }|j                   c} _        y c c}w c c}w )Nc              3   t   K   | ]/  }t        |t              xr |j                  j                  k(   1 y wr   )r   rA  rC  )r   r   r    s     r%   r   z2ColPairs.set_source_expressions.<locals>.<genexpr>_  s-     X$:dC(ETZZ4::-EEXs   58)r  rD  rN  r   rO  )r    r   r  s   `  r%   r   zColPairs.set_source_expressions^  sL    XRWXXXX.34s

4-23c		3 53s
   AAc                     g }g }| j                         }|D ]9  }|j                  ||      \  }}|j                  |       |j                  |       ; dj	                  |      |fS )Nr   )rS  r   rZ  r  r  )	r    r!   r   cols_sqlcols_paramsr  r  r#   r$   s	            r%   r   zColPairs.as_sqlc  sj    }} 	'C**Xz:KCOOC v&	'
 yy"K//r,   c                     | j                  |j                  | j                  | j                        | j                  | j                  | j
                        S r   )r   r	  rC  rN  rO  r   r  s     r%   r  zColPairs.relabeled_cloneo  s;    ~~LLTZZ0$,,djj
 	
r,   c                     | S r   r+   r  s      r%   r9   zColPairs.resolve_expressiont  r+  r,   c                 
    ||fS r   r+   r0  s       r%   r/  zColPairs.select_formatw  s    F{r,   )r'   r(   r)   r   rQ  rT  r|  rS  r   r   r   r  r9   r/  r  r  s   @r%   r   r   B  s:    !%

4

0

r,   r   c                   V     e Zd ZdZ fdZd Zd Zd Z	 ddZd Z	d Z
d	 Zd
 Z xZS )Refz~
    Reference to column alias of the query. For example, Ref('sum_cost') in
    qs.annotate(sum_cost=Sum('cost')) query.
    c                 @    t         |           ||c| _        | _        y r   )ry  r   r  r   )r    r  r   r   s      r%   r   zRef.__init__  s    !%v	4;r,   c                 x    dj                  | j                  j                  | j                  | j                        S r#  )r{  r   r'   r  r   rE   s    r%   r|  zRef.__repr__  s)    ""4>>#:#:DIIt{{SSr,   c                     | j                   gS r   r   rE   s    r%   r   zRef.get_source_expressions  s    }r,   c                     |\  | _         y r   rf  r   s     r%   r   zRef.set_source_expressions  s    r,   c                     | S r   r+   r  s         r%   r9   zRef.resolve_expression  s	    
 r,   c                     | j                   hS r   )r  rE   s    r%   r  zRef.get_refs  s    		{r,   c                 f    | j                         }| j                  j                  |      |_        |S r   )r   r   r  )r    r  r  s      r%   r  zRef.relabeled_clone  s(    		{{228<r,   c                 P    |j                   j                  | j                        g fS r   )r  
quote_namer  r   s      r%   r   z
Ref.as_sql  s     ~~((3R77r,   c                     | gS r   r+   rE   s    r%   r  zRef.get_group_by_cols  r&  r,   r4  )r'   r(   r)   r*   r   r|  r   r   r9   r  r  r   r  r  r  s   @r%   rb  rb  {  s=    
.T SX
8r,   rb  c                   8     e Zd ZdZdZd Z fdZd Zd Z xZ	S )ExpressionListz
    An expression containing multiple expressions. Can be used to provide a
    list of expressions as an argument to another expression, like a partition
    clause.
    z%(expressions)sc                 Z    | j                   j                  d | j                  D              S )Nc              3   2   K   | ]  }t        |        y wr   r  r  s     r%   r   z)ExpressionList.__str__.<locals>.<genexpr>  r  r  )r  r  r   rE   s    r%   r~  zExpressionList.__str__  s#    ###P8O8O#PPPr,   c                 <    | j                   syt        |   |i |S )N) r+   )r   ry  r   )r    r[  r!  r   s      r%   r   zExpressionList.as_sql  s#    &&w~t.v..r,   c                 *     | j                   ||fi |S r   )r   )r    r!   r   r"   s       r%   r&   zExpressionList.as_sqlite  s    t{{8ZA=AAr,   c                 r    g }| j                         D ]!  }|j                  |j                                # |S r   r   r  r  )r    group_by_colsr   s      r%   r  z ExpressionList.get_group_by_cols  s<    //1 	;D  !7!7!9:	;r,   )
r'   r(   r)   r*   r  r~  r   r&   r  r  r  s   @r%   ro  ro    s%     !HQ/
Br,   ro  c                   6     e Zd ZdZdZ fdZed        Z xZS )OrderByListFzORDER BY %(expressions)sc                 6    d |D        }t        |   |i | y )Nc              3      K   | ]7  }t        |t              r!|d    dk(  rt        t        |dd       d      n| 9 yw)r   r0   r  NTr&  )r   r   r  r   r   s     r%   r   z'OrderByList.__init__.<locals>.<genexpr>  sI      
  dC(T!W^ $qr(5
s   =?)ry  r   )r    r   r  r   s      r%   r   zOrderByList.__init__  s(    
 $
 	+//r,   c                     |y t        |t        t        f      r|sy  | | S t        |t              st	        |d      r | |      S t        | d|d      )Nr9   z] must be either a string reference to a field, an expression, or a list or tuple of them not r  )r   listrJ  r   r:   r   )rC  contextparams      r%   
from_paramzOrderByList.from_param  sk    =edE]+;s#wu6J'Ku:i DDI9AO
 	
r,   )	r'   r(   r)   r9  r  r   rd  r  r  r  s   @r%   ry  ry    s&    O)H	0 
 
r,   ry  z"django.db.models.ExpressionWrapperc                   T     e Zd ZdZ fdZd Zd Z fdZd Zd Z	e
d        Z xZS )	ExpressionWrapperz
    An expression that can wrap another expression so that it can provide
    extra context to the inner expression, such as the output_field.
    c                 4    t         |   |       || _        y rx  r5  r6  s      r%   r   zExpressionWrapper.__init__  s    l3$r,   c                     |d   | _         y Nr   r8  r   s     r%   r   z(ExpressionWrapper.set_source_expressions      (r,   c                     | j                   gS r   r8  rE   s    r%   r   z(ExpressionWrapper.get_source_expressions  r9  r,   c                     t        | j                  t              r;| j                  j                         }| j                  |_        |j                         S t        |          S r   )r   r   r>  r   r   r  ry  r    r   r   s     r%   r  z#ExpressionWrapper.get_group_by_cols  sP    dooz2--/J&*&7&7J#//11 w(**r,   c                 8    |j                  | j                        S r   )r  r   r   s      r%   r   zExpressionWrapper.as_sql  s    00r,   c                 b    dj                  | j                  j                  | j                        S r  )r{  r   r'   r   rE   s    r%   r|  zExpressionWrapper.__repr__  s!    t~~66HHr,   c                 .    | j                   j                  S r   )r   r9  rE   s    r%   r9  z!ExpressionWrapper.allowed_default  s    ...r,   )r'   r(   r)   r*   r   r   r   r  r   r|  r;  r9  r  r  s   @r%   r  r    s;    
%#!+1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                 L    t         |   |t        j                                y rx  )ry  r   r   r   r  s     r%   r   zNegatedExpression.__init__  s    &2E2E2GHr,   c                 6    | j                   j                         S r   )r   r   rE   s    r%   r   zNegatedExpression.__invert__
  s    ##%%r,   c                 F   	 t         |   ||      \  }}|j                  j                  }|j                  | j                        sd| d|fS d| |fS # t        $ rA |j                  j                  }|j
                  sY y|j                  t        d            cY S w xY w)N)z1=1r+   Tz
CASE WHEN z = 0 THEN 1 ELSE 0 ENDzNOT )ry  r   r   r   r  &supports_boolean_expr_in_select_clauser  r;   r  0conditional_expression_supported_in_where_clauser   )r    r!   r   r#   r$   r  r  r   s          r%   r   zNegatedExpression.as_sql  s    	1'.:>KC !!%% CCDOOTu$:;VCCcU|V##  	1**33HBB ##E$K00		1s   A +B B B c                 r    t         |   |||||      }t        |j                  dd      st	        d      |S )Nrb   Fz*Cannot negate non-conditional expressions.)ry  r9   re   r   r  )r    r   r   r   r   r   r  r   s          r%   r9   z$NegatedExpression.resolve_expression  sD     7-;y(
 x**M5AHIIr,   c                     |j                   j                  j                  }|j                   j                  j                  s# || j
                        rdj                  |      }||fS NzCASE WHEN {} THEN 1 ELSE 0 END)r   r  r  r  r  r   r{  )r    r!   r#   r$   $expression_supported_in_where_clauses        r%   r/  zNegatedExpression.select_format'  s[    
 ##TT 	- ##,,SS4T__E299#>CF{r,   r4  )
r'   r(   r)   r*   r   r   r   r9   r/  r  r  s   @r%   r   r     s'    ;I&$" SXr,   r   zdjango.db.models.Whenc                   r     e Zd ZdZdZd fd	Zd Zd Zd Zd Z		 d fd	Z
d	 Zdd
Zd Zed        Z xZS )Whenz"WHEN %(condition)s THEN %(result)sFc                 2   |r+|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        || _        | j                  |      d   | _	        y )Nrb   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   re   r  r   r   ry  r   	conditionr   rk  )r    r  thenlookupsr   s       r%   r   zWhen.__init__=  s     %&\\47	M59%&y%<G%<d7	GI}e$LPW"  i#IPQQd+"--d3A6r,   c                 :    d| j                   d| j                  S )NzWHEN z THEN r  rk  rE   s    r%   r~  zWhen.__str__N  s    $(NNDKK@@r,   c                 <    d| j                   j                  d| dS N<z: >r   r'   rE   s    r%   r|  zWhen.__repr__Q      !^^44d;;r,   c                 2    | j                   | j                  gS r   r  rE   s    r%   r   zWhen.get_source_expressionsT  s    ,,r,   c                 "    |\  | _         | _        y r   r  r   s     r%   r   zWhen.set_source_expressionsW  s    &+#r,   c                     t         |   |||||      }|r1|j                  %| j                  j                  ||||d      |_        |S )NF)r   )ry  r9   r  r  s          r%   r9   zWhen.resolve_expressionZ  sW     G&uk5)XV/ ..;;{E9u < AK r,   c                 0    | j                   j                  gS r   )rk  r   rE   s    r%   r   zWhen.get_source_fieldsf  s    1122r,   c                    |j                   j                  |        |}g }|j                  | j                        \  }}||d<   |j                  | j                        \  }	}
|	|d<   |xs | j
                  }||z  g |||
fS )Nr  rk  )r  r  r  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_sqlj  s    //5'
*2*:*:4>>*J'''4$$,$4$4T[[$A!
M$.!,t}}/) ,
,
,
 ,
 
 	
r,   c                 r    g }| j                         D ]!  }|j                  |j                                # |S r   rv  r  s      r%   r  zWhen.get_group_by_colsy  s9    113 	4FKK0023	4r,   c                 ^    | j                   j                  xr | j                  j                  S r   )r  r9  rk  rE   s    r%   r9  zWhen.allowed_default  s!    ~~--M$++2M2MMr,   NNr4  r   )r'   r(   r)   r  rb   r   r~  r|  r   r   r9   r   r   r  r   r9  r  r  s   @r%   r  r  7  sX    3HK7"A<-, SX
3
 N Nr,   r  zdjango.db.models.Casec                   x     e Zd ZdZdZdZddd fd
Zd Zd Zd	 Z	d
 Z
 fdZ	 ddZ fdZed        Z xZS )Casez
    An SQL searched CASE expression:

        CASE
            WHEN n > 0
                THEN 'positive'
            WHEN n < 0
                THEN 'negative'
            ELSE 'zero'
        END
    z#CASE %(cases)s ELSE %(default)s ENDr  N)defaultr   c                    t        d |D              st        d      t        |   |       t	        |      | _        | j                  |      d   | _        || _        y )Nc              3   <   K   | ]  }t        |t                y wr   )r   r  )r   cases     r%   r   z Case.__init__.<locals>.<genexpr>  s     <d:dD)<r   z.Positional arguments must all be When objects.r   )	r  r  ry  r   r~  casesr   r  r  )r    r  r   r  r  r   s        r%   r   zCase.__init__  sS    <e<<LMM&%[
..w7:
r,   c                 f    ddj                  d | j                  D              d| j                  S )NzCASE r   c              3   2   K   | ]  }t        |        y wr   r  )r   r   s     r%   r   zCase.__str__.<locals>.<genexpr>  s     1c!f1r  z, ELSE )r  r  r  rE   s    r%   r~  zCase.__str__  s)    II1djj11LL
 	
r,   c                 <    d| j                   j                  d| dS r  r  rE   s    r%   r|  zCase.__repr__  r  r,   c                 6    g | j                   | j                  S r   r  r  rE   s    r%   r   zCase.get_source_expressions  s    **T\\**r,   c                 "    |^ | _         | _        y r   r  r   s     r%   r   zCase.set_source_expressions  s    $)!T\r,   c                 L    t         |          }|j                  d d  |_        |S r   )ry  r   r  )r    r   r   s     r%   r   z	Case.copy  s"    GLN''!*r,   c                 ~   |j                   j                  |        | j                  s|j                  | j                        S i | j
                  |}g }g }| j                  D ]9  }		 |j                  |	      \  }
}|j                  |
       |j                  |       ; | j                  }|r|j                  |      \  }}n>t        |t              r|j                  x}ddlm}  |||      }|j                  |      S |xs | j                   }|j#                  |      |d<   ||d<   |j                  |       |xs |j%                  d| j&                        }||z  }| j                  (|j                   j)                  | j*                        |z  }||fS # t        $ r Y @t        $ r |	j                  }Y  w xY w)Nr   )Castr  r  r  )r  r  r  r  r  r  r   r   rk  rZ  r  r   r;   r   django.db.models.functionsr  case_joinerr  r	  r  unification_cast_sqlr   )r    r!   r   r  r  r"   r  
case_partsr  r  case_sqlcase_paramsr  default_sqldefault_paramsr   r  r#   s                     r%   r   zCase.as_sql  s    	//5zz##DLL119TZZ9=9

JJ 	#D(0(8(8(>%+ h'k*	# llG*2*:*:7*C'K 7E*%,%B%BB\O;w5##G,,!5T%5%5#.#3#3J#? %0	".)M22:t}}M(%%1..55d6G6GH3NCJ; "   ++s   'F	F<#F<;F<c                 l    | j                   s| j                  j                         S t        | 	         S r   )r  r  r  ry  )r    r   s    r%   r  zCase.get_group_by_cols  s+    zz<<1133w(**r,   c                 j    | j                   j                  xr t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr   r  )r   case_s     r%   r   z'Case.allowed_default.<locals>.<genexpr>  s      4
&+E!!4
r  )r  r9  r  r  rE   s    r%   r9  zCase.allowed_default  s1    ||++ 
 4
/3zz4
 1
 	
r,   r  )r'   r(   r)   r*   r  r  r   r~  r|  r   r   r   r   r  r   r9  r  r  s   @r%   r  r    s]    
 5HK'+$ 
<+* @D)V+
 
 
r,   r  c                   ~     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 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|      j                         | _        d| j                  _        |j	                  d| j
                        | _        || _        t        | !  |       y )Nr   Tr  )	re   r  r   r   r   r  r  ry  r   )r    querysetr   r  r   s       r%   r   zSubquery.__init__  sR    Xw9??A
"

		*dmm<
&r,   c                     | j                   gS r   r   rE   s    r%   r   zSubquery.get_source_expressions  s    

|r,   c                     |d   | _         y r  r  r   s     r%   r   zSubquery.set_source_expressions  s    1X
r,   c                 .    | j                   j                  S r   )r   r   rE   s    r%   r   zSubquery._resolve_output_field  s    zz&&&r,   c                    t        |   |i |}t        |       t        u r| j                  t        j                  k(  rd|j
                  _        	 | j                   | j                  rUt        | j                        t        |j
                  j                        ur!t        |j
                  | j                        S |j
                  S |S # t        $ r |j
                  cY S w xY w)NTr   )
ry  r9   rR  r  r  r   r   r   r  r  )r    r[  r!  r  r   s       r%   r9   zSubquery.resolve_expression  s    7-t>v>:!dmmx7H7H&H/3HNN,&!!   T$*;*;%<D++E & )dFWFWXX>>! " &~~%&s   C C$#C$c                 b    t         |          }|j                  j                         |_        |S r   )ry  r   r   r  )r    r  r   s     r%   r   zSubquery.copy  s'    kk'')r,   c                 .    | j                   j                  S r   )r   external_aliasesrE   s    r%   r  zSubquery.external_aliases  s    zz***r,   c                 6    | j                   j                         S r   )r   get_external_colsrE   s    r%   r  zSubquery.get_external_cols  s    zz++--r,   c                     |j                   j                  |        i | j                  |}| j                  j	                  ||      \  }}|dd |d<   |xs |j                  d| j                        }||z  }||fS )Nr  rB   r   r  )r  r  r  r   r   r	  r  )	r    r!   r   r  r"   r  subquery_sqlr  r#   s	            r%   r   zSubquery.as_sql"  s    //59TZZ9=9#'::#4#4Xz#J j&21R&8
#M22:t}}M(Jr,   c                 :    | j                   j                  |       S )N)wrapper)r   r  rE   s    r%   r  zSubquery.get_group_by_cols,  s    zz++D+99r,   r   )r'   r(   r)   r*   r  r   r6  r   r   r   r   r   r9   r   r;  r  r  r   r  r  r  s   @r%   r  r    sa    
  H!H''"
 + +.:r,   r  c                   X     e Zd ZdZ ej
                         ZdZ fdZd Z	 fdZ
 xZS )ExistszEXISTS(%(subquery)s)Fc                 d    t        |   |fi | | j                  j                         | _        y r   )ry  r   r   exists)r    r  r!  r   s      r%   r   zExists.__init__5  s)    ,V,ZZ&&(
r,   c                 l    |j                   j                  j                  sdj                  |      }||fS r  )r   r  r  r{  r0  s       r%   r/  zExists.select_format9  s3     ""++RR299#>CF{r,   c                     	 t        |   |g|i |S # t        $ rA |j                  j                  }|j
                  sY y|j                  t        d            cY S w xY w)N)z1=0r+   F)ry  r   r   r   r  r  r  r;   )r    r!   r[  r!  r  r   s        r%   r   zExists.as_sqlA  sb    	27>(<T<V<< 	2**33HBB ##E%L11		2s    +A A A )r'   r(   r)   r  r   r   r   r6  r   r/  r   r  r  s   @r%   r  r  0  s2    %H&6&&(L")2 2r,   r  zdjango.db.models.OrderByc                   \    e Zd ZdZdZdZdZddZd Zd Z	d Z
dd	Zd
 Zd Zd Zd Zd Zy)r  z%(expression)s %(ordering)sFTNc                     |r|rt        d      |du s|du rt        d      || _        || _        || _        t	        |d      st        d      || _        y )Nz1nulls_first and nulls_last are mutually exclusiveFz7nulls_first and nulls_last values must be True or None.r9   z%expression must be an expression type)r   nulls_first
nulls_lastr&  r:   r   )r    r   r&  r  r  s        r%   r   zOrderBy.__init__R  sb    :PQQ%:#6VWW&$$z#78DEE$r,   c                 x    dj                  | j                  j                  | j                  | j                        S )Nz{}({}, descending={}))r{  r   r'   r   r&  rE   s    r%   r|  zOrderBy.__repr__^  s.    &--NN##T__doo
 	
r,   c                     |d   | _         y r  r8  r   s     r%   r   zOrderBy.set_source_expressionsc  r  r,   c                     | j                   gS r   r8  rE   s    r%   r   zOrderBy.get_source_expressionsf  r9  r,   c                    t        | j                  t              rg }g }| j                  j                         D ][  }| j	                         } |j
                  |g       |j                  |      \  }	}
|j                  |	       |j                  |
       ] dj                  |      |fS |xs | j                  }|j                  j                  r$| j                  rd|z  }ny| j                  rmd|z  }ng| j                  r(| j                  r|j                  j                   sd|z  }n3| j                  r'| j                  s|j                  j                   sd|z  }|j"                  j%                  |        |j                  | j                        \  }}|| j                  rdndd|}||j'                  d	      z  }||z  j)                         |fS )
Nr   z%s NULLS LASTz%s NULLS FIRSTz%%(expression)s IS NULL, %sz%%(expression)s IS NOT NULL, %sDESCASC)r   orderingz%(expression)s)r   r   r   rS  r   r   r  rZ  r  r  r  r   supports_order_by_nulls_modifierr  r  r&  order_by_nulls_firstr  r  countrstrip)r    r!   r   r  r"   r  r$   r  r   r#   
col_paramsexpression_sqlplaceholderss                r%   r   zOrderBy.as_sqli  s   doox0IF//1 *yy{+++SE2"*"2"24"8Z  %j)* 99Y'//,t}}??*X5!!+h6J$7$7$L$L88C!!OO
(;(;(P(P<xG//5!)!1!1$//!B("&//u
 

 	(..!122<'//1699r,   c                 0   |j                   j                  so|j                  j                  | j                        rJ| j                         }t        t        | j                  d      d      |_         |j                  ||      S | j                  ||      S )NT)r  F)r  )	r  r  r  r  r   r   r  r  r   )r    r!   r   r   s       r%   	as_oraclezOrderBy.as_oracle  s|     ##JJOO 99;D"T__40DO 4;;x44{{8Z00r,   c                 r    g }| j                         D ]!  }|j                  |j                                # |S r   rv  r  s      r%   r  zOrderBy.get_group_by_cols  s9    113 	4FKK0023	4r,   c                     | j                    | _         | j                  rd| _        d | _        | S | j                  rd| _        d | _        | S r~   )r&  r  r  rE   s    r%   r*  zOrderBy.reverse_ordering  sL    "oo-"DO#D  __#D"DOr,   c                     d| _         y rH   r|  rE   s    r%   r"  zOrderBy.asc  s	    r,   c                     d| _         y r~   r|  rE   s    r%   r'  zOrderBy.desc  s	    r,   )FNNr   )r'   r(   r)   r  rb   r2  r   r   r|  r   r   r   r  r  r*  r"  r'  r+   r,   r%   r  r  K  sK    ,HK',$#' 
%

#!":H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)FTc                    || _         || _        || _        t        |dd      s"t	        d|j
                  j                  z        | j                   It        | j                   t        t        f      s| j                   f| _         t        | j                    | _         t        j                  d| j                        | _        t        | 9  |       | j                  |      d   | _        y )Nr8  Fz3Expression '%s' isn't compatible with OVER clauses.zWindow.order_byr   r   )partition_byorder_byframere   r   r   r'   r   rJ  r~  ro  ry  r  ry  r   r   source_expression)r    r   r  r  r  r   r   s         r%   r   zWindow.__init__  s     ) 
z#6>E&&//0 
 (d//%?%)%6%6$8! .0A0A BD#../@$--Pl3!%!8!8!DQ!Gr,   c                 .    | j                   j                  S r   )r  r   rE   s    r%   r   zWindow._resolve_output_field  s    %%222r,   c                 ^    | j                   | j                  | j                  | j                  gS r   r  r  r  r  rE   s    r%   r   zWindow.get_source_expressions  s%    &&(9(94==$**UUr,   c                 :    |\  | _         | _        | _        | _        y r   r	  r   s     r%   r   zWindow.set_source_expressions  s    OTL 14=$*r,   c                    |j                   j                  |        |j                  j                  st	        d      |j                  | j                        \  }}g d}}| j                  @| j                  j                  ||d      \  }}	|j                  |       |t        |	      z  }| j                  =|j                  | j                        \  }
}|j                  |
       |t        |      z  }| j                  r=|j                  | j                        \  }}|j                  |       |t        |      z  }|xs | j                  }||dj                  |      j                         dz  g ||fS )Nz1This backend does not support window expressions.r+   zPARTITION BY %(expressions)s)r!   r   r  r  )r   window)r  r  r  supports_over_clauser   r  r  r  r   rZ  rJ  r  r  r  r  strip)r    r!   r   r  expr_sqlr$   
window_sqlwindow_paramssql_exprr  	order_sqlorder_params	frame_sqlframe_paramss                 r%   r   zWindow.as_sql  sj   //5""77#$WXX#++D,B,BC&$&M
(#'#4#4#;#;!%7 $< $ Hj
 h'U:..M==$&.&6&6t}}&E#I|i(U<00M::&.&6&6tzz&B#I|i(U<00M,t}} h#((::N:T:T:VWW%f%}%
 	
r,   c                 6   t        | j                  t        j                        rc| j	                         } |j
                         }t        j                         |d   _         |j                  |       t        t        |+  ||      S | j                  ||      S r  )r   r   r   r   r   r   r   r   ry  r  r&   r   )r    r!   r   r   r   r   s        r%   r&   zWindow.as_sqlite  s    d'')<)<=99;D!<!<!<!>171B1B1Dq!.'D''(:;0:FF{{8Z00r,   c           	          dj                  t        | j                        | j                  rdt        | j                        z   ndt        | j                  xs d      t        | j
                  xs d            S )Nz{} OVER ({}{}{})zPARTITION BY rs  )r{  r   r  r  r  r  rE   s    r%   r~  zWindow.__str__  sb    !((&&'8<8I8IOc$"3"344r#$

 b!	
 	
r,   c                 <    d| j                   j                  d| dS r  r  rE   s    r%   r|  zWindow.__repr__  r  r,   c                     g }| j                   r)|j                  | j                   j                                | j                  )|j                  | j                  j                                |S r   )r  r  r  r  )r    rw  s     r%   r  zWindow.get_group_by_cols  sX      !2!2!D!D!FG==$  !@!@!BCr,   )NNNNr   )r'   r(   r)   r  r   r   r   r   r   r   r   r&   r~  r|  r  r  r  s   @r%   r  r    sU    1H 
 H63VU
B1
<r,   r  c                   "    e Zd ZdZdZdZdZd Zy)WindowFrameExclusionzCURRENT ROWGROUPTIESz	NO OTHERSc                 L    | j                   j                   d| j                   S )Nr  )r   r)   _name_rE   s    r%   r|  zWindowFrameExclusion.__repr__&  s"    ..--.a}==r,   N)r'   r(   r)   CURRENT_ROWr  r  	NO_OTHERSr|  r+   r,   r%   r  r     s    KEDI>r,   r  c                   L    e Zd ZdZdZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zy)WindowFrameaV  
    Model the frame clause in window expressions. There are two types of frame
    clauses which are subclasses, however, all processing and validation (by no
    means intended to be complete) is done here. Thus, providing an end for a
    frame is optional (the default is UNBOUNDED FOLLOWING, which is the last
    row in the frame).
    z7%(frame_type)s BETWEEN %(start)s AND %(end)s%(exclude)sNc                     t        |      | _        t        |      | _        t        |t        t
        f      s"t        | j                  j                   d      || _	        y )Nz3.exclusion must be a WindowFrameExclusion instance.)
r;   r  endr   r	   r  r  r   r)   	exclusion)r    r  r&  r'  s       r%   r   zWindowFrame.__init__5  sX    5\
:)h0D%EF>>../ 01 1  #r,   c                 "    |\  | _         | _        y r   r  r&  r   s     r%   r   z"WindowFrame.set_source_expressions?  s    $
DHr,   c                 2    | j                   | j                  gS r   r)  rE   s    r%   r   z"WindowFrame.get_source_expressionsB  s    

DHH%%r,   c                 N    | j                   yd| j                   j                   S )Nrs  z	 EXCLUDE )r'  r   rE   s    r%   get_exclusionzWindowFrame.get_exclusionE  s'    >>!4>>//011r,   c                 j   |j                   j                  |        | j                  || j                  j                  | j
                  j                        \  }}| j                  r!|j                  j                  st        d      | j                  | j                  ||| j                         dz  g fS )Nz6This backend does not support window frame exclusions.
frame_typer  r&  exclude)r  r  window_frame_start_endr  r   r&  r'  r  supports_frame_exclusionr   r  r/  r,  )r    r!   r   r  r&  s        r%   r   zWindowFrame.as_sqlJ  s    //500

(($((..

s >>*"5"5"N"N#H  MM"oo--/	 	
 		
r,   c                 <    d| j                   j                  d| dS r  r  rE   s    r%   r|  zWindowFrame.__repr__^  r  r,   c                     g S r   r+   rE   s    r%   r  zWindowFrame.get_group_by_colsa  r   r,   c                 &   | j                   j                  V| j                   j                  dk  r=dt        | j                   j                        t        j                  j
                  fz  }n| j                   j                  4| j                   j                  dk(  rt        j                  j                  }n}| j                   j                  M| j                   j                  dkD  r4d| j                   j                  t        j                  j                  fz  }nt        j                  j                  }| j                  j                  M| j                  j                  dkD  r4d| j                  j                  t        j                  j                  fz  }n| j                  j                  4| j                  j                  dk(  rt        j                  j                  }n| j                  j                  V| j                  j                  dk  r=dt        | j                  j                        t        j                  j
                  fz  }nt        j                  j                  }| j                  | j                  ||| j                         dz  S )Nr   z%d %sr.  )r  r   absr   r  	PRECEDINGr!  	FOLLOWINGUNBOUNDED_PRECEDINGr&  UNBOUNDED_FOLLOWINGr  r/  r,  )r    r  r&  s      r%   r~  zWindowFrame.__str__d  s   ::'DJJ,<,<q,@s4::#3#34jnn6N6NOOEZZ)djj.>.>!.CNN..EZZ)djj.>.>.Btzz//1I1IJJENN66E88>>%$((..1*<TXX^^Z^^-E-EFFCXX^^'DHHNNa,?..,,CXX^^'DHHNNQ,>S0*..2J2JKKC..44C}}//))+	 
 
 	
r,   c                     t        d      )Nz3Subclasses must implement window_frame_start_end().r   r    r   r  r&  s       r%   r1  z"WindowFrame.window_frame_start_end}  s    !"WXXr,   r  )r'   r(   r)   r*   r  r   r   r   r,  r   r|  r  r~  r1  r+   r,   r%   r$  r$  *  s=     IH#%&2

(<
2Yr,   r$  c                       e Zd ZdZd Zy)RowRangeROWSc                 :    |j                   j                  ||      S r   )r  window_frame_rows_start_endr<  s       r%   r1  zRowRange.window_frame_start_end  s    ~~99%EEr,   Nr'   r(   r)   r/  r1  r+   r,   r%   r>  r>    s    JFr,   r>  c                       e Zd ZdZd Zy)
ValueRangeRANGEc                 :    |j                   j                  ||      S r   )r  window_frame_range_start_endr<  s       r%   r1  z!ValueRange.window_frame_start_end  s    ~~::5#FFr,   NrB  r+   r,   r%   rD  rD    s    JGr,   rD  )ir   r  rb  collectionsr   decimalr   enumr   	itertoolsr   typesr	   uuidr
   django.core.exceptionsr   r   r   	django.dbr   r   r   django.db.modelsr   django.db.models.constantsr   django.db.models.query_utilsr   django.utils.deconstructr   django.utils.functionalr   r   django.utils.hashabler   django.utils.inspectr   r   r.   r   r   r>  rJ   rD   rV   rZ   r^   PositiveIntegerFieldrP   r   r   r   rj   r{   rn   rq   rv   r~  from_iterabler  r  r  r  _connector_combinationsrh  rl  drM  r>   field_typesri  rj  rk  rc  ru  r<   r  r  r   r  r  r  r  r;   r   r/  r3  rA  r   rb  ro  ry  r  r   r  r  r  r  r  r  r  r$  r>  rD  )r>   s   0r%   <module>r\     s)      #      L L B B # 1 * 4 B / *  A' A'H	Z 	V Vr
 *# *# *#B NNNNNNNNNN
  	++++++
 	
0 NNNNNN NNNNNN	
  	  &"5"5v7J7JK 1 163D3DE  &"5"5v7J7JK
 	
4 NNNNNNNNNN
  	  &"5"5v7J7JK  &"5"5v7J7JK  &"3"3V5F5FG 3 3V5F5FG	
 	
* ##$$
	  	  &"5"5v7J7JK
 	
2 NNNNNNNNNNNN
  	4E   ''''%%#  	
 		
, 	v33V5I5IJ!!6#7#79M9MN!!6#3#3V5I5IJ!!6#7#79M9MN!!6#7#79M9MNv33V5E5EF!!6#3#3V5E5EF
 	v33V5I5IJ!!6#7#79M9MNv//1E1EFv33V5I5IJ!!6#3#3V5I5IJ!!6#7#79M9MN!!6#7#79M9MNv33V5E5EFv//1E1EF
Ow r %T* 	A 
! DA"#'') D	; + 	DCf&sIsFC	DDD S!! "!TE+Z TEn0+ 0f
, 
 *+=
 = ,=@"q "J
q 
6UQ 6Ur -.ZYz ZY /ZYz ./M
 M 0M` 
Z  
F: %j %P$6* $6N6z 6r&* &RT 8
. 
> :;!/*J !/ <!/H0) 0f -.JN: JN /JNZ -.`
z `
 /`
FD:~z D:N2X 26 01fj f 2fRh hV>4 >TY* TYnF{ FG GQ2"$ s!   &,_A0_	B_,_

A_