
    gu                       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(e&jR                  e&jT                  e&jV                  e&jX                  e&jZ                  fD  ci c]'  } | ej\                  ej\                  ej\                  fg) c} e&jR                  e&j^                  e&jT                  e&jV                  e&jX                  e&jZ                  fD  ci c]k  } | ej`                  ej`                  ej`                  fejb                  ejb                  ejb                  fejd                  ejd                  ejd                  fgm c} e&jR                  e&j^                  e&jT                  e&jV                  e&jX                  fD  ci c]  } | ej`                  ejd                  ejd                  fejd                  ej`                  ejd                  fej`                  ejb                  ejb                  fejb                  ej`                  ejb                  fg c} e&jf                  e&jh                  e&jj                  e&jl                  e&jn                  fD  ci c]'  } | ej`                  ej`                  ej`                  fg) c} e&jR                  e&j^                  e&jT                  e&jV                  e&jX                  e&jZ                  fD  ci c]B  } |  e8ejs                  d ej`                  ejd                  ejb                  fD                    D c} e&jR                  ejt                  ejv                  ejx                  fejx                  ejv                  ejx                  fejv                  ejt                  ejx                  fejv                  ejx                  ejx                  fejv                  ejv                  ejv                  fejz                  ejv                  ejz                  fejv                  ejz                  ejz                  fgie&j^                  ejt                  ejv                  ejx                  fejx                  ejv                  ejx                  fejt                  ejt                  ejv                  fejt                  ejx                  ejv                  fejx                  ejt                  ejv                  fejx                  ejx                  ejv                  fejv                  ejv                  ejv                  fejz                  ejv                  ejz                  fejz                  ejz                  ejv                  fg	igZ> ee8      Z?d Z@e>D ]0  ZAeAj                         D ]  \  ZCZDeDD ]  \  ZEZFZG e@eEeCeFeG         2  ej                  d      d        ZI G d de%e(      ZJ G d d eJ      ZK G d! d"eJ      ZL ed#$       G d% d&e&             ZM G d' d(eM      ZN G d) d*eM      ZO G d+ d,eM      ZP ed-$       G d. d/e%e(             ZQ ed0$       G d1 d2e%e(             ZR G d3 d4e(      ZS G d5 d6e(      ZT G d7 d8e(      ZU G d9 d:e(      ZV G d; d<e(      ZW G d= d>eQ      ZX G d? d@eX      ZY edA$       G dB dCe%e(             ZZ G dD dEeZ      Z[ edF$       G dG dHe(             Z\ edI$       G dJ dKe%e(             Z] G dL dMe'e&      Z^ G dN dOe^      Z_ edP$       G dQ dRe(             Z` G dS dTe%e(      Za G dU dVe	      Zb G dW dXe(      Zc G dY dZec      Zd G d[ d\ec      Zeyc c} w c c} w c c} w c c} w c c} w )]    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y)SQLiteNumericMixinzp
    Some expressions with output_field=DecimalField() must be cast to
    numeric to be properly filtered.
    c                      | j                   ||fi |\  }}	 | j                  j                         dk(  rd|z  }||fS # t        $ r Y ||fS w xY w)NDecimalFieldz(CAST(%s AS NUMERIC)))as_sqloutput_fieldget_internal_typer   )selfcompilerr   extra_contextsqlparamss         t/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/models/expressions.py	as_sqlitezSQLiteNumericMixin.as_sqlite   sm    !dkk(JH-HV	  224F-3 F{  	F{	s   "? 	AAN)__name__
__module____qualname____doc__r%        r$   r   r      s    
r+   r   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(y')(
Combinablezu
    Provide the ability to combine one or two objects with
    some connector. For example F('foo') + F('bar').
    +-*/^z%%&|z<<z>>#c                 h    t        |d      st        |      }|rt        |||       S t        | ||      S Nresolve_expression)hasattrValueCombinedExpression)r   other	connectorreverseds       r$   _combinezCombinable._combine?   s7    u23%LE%eY==!$	599r+   c                 <    | j                  d| j                  d      S )NFr?   MULr   s    r$   __neg__zCombinable.__neg__L   s    }}R511r+   c                 <    | j                  || j                  d      S NFr?   ADDr   r<   s     r$   __add__zCombinable.__add__O       }}UDHHe44r+   c                 <    | j                  || j                  d      S rG   r?   SUBrJ   s     r$   __sub__zCombinable.__sub__R   rL   r+   c                 <    | j                  || j                  d      S rG   rB   rJ   s     r$   __mul__zCombinable.__mul__U   rL   r+   c                 <    | j                  || j                  d      S rG   r?   DIVrJ   s     r$   __truediv__zCombinable.__truediv__X   rL   r+   c                 <    | j                  || j                  d      S rG   r?   MODrJ   s     r$   __mod__zCombinable.__mod__[   rL   r+   c                 <    | j                  || j                  d      S rG   r?   POWrJ   s     r$   __pow__zCombinable.__pow__^   rL   r+   c                 z    t        | dd      r$t        |dd      rt        |       t        |      z  S t        d      NconditionalFFUse .bitand(), .bitor(), and .bitxor() for bitwise logical operations.getattrr   NotImplementedErrorrJ   s     r$   __and__zCombinable.__and__a   =    4.75-QV3WT7QuX%%!T
 	
r+   c                 <    | j                  || j                  d      S rG   )r?   BITANDrJ   s     r$   bitandzCombinable.bitandh       }}UDKK77r+   c                 <    | j                  || j                  d      S rG   )r?   BITLEFTSHIFTrJ   s     r$   bitleftshiftzCombinable.bitleftshiftk   s    }}UD$5$5u==r+   c                 <    | j                  || j                  d      S rG   )r?   BITRIGHTSHIFTrJ   s     r$   bitrightshiftzCombinable.bitrightshiftn   s    }}UD$6$6>>r+   c                 z    t        | dd      r$t        |dd      rt        |       t        |      z  S t        d      r`   rc   rJ   s     r$   __xor__zCombinable.__xor__q   rg   r+   c                 <    | j                  || j                  d      S rG   )r?   BITXORrJ   s     r$   bitxorzCombinable.bitxorx   rk   r+   c                 z    t        | dd      r$t        |dd      rt        |       t        |      z  S t        d      r`   rc   rJ   s     r$   __or__zCombinable.__or__{   rg   r+   c                 <    | j                  || j                  d      S rG   )r?   BITORrJ   s     r$   bitorzCombinable.bitor   s    }}UDJJ66r+   c                 <    | j                  || j                  d      S NTrH   rJ   s     r$   __radd__zCombinable.__radd__       }}UDHHd33r+   c                 <    | j                  || j                  d      S r}   rN   rJ   s     r$   __rsub__zCombinable.__rsub__   r   r+   c                 <    | j                  || j                  d      S r}   rB   rJ   s     r$   __rmul__zCombinable.__rmul__   r   r+   c                 <    | j                  || j                  d      S r}   rT   rJ   s     r$   __rtruediv__zCombinable.__rtruediv__   r   r+   c                 <    | j                  || j                  d      S r}   rX   rJ   s     r$   __rmod__zCombinable.__rmod__   r   r+   c                 <    | j                  || j                  d      S r}   r\   rJ   s     r$   __rpow__zCombinable.__rpow__   r   r+   c                     t        d      Nrb   re   rJ   s     r$   __rand__zCombinable.__rand__       !T
 	
r+   c                     t        d      r   r   rJ   s     r$   __ror__zCombinable.__ror__   r   r+   c                     t        d      r   r   rJ   s     r$   __rxor__zCombinable.__rxor__   r   r+   c                     t        |       S N)NegatedExpressionrD   s    r$   
__invert__zCombinable.__invert__   s     &&r+   N))r&   r'   r(   r)   rI   rO   rC   rU   r]   rY   ri   rz   rm   rp   ru   r?   rE   rK   rP   rR   rV   rZ   r^   rf   rj   rn   rq   rs   rv   rx   r{   r~   r   r   r   r   r   r   r   r   r   r*   r+   r$   r-   r-   &   s     C
C
C
C
C C
 FELMF:2555555
8>?
8
7444444





