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


 
 


 
 

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

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

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

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

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

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

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

        Return: an Expression to be added to the query.
        c                 H    g | ]}|r|                               nd S r   r   )r   r   allow_joinsqueryreuse	summarizes     r$   r   z5BaseExpression.resolve_expression.<locals>.<listcomp>$  sL         D++E;yQQQ	  r+   )r   
is_summaryr   r   r   r   r   r   r   for_savecs    ````  r$   r7   z!BaseExpression.resolve_expression  s~    " IIKK 	         4466  		
 		
 		
 r+   c                 @    t          | j        t          j                  S r   )r   r   r   BooleanFieldrC   s    r$   r`   zBaseExpression.conditional/  s    $+V-@AAAr+   c                     | j         S r   r   rC   s    r$   fieldzBaseExpression.field3  s      r+   c                 ^    |                                  }|d| _        t          d          |S )z+Return the output type of this expressions.NTz4Cannot resolve expression type, unknown output_field)_resolve_output_field_output_field_resolved_to_noner   r   s     r$   r   zBaseExpression.output_field7  s8     113326D/STTTr+   c                 D    	 | j         S # t          $ r | j        s Y dS w xY w)z
        Return the output field of this expression, or None if
        _resolve_output_field() didn't return an output type.
        N)r   r   r   rC   s    r$   _output_field_or_nonez$BaseExpression._output_field_or_none@  sH    	$$ 	 	 	6   	s   	 c           	          d |                                  D             }|D ]I}|D ]A}t          ||j                  s*t          d|j        j        d|j        j        d          B|c S dS )a}  
        Attempt to infer the output type of the expression.

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

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


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

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

 
 
 _
 
 
 _
 SX   > B B XB ! ! X!   _ 	 	 _	     <   \ ( ( _(,4 4 45 5 5             P P P' ' '8 8 8          r+   r   c                   x    e Zd ZdZe ej        d          d                         Zed             Z	d Z
d ZdS )	
Expressionz:An expression that can be combined with other expressions.   maxsizec                 4    t          j        | j                  S r   )inspect	signaturer   )clss    r$   _constructor_signaturez!Expression._constructor_signature  s      ...r+   c                     | j         \  }} | j        j        | g|R i |}|                                 t	          |j                                                  }t          |           | j        g}|D ]|\  }}t          |t          j                  r7|j        r |j        r|j        j        j        |j        f}nt!          |          }nt#          |          }|                    ||f           }t'          |          S r   )_constructor_argsrI  bind_partialapply_defaultsiter	argumentsitemsnextr   r   r   Fieldr   model_metalabeltyper   appendtuple)r   argsr$  rG  rO  identityr   r   s           r$   rZ  zExpression.identity  s   -f<D/<TSDSSSFSS	  """,224455	YN## 	* 	*JC%.. -: (%+ ("[.4ejAEE KKEE%e,,OOS%L))))Xr+   c                 Z    t          |t                    st          S |j        | j        k    S r   )r   rA  r9  rZ  rI   s     r$   __eq__zExpression.__eq__  s)    %,, 	"!!~..r+   c                 *    t          | j                  S r   )hashrZ  rC   s    r$   __hash__zExpression.__hash__  s    DM"""r+   N)r&   r'   r(   r)   r   	functools	lru_cacherI  r   rZ  r\  r_  r*   r+   r$   rA  rA    s        DDY%%%/ / &% ]/   _$/ / /
# # # # #r+   rA  c                 X    i | ]'}|t           j        t           j        t           j        fg(S r*   )r   PositiveIntegerFieldr   r<   s     r$   
<dictcomp>re  (  sF         	+++
  r+   c                     i | ]k}|t           j        t           j        t           j        ft           j        t           j        t           j        ft           j        t           j        t           j        fglS r*   )r   r   r   r   rd  s     r$   re  re  9  sh         	 &"5v7JK 163DE &"5v7JK
  r+   c           	      $   i | ]}|t           j        t           j        t           j        ft           j        t           j        t           j        ft           j        t           j        t           j        ft           j        t           j        t           j        fgS r*   )r   r   r   r   rd  s     r$   re  re  K  s{         	 &"5v7JK &"5v7JK &"3V5FG 3V5FG	
  r+   c                 X    i | ]'}|t           j        t           j        t           j        fg(S r*   )r   r   rd  s     r$   re  re  [  sB         	 &"5v7JK
  r+   c                     i | ]O}|t          t          j        d  t          j        t          j        t          j        fD                                 PS )c              3   >   K   | ]}|t           |ft           ||fgV  d S r   r   )r   
field_types     r$   r   z<dictcomp>.<genexpr>j  sI           h
3h
J5WX           r+   )listr   from_iterabler   r   r   r   rd  s     r$   re  re  h  sx         	4     ''%#       	
 	
  r+   c                 L    t           |                             | ||f           dS )z
    Register combinable types:
        lhs <connector> rhs -> result
    e.g.
        register_combinable_fields(
            IntegerField, Combinable.ADD, FloatField, FloatField
        )
    N)_connector_combinatorsrW  )lhsr<   rhsresults       r$   register_combinable_fieldsrs    s*     9%,,c3-?@@@@@r+   rB  rC  c                     t                               | d          }|D ]*\  }}}t          ||          rt          ||          r|c S +d S )Nr*   )ro  r  
issubclass)r<   lhs_typerhs_typecombinatorscombinator_lhs_typecombinator_rhs_typecombined_types          r$   _resolve_combined_typer|    sr    (,,Y;;KCN ! !?0-h 344 	!):
 :
 	! !   	! !r+   c                   d     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z		 ddZ
ed             Z xZS )r:   Nc                 v    t                                          |           || _        || _        || _        d S Nr   )superr   r<   rp  rq  )r   rp  r<   rq  r   r   s        r$   r   zCombinedExpression.__init__  s7    l333"r+   c                 B    d                     | j        j        |           S )Nz<{}: {}>)formatr   r&   rC   s    r$   __repr__zCombinedExpression.__repr__  s      !8$???r+   c                 N    d                     | j        | j        | j                  S )Nz{} {} {})r  rp  r<   rq  rC   s    r$   __str__zCombinedExpression.__str__  s       4>48DDDr+   c                     | j         | j        gS r   rp  rq  rC   s    r$   r   z)CombinedExpression.get_source_expressions  s    $(##r+   c                 $    |\  | _         | _        d S r   r  r   s     r$   r   z)CombinedExpression.set_source_expressions  s    "$(((r+   c           	      .   t          | j        t          | j        j                  t          | j        j                            }|Ft          d| j        d| j        j        j        j	         d| j        j        j        j	         d           |            S )NzCannot infer type of z# expression involving these types: r   r   )
r|  r<   rV  rp  r   rq  r   r   r   r&   )r   r{  s     r$   r   z(CombinedExpression._resolve_output_field  s     /N/00/00
 

  ! ! !(/9B! !8(2;! ! !   }r+   c                 x   g }g }|                     | j                  \  }}|                    |           |                    |           |                     | j                  \  }}|                    |           |                    |           d}|j                            | j        |          }||z  |fS Nz(%s))compilerp  rW  r  rq  opscombine_expressionr<   )r   r    r   r   expression_paramsr"   r#   expression_wrappers           r$   r   zCombinedExpression.as_sql  s    &&tx00V3  (((&&tx00V3  (((#n//LL!C'):::r+   TFc                    | j                             |||||          }| j                            |||||          }t          | t          t
          f          s	 |j                                        }n# t          t          f$ r d }Y nw xY w	 |j                                        }	n# t          t          f$ r d }	Y nw xY wd||	hv r=||	k    r7t	          | j         | j
        | j                                      |||||          S h d}
| j
        | j        k    r;||
v r7||	k    r1t          | j         | j                                      |||||          S |                                 }||_        ||_         ||_        |S )NDurationField>   	DateField	TimeFieldDateTimeField)rp  r7   rq  r   DurationExpressionTemporalSubtractionr   r   AttributeErrorr   r<   rN   r   r   )r   r   r   r   r   r   rp  rq  rv  rw  datetime_fieldsr   s               r$   r7   z%CombinedExpression.resolve_expression  s    h));y(
 
 h));y(
 
 $!35H IJJ 	 +==??"J/        +==??"J/       8X"6668x;O;O)Hdndh $$  JIIO$(**//((*48TX>>QQ   IIKK s$   A4 4B
	B
B( (B>=B>c                 2    | j         j        o| j        j        S r   )rp  r=  rq  rC   s    r$   r=  z"CombinedExpression.allowed_default  s    x'DDH,DDr+   r   r8  )r&   r'   r(   r   r  r  r   r   r   r   r7   r   r=  __classcell__r   s   @r$   r:   r:     s             @ @ @E E E$ $ $# # #  "; ; ; SX- - - -^ E E _E E E E Er+   r:   c                   *     e Zd Zd Z fdZd Z xZS )r  c                     	 |j         }|                                dk    r4|                    |          \  }}|j                            |          |fS n# t
          $ r Y nw xY w|                    |          S )Nr  )r   r   r  r  format_for_duration_arithmeticr   )r   sider    r   outputr"   r#   s          r$   r  zDurationExpression.compile#  s    	R&F ''))_<<&..t44V!~DDSII6QQ =  	 	 	D	 %%%s   A 
A#"A#c                    |j         j        r"t                                          ||          S |j                            |            g }g }|                     | j        ||          \  }}|                    |           |	                    |           |                     | j
        ||          \  }}|                    |           |	                    |           d}|j                            | j        |          }||z  |fS r  )featureshas_native_duration_fieldr  r   r  check_expression_supportr  rp  rW  r  rq  combine_duration_expressionr<   )	r   r    r   r   r  r"   r#   r  r   s	           r$   r   zDurationExpression.as_sql.  s    8 	877>>(J777//555ll48XzBBV3  (((ll48XzBBV3  (((#n88UU!C'):::r+   c                 ^    | j         ||fi |\  }}| j        t          j        t          j        hv ry	 | j        j                                        }| j        j                                        }h d}||vs||vrt          d| j         d          n# t          t          f$ r Y nw xY w||fS )N>   r   r   r   r  zInvalid arguments for operator .)r   r<   r-   rB   rT   rp  r   r   rq  r   r  r   )	r   r    r   r!   r"   r#   rv  rw  allowed_fieldss	            r$   r%   zDurationExpression.as_sqlite?  s    !dk(JHH-HHV>jnjn===80BBDD80BBDD" " " >11X^5S5S'K$.KKK   6T #J/    F{s   <B B('B()r&   r'   r(   r  r   r%   r  r  s   @r$   r  r  "  sV        	& 	& 	&; ; ; ; ;"      r+   r  c                   B     e Zd Z ej                    Z fdZd Z xZS )r  c                 X    t                                          || j        |           d S r   )r  r   rN   )r   rp  rq  r   s      r$   r   zTemporalSubtraction.__init__X  s'    dh,,,,,r+   c                    |j                             |            |                    | j                  }|                    | j                  }|j                             | j        j                                        ||          S r   )r  r  r  rp  rq  subtract_temporalsr   r   )r   r    r   rp  rq  s        r$   r   zTemporalSubtraction.as_sql[  st    //555tx((tx((~00H!3355sC
 
 	
r+   )	r&   r'   r(   r   r  r   r   r   r  r  s   @r$   r  r  U  sW        '6'))L- - - - -
 
 
 
 
 
 
r+   r  zdjango.db.models.F)pathc                   \    e Zd ZdZdZd Zd Zd Zd Z	 dd	Z	d
 Z
d Zd Zd Zd Zd ZdS )r   zDAn object capable of resolving references to existing query objects.Fc                     || _         dS )z^
        Arguments:
         * name: the name of the field this expression references
        N)r   r   s     r$   r   z
F.__init__j  s    
 			r+   c                 L    d                     | j        j        | j                  S N{}({}))r  r   r&   r   rC   s    r$   r  z
F.__repr__q  s    t~6	BBBr+   c                 "    t          | |          S r   )Sliced)r   	subscripts     r$   __getitem__zF.__getitem__t  s    dI&&&r+   c                 <    t          d| j        j         d          )Nzargument of type 'z' is not iterable)	TypeErrorr   r&   rI   s     r$   __contains__zF.__contains__w  s#     WT^-DWWWXXXr+   NTc                 <    |                     | j        |||          S r   )resolve_refr   r   r   r   r   r   r   s         r$   r7   zF.resolve_expression|  s        K	JJJr+   c                 .    |                     | |           S r   )r  )r   r
  s     r$   r	  zF.replace_expressions  s    d+++r+   c                     t          | fi |S r   r!  r#  s     r$   r%  zF.asc  r&  r+   c                      t          | fddi|S r(  r!  r#  s     r$   r*  zF.desc  r+  r+   c                 B    | j         |j         k    o| j        |j        k    S r   )r   r   rI   s     r$   r\  zF.__eq__  s    ~0LTY%*5LLr+   c                 *    t          | j                  S r   )r^  r   rC   s    r$   r_  z
F.__hash__  s    DIr+   c                 *    t          j         |           S r   r  rC   s    r$   r   zF.copy  r  r+   r8  )r&   r'   r(   r)   r=  r   r  r  r  r7   r	  r%  r*  r\  r_  r   r*   r+   r$   r   r   d  s        NNO  C C C' ' 'Y Y Y SXK K K K
, , ,' ' '8 8 8M M M      r+   r   c                   <     e Zd ZdZdZdZd Z fdZd Zd Z	 xZ
S )ResolvedOuterRefz
    An object that contains a reference to an outer query.

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

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


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

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

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


r+   c                 0    | j         j         d| j        dS )Nr  r  )r   r&   r   rC   s    r$   r  zValue.__repr__}  s     .);;DJ;;;;r+   c                 ,   |j                             |            | j        }| j        }|`| j        r|                    ||          }n|                    ||          }t          |d          r|                    |||          |gfS |dg fS d|gfS )N)r   get_placeholderNULLz%s)	r  r  r   r   r   get_db_prep_saveget_db_prep_valuer8   r  )r   r    r   r  r   s        r$   r   zValue.as_sql  s    //555j1#} Q"33CJ3OO"44SZ4PP|%677 V#33C:NNQTPUUU; 2:cU{r+   c                 `    t                                          |||||          }||_        |S r   )r  r7   r   )r   r   r   r   r   r   r   r   s          r$   r7   zValue.resolve_expression  s0     GG&&uk5)XVV
r+   c                     g S r   r*   rC   s    r$   r  zValue.get_group_by_cols  r   r+   c                    t          | j        t                    rt          j                    S t          | j        t
                    rt          j                    S t          | j        t                    rt          j                    S t          | j        t                    rt          j
                    S t          | j        t          j                  rt          j                    S t          | j        t          j                  rt          j                    S t          | j        t          j                  rt          j                    S t          | j        t          j                  rt          j                    S t          | j        t&                    rt          j                    S t          | j        t*                    rt          j                    S t          | j        t.                    rt          j                    S d S r   )r   r   r   r   	CharFieldboolr   r   r   r   r   datetimer  dater  timer  	timedeltar  r   r   bytesBinaryFieldr
   	UUIDFieldrC   s    r$   r   zValue._resolve_output_field  s   dj#&& 	&#%%%dj$'' 	)&(((dj#&& 	)&(((dj%(( 	'$&&&dj("344 	*')))dj(-00 	&#%%%dj(-00 	&#%%%dj("455 	*')))dj'** 	)&(((dj%(( 	(%'''dj$'' 	&#%%%	& 	&r+   c                     | j         S r   )r   rC   s    r$   r:  zValue.empty_result_set_value  s
    zr+   r   r8  )r&   r'   r(   r)   r   r=  r   r  r   r7   r  r   r>  r:  r  r  s   @r$   r9   r9   h  s        CC HO
 
 
 
 
 