'r+   r-   c                   b   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& Z0y))BaseExpressionz%Base class for all query expressions.FTNc                     ||| _         y y r   r   r   r   s     r$   __init__zBaseExpression.__init__   s    # ,D $r+   c                 ^    | j                   j                         }|j                  dd        |S )Nconvert_value)__dict__copypop)r   states     r$   __getstate__zBaseExpression.__getstate__   s'    ""$		/4(r+   c                     | j                   | j                  u rg n| j                   g| j                  j                  |      z   S r   )r   _convert_value_noopr   get_db_convertersr   r   s     r$   r   z BaseExpression.get_db_converters   sG     !!T%=%== $$%//
;	< 	<r+   c                     g S r   r*   rD   s    r$   get_source_expressionsz%BaseExpression.get_source_expressions       	r+   c                     |rJ y r   r*   r   exprss     r$   set_source_expressionsz%BaseExpression.set_source_expressions   s    y5r+   c                     |D cg c]6  }t        |d      r|n%t        |t              rt        |      n
t	        |      8 c}S c c}w r7   )r9   
isinstancestrFr:   )r   expressionsargs      r$   _parse_expressionsz!BaseExpression._parse_expressions   sV     #
 # 3 45  *3 4af%*F #
 	
 
s   ;Ac                     t        d      )a  
        Responsible for returning a (sql, [params]) tuple to be included
        in the current query.

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

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

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

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

        Return: (sql, params)
          Where `sql` is a string containing ordered sql parameters to be
          replaced with the elements of the list `params`.
        z"Subclasses must implement as_sql()r   r   r    r   s      r$   r   zBaseExpression.as_sql   s    4 ""FGGr+   c                 B    t        d | j                         D              S )Nc              3   <   K   | ]  }|xr |j                     y wr   )contains_aggregate.0exprs     r$   	<genexpr>z4BaseExpression.contains_aggregate.<locals>.<genexpr>   s#      
9VD,T,,,9V   anyr   rD   s    r$   r   z!BaseExpression.contains_aggregate   s%     
9=9T9T9V
 
 	
r+   c                 B    t        d | j                         D              S )Nc              3   <   K   | ]  }|xr |j                     y wr   )contains_over_clauser   s     r$   r   z6BaseExpression.contains_over_clause.<locals>.<genexpr>   s#      
;X4D.T...;Xr   r   rD   s    r$   r   z#BaseExpression.contains_over_clause   s%     
;?;V;V;X
 
 	
r+   c                 B    t        d | j                         D              S )Nc              3   <   K   | ]  }|xr |j                     y wr   )contains_column_referencesr   s     r$   r   z<BaseExpression.contains_column_references.<locals>.<genexpr>  s&      
5 4T4445r   r   rD   s    r$   r   z)BaseExpression.contains_column_references  %     
335
 
 	
r+   c                 B    t        d | j                         D              S )Nc              3   Z   K   | ]#  }|xr t        |d d      xs |j                   % yw)subqueryFN)rd   contains_subqueryr   s     r$   r   z3BaseExpression.contains_subquery.<locals>.<genexpr>  s4      
5 QgdJ6P$:P:PQ5s   )+r   rD   s    r$   r   z BaseExpression.contains_subquery	  r   r+   c                     | j                         }||_        |j                  |j                         D cg c]  }|r|j	                  ||||      nd c}       |S c c}w )a
  
        Provide the chance to do any preprocessing or validation before being
        added to the query.

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

        Return: an Expression to be added to the query.
        N)r   
is_summaryr   r   r8   )r   queryallow_joinsreuse	summarizefor_savecr   s           r$   r8   z!BaseExpression.resolve_expression  sx    " IIK 	   446 7D  ++E;yQ 7		
 s   Ac                 J    t        | j                  t        j                        S r   )r   r   r   BooleanFieldrD   s    r$   ra   zBaseExpression.conditional/  s    $++V-@-@AAr+   c                     | j                   S r   r   rD   s    r$   fieldzBaseExpression.field3  s       r+   c                 N    | j                         }|d| _        t        d      |S )z+Return the output type of this expressions.Tz4Cannot resolve expression type, unknown output_field)_resolve_output_field_output_field_resolved_to_noner   r   s     r$   r   zBaseExpression.output_field7  s2     11326D/STTr+   c                 T    	 | j                   S # t        $ r | j                  s Y yw xY w)z
        Return the output field of this expression, or None if
        _resolve_output_field() didn't return an output type.
        N)r   r   r   rD   s    r$   _output_field_or_nonez$BaseExpression._output_field_or_none@  s3    	$$$ 	66 7	s    ''c           	          d | j                         D        }|D ]\  }|D ]R  }t        ||j                        rt        d|j                  j                  d|j                  j                  d       |c S  y)a}  
        Attempt to infer the output type of the expression.

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

        If a source's output field resolves to None, exclude it from this check.
        If all sources are None, then an error is raised higher up the stack in
        the output_field property.
        c              3   &   K   | ]	  }||  y wr   r*   )r   sources     r$   r   z7BaseExpression._resolve_output_field.<locals>.<genexpr>Z  s      
!9vV=OF!9s   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  sz    
!%!7!7!9
 )L&!,0@0@A$ )22;;",,55	  '   )r+   c                     | S r   r*   value
expressionr   s      r$   r   z"BaseExpression._convert_value_noopj  s    r+   c                     | j                   }|j                         }|dk(  rd S |j                  d      rd S |dk(  rd S | j                  S )z
        Expressions provide their own converters because users have the option
        of manually specifying the output_field which may be a different type
        from the one the database returns.
        
FloatFieldc                      | d S t        |       S r   )floatr   s      r$   <lambda>z.BaseExpression.convert_value.<locals>.<lambda>x  s    75<7r+   IntegerFieldc                      | d S t        |       S r   )intr   s      r$   r   z.BaseExpression.convert_value.<locals>.<lambda>|  s    53u:5r+   r   c                      | d S t        |       S r   r   r   s      r$   r   z.BaseExpression.convert_value.<locals>.<lambda>  s    975>9r+   )r   r   endswithr   )r   r   internal_types      r$   r   zBaseExpression.convert_valuen  sk     !!//1L(  ##N3  n,  '''r+   c                 8    | j                   j                  |      S r   )r   
get_lookup)r   lookups     r$   r   zBaseExpression.get_lookup  s      ++F33r+   c                 8    | j                   j                  |      S r   )r   get_transformr   names     r$   r   zBaseExpression.get_transform  s      ..t44r+   c                     | j                         }|j                  | j                         D cg c]  }||j                  |      nd  c}       |S c c}w r   )r   r   r   relabeled_clone)r   
change_mapclonees       r$   r   zBaseExpression.relabeled_clone  sa    		$$ 4466A 23!!*-DH6	
 s   Ac                     |s| S |j                  |       x}r|S | j                         x}s| S | j                         }|j                  |D cg c]  }|r|j	                  |      nd  c}       |S c c}w r   )getr   r   r   replace_expressions)r   replacementsreplacementsource_expressionsr   r   s         r$   r  z"BaseExpression.replace_expressions  s    K&**400;0&*&A&A&CC"CK		$$ /.D ;?((6DH.	
 s   A2c                 p    t               }| j                         D ]  }|||j                         z  } |S r   )setr   get_refs)r   refsr   s      r$   r	  zBaseExpression.get_refs  s;    u//1D|DMMO#D 2 r+   c                 ,    t        j                   |       S r   r   rD   s    r$   r   zBaseExpression.copy      yyr+   c           	          | j                         }|j                  | j                         D cg c]<  }t        |t              rt	        | |j
                         n|j                  |      > c}       |S c c}w r   )r   r   r   r   r   r   prefix_references)r   prefixr   r   s       r$   r  z BaseExpression.prefix_references  s    		$$ !779 :D "$* ,-//78 :		
 s   AA8c                     | j                   s| gS g }| j                         D ]!  }|j                  |j                                # |S r   )r   r   extendget_group_by_colsr   colsr   s      r$   r  z BaseExpression.get_group_by_cols  sD    &&6M113FKK0023 4r+   c                 \    | j                         D cg c]  }|j                   c}S c c}w )z9Return the underlying field types used by this aggregate.)r   r   )r   r   s     r$   r   z BaseExpression.get_source_fields  s+    151L1L1NO1NA''1NOOOs   )c                     t        | fi |S r   OrderByr   kwargss     r$   asczBaseExpression.asc      t&v&&r+   c                     t        | fddi|S N
descendingTr  r  s     r$   desczBaseExpression.desc      t7777r+   c                     | S r   r*   rD   s    r$   reverse_orderingzBaseExpression.reverse_ordering      r+   c              #      K   |  | j                         D ].  }|st        |d      r|j                         E d{    +| 0 y7 w)zi
        Recursively yield this expression and all subexpressions, in
        depth-first order.
        flattenN)r   r9   r'  )r   r   s     r$   r'  zBaseExpression.flatten  sF     
 
//1D4+#||~--J 2 .s   AAA	Ac                 p    t        | j                  d      r| j                  j                  |||      S ||fS )z
        Custom format for select clauses. For example, EXISTS expressions need
        to be wrapped in CASE WHEN on Oracle.
        select_format)r9   r   r)  r   r    r"   r#   s       r$   r)  zBaseExpression.select_format  s9    
 4$$o6$$228S&IIF{r+   c                     t        | dd      s	 | j                         \  }|S | S # t        $ r}t        d      |d }~ww xY w)N constraint_validation_compatibleTzdExpressions with constraint_validation_compatible set to False must have only one source expression.)rd   r   
ValueError)r   r   r   s      r$   get_expression_for_validationz,BaseExpression.get_expression_for_validation  sZ    t?F" $ ; ; = "!   < s   % 	?:?r   NTNFF)1r&   r'   r(   r)   NotImplementedempty_result_set_valuer   r   
filterablewindow_compatibleallowed_defaultr,  r   r   r   r   r   r   r   r   r   r   r   r   r8   propertyra   r   r   r   r   staticmethodr   r   r   r   r   r  r	  r   r  r  r   r  r!  r$  r'  r)  r.  r*   r+   r$   r   r      sw   /+J%*"JO'+$-
<
H8 
 

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

 
 
 
 
 SX> B B ! !   	 	 <   ( (,45 P'8r+   r   c                   h    e Zd ZdZe ej                  d      d               Zed        Z	d Z
d Zy)	
Expressionz:An expression that can be combined with other expressions.   maxsizec                 @    t        j                  | j                        S r   )inspect	signaturer   )clss    r$   _constructor_signaturez!Expression._constructor_signature  s       ..r+   c                 2   | j                   \  }} | j                  j                  | g|i |}|j                          t	        |j
                  j                               }t        |       | j                  g}|D ]  \  }}t        |t        j                        rQ|j                  r9|j                  r-|j                  j                  j                  |j                  f}nt!        |      }nt#        |      }|j%                  ||f        t'        |      S r   )_constructor_argsr@  bind_partialapply_defaultsiter	argumentsitemsnextr   r   r   Fieldr   model_metalabeltyper   appendtuple)r   argsr  r>  rF  identityr   r   s           r$   rQ  zExpression.identity  s    --f<D//<<TSDSFS	  ",,2245	YNN##JC%.::%++"[[..44ejjAE KE%e,OOS%L) $ Xr+   c                 `    t        |t              st        S |j                  | j                  k(  S r   )r   r8  r0  rQ  rJ   s     r$   __eq__zExpression.__eq__  s%    %,!!~~..r+   c                 ,    t        | j                        S r   )hashrQ  rD   s    r$   __hash__zExpression.__hash__  s    DMM""r+   N)r&   r'   r(   r)   r   	functools	lru_cacher@  r   rQ  rS  rV  r*   r+   r$   r8  r8    sJ    DY%/ & /  $/