< < <  & SX       & & &0   X    r+   r9   c                   D     e Zd ZdZd	 fd	Zd Zd Zd Z	 d
 fd	Z xZ	S )RawSQLTNc                     |t          j                    }||c| _        | _        t	                                          |           d S r  )r   rR  r"   r#   r  r   )r   r"   r#   r   r   s       r$   r   zRawSQL.__init__  sE    !<>>L #V$+l33333r+   c                 X    d                     | j        j        | j        | j                  S Nr  )r  r   r&   r"   r#   rC   s    r$   r  zRawSQL.__repr__  s#    ""4>#:DHdkRRRr+   c                 $    d| j         z  | j        fS r  )r"   r#   r   s      r$   r   zRawSQL.as_sql  s     $+--r+   c                     | gS r   r*   rC   s    r$   r  zRawSQL.get_group_by_cols  	    vr+   Fc                 D   |j         rt|j         j        j        D ]b}|j        j        D ]S}|j                                        | j                                        v r|                    |j        |||            nTct                      
                    |||||          S r   )rS  rT  all_parentslocal_fieldscolumnlowerr"   r  r   r  r7   )	r   r   r   r   r   r   parentparent_fieldr   s	           r$   r7   zRawSQL.resolve_expression  s     ; 	++7  $*L$=  L#*0022dhnn6F6FFF))(-{E9   	 G
 ww));y(
 
 	
r+   r   r8  )
r&   r'   r(   r=  r   r  r   r  r7   r  r  s   @r$   r#  r#    s        O4 4 4 4 4 4S S S. . .   SX
 
 
 
 
 
 
 
 
 
r+   r#  c                       e Zd Zd Zd ZdS )Starc                     dS )Nz'*'r*   rC   s    r$   r  zStar.__repr__  s    ur+   c                 
    dg fS )Nr0   r*   r   s      r$   r   zStar.as_sql  s    Bwr+   N)r&   r'   r(   r  r   r*   r+   r$   r2  r2    s2              r+   r2  c                   @     e Zd ZdZd
 fd	Zd Zd Z	 ddZd	 Z xZ	S )DatabaseDefaultz^
    Expression to use DEFAULT keyword during insert otherwise the underlying expression.
    Nc                 X    t                                          |           || _        d S r   r  r   r   r   r   r   r   s      r$   r   zDatabaseDefault.__init__  s&    &&&$r+   c                     | j         gS r   r   rC   s    r$   r   z&DatabaseDefault.get_source_expressions        r+   c                     |\  | _         d S r   r;  r   s     r$   r   z&DatabaseDefault.set_source_expressions  s    "r+   TFc                 t    | j                             |||||          }|s|S t          || j                  S )N)r   r   r   r   r   r   )r   r7   r6  r   )r   r   r   r   r   r   resolved_expressions          r$   r7   z"DatabaseDefault.resolve_expression  s`     #o@@# A 
 
  	'&&d.H
 
 
 	
r+   c                 V    |j         j        s|                    | j                  S dg fS )NDEFAULT)r  "supports_default_keyword_in_insertr  r   r   s      r$   r   zDatabaseDefault.as_sql  s0    "E 	5##DO444"}r+   r   r8  )
r&   r'   r(   r)   r   r   r   r7   r   r  r  s   @r$   r6  r6    s         % % % % % %! ! !# # # SX
 
 
 
$      r+   r6  c                   F     e Zd ZdZdZd
 fd	Zd Zd Zd Zd Z	d	 Z
 xZS )ColTFNc                 r    ||}t                                          |           ||c| _        | _        d S r  )r  r   aliastarget)r   rF  rG  r   r   s       r$   r   zCol.__init__  s=    !Ll333"'
DKKKr+   c                     | j         | j        }}|r|t          |          fnt          |          f}d                    | j        j        d                    |                    S )Nr  r   )rF  rG  r   r  r   r&   r  )r   rF  rG  identifierss       r$   r  zCol.__repr__  sV    
DKv.3Guc&kk**#f++t~6		+8N8NOOOr+   c                     | j         | j        j        }}|r||fn|f}d                    t	          |j        |                    }|g fS Nr  )rF  rG  r-  r  mapquote_name_unless_alias)r   r    r   rF  r-  rI  r"   s          r$   r   z
Col.as_sql  sM    
DK$6v).=ufooVIhhs8;[IIJJBwr+   c                     | j         | S |                     |                    | j         | j                   | j        | j                  S r   )rF  r   r  rG  r   r  s     r$   r  zCol.relabeled_clone   sC    :K~~LLTZ00$+t?P
 
 	
r+   c                     | gS r   r*   rC   s    r$   r  zCol.get_group_by_cols'  r)  r+   c                     | j         | j        k    r| j                            |          S | j                            |          | j                             |          z   S r   )rG  r   r   r   s     r$   r   zCol.get_db_converters*  s_    ;$+++$66zBBB 22
 
K))*556 	6r+   r   )r&   r'   r(   r   r  r   r  r   r  r  r   r  r  s   @r$   rD  rD    s        !% 0 0 0 0 0 0P P P
  
 
 
  6 6 6 6 6 6 6r+   rD  c                   V     e Zd ZdZ fdZd Zd Zd Z	 dd	Zd
 Z	d Z
d Zd Z xZS )Refz~
    Reference to column alias of the query. For example, Ref('sum_cost') in
    qs.annotate(sum_cost=Sum('cost')) query.
    c                 f    t                                                       ||c| _        | _        d S r   )r  r   r  r   )r   r  r   r   s      r$   r   zRef.__init__8  s-    !%v	4;;;r+   c                 X    d                     | j        j        | j        | j                  S r&  )r  r   r&   r  r   rC   s    r$   r  zRef.__repr__<  s#    ""4>#:DIt{SSSr+   c                     | j         gS r   r   rC   s    r$   r   zRef.get_source_expressions?  s    }r+   c                     |\  | _         d S r   rV  r   s     r$   r   zRef.set_source_expressionsB  s    r+   NTFc                     | S r   r*   r  s         r$   r7   zRef.resolve_expressionE  s	    
 r+   c                     | j         hS r   )r  rC   s    r$   r  zRef.get_refsL  s    	{r+   c                 l    |                                  }| j                            |          |_        |S r   )r   r   r  )r   r  r  s      r$   r  zRef.relabeled_cloneO  s+    		{228<<r+   c                 D    |j                             | j                  g fS r   )r  
quote_namer  r   s      r$   r   z
Ref.as_sqlT  s    ~((33R77r+   c                     | gS r   r*   rC   s    r$   r  zRef.get_group_by_colsW  r)  r+   r8  )r&   r'   r(   r)   r   r  r   r   r7   r  r  r   r  r  r  s   @r$   rR  rR  2  s         
. . . . .T T T     SX       
8 8 8      r+   rR  c                   8     e Zd ZdZdZd Z fdZd Zd Z xZ	S )ExpressionListz
    An expression containing multiple expressions. Can be used to provide a
    list of expressions as an argument to another expression, like a partition
    clause.
    z%(expressions)sc                 T    | j                             d | j        D                       S )Nc              3   4   K   | ]}t          |          V  d S r   r  r   s     r$   r   z)ExpressionList.__str__.<locals>.<genexpr>e  r  r+   )r  r  r  rC   s    r$   r  zExpressionList.__str__d  s*    ###P#P8O#P#P#PPPPr+   c                 H    | j         sdS  t                      j        |i |S )N) r*   )r  r  r   )r   rY  r$  r   s      r$   r   zExpressionList.as_sqlg  s.    & 	6uww~t.v...r+   c                       | j         ||fi |S r   )r   )r   r    r   r!   s       r$   r%   zExpressionList.as_sqlitel  s    t{8ZAA=AAAr+   c                     g }|                                  D ])}|                    |                                           *|S r   r   r  r  )r   group_by_colsr   s      r$   r  z ExpressionList.get_group_by_colsp  sK    //11 	; 	;D  !7!7!9!9::::r+   )
r&   r'   r(   r)   r  r  r   r%   r  r  r  s   @r$   r_  r_  [  s|          !HQ Q Q/ / / / /
B B B      r+   r_  c                   &     e Zd ZdZdZ fdZ xZS )OrderByListFzORDER BY %(expressions)sc                 R    d |D             } t                      j        |i | d S )Nc              3      K   | ]M}t          |t                    r2|d          dk    r&t          t          |dd                   d          n|V  NdS )r   r/   r  NTr)  )r   r   r"  r   r   s     r$   r   z'OrderByList.__init__.<locals>.<genexpr>|  sz       
 
  dC((-1!W^^ $qrr(5555	
 
 
 
 
 
r+   )r  r   )r   r   r  r   s      r$   r   zOrderByList.__init__{  sG    
 
 $
 
 
 	+//////r+   )r&   r'   r(   r=  r  r   r  r  s   @r$   ri  ri  w  sB        O)H	0 	0 	0 	0 	0 	0 	0 	0 	0r+   ri  z"django.db.models.ExpressionWrapperc                   Z     e Zd ZdZ fdZd Zd Z fdZd Zd Z	e
d             Z xZS )	ExpressionWrapperz
    An expression that can wrap another expression so that it can provide
    extra context to the inner expression, such as the output_field.
    c                 Z    t                                          |           || _        d S r  r8  r9  s      r$   r   zExpressionWrapper.__init__  s)    l333$r+   c                      |d         | _         d S Nr   r;  r   s     r$   r   z(ExpressionWrapper.set_source_expressions      (r+   c                     | j         gS r   r;  rC   s    r$   r   z(ExpressionWrapper.get_source_expressions  r<  r+   c                     t          | j        t                    r9| j                                        }| j        |_        |                                S t                                                      S r   )r   r   rA  r   r   r  r  r   r   r   s     r$   r  z#ExpressionWrapper.get_group_by_cols  s_    doz22 	2--//J&*&7J#//111 ww((***r+   c                 6    |                     | j                  S r   )r  r   r   s      r$   r   zExpressionWrapper.as_sql  s    000r+   c                 L    d                     | j        j        | j                  S r  )r  r   r&   r   rC   s    r$   r  zExpressionWrapper.__repr__  s    t~6HHHr+   c                     | j         j        S r   )r   r=  rC   s    r$   r=  z!ExpressionWrapper.allowed_default  s    ..r+   )r&   r'   r(   r)   r   r   r   r  r   r  r>  r=  r  r  s   @r$   rn  rn    s         
% % % % %# # #! ! !+ + + + +1 1 1I I I / / X/ / / / /r+   rn  c                   F     e Zd ZdZ fdZd Z fdZ	 d
 fd	Zd	 Z xZ	S )r   z1The logical negation of a conditional expression.c                 p    t                                          |t          j                               d S r  )r  r   r   r   ru  s     r$   r   zNegatedExpression.__init__  s/    &2E2G2GHHHHHr+   c                 4    | j                                         S r   )r   r   rC   s    r$   r   zNegatedExpression.__invert__  s    ##%%%r+   c                 L   	 t                                          ||          \  }}nH# t          $ r; |j        j        }|j        sY dS |                    t          d                    cY S w xY w|j        j        }|	                    | j
                  sd| d|fS d| |fS )N)z1=1r*   Tz
CASE WHEN z = 0 THEN 1 ELSE 0 ENDzNOT )r  r   r   r   r  &supports_boolean_expr_in_select_clauser  r9   r  0conditional_expression_supported_in_where_clauser   )r   r    r   r"   r#   r  r  r   s          r$   r   zNegatedExpression.as_sql  s    	1''..:>>KC 	1 	1 	1*3HB ! yy##E$KK00000		1
 !% CCDOTT 	D;;;;VCCc||V##s   %) A.	"A.-A.NTFc                     t                                          |||||          }t          |j        dd          st	          d          |S )Nr`   Fz*Cannot negate non-conditional expressions.)r  r7   rc   r   r  )r   r   r   r   r   r   r  r   s          r$   r7   z$NegatedExpression.resolve_expression  sW     77--;y(
 
 x*M5AA 	JHIIIr+   c                     |j         j        j        }|j         j        j        s% || j                  rd                    |          }||fS NzCASE WHEN {} THEN 1 ELSE 0 END)r   r  r~  r  r}  r   r  )r   r    r"   r#   $expression_supported_in_where_clauses        r$   r2  zNegatedExpression.select_format  s^    
 #T 	- #,S	? 54T_EE	?
 399#>>CF{r+   r8  )