#r+   r8  c              3   @   K   | ]  }|t         |ft         ||fg  y wr   r   )r   
field_types     r$   r   r   j  s/       #J h
3h
J5WX#s   c                 :    t         |   j                  | ||f       y)z
    Register combinable types:
        lhs <connector> rhs -> result
    e.g.
        register_combinable_fields(
            IntegerField, Combinable.ADD, FloatField, FloatField
        )
    N)_connector_combinatorsrN  )lhsr=   rhsresults       r$   register_combinable_fieldsr`    s     9%,,c3-?@r+   r9  r:  c                     t         j                  | d      }|D ]#  \  }}}t        ||      st        ||      s!|c S  y )Nr*   )r\  r  
issubclass)r=   lhs_typerhs_typecombinatorscombinator_lhs_typecombinator_rhs_typecombined_types          r$   _resolve_combined_typeri    sI    (,,Y;KCN?0-h 34):
 ! 	 DOr+   c                   ^     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;   c                 P    t         |   |       || _        || _        || _        y Nr   )superr   r=   r]  r^  )r   r]  r=   r^  r   r   s        r$   r   zCombinedExpression.__init__  s(    l3"r+   c                 N    dj                  | j                  j                  |       S )Nz<{}: {}>)formatr   r&   rD   s    r$   __repr__zCombinedExpression.__repr__  s      !8!8$??r+   c                 d    dj                  | j                  | j                  | j                        S )Nz{} {} {})ro  r]  r=   r^  rD   s    r$   __str__zCombinedExpression.__str__  s#      4>>488DDr+   c                 2    | j                   | j                  gS r   r]  r^  rD   s    r$   r   z)CombinedExpression.get_source_expressions  s    $((##r+   c                 "    |\  | _         | _        y r   rt  r   s     r$   r   z)CombinedExpression.set_source_expressions  s    "$(r+   c           	         t        | j                  t        | j                  j                        t        | j
                  j                              }|ot        d| j                  d| j                  j                  j                  j                   d| j
                  j                  j                  j                   d       |       S )NzCannot infer type of z# expression involving these types: r   r   )
ri  r=   rM  r]  r   r^  r   r   r   r&   )r   rh  s     r$   r   z(CombinedExpression._resolve_output_field  s     /NN//0//0

  ''9 :((//99BBC288((22;;< = !  r+   c                 h   g }g }|j                  | j                        \  }}|j                  |       |j                  |       |j                  | j                        \  }}|j                  |       |j                  |       d}|j
                  j                  | j                  |      }||z  |fS Nz(%s))compiler]  rN  r  r^  opscombine_expressionr=   )r   r    r   r   expression_paramsr"   r#   expression_wrappers           r$   r   zCombinedExpression.as_sql  s    &&txx0V3  (&&txx0V3  (#nn//L!C'):::r+   c                    | j                   j                  |||||      }| j                  j                  |||||      }t        | t        t
        f      s	 |j                  j                         }	 |j                  j                         }	d||	hv rC||	k7  r>t	        | j                   | j                  | j                        j                  |||||      S h d}
| j                  | j                  k(  r<||
v r8||	k(  r3t        | j                   | j                        j                  |||||      S | j                         }||_        ||_         ||_        |S # t        t        f$ r d }Y w xY w# t        t        f$ r d }	Y w xY w)NDurationField>   	DateField	TimeFieldDateTimeField)r]  r8   r^  r   DurationExpressionTemporalSubtractionr   r   AttributeErrorr   r=   rO   r   r   )r   r   r   r   r   r   r]  r^  rc  rd  datetime_fieldsr   s               r$   r8   z%CombinedExpression.resolve_expression  s    hh));y(
 hh));y(
 $!35H IJ ++==? ++==? 8X"668x;O)HHdnndhh$$ JO$((*/(*488TXX>QQ  IIK C #J/    #J/   s$   E 1E+ E('E(+E?>E?c                 ^    | j                   j                  xr | j                  j                  S r   )r]  r4  r^  rD   s    r$   r4  z"CombinedExpression.allowed_default  s!    xx''DDHH,D,DDr+   r   r/  )r&   r'   r(   r   rp  rr  r   r   r   r   r8   r   r4  __classcell__r   s   @r$   r;   r;     sK    @E$#"; SX-^ E Er+   r;   c                   *     e Zd Zd Z fdZd Z xZS )r  c                     	 |j                   }|j                         dk(  r1|j                  |      \  }}|j                  j	                  |      |fS |j                  |      S # t
        $ r Y w xY w)Nr  )r   r   ry  rz  format_for_duration_arithmeticr   )r   sider    r   outputr"   r#   s          r$   ry  zDurationExpression.compile#  sy    	R&&F '')_<&..t4V!~~DDSI6QQ%%  		s   A# #	A/.A/c                    |j                   j                  rt        |   ||      S |j                  j                  |        g }g }| j                  | j                  ||      \  }}|j                  |       |j                  |       | j                  | j                  ||      \  }}|j                  |       |j                  |       d}|j                  j                  | j                  |      }||z  |fS rx  )featureshas_native_duration_fieldrm  r   rz  check_expression_supportry  r]  rN  r  r^  combine_duration_expressionr=   )	r   r    r   r   r|  r"   r#   r}  r   s	           r$   r   zDurationExpression.as_sql.  s    887>(J77//5ll488XzBV3  (ll488XzBV3  (#nn88U!C'):::r+   c                     | j                   ||fi |\  }}| j                  t        j                  t        j                  hv rr	 | j
                  j                  j                         }| j                  j                  j                         }h d}||vs||vrt        d| j                   d      ||fS ||fS # t        t        f$ r Y ||fS w xY w)N>   r   r   r   r  zInvalid arguments for operator .)r   r=   r-   rC   rU   r]  r   r   r^  r   r  r   )	r   r    r   r!   r"   r#   rc  rd  allowed_fieldss	            r$   r%   zDurationExpression.as_sqlite?  s    !dkk(JH-HV>>jnnjnn==8800BBD8800BBD" >1X^5S'9$..9IK  F{sF{ #J/  F{s   AB: :CC)r&   r'   r(   ry  r   r%   r  r  s   @r$   r  r  "  s    	&;"r+   r  c                   F     e Zd Z ej                         Z fdZd Z xZS )r  c                 <    t         |   || j                  |       y r   )rm  r   rO   )r   r]  r^  r   s      r$   r   zTemporalSubtraction.__init__X  s    dhh,r+   c                 "   |j                   j                  |        |j                  | j                        }|j                  | j                        }|j                   j                  | j                  j                  j                         ||      S r   )rz  r  ry  r]  r^  subtract_temporalsr   r   )r   r    r   r]  r^  s        r$   r   zTemporalSubtraction.as_sql[  sm    //5txx(txx(~~00HH!!335sC
 	
r+   )	r&   r'   r(   r   r  r   r   r   r  r  s   @r$   r  r  U  s    '6'')L-
r+   r  zdjango.db.models.F)pathc                   Z    e Zd ZdZdZd Zd Zd Zd Z	 ddZ	d	 Z
d
 Zd Zd Zd Zd Zy)r   zDAn object capable of resolving references to existing query objects.Fc                     || _         y)z^
        Arguments:
         * name: the name of the field this expression references
        N)r   r   s     r$   r   z
F.__init__j  s    
 	r+   c                 b    dj                  | j                  j                  | j                        S N{}({}))ro  r   r&   r   rD   s    r$   rp  z
F.__repr__q  s!    t~~66		BBr+   c                     t        | |      S r   )Sliced)r   	subscripts     r$   __getitem__zF.__getitem__t  s    dI&&r+   c                 H    t        d| j                  j                   d      )Nzargument of type 'z' is not iterable)	TypeErrorr   r&   rJ   s     r$   __contains__zF.__contains__w  s%     ,T^^-D-D,EEVWXXr+   Nc                 >    |j                  | j                  |||      S r   )resolve_refr   r   r   r   r   r   r   s         r$   r8   zF.resolve_expression|  s       K	JJr+   c                 &    |j                  | |       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                 j    | j                   |j                   k(  xr | j                  |j                  k(  S r   )r   r   rJ   s     r$   rS  zF.__eq__  s'    ~~0LTYY%**5LLr+   c                 ,    t        | j                        S r   )rU  r   rD   s    r$   rV  z
F.__hash__  s    DIIr+   c                 ,    t        j                   |       S r   r  rD   s    r$   r   zF.copy  r  r+   r/  )r&   r'   r(   r)   r4  r   rp  r  r  r8   r  r  r!  rS  rV  r   r*   r+   r$   r   r   d  sL    NOC'Y SXK
,'8Mr+   r   c                   <     e Zd ZdZdZdZd Z fdZd Zd Z	 xZ
S )ResolvedOuterRefz
    An object that contains a reference to an outer query.

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

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

Q{{*t0C%&	..--.a|2i]!LLr+   c                 0   |j                  | j                  |||      }t        | j                  t        | j
                  f      r | j                  j                  |||||      }n|}|j                  j                  || j                  | j                        S r   )r  r   r   r  r  r   r8   r   slice_expressionr  r  )r   r   r   r   r   r   resolvedr   s           r$   r8   zSliced.resolve_expression  s~     $$TYYUINdhh4>> :;88..{E9hD D$$55dDJJTTr+   r/  )r&   r'   r(   r)   r   rp  r8   r  r  s   @r$   r  r    s+    W2M 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                D   | j                   ht        |      | j                   k7  rPt        d| j                  j                  d| j                   d| j                   dk(  rdnddt        |      d	      t
        |   |	        | j                  | | _        || _	        y )
N'z' takes exactly  r  argumentrF  z (z given)r   )
aritylenr  r   r&   rm  r   r   r  extra)r   r   r   r  r   s       r$   r   zFunc.__init__  s    ::!c+&6$**&D NN++JJ"&**/J{B$  	l3"9$"9"9;"G
r+   c                    | j                   j                  d | j                  D              }i | j                  | j	                         }|rVdj                  d t        |j                               D              }dj                  | j                  j                  ||      S dj                  | j                  j                  |      S )Nc              3   2   K   | ]  }t        |        y wr   r   r   r   s     r$   r   z Func.__repr__.<locals>.<genexpr>       #P8OCH8O   r   c              3   V   K   | ]!  \  }}t        |      d z   t        |      z    # yw)=Nr  )r   keyvals      r$   r   z Func.__repr__.<locals>.<genexpr>  s*      :Ohc3C3S):Os   ')
{}({}, {})r  )

arg_joinerjoinr  r  _get_repr_optionssortedrG  ro  r   r&   )r   rP  r  s      r$   rp  zFunc.__repr__  s    ###P8O8O#PP:4:::!7!7!9:II :@:O E  &&t~~'>'>eLLt~~66==r+   c                     i S )zAReturn a dict of extra __init__() options to include in the repr.r*   rD   s    r$   r  zFunc._get_repr_options!  s    	r+   c                     | j                   S r   r  rD   s    r$   r   zFunc.get_source_expressions%  s    &&&r+   c                     || _         y r   r  r   s     r$   r   zFunc.set_source_expressions(  s
    "'r+   c                     | j                         }||_        t        |j                        D ]'  \  }}|j	                  |||||      |j                  |<   ) |S r   )r   r   	enumerater  r8   )	r   r   r   r   r   r   r   posr   s	            r$   r8   zFunc.resolve_expression+  s\     IIK !!"6"67HC(+(>(>{E9h)A  % 8 r+   c                    |j                   j                  |        g }g }| j                  D ]9  }		 |j                  |	      \  }
}|j                  |
       |j                  |       ; i | j                  |}|||d<   n|j                  d| j                         |xs |j                  d| j                        }|xs |j                  d| j                         }|j#                  |      x|d<   |d<   ||z  |fS # t        $ r: t        |	dt              }|t        u r |j                  t        |            \  }
}Y t        $ r! |j                  t        d            \  }
}Y "w xY w)Nr1  Tfunctiontemplater  r   r   )rz  r  r  ry  r   rd   r0  r:   r   rN  r  r  
setdefaultr  r  r  r  r  )r   r    r   r  r  r  r!   	sql_partsr#   r   arg_sql
arg_paramsr1  datas                 r$   r   zFunc.as_sql6  sm    	//5	**C
D&.&6&6s&;# W%MM*% + /$**.. 'DOOJ6Btxx
DMMBJ488L$//#J
.8ooi.HH]d7m$&&- " V)01>*& *^;&.&6&6u=S7T&U#  D&.&6&6uT{&C#Ds   C<<A E'>%E'&E'c                     t         |          }| j                  d d  |_        | j                  j                         |_        |S r   )rm  r   r  r  )r   r   r   s     r$   r   z	Func.copy]  s8    w|~"&"9"9!"<ZZ__&
r+   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr   r4  )r   r   s     r$   r   z'Func.allowed_default.<locals>.<genexpr>e  s     X@W*:--@W   )allr  rD   s    r$   r4  zFunc.allowed_defaultc  s    X@W@WXXXr+   r/  NNN)r&   r'   r(   r)   r  r  r  r  r   rp  r  r   r   r8   r   r   r   r4  r  r  s   @r$   r  r    sn    H.HJE26 >'( SX	 %'N Y Yr+   r  zdjango.db.models.Valuec                   b     e Zd ZdZdZdZd fd	Zd Zd Z	 d fd	Z	d Z
d	 Zed
        Z xZS )r:   z9Represent a wrapped value as a node within an expression.FTc                 4    t         |   |       || _        y)a:  
        Arguments:
         * value: the value this expression represents. The value will be
           added into the sql parameter list and properly quoted.

         * output_field: an instance of the model field type that this
           expression will return, such as IntegerField() or CharField().
        r   N)rm  r   r   )r   r   r   r   s      r$   r   zValue.__init__q  s     	l3
r+   c                 N    | j                   j                   d| j                  dS )Nr  r  )r   r&   r   rD   s    r$   rp  zValue.__repr__}  s$    ..))*!DJJ>;;r+   c                 ,   |j                   j                  |        | j                  }| j                  }|U| j                  r|j                  ||      }n|j                  ||      }t        |d      r|j                  |||      |gfS |dg fS d|gfS )N)r   get_placeholderNULLz%s)	rz  r  r   r   r   get_db_prep_saveget_db_prep_valuer9   r  )r   r    r   r  r   s        r$   r   zValue.as_sql  s    //5jj11#}}"33CJ3O"44SZ4P|%67#33C:NQTPUUU; 2:cU{r+   c                 <    t         |   |||||      }||_        |S r   )rm  r8   r   )r   r   r   r   r   r   r   r   s          r$   r8   zValue.resolve_expression  s(     G&uk5)XV
r+   c                     g S r   r*   rD   s    r$   r  zValue.get_group_by_cols  r   r+   c                 H   t        | j                  t              rt        j                         S t        | j                  t
              rt        j                         S t        | j                  t              rt        j                         S t        | j                  t              rt        j                         S t        | j                  t        j                        rt        j                         S t        | j                  t        j                        rt        j                         S t        | j                  t        j                        rt        j                          S t        | j                  t        j"                        rt        j$                         S t        | j                  t&              rt        j(                         S t        | j                  t*              rt        j,                         S t        | j                  t.              rt        j0                         S y r   )r   r   r   r   	CharFieldboolr   r   r   r   r   datetimer  dater  timer  	timedeltar  r   r   bytesBinaryFieldr
   	UUIDFieldrD   s    r$   r   zValue._resolve_output_field  sZ   djj#&##%%djj$'&&((djj#&&&((djj%($$&&djj("3"34''))djj(--0##%%djj(--0##%%djj("4"45''))djj'*&&((djj%(%%''djj$'##%% (r+   c                     | j                   S r   )r   rD   s    r$   r1  zValue.empty_result_set_value  s    zzr+   r   r/  )r&   r'   r(   r)   r   r4  r   rp  r   r8   r  r   r5  r1  r  r  s   @r$   r:   r:   h  sK    C HO
<& SX&0  r+   r:   c                   D     e Zd ZdZd fd	Zd Zd Zd Z	 d fd	Z xZ	S )	RawSQLTc                 p    |t        j                         }||c| _        | _        t        |   |       y rl  )r   rI  r"   r#   rm  r   )r   r"   r#   r   r   s       r$   r   zRawSQL.__init__  s4    !<<>L #V$+l3r+   c                 x    dj                  | j                  j                  | j                  | j                        S Nr  )ro  r   r&   r"   r#   rD   s    r$   rp  zRawSQL.__repr__  s)    ""4>>#:#:DHHdkkRRr+   c                 8    d| j                   z  | j                  fS rx  )r"   r#   r   s      r$   r   zRawSQL.as_sql  s     $++--r+   c                     | gS r   r*   rD   s    r$   r  zRawSQL.get_group_by_cols  	    vr+   c                 j   |j                   r|j                   j                  j                  D ]q  }|j                  j                  D ]V  }|j                  j                         | j                  j                         v s8|j                  |j                  |||        q s t        | )  |||||      S r   )rJ  rK  all_parentslocal_fieldscolumnlowerr"   r  r   rm  r8   )	r   r   r   r   r   r   parentparent_fieldr   s	           r$   r8   zRawSQL.resolve_expression  s     ;;++++77$*LL$=$=L#**002dhhnn6FF))(--{E9  %> 8 w);y(
 	
r+   r   r/  )
r&   r'   r(   r4  r   rp  r   r  r8   r  r  s   @r$   r  r    s.    O4S. SX
 
r+   r  c                       e Zd Zd Zd Zy)Starc                      y)Nz'*'r*   rD   s    r$   rp  zStar.__repr__  s    r+   c                 
    dg fS )Nr0   r*   r   s      r$   r   zStar.as_sql  s    Bwr+   N)r&   r'   r(   rp  r   r*   r+   r$   r"  r"    s    r+   r"  c                   @     e Zd ZdZd fd	Zd Zd Z	 ddZd Z xZ	S )	DatabaseDefaultz^
    Expression to use DEFAULT keyword during insert otherwise the underlying expression.
    c                 2    t         |   |       || _        y r   rm  r   r   r   r   r   r   s      r$   r   zDatabaseDefault.__init__  s    &$r+   c                     | j                   gS r   r   rD   s    r$   r   z&DatabaseDefault.get_source_expressions        r+   c                     |\  | _         y r   r+  r   s     r$   r   z&DatabaseDefault.set_source_expressions  s    "r+   c                 x    | j                   j                  |||||      }|s|S t        || j                        S )N)r   r   r   r   r   r   )r   r8   r&  r   )r   r   r   r   r   r   resolved_expressions          r$   r8   z"DatabaseDefault.resolve_expression  sQ     #oo@@# A 
 &&d.H.H
 	
r+   c                 l    |j                   j                  s|j                  | j                        S dg fS )NDEFAULT)r  "supports_default_keyword_in_insertry  r   r   s      r$   r   zDatabaseDefault.as_sql  s0    ""EE##DOO44"}r+   r   r/  )
r&   r'   r(   r)   r   r   r   r8   r   r  r  s   @r$   r&  r&    s(    %!# SX
$r+   r&  c                   F     e Zd ZdZdZd	 fd	Zd Zd Zd Zd Z	d Z
 xZS )
ColTFc                 L    ||}t         |   |       ||c| _        | _        y rl  )rm  r   aliastarget)r   r6  r7  r   r   s       r$   r   zCol.__init__  s.    !Ll3"'
DKr+   c                     | j                   | j                  }}|r|t        |      fnt        |      f}dj                  | j                  j
                  dj                  |            S )Nr  r   )r6  r7  r   ro  r   r&   r  )r   r6  r7  identifierss       r$   rp  zCol.__repr__  sO    

DKKv.3uc&k*#f+t~~66		+8NOOr+   c                     | j                   | j                  j                  }}|r||fn|f}dj                  t	        |j
                  |            }|g fS Nr  )r6  r7  r  r  mapquote_name_unless_alias)r   r    r   r6  r  r9  r"   s          r$   r   z
Col.as_sql  sL    

DKK$6$6v).ufoVIhhs8;;[IJBwr+   c                     | j                   | S | j                  |j                  | j                   | j                         | j                  | j                        S r   )r6  r   r  r7  r   r  s     r$   r   zCol.relabeled_clone   sF    ::K~~LLTZZ0$++t?P?P
 	
r+   c                     | gS r   r*   rD   s    r$   r  zCol.get_group_by_cols'  r  r+   c                     | j                   | j                  k(  r| j                  j                  |      S | j                  j                  |      | j                   j                  |      z   S r   )r7  r   r   r   s     r$   r   zCol.get_db_converters*  s^    ;;$+++$$66zBB  22
KK))*56 	6r+   r   )r&   r'   r(   r   r  r   rp  r   r   r  r   r  r  s   @r$   r4  r4    s.    !% 0P

6r+   r4  c                   V     e Zd ZdZ fdZd Zd Zd Z	 ddZd Z	d Z
d	 Zd
 Z xZS )Refz~
    Reference to column alias of the query. For example, Ref('sum_cost') in
    qs.annotate(sum_cost=Sum('cost')) query.
    c                 @    t         |           ||c| _        | _        y r   )rm  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                  | j                        S r  )ro  r   r&   r
  r   rD   s    r$   rp  zRef.__repr__<  s)    ""4>>#:#:DIIt{{SSr+   c                     | j                   gS r   r   rD   s    r$   r   zRef.get_source_expressions?  s    }r+   c                     |\  | _         y r   rF  r   s     r$   r   zRef.set_source_expressionsB  s    r+   c                     | S r   r*   r  s         r$   r8   zRef.resolve_expressionE  s	    
 r+   c                     | j                   hS r   )r
  rD   s    r$   r	  zRef.get_refsL  s    		{r+   c                 f    | j                         }| j                  j                  |      |_        |S r   )r   r   r   )r   r  r   s      r$   r   zRef.relabeled_cloneO  s(    		{{228<r+   c                 P    |j                   j                  | j                        g fS r   )rz  
quote_namer
  r   s      r$   r   z
Ref.as_sqlT  s     ~~((3R77r+   c                     | gS r   r*   rD   s    r$   r  zRef.get_group_by_colsW  r  r+   r/  )r&   r'   r(   r)   r   rp  r   r   r8   r	  r   r   r  r  r  s   @r$   rB  rB  2  s=    
.T SX
8r+   rB  c                   8     e Zd ZdZdZd Z fdZd Zd Z xZ	S )ExpressionListz
    An expression containing multiple expressions. Can be used to provide a
    list of expressions as an argument to another expression, like a partition
    clause.
    z%(expressions)sc                 Z    | j                   j                  d | j                  D              S )Nc              3   2   K   | ]  }t        |        y wr   r  r  s     r$   r   z)ExpressionList.__str__.<locals>.<genexpr>e  r  r  )r  r  r  rD   s    r$   rr  zExpressionList.__str__d  s#    ###P8O8O#PPPr+   c                 <    | j                   syt        |   |i |S )N) r*   )r  rm  r   )r   rP  r  r   s      r$   r   zExpressionList.as_sqlg  s#    &&w~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Ar+   c                 r    g }| j                         D ]!  }|j                  |j                                # |S r   r   r  r  )r   group_by_colsr   s      r$   r  z ExpressionList.get_group_by_colsp  s7    //1D  !7!7!9: 2r+   )
r&   r'   r(   r)   r  rr  r   r%   r  r  r  s   @r$   rO  rO  [  s%     !HQ/
Br+   rO  c                   &     e Zd ZdZdZ fdZ xZS )OrderByListFzORDER BY %(expressions)sc                 6    d |D        }t        |   |i | y )Nc              3      K   | ]7  }t        |t              r!|d    dk(  rt        t        |dd       d      n| 9 yw)r   r/   r  NTr   )r   r   r  r   r   s     r$   r   z'OrderByList.__init__.<locals>.<genexpr>|  sK      
 $ dC(T!W^ $qr(5 $s   =?)rm  r   )r   r   r  r   s      r$   r   zOrderByList.__init__{  s(    
 $
 	+//r+   )r&   r'   r(   r4  r  r   r  r  s   @r$   rY  rY  w  s    O)H	0 	0r+   rY  z"django.db.models.ExpressionWrapperc                   T     e Zd ZdZ fdZd Zd Z fdZd Zd Z	e
d        Z xZS )	ExpressionWrapperz
    An expression that can wrap another expression so that it can provide
    extra context to the inner expression, such as the output_field.
    c                 4    t         |   |       || _        y rl  r(  r)  s      r$   r   zExpressionWrapper.__init__  s    l3$r+   c                     |d   | _         y Nr   r+  r   s     r$   r   z(ExpressionWrapper.set_source_expressions      (r+   c                     | j                   gS r   r+  rD   s    r$   r   z(ExpressionWrapper.get_source_expressions  r,  r+   c                     t        | j                  t              r;| j                  j                         }| j                  |_        |j                         S t        |          S r   )r   r   r8  r   r   r  rm  r   r   r   s     r$   r  z#ExpressionWrapper.get_group_by_cols  sP    dooz2--/J&*&7&7J#//11 w(**r+   c                 8    |j                  | j                        S r   )ry  r   r   s      r$   r   zExpressionWrapper.as_sql  s    00r+   c                 b    dj                  | j                  j                  | j                        S r  )ro  r   r&   r   rD   s    r$   rp  zExpressionWrapper.__repr__  s!    t~~66HHr+   c                 .    | j                   j                  S r   )r   r4  rD   s    r$   r4  z!ExpressionWrapper.allowed_default  s    ...r+   )r&   r'   r(   r)   r   r   r   r  r   rp  r5  r4  r  r  s   @r$   r^  r^    s;    
%#!+1I / /r+   r^  c                   F     e Zd ZdZ fdZd Z fdZ	 d fd	Zd Z xZ	S )r   z1The logical negation of a conditional expression.c                 L    t         |   |t        j                                y rl  )rm  r   r   r   re  s     r$   r   zNegatedExpression.__init__  s    &2E2E2GHr+   c                 6    | j                   j                         S r   )r   r   rD   s    r$   r   zNegatedExpression.__invert__  s    ##%%r+   c                 F   	 t         |   ||      \  }}|j                  j                  }|j                  | j                        sd| d|fS d| |fS # t        $ rA |j                  j                  }|j
                  sY y|j                  t        d            cY S w xY w)N)z1=1r*   Tz
CASE WHEN z = 0 THEN 1 ELSE 0 ENDzNOT )rm  r   r   r   r  &supports_boolean_expr_in_select_clausery  r:   rz  0conditional_expression_supported_in_where_clauser   )r   r    r   r"   r#   r  rz  r   s          r$   r   zNegatedExpression.as_sql  s    	1'.:>KC !!%% CCDOOTu$:;VCCcU|V##  	1**33HBB ##E$K00		1s   A +B B B c                 r    t         |   |||||      }t        |j                  dd      st	        d      |S )Nra   Fz*Cannot negate non-conditional expressions.)rm  r8   rd   r   r  )r   r   r   r   r   r   r  r   s          r$   r8   z$NegatedExpression.resolve_expression  sD     7-;y(
 x**M5AHIIr+   c                     |j                   j                  j                  }|j                   j                  j                  s# || j
                        rdj                  |      }||fS NzCASE WHEN {} THEN 1 ELSE 0 END)r   rz  rn  r  rm  r   ro  )r   r    r"   r#   $expression_supported_in_where_clauses        r$   r)  zNegatedExpression.select_format  s[    
 ##TT 	- ##,,SS4T__E299#>CF{r+   r/  )
r&   r'   r(   r)   r   r   r   r8   r)  r  r  s   @r$   r   r     s'    ;I&$" SXr+   r   zdjango.db.models.Whenc                   n     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)sFc                 2   |r+|t        di |d }}nt        |dd      rt        |fi |d }}|t        |dd      r|rt        d      t        |t               r|st	        d      t
        |   d        || _        | j                  |      d   | _	        y )Nra   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   rd   r  r   r-  rm  r   	conditionr   r_  )r   rv  thenlookupsr   s       r$   r   zWhen.__init__  s     %&\\47	M59%&y%<G%<d7	GI}e$LPW"  i#IPQQd+"--d3A6r+   c                 :    d| j                   d| j                  S )NzWHEN z THEN rv  r_  rD   s    r$   rr  zWhen.__str__  s    $(NNDKK@@r+   c                 <    d| j                   j                  d| dS N<z: >r   r&   rD   s    r$   rp  zWhen.__repr__      !^^44d;;r+   c                 2    | j                   | j                  gS r   rz  rD   s    r$   r   zWhen.get_source_expressions  s    ,,r+   c                 "    |\  | _         | _        y r   rz  r   s     r$   r   zWhen.set_source_expressions  s    &+#r+   c                 0    | j                   j                  gS r   )r_  r   rD   s    r$   r   zWhen.get_source_fields  s    1122r+   c                     | j                         }||_        t        |j                  d      r$|j                  j	                  ||||d      |_        |j
                  j	                  |||||      |_        |S )Nr8   F)r   r   r9   rv  r8   r_  )r   r   r   r   r   r   r   s          r$   r8   zWhen.resolve_expression  sp     IIK 1;; 45++88{E9eAK 88..;y(
 r+   c                    |j                   j                  |        |}g }|j                  | j                        \  }}||d<   |j                  | j                        \  }	}
|	|d<   |xs | j
                  }||z  g |||
fS )Nrv  r_  )rz  r  ry  rv  r_  r  )r   r    r   r  r!   template_params
sql_paramscondition_sqlcondition_params
result_sqlresult_paramss              r$   r   zWhen.as_sql  s    //5'
*2*:*:4>>*J'''4$$,$4$4T[[$A!
M$.!,t}}/) ,
,
,
 ,
 
 	
r+   c                 r    g }| j                         D ]!  }|j                  |j                                # |S r   rV  r  s      r$   r  zWhen.get_group_by_cols#  s4    113FKK0023 4r+   c                 ^    | j                   j                  xr | j                  j                  S r   )rv  r4  r_  rD   s    r$   r4  zWhen.allowed_default*  s!    ~~--M$++2M2MMr+   NNr/  r   )r&   r'   r(   r  ra   r   rr  rp  r   r   r   r8   r   r  r   r4  r  r  s   @r$   rt  rt    sX    3HK7"A<-,3
 SX
 N Nr+   rt  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	        |      | _        | j                  |      d   | _        || _        y )Nc              3   <   K   | ]  }t        |t                y wr   )r   rt  )r   cases     r$   r   z Case.__init__.<locals>.<genexpr>A  s     <ed:dD)er   z.Positional arguments must all be When objects.r   )	r  r  rm  r   listcasesr   r  r  )r   r  r   r  r  r   s        r$   r   zCase.__init__@  sS    <e<<LMM&%[
..w7:
r+   c                 f    ddj                  d | j                  D              d| j                  S )NzCASE r   c              3   2   K   | ]  }t        |        y wr   r  )r   r   s     r$   r   zCase.__str__.<locals>.<genexpr>J  s     1jc!fjr  z, ELSE )r  r  r  rD   s    r$   rr  zCase.__str__H  s)    II1djj11LL
 	
r+   c                 <    d| j                   j                  d| dS r|  r  rD   s    r$   rp  zCase.__repr__N  r  r+   c                 6    | j                   | j                  gz   S r   r  r  rD   s    r$   r   zCase.get_source_expressionsQ  s    zzT\\N**r+   c                 "    |^ | _         | _        y r   r  r   s     r$   r   zCase.set_source_expressionsT  s    $)!T\r+   c                     | j                         }||_        t        |j                        D ]'  \  }}|j	                  |||||      |j                  |<   ) |j
                  j	                  |||||      |_        |S r   )r   r   r  r  r8   r  )	r   r   r   r   r   r   r   r  r  s	            r$   r8   zCase.resolve_expressionW  sz     IIK "177+IC22{E9hAGGCL , II00;y(
	 r+   c                 L    t         |          }|j                  d d  |_        |S r   )rm  r   r  )r   r   r   s     r$   r   z	Case.copye  s"    GLN''!*r+   c                 $   |j                   j                  |        | j                  s|j                  | j                        S i | j
                  |}g }g }|j                  | j                        \  }	}
| j                  D ]9  }	 |j                  |      \  }}|j                  |       |j                  |       ; |s|	|
fS |xs | j                  }|j                  |      |d<   |	|d<   |j                  |
       |xs |j                  d| j                        }||z  }| j                  (|j                   j!                  | j"                        |z  }||fS # t        $ r Y t        $ r" |j                  |j                        \  }	}
Y  w xY w)Nr  r  r  )rz  r  r  ry  r  r  r   r   r_  rN  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zz##DLL119TZZ9=9

&.&6&6t||&D#^JJD(0(8(8(>%+ h'k*  ..!5T%5%5#.#3#3J#? %0	".)M22:t}}M(%%1..55d6G6GH3NCJ# "   .6.>.>t{{.K+^s   E	F%&FFc                 l    | j                   s| j                  j                         S t        | 	         S r   )r  r  r  rm  )r   r   s    r$   r  zCase.get_group_by_cols  s+    zz<<1133w(**r+   c                 j    | j                   j                  xr t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr   r  )r   case_s     r$   r   z'Case.allowed_default.<locals>.<genexpr>  s      4
/9eE!!zr  )r  r4  r  r  rD   s    r$   r4  zCase.allowed_default  s1    ||++ 
 4
/3zz4
 1
 	
r+   r/  r  )r&   r'   r(   r)   r  r  r   rr  rp  r   r   r8   r   r   r  r   r4  r  r  s   @r$   r  r  /  si    
 5HK'+$ 
<+* SX @D@+
 
 
r+   r  c                   t     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|      j                         | _        d| j                  _        || _        t
        |   |       y )Nr   T)rd   r   r   r   r  rm  r   )r   querysetr   r  r   s       r$   r   zSubquery.__init__  s<    Xw9??A
"


&r+   c                     | j                   gS r   r   rD   s    r$   r   zSubquery.get_source_expressions  s    

|r+   c                     |d   | _         y ra  r  r   s     r$   r   zSubquery.set_source_expressions  s    1X
r+   c                 .    | j                   j                  S r   )r   r   rD   s    r$   r   zSubquery._resolve_output_field  s    zz&&&r+   c                 b    t         |          }|j                  j                         |_        |S r   )rm  r   r   r   )r   r   r   s     r$   r   zSubquery.copy  s'    kk'')r+   c                 .    | j                   j                  S r   )r   external_aliasesrD   s    r$   r  zSubquery.external_aliases  s    zz***r+   c                 6    | j                   j                         S r   )r   get_external_colsrD   s    r$   r  zSubquery.get_external_cols  s    zz++--r+   c                     |j                   j                  |        i | j                  |}| j                  j	                  ||      \  }}|dd |d<   |xs |j                  d| j                        }||z  }||fS )Nr  rA   r   r  )rz  r  r  r   r   r  r  )	r   r    r   r  r!   r  subquery_sqlr  r"   s	            r$   r   zSubquery.as_sql  s    //59TZZ9=9#'::#4#4Xz#J j&21R&8
#M22:t}}M(Jr+   c                 :    | j                   j                  |       S )N)wrapper)r   r  rD   s    r$   r  zSubquery.get_group_by_cols  s    zz++D+99r+   r   )r&   r'   r(   r)   r  r   r1  r   r   r   r   r   r   r5  r  r  r   r  r  r  s   @r$   r  r    s\    
  H!H''
 + +.:r+   r  c                   X     e Zd ZdZ ej
                         ZdZ fdZd Z	 fdZ
 xZS )ExistszEXISTS(%(subquery)s)Fc                 d    t        |   |fi | | j                  j                         | _        y r   )rm  r   r   exists)r   r  r  r   s      r$   r   zExists.__init__  s)    ,V,ZZ&&(
r+   c                 l    |j                   j                  j                  sdj                  |      }||fS rq  )r   r  rm  ro  r*  s       r$   r)  zExists.select_format  s3     ""++RR299#>CF{r+   c                     	 t        |   |g|i |S # t        $ rA |j                  j                  }|j
                  sY y|j                  t        d            cY S w xY w)N)z1=0r*   F)rm  r   r   r   r  rm  ry  r:   )r   r    rP  r  r  r   s        r$   r   zExists.as_sql  sb    	27>(<T<V<< 	2**33HBB ##E%L11		2s    +A A A )r&   r'   r(   r  r   r   r   r1  r   r)  r   r  r  s   @r$   r  r    s2    %H&6&&(L")2 2r+   r  zdjango.db.models.OrderByc                   X    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y)r  z%(expression)s %(ordering)sFNc                     |r|rt        d      |du s|du rt        d      || _        || _        || _        t	        |d      st        d      || _        y )Nz1nulls_first and nulls_last are mutually exclusiveFz7nulls_first and nulls_last values must be True or None.r8   z%expression must be an expression type)r-  nulls_first
nulls_lastr   r9   r   )r   r   r   r  r  s        r$   r   zOrderBy.__init__  sb    :PQQ%:#6VWW&$$z#78DEE$r+   c                 x    dj                  | j                  j                  | j                  | j                        S )Nz{}({}, descending={}))ro  r   r&   r   r   rD   s    r$   rp  zOrderBy.__repr__  s.    &--NN##T__doo
 	
r+   c                     |d   | _         y ra  r+  r   s     r$   r   zOrderBy.set_source_expressions  rb  r+   c                     | j                   gS r   r+  rD   s    r$   r   zOrderBy.get_source_expressions   r,  r+   c                 R   |xs | j                   }|j                  j                  r$| j                  rd|z  }ny| j                  rmd|z  }ng| j                  r(| j
                  r|j                  j                  sd|z  }n3| j                  r'| j
                  s|j                  j                  sd|z  }|j                  j                  |        |j                  | j                        \  }}|| j
                  rdndd|}||j                  d      z  }||z  j                         |fS )	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_firstrz  r  ry  r   countrstrip)r   r    r   r  r!   expression_sqlr#   placeholderss           r$   r   zOrderBy.as_sql  s
   ,t}}??*X5!!+h6J$7$7$L$L88C!!OO
(;(;(P(P<xG//5!)!1!1$//!B("&//u
 

 	(..!122<'//1699r+   c                 0   |j                   j                  so|j                  j                  | j                        rJ| j                         }t        t        | j                  d      d      |_         |j                  ||      S | j                  ||      S )NT)rw  F)r  )	r  rm  rz  rn  r   r   r  rt  r   )r   r    r   r   s       r$   	as_oraclezOrderBy.as_oracle  s|     ##JJOO 99;D"T__40DO 4;;x44{{8Z00r+   c                 r    g }| j                         D ]!  }|j                  |j                                # |S r   rV  r  s      r$   r  zOrderBy.get_group_by_cols.  s4    113FKK0023 4r+   c                     | j                    | _         | j                  rd| _        d | _        | S | j                  rd| _        d | _        | S r}   )r   r  r  rD   s    r$   r$  zOrderBy.reverse_ordering4  sL    "oo-"DO#D  __#D"DOr+   c                     d| _         y rG   r\  rD   s    r$   r  zOrderBy.asc>  s	    r+   c                     d| _         y r}   r\  rD   s    r$   r!  zOrderBy.descA  s	    r+   )FNNr   )r&   r'   r(   r  ra   r,  r   rp  r   r   r   r  r  r$  r  r!  r*   r+   r$   r  r    sD    ,HK',$
%

#!:41" r+   r  c                   j     e Zd ZdZdZdZ	 	 	 	 d fd	Zd Zd Zd Z	ddZ
 fd	Zd
 Zd Zd Z xZS )Windowz %(expression)s OVER (%(window)s)FTc                    || _         || _        || _        t        |dd      s"t	        d|j
                  j                  z        | j                   It        | j                   t        t        f      s| j                   f| _         t        | j                    | _         | j                  ~t        | j                  t        t        f      rt        | j                   | _        nFt        | j                  t        t        f      rt        | j                        | _        nt	        d      t        | =  |       | j!                  |      d   | _        y )Nr3  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framerd   r-  r   r&   r   rO  r  rO  rY  r   r   rm  r   r   source_expression)r   r   r  r  r  r   r   s         r$   r   zWindow.__init__M  s    ) 
z#6>E&&//0 
 (d//%?%)%6%6$8! .0A0A BD==$$--$7 +T]] ;DMMNC+@A +DMM : H  	l3!%!8!8!DQ!Gr+   c                 .    | j                   j                  S r   )r  r   rD   s    r$   r   zWindow._resolve_output_fieldq  s    %%222r+   c                 ^    | j                   | j                  | j                  | j                  gS r   r  r  r  r  rD   s    r$   r   zWindow.get_source_expressionst  s%    &&(9(94==$**UUr+   c                 :    |\  | _         | _        | _        | _        y r   r  r   s     r$   r   zWindow.set_source_expressionsw  s    OTL 14=$*r+   c                    |j                   j                  |        |j                  j                  st	        d      |j                  | j                        \  }}g d}}| j                  @| j                  j                  ||d      \  }}	|j                  |       |t        |	      z  }| j                  =|j                  | j                        \  }
}|j                  |
       |t        |      z  }| j                  r=|j                  | j                        \  }}|j                  |       |t        |      z  }|xs | j                  }||dj                  |      j                         dz  g ||fS )Nz1This backend does not support window expressions.r*   zPARTITION BY %(expressions)s)r    r   r  r  )r   window)rz  r  r  supports_over_clauser   ry  r  r  r   rN  rO  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  sj   //5""77#$WXX#++D,B,BC&$&M
(#'#4#4#;#;!%7 $< $ Hj
 h'U:..M==$&.&6&6t}}&E#I|i(U<00M::&.&6&6tzz&B#I|i(U<00M,t}} h#((::N:T:T:VWW%f%}%
 	
r+   c                 6   t        | j                  t        j                        rc| j	                         } |j
                         }t        j                         |d   _         |j                  |       t        t        |+  ||      S | j                  ||      S ra  )r   r   r   r   r   r   r   r   rm  r  r%   r   )r   r    r   r   r  r   s        r$   r%   zWindow.as_sqlite  s    d'')<)<=99;D!<!<!<!>171B1B1Dq!.'D''(:;0:FF{{8Z00r+   c           	          dj                  t        | j                        | j                  rdt        | j                        z   ndt        | j                  xs d      t        | j
                  xs d            S )Nz{} OVER ({}{}{})zPARTITION BY rS  )ro  r   r  r  r  r  rD   s    r$   rr  zWindow.__str__  sb    !((&&'8<8I8IOc$"3"344r#$

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

DHH%%r+   c                 N    | j                   yd| j                   j                   S )NrS  z	 EXCLUDE )r   r   rD   s    r$   get_exclusionzWindowFrame.get_exclusion  s'    >>!4>>//011r+   c                 j   |j                   j                  |        | j                  || j                  j                  | j
                  j                        \  }}| j                  r!|j                  j                  st        d      | j                  | j                  ||| j                         dz  g fS )Nz6This backend does not support window frame exclusions.
frame_typer  r  exclude)rz  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00

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

s >>*"5"5"N"N#H  MM"oo--/	 	
 		
r+   c                 <    d| j                   j                  d| dS r|  r  rD   s    r$   rp  zWindowFrame.__repr__  r  r+   c                     g S r   r*   rD   s    r$   r  zWindowFrame.get_group_by_cols  r   r+   c                 &   | j                   j                  V| j                   j                  dk  r=dt        | j                   j                        t        j                  j
                  fz  }n| j                   j                  4| j                   j                  dk(  rt        j                  j                  }n}| j                   j                  M| j                   j                  dkD  r4d| j                   j                  t        j                  j                  fz  }nt        j                  j                  }| j                  j                  M| j                  j                  dkD  r4d| j                  j                  t        j                  j                  fz  }n| j                  j                  4| j                  j                  dk(  rt        j                  j                  }n| j                  j                  V| j                  j                  dk  r=dt        | j                  j                        t        j                  j
                  fz  }nt        j                  j                  }| j                  | j                  ||| j                         dz  S )Nr   z%d %sr  )r  r   absr   rz  	PRECEDINGr  	FOLLOWINGUNBOUNDED_PRECEDINGr  UNBOUNDED_FOLLOWINGr  r  r  )r   r  r  s      r$   rr  zWindowFrame.__str__  s   ::'DJJ,<,<q,@s4::#3#34jnn6N6NOOEZZ)djj.>.>!.CNN..EZZ)djj.>.>.Btzz//1I1IJJENN66E88>>%$((..1*<TXX^^Z^^-E-EFFCXX^^'DHHNNa,?..,,CXX^^'DHHNNQ,>S0*..2J2JKKC..44C}}//))+	 
 
 	
r+   c                     t        d      )Nz3Subclasses must implement window_frame_start_end().r   r   r   r  r  s       r$   r
  z"WindowFrame.window_frame_start_end  s    !"WXXr+   r  )r&   r'   r(   r)   r  r   r   r   r  r   rp  r  rr  r
  r*   r+   r$   r  r    s=     IH#%&2

(<
2Yr+   r  c                       e Zd ZdZd Zy)RowRangeROWSc                 :    |j                   j                  ||      S r   )rz  window_frame_rows_start_endr  s       r$   r
  zRowRange.window_frame_start_end  s    ~~99%EEr+   Nr&   r'   r(   r  r
  r*   r+   r$   r  r    s    JFr+   r  c                       e Zd ZdZd Zy)
ValueRangeRANGEc                 :    |j                   j                  ||      S r   )rz  window_frame_range_start_endr  s       r$   r
  z!ValueRange.window_frame_start_end$  s    ~~::5#FFr+   Nr  r*   r+   r$   r  r  !  s    JGr+   r  )fr   r
  rW  r=  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   r8  rI   rC   rU   rY   r]   PositiveIntegerFieldrO   r   r   r   ri   rz   rm   rp   ru   r  from_iterabler  r  r  r  _connector_combinationsr\  r`  drG  r=   field_typesr]  r^  r_  rX  ri  r;   r  r  r   r  r  r  r  r:   r  r"  r&  r4  rB  rO  rY  r^  r   rt  r  r  r  r  r  r  r  r  r  )r=   s   0r$   <module>r4     s       #      L L B B # 1 * 4 B /  A' A'HK K\
 !# !# !#p NNNNNNNNNN