r&   r'   r(   r)   r   r   r   r7   r2  r  r  s   @r$   r   r     s        ;;I I I I I& & &$ $ $ $ $" SX           r+   r   zdjango.db.models.Whenc                   t     e Zd ZdZdZd fd	Zd Zd Zd Zd Z	d	 Z
	 ddZddZd Zed             Z xZS )Whenz"WHEN %(condition)s THEN %(result)sFNc                    |r1|t          di |d }}n t          |dd          rt          |fi |d }}|t          |dd          r|rt          d          t          |t                     r|st	          d          t                                          d            || _        |                     |          d         | _	        d S )Nr`   FzLWhen() supports a Q object, a boolean expression, or lookups as a condition.z1An empty Q() can't be used as a When() condition.r   r   r*   )
r   rc   r  r   r6  r  r   	conditionr   rr  )r   r  thenlookupsr   s       r$   r   zWhen.__init__  s     	C %&\\\\47		M599 C%&y%<%<G%<%<d7	GI}e$L$LPW"   i## 	RI 	RPQQQd+++"--d33A6r+   c                 &    d| j         d| j        S )NzWHEN z THEN r  rr  rC   s    r$   r  zWhen.__str__  s     $(NNNDKK@@r+   c                 (    d| j         j        d| dS N<z: >r   r&   rC   s    r$   r  zWhen.__repr__       !^444ddd;;r+   c                     | j         | j        gS r   r  rC   s    r$   r   zWhen.get_source_expressions  s    ,,r+   c                 $    |\  | _         | _        d S r   r  r   s     r$   r   zWhen.set_source_expressions  s    &+#r+   c                     | j         j        gS r   )rr  r   rC   s    r$   r   zWhen.get_source_fields  s    122r+   Tc                     |                                  }||_        t          |j        d          r#|j                            ||||d          |_        |j                            |||||          |_        |S )Nr7   F)r   r   r8   r  r7   rr  r   s          r$   r7   zWhen.resolve_expression  s~     IIKK 1; 455 	+88{E9e AK 8..;y(
 
 r+   c                     |j                             |            |}g }|                    | j                  \  }}||d<   |                    | j                  \  }	}