I 	++++++
 	

0 NNNNNN NNNNNN	
	
I 	  &"5"5v7J7JK 1 163D3DE  &"5"5v7J7JK
 	

	
4 NNNNNNNNNN

I 	  &"5"5v7J7JK  &"5"5v7J7JK  &"3"3V5F5FG 3 3V5F5FG	
 	

* ##$$
	
I 	  &"5"5v7J7JK
 	

	2 NNNNNNNNNNNN

I 	4   ''''%%#  	
 		

, 	v33V5I5IJ!!6#7#79M9MN!!6#3#3V5I5IJ!!6#7#79M9MN!!6#7#79M9MNv33V5E5EF!!6#3#3V5E5EF
 	v33V5I5IJ!!6#7#79M9MNv//1E1EFv33V5I5IJ!!6#3#3V5I5IJ!!6#7#79M9MN!!6#7#79M9MNv33V5E5EFv//1E1EF
Ow r %T* 	A 
!A"#'')	; +Cf&sIsFC !, #, 
! S!! "!cE+Z cEL0+ 0f
, 
 *+,
 , ,,^"q "J
q 
6UQ 6Ur -.eYz eY /eYP ./M
 M 0M` 
Z  
F: $j $N$6* $6N&* &RT 80. 0  :;!/*J !/ <!/H0) 0f -.LN: LN /LN^ -.c
z c
 /c
L2:~z 2:j2X 26 01[j [ 2[|q qh>4 >TY* TYnF{ FG Gs/"$ s!   ,^+A0^0:B^5	,^:
=A^?