|	|d<   |p| j        }||z  g |||
R fS )Nr  rr  )r  r  r  r  rr  r  )r   r    r   r  r!   template_params
sql_paramscondition_sqlcondition_params
result_sqlresult_paramss              r$   r   zWhen.as_sql  s    //555'
*2*:*:4>*J*J'''4$$,$4$4T[$A$A!
M$.!,t}/) ,
,
,
 ,
 ,
 
 	
r+   c                     g }|                                  D ])}|                    |                                           *|S r   rf  r  s      r$   r  zWhen.get_group_by_cols#  sH    1133 	4 	4FKK00223333r+   c                 2    | j         j        o| j        j        S r   )r  r=  rr  rC   s    r$   r=  zWhen.allowed_default*  s    ~-M$+2MMr+   NNr8  r   )r&   r'   r(   r  r`   r   r  r  r   r   r   r7   r   r  r   r=  r  r  s   @r$   r  r    s        3HK7 7 7 7 7 7"A A A< < <- - -, , ,3 3 3
 SX   
 
 
 
   N N _N N N N Nr+   r  zdjango.db.models.Casec                        e Zd ZdZdZdZddd fd
Zd Zd Zd	 Z	d
 Z
	 ddZ fdZ	 ddZ fdZed             Z xZS )Casez
    An SQL searched CASE expression:

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


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


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


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

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

s > 	*"5"N 	#H   M"o--//	  	
 		
r+   c                 (    d| j         j        d| dS r  r  rC   s    r$   r  zWindowFrame.__repr__  r  r+   c                     g S r   r*   rC   s    r$   r  zWindowFrame.get_group_by_cols  r   r+   c                 f   | j         j        >| j         j        dk     r.dt          | j         j                  t          j        j        fz  }n|| j         j        "| j         j        dk    rt          j        j        }nN| j         j        1| j         j        dk    r!d| j         j        t          j        j        fz  }nt          j        j        }| j	        j        1| j	        j        dk    r!d| j	        j        t          j        j        fz  }n| j	        j        "| j	        j        dk    rt          j        j        }n[| j	        j        >| j	        j        dk     r.dt          | j	        j                  t          j        j        fz  }nt          j        j
        }| j        | j        |||                                 dz  S )Nr   z%d %sr  )r  r   absr   r  	PRECEDINGr	  	FOLLOWINGUNBOUNDED_PRECEDINGr  UNBOUNDED_FOLLOWINGr  r  r  )r   r  r  s      r$   r  zWindowFrame.__str__  sq   :'DJ,<q,@,@s4:#344jn6NOOEEZ)dj.>!.C.CN.EEZ)dj.>.B.Btz/1IJJEEN6E8>%$(.1*<*<TX^Z^-EFFCCX^'DHNa,?,?.,CCX^'DHNQ,>,>S00*.2JKKCC.4C}/))++	 
  
 
 	
r+   c                      t          d          )Nz3Subclasses must implement window_frame_start_end().r   r   r   r  r  s       r$   r  z"WindowFrame.window_frame_start_end  s    !"WXXXr+   r  )r&   r'   r(   r)   r  r   r   r   r  r   r  r  r  r  r*   r+   r$   r  r    s          IH# # # #% % %& & &2 2 2

 
 
(< < <  
 
 
2Y Y Y Y Yr+   r  c                       e Zd ZdZd ZdS )RowRangeROWSc                 8    |j                             ||          S r   )r  window_frame_rows_start_endr$  s       r$   r  zRowRange.window_frame_start_end  s    ~99%EEEr+   Nr&   r'   r(   r  r  r*   r+   r$   r&  r&    s-        JF F F F Fr+   r&  c                       e Zd ZdZd ZdS )
ValueRangeRANGEc                 8    |j                             ||          S r   )r  window_frame_range_start_endr$  s       r$   r  z!ValueRange.window_frame_start_end$  s    ~::5#FFFr+   Nr*  r*   r+   r$   r,  r,  !  s-        JG G G G Gr+   r,  )ar   r  r`  rF  collectionsr   decimalr   enumr   	itertoolsr   typesr	   uuidr
   django.core.exceptionsr   r   r   	django.dbr   r   r   django.db.modelsr   django.db.models.constantsr   django.db.models.query_utilsr   django.utils.deconstructr   django.utils.functionalr   r   django.utils.hashabler   r   r-   r   rA  rH   rB   rT   rX   r\   rN   rh   ry   rl   ro   rt   r  r  r  r  _connector_combinationsrl  ro  rs  drP  r<   field_typesrp  rq  rr  ra  r|  r:   r  r  r   r  r  r  r  r9   r#  r2  r6  rD  rR  r_  ri  rn  r   r  r  r  r  r"  r  r  r  r&  r,  r*   r+   r$   <module>rA     sV          # # # # # #                               L L L L L L L L L L B B B B B B B B B B # # # # # # 1 1 1 1 1 1 * * * * * * 4 4 4 4 4 4 B B B B B B B B / / / / / /        A' A' A' A' A' A' A' A'HK K K K K K K K\
 !# !# !# !# !# !# !# !#^  NNNNN
  "  NNN NNN	
  $  NNNNN
    
 #$
	    NNNNNN
  , 	v3V5IJ!6#79MN!6#3V5IJ!6#79MN!6#79MNv3V5EF!6#3V5EF
 	v3V5IJ!6#79MNv/1EFv3V5IJ!6#3V5IJ!6#79MN!6#79MNv3V5EFv/1EF
Ow r %T** 	A 	A 	A 
! D DA"#'')) D D	; + 	D 	DCf&&sIsFCCCC	DD
 S!!!! ! "!!cE cE cE cE cE+Z cE cE cEL0 0 0 0 0+ 0 0 0f
 
 
 
 
, 
 
 
 *+++, , , , ,
 , , ,+,^" " " " "q " " "J
 
 
 
 
q 
 
 
6U 6U 6U 6U 6UQ 6U 6U 6Ur -...eY eY eY eY eYz eY eY /.eYP .///M M M M M
 M M 0/M` 
  
  
  
  
Z  
  
  
F    :   $ $ $ $ $j $ $ $N$6 $6 $6 $6 $6* $6 $6 $6N& & & & &* & & &R    T   80 0 0 0 0. 0 0 0  :;;;!/ !/ !/ !/ !/*J !/ !/ <;!/H0 0 0 0 0) 0 0 0f -...LN LN LN LN LN: LN LN /.LN^ -...c
 c
 c
 c
 c
z c
 c
 /.c
L2: 2: 2: 2: 2:~z 2: 2: 2:j2 2 2 2 2X 2 2 26 0111[ [ [ [ [j [ [ 21[|q q q q q q q qh> > > > >4 > > >TY TY TY TY TY* TY TY TYnF F F F F{ F F FG G G G G G G G G Gr+   