
    hu                       S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJrJrJr  S S	KJrJrJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SK J!r!J"r"  S SK#J$r$   " S S5      r% " S S5      r& " S S5      r'\ " S S\'\&5      5       r(\&RR                  \&RT                  \&RV                  \&RX                  \&RZ                  4 V s0 s H(  n U \R\                  \R\                  \R\                  4/_M*     sn \&RR                  \&R^                  \&RT                  \&RV                  \&RX                  \&RZ                  4 V s0 s Hl  n U \R`                  \R`                  \R`                  4\Rb                  \Rb                  \Rb                  4\Rd                  \Rd                  \Rd                  4/_Mn     sn \&RR                  \&R^                  \&RT                  \&RV                  \&RX                  4 V s0 s H  n U \R`                  \Rd                  \Rd                  4\Rd                  \R`                  \Rd                  4\R`                  \Rb                  \Rb                  4\Rb                  \R`                  \Rb                  4/_M     sn \&Rf                  \&Rh                  \&Rj                  \&Rl                  \&Rn                  4 V s0 s H(  n U \R`                  \R`                  \R`                  4/_M*     sn \&RR                  \&R^                  \&RT                  \&RV                  \&RX                  \&RZ                  4 V s0 s HC  n U \8" \Rs                  S \R`                  \Rd                  \Rb                  4 5       5      5      _ME     sn \&RR                  \Rt                  \Rv                  \Rx                  4\Rx                  \Rv                  \Rx                  4\Rv                  \Rt                  \Rx                  4\Rv                  \Rx                  \Rx                  4\Rv                  \Rv                  \Rv                  4\Rz                  \Rv                  \Rz                  4\Rv                  \Rz                  \Rz                  4/0\&R^                  \Rt                  \Rv                  \Rx                  4\Rx                  \Rv                  \Rx                  4\Rt                  \Rt                  \Rv                  4\Rt                  \Rx                  \Rv                  4\Rx                  \Rt                  \Rv                  4\Rx                  \Rx                  \Rv                  4\Rv                  \Rv                  \Rv                  4\Rz                  \Rv                  \Rz                  4\Rz                  \Rz                  \Rv                  4/	0/r>\" \85      r?S r@\> H5  rA\AR                  5        H  u  rCrD\D H  u  rErFrG\@" \E\C\F\G5        M     M      M7     \R                  " SS9S 5       rI " S S\%\(5      rJ " S S \J5      rK " S! S"\J5      rL\" S#S$9 " S% S&\&5      5       rM " S' S(\M5      rN " S) S*\M5      rO " S+ S,\M5      rP\" S-S$9 " S. S/\%\(5      5       rQ\" S0S$9 " S1 S2\%\(5      5       rR " S3 S4\(5      rS " S5 S6\(5      rT " S7 S8\(5      rU " S9 S:\(5      rV " S; S<\(5      rW " S= S>\Q5      rX " S? S@\X5      rY\" SAS$9 " SB SC\%\(5      5       rZ " SD SE\Z5      r[\" SFS$9 " SG SH\(5      5       r\\" SIS$9 " SJ SK\%\(5      5       r] " SL SM\'\&5      r^ " SN SO\^5      r_\" SPS$9 " SQ SR\(5      5       r` " SS ST\%\(5      ra " SU SV\	5      rb " SW SX\(5      rc " SY SZ\c5      rd " S[ S\\c5      regs  sn f s  sn f s  sn f s  sn f s  sn f )]    N)defaultdictDecimal)Enum)chainNoneType)UUID)EmptyResultSet
FieldErrorFullResultSet)DatabaseErrorNotSupportedError
connection)fields)
LOOKUP_SEP)Q)deconstructible)cached_propertyclassproperty)make_hashablec                       \ rS rSrSrS rSrg)SQLiteNumericMixin   zd
Some expressions with output_field=DecimalField() must be cast to
numeric to be properly filtered.
c                     U R                   " X40 UD6u  pE U R                  R                  5       S:X  a  SU-  nXE4$ ! [         a     XE4$ f = f)NDecimalFieldz(CAST(%s AS NUMERIC)))as_sqloutput_fieldget_internal_typer   )selfcompilerr   extra_contextsqlparamss         N/var/www/html/env/lib/python3.13/site-packages/django/db/models/expressions.py	as_sqliteSQLiteNumericMixin.as_sqlite   sc    kk(H-H	  224F-3 {  	{	s   #= 
AA N)__name__
__module____qualname____firstlineno____doc__r&   __static_attributes__r(       r%   r   r      s    
r/   r   c                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S(r*g))*
Combinable&   zi
Provide the ability to combine one or two objects with
some connector. For example F('foo') + F('bar').
+-*/^z%%&|z<<z>>#c                 x    [        US5      (       d  [        U5      nU(       a  [        XU 5      $ [        XU5      $ Nresolve_expression)hasattrValueCombinedExpression)r    other	connectorreverseds       r%   _combineCombinable._combine?   s6    u233%LE%e==!$599r/   c                 <    U R                  SU R                  S5      $ )NFrD   MULr    s    r%   __neg__Combinable.__neg__L   s    }}R511r/   c                 :    U R                  XR                  S5      $ NFrD   ADDr    rA   s     r%   __add__Combinable.__add__O       }}UHHe44r/   c                 :    U R                  XR                  S5      $ rN   rD   SUBrQ   s     r%   __sub__Combinable.__sub__R   rT   r/   c                 :    U R                  XR                  S5      $ rN   rH   rQ   s     r%   __mul__Combinable.__mul__U   rT   r/   c                 :    U R                  XR                  S5      $ rN   rD   DIVrQ   s     r%   __truediv__Combinable.__truediv__X   rT   r/   c                 :    U R                  XR                  S5      $ rN   rD   MODrQ   s     r%   __mod__Combinable.__mod__[   rT   r/   c                 :    U R                  XR                  S5      $ rN   rD   POWrQ   s     r%   __pow__Combinable.__pow__^   rT   r/   c                     [        U SS5      (       a)  [        USS5      (       a  [        U 5      [        U5      -  $ [        S5      eNconditionalFFUse .bitand(), .bitor(), and .bitxor() for bitwise logical operations.getattrr   NotImplementedErrorrQ   s     r%   __and__Combinable.__and__a   C    4..75-QV3W3WT7QuX%%!T
 	
r/   c                 :    U R                  XR                  S5      $ rN   )rD   BITANDrQ   s     r%   bitandCombinable.bitandh       }}UKK77r/   c                 :    U R                  XR                  S5      $ rN   )rD   BITLEFTSHIFTrQ   s     r%   bitleftshiftCombinable.bitleftshiftk   s    }}U$5$5u==r/   c                 :    U R                  XR                  S5      $ rN   )rD   BITRIGHTSHIFTrQ   s     r%   bitrightshiftCombinable.bitrightshiftn   s    }}U$6$6>>r/   c                     [        U SS5      (       a)  [        USS5      (       a  [        U 5      [        U5      -  $ [        S5      erm   rp   rQ   s     r%   __xor__Combinable.__xor__q   ru   r/   c                 :    U R                  XR                  S5      $ rN   )rD   BITXORrQ   s     r%   bitxorCombinable.bitxorx   rz   r/   c                     [        U SS5      (       a)  [        USS5      (       a  [        U 5      [        U5      -  $ [        S5      erm   rp   rQ   s     r%   __or__Combinable.__or__{   ru   r/   c                 :    U R                  XR                  S5      $ rN   )rD   BITORrQ   s     r%   bitorCombinable.bitor   s    }}UJJ66r/   c                 :    U R                  XR                  S5      $ NTrO   rQ   s     r%   __radd__Combinable.__radd__       }}UHHd33r/   c                 :    U R                  XR                  S5      $ r   rV   rQ   s     r%   __rsub__Combinable.__rsub__   r   r/   c                 :    U R                  XR                  S5      $ r   rH   rQ   s     r%   __rmul__Combinable.__rmul__   r   r/   c                 :    U R                  XR                  S5      $ r   r^   rQ   s     r%   __rtruediv__Combinable.__rtruediv__   r   r/   c                 :    U R                  XR                  S5      $ r   rc   rQ   s     r%   __rmod__Combinable.__rmod__   r   r/   c                 :    U R                  XR                  S5      $ r   rh   rQ   s     r%   __rpow__Combinable.__rpow__   r   r/   c                     [        S5      eNro   rr   rQ   s     r%   __rand__Combinable.__rand__       !T
 	
r/   c                     [        S5      er   r   rQ   s     r%   __ror__Combinable.__ror__   r   r/   c                     [        S5      er   r   rQ   s     r%   __rxor__Combinable.__rxor__   r   r/   c                     [        U 5      $ N)NegatedExpressionrJ   s    r%   
__invert__Combinable.__invert__   s     &&r/   r(   N)+r)   r*   r+   r,   r-   rP   rW   rI   r_   ri   rd   rw   r   r|   r   r   rD   rK   rR   rX   r[   r`   re   rj   rs   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r(   r/   r%   r1   r1   &   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/   r1   c                   n   \ rS rSrSr\rSrSrSr	Sr
SrSrS)S jrS rS rS	 rS
 rS rS r\S 5       r\S 5       r\S 5       r\S 5       r S*S jr\S 5       r\S 5       r\S 5       r\S 5       rS r\ S 5       r!\S 5       r"S r#S r$S r%S r&S r'S r(S r)S  r*S! r+S" r,S# r-S$ r.S% r/S& r0S' r1S(r2g)+BaseExpression   z%Base class for all query expressions.FTNc                     Ub  Xl         g g r   r   r    r   s     r%   __init__BaseExpression.__init__   s    # , $r/   c                 ^    U R                   R                  5       nUR                  SS 5        U$ )Nconvert_value)__dict__copypop)r    states     r%   __getstate__BaseExpression.__getstate__   s'    ""$		/4(r/   c                     U R                   U R                  L a  / OU R                   /U R                  R                  U5      -   $ r   )r   _convert_value_noopr   get_db_convertersr    r   s     r%   r    BaseExpression.get_db_converters   sG     !!T%=%== $$%//
;	< 	<r/   c                     / $ r   r(   rJ   s    r%   get_source_expressions%BaseExpression.get_source_expressions       	r/   c                     U(       a   eg r   r(   r    exprss     r%   set_source_expressions%BaseExpression.set_source_expressions   s    y5r/   c                     U Vs/ s HA  n[        US5      (       a  UO*[        U[        5      (       a  [        U5      O
[	        U5      PMC     sn$ s  snf r<   )r>   
isinstancestrFr?   )r    expressionsargs      r%   _parse_expressions!BaseExpression._parse_expressions   s\     #
 # 3 455  *3 4 4af%*F #
 	
 
s   AAc                     [        S5      e)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   BaseExpression.as_sql   s    4 ""FGGr/   c                 B    [        S U R                  5        5       5      $ )Nc              3   J   #    U  H  o=(       a    UR                   v   M     g 7fr   )contains_aggregate.0exprs     r%   	<genexpr>4BaseExpression.contains_aggregate.<locals>.<genexpr>   s       
9V,T,,,9V   !#anyr   rJ   s    r%   r   !BaseExpression.contains_aggregate   s%     
9=9T9T9V
 
 	
r/   c                 B    [        S U R                  5        5       5      $ )Nc              3   J   #    U  H  o=(       a    UR                   v   M     g 7fr   )contains_over_clauser   s     r%   r   6BaseExpression.contains_over_clause.<locals>.<genexpr>   s       
;X4.T...;Xr   r   rJ   s    r%   r   #BaseExpression.contains_over_clause   s%     
;?;V;V;X
 
 	
r/   c                 B    [        S U R                  5        5       5      $ )Nc              3   L   #    U  H  nU=(       a    UR                   v   M     g 7fr   )contains_column_referencesr   s     r%   r   <BaseExpression.contains_column_references.<locals>.<genexpr>  s%      
5 4T4445s   "$r   rJ   s    r%   r   )BaseExpression.contains_column_references  %     
335
 
 	
r/   c                 B    [        S U R                  5        5       5      $ )Nc              3   t   #    U  H.  nU=(       a     [        US S5      =(       d    UR                  v   M0     g7f)subqueryFN)rq   contains_subqueryr   s     r%   r   3BaseExpression.contains_subquery.<locals>.<genexpr>  s3      
5 QgdJ6P$:P:PQ5s   68r   rJ   s    r%   r    BaseExpression.contains_subquery	  r   r/   c                     U R                  5       nXFl        UR                  UR                  5        Vs/ s H  nU(       a  UR	                  XX45      OSPM      sn5        U$ s  snf )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   r=   )r    queryallow_joinsreuse	summarizefor_savecr   s           r%   r=   !BaseExpression.resolve_expression  sr    " IIK 	   446 7D  ++EQ 7		
 s   %A"c                 J    [        U R                  [        R                  5      $ r   )r   r   r   BooleanFieldrJ   s    r%   rn   BaseExpression.conditional/  s    $++V-@-@AAr/   c                     U R                   $ r   r   rJ   s    r%   fieldBaseExpression.field3  s       r/   c                 P    U R                  5       nUc  SU l        [        S5      eU$ )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   BaseExpression.output_field7  s2     11326D/STTr/   c                 `     U R                   $ ! [         a    U R                  (       d  e  gf = f)zn
Return the output field of this expression, or None if
_resolve_output_field() didn't return an output type.
N)r   r   r  rJ   s    r%   _output_field_or_none$BaseExpression._output_field_or_none@  s3    	$$$ 	66 7	s    --c           	         S U R                  5        5       nU Hd  nU HY  n[        X#R                  5      (       a  M  [        SUR                  R                  < SUR                  R                  < S35      e   Us  $    g)aE  
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   .   #    U  H  oc  M  Uv   M     g 7fr   r(   )r   sources     r%   r   7BaseExpression._resolve_output_field.<locals>.<genexpr>Z  s      
!9vFF!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  $BaseExpression._resolve_output_fieldL  s{    
!%!7!7!9
 )L&!,0@0@AA$ )22;;",,55	  '   )r/   c                     U $ r   r(   value
expressionr   s      r%   r   "BaseExpression._convert_value_noopj  s    r/   c                     U R                   nUR                  5       nUS:X  a  S $ UR                  S5      (       a  S $ US:X  a  S $ U R                  $ )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                 "    U c  S $ [        U 5      $ r   )floatr  s      r%   <lambda>.BaseExpression.convert_value.<locals>.<lambda>x  s    75<7r/   IntegerFieldc                 "    U c  S $ [        U 5      $ r   )intr  s      r%   r%  r&  |  s    53u:5r/   r   c                 "    U c  S $ [        U 5      $ r   r   r  s      r%   r%  r&    s    975>9r/   )r   r   endswithr   )r    r	  internal_types      r%   r   BaseExpression.convert_valuen  sn     !!//1L(  ##N33  n,  '''r/   c                 8    U R                   R                  U5      $ r   )r   
get_lookup)r    lookups     r%   r/  BaseExpression.get_lookup  s      ++F33r/   c                 8    U R                   R                  U5      $ r   )r   get_transformr    names     r%   r3  BaseExpression.get_transform  s      ..t44r/   c                     U R                  5       nUR                  U R                  5        Vs/ s H  nUb  UR                  U5      OS PM     sn5        U$ s  snf r   )r   r   r   relabeled_clone)r    
change_mapclonees       r%   r8  BaseExpression.relabeled_clone  sa    		$$ 4466A 23!!*-DH6	
 s    Ac                    U(       d  U $ UR                  U 5      =n(       a  U$ U R                  5       =n(       d  U $ U R                  5       nUR                  U Vs/ s H  nU(       a  UR	                  U5      OS PM     sn5        U$ s  snf r   )getr   r   r   replace_expressions)r    replacementsreplacementsource_expressionsr:  r   s         r%   r?  "BaseExpression.replace_expressions  s    K&**400;0&*&A&A&CC"CK		$$ /.D ;?((6DH.	
 s   $B	c                 v    [        5       nU R                  5        H  nUc  M  XR                  5       -  nM     U$ r   )setr   get_refs)r    refsr   s      r%   rF  BaseExpression.get_refs  s9    u//1D|MMO#D 2 r/   c                 .    [         R                   " U 5      $ r   r   rJ   s    r%   r   BaseExpression.copy      yyr/   c           	      
   U R                  5       nUR                  U R                  5        Vs/ s HB  n[        U[        5      (       a  [	        U UR
                   35      OUR                  U5      PMD     sn5        U$ s  snf r   )r   r   r   r   r   r5  prefix_references)r    prefixr:  r   s       r%   rN   BaseExpression.prefix_references  s    		$$ !779 :D "$** ,-//78 :		
 s   A	B c                     U R                   (       d  U /$ / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   )r   r   extendget_group_by_colsr    colsr  s      r%   rS   BaseExpression.get_group_by_cols  sD    &&6M113FKK0023 4r/   c                 `    U R                  5        Vs/ s H  oR                  PM     sn$ s  snf )z9Return the underlying field types used by this aggregate.)r   r  )r    r;  s     r%   r   BaseExpression.get_source_fields  s)    151L1L1NO1NA''1NOOOs   +c                     [        U 40 UD6$ r   OrderByr    kwargss     r%   ascBaseExpression.asc      t&v&&r/   c                     [        U 4SS0UD6$ N
descendingTrZ  r\  s     r%   descBaseExpression.desc      t7777r/   c                     U $ r   r(   rJ   s    r%   reverse_orderingBaseExpression.reverse_ordering      r/   c              #      #    U v   U R                  5        H;  nU(       d  M  [        US5      (       a  UR                  5        Sh  vN   M7  Uv   M=     g N7f)zQ
Recursively yield this expression and all subexpressions, in
depth-first order.
flattenN)r   r>   rl  )r    r   s     r%   rl  BaseExpression.flatten  sJ     
 
//1Dt4++#||~--J 2 .s   A$AAAc                 v    [        U R                  S5      (       a  U R                  R                  XU5      $ X#4$ )zn
Custom format for select clauses. For example, EXISTS expressions need
to be wrapped in CASE WHEN on Oracle.
select_format)r>   r   ro  r    r!   r#   r$   s       r%   ro  BaseExpression.select_format  s8    
 4$$o66$$228&II{r/   c                     [        U SS5      (       d   U R                  5       u  nU$ U $ ! [         a  n[        S5      UeS nAff = f)N constraint_validation_compatibleTzdExpressions with constraint_validation_compatible set to False must have only one source expression.)rq   r   
ValueError)r    r  r;  s      r%   get_expression_for_validation,BaseExpression.get_expression_for_validation  s]    t?FF" $ ; ; = "!   < s   * 
AA  A)r  r   r   NTNFF)3r)   r*   r+   r,   r-   NotImplementedempty_result_set_valuer   r  
filterablewindow_compatibleallowed_defaultrs  r   r   r   r   r   r   r   r   r   r   r   r   r=   propertyrn   r	  r   r  r  staticmethodr   r   r/  r3  r8  r?  rF  r   rN  rS  r  r^  rd  rh  rl  ro  ru  r.   r(   r/   r%   r   r      sw   /+J%*"JO'+$-
<
H8 
 

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

 
 
 
 
 SX> B B ! !   	 	 <   ( (,45 P'8r/   r   c                   j    \ rS rSrSr\\R                  " SS9S 5       5       r\	S 5       r
S rS rS	rg
)
Expressioni  z:An expression that can be combined with other expressions.   maxsizec                 B    [         R                  " U R                  5      $ r   )inspect	signaturer   )clss    r%   _constructor_signature!Expression._constructor_signature  s       ..r/   c                 N   U R                   u  pU R                  R                  " U /UQ70 UD6nUR                  5         [	        UR
                  R                  5       5      n[        U5        U R                  /nU H  u  pg[        U[        R                  5      (       a[  UR                  (       a>  UR                  (       a-  UR                  R                  R                  UR                  4nO[!        U5      nO[#        U5      nUR%                  Xg45        M     ['        U5      $ r   )_constructor_argsr  bind_partialapply_defaultsiter	argumentsitemsnextr  r   r   Fieldr5  model_metalabeltyper   appendtuple)r    argsr]  r  r  identityr   r  s           r%   r  Expression.identity  s    --//<<TSDSFS	  ",,2245	YNN##JC%..::%++"[[..44ejjAE KE%e,OOSL) $ Xr/   c                 j    [        U[        5      (       d  [        $ UR                  U R                  :H  $ r   )r   r  rx  r  rQ   s     r%   __eq__Expression.__eq__  s(    %,,!!~~..r/   c                 ,    [        U R                  5      $ r   )hashr  rJ   s    r%   __hash__Expression.__hash__  s    DMM""r/   r(   N)r)   r*   r+   r,   r-   r   	functools	lru_cacher  r   r  r  r  r.   r(   r/   r%   r  r    sH    D%/ & /  $/
#r/   r  c              3   D   #    U  H  nU[         U4[         X4/v   M     g 7fr   r   )r   
field_types     r%   r   r   j  s,       #J h
3h
5WX#s    c                 8    [         U   R                  XU45        g)z
Register combinable types:
    lhs <connector> rhs -> result
e.g.
    register_combinable_fields(
        IntegerField, Combinable.ADD, FloatField, FloatField
    )
N)_connector_combinatorsr  )lhsrB   rhsresults       r%   register_combinable_fieldsr    s     9%,,c-?@r/   r  r  c                     [         R                  U S5      nU H,  u  pEn[        X5      (       d  M  [        X%5      (       d  M*  Us  $    g )Nr(   )r  r>  
issubclass)rB   lhs_typerhs_typecombinatorscombinator_lhs_typecombinator_rhs_typecombined_types          r%   _resolve_combined_typer    sH    (,,Y;KCN?-h44:
 :
 ! 	 DOr/   c                   l   ^  \ rS rSrSU 4S jjrS rS rS rS rS r	S r
 SS	 jr\S
 5       rSrU =r$ )r@   i  c                 D   > [         TU ]  US9  X l        Xl        X0l        g Nr   )superr   rB   r  r  )r    r  rB   r  r   r  s        r%   r   CombinedExpression.__init__  s"    l3"r/   c                 N    SR                  U R                  R                  U 5      $ )Nz<{}: {}>)formatr  r)   rJ   s    r%   __repr__CombinedExpression.__repr__  s      !8!8$??r/   c                 d    SR                  U R                  U R                  U R                  5      $ )Nz{} {} {})r  r  rB   r  rJ   s    r%   __str__CombinedExpression.__str__  s#      4>>488DDr/   c                 2    U R                   U R                  /$ r   r  r  rJ   s    r%   r   )CombinedExpression.get_source_expressions  s    $((##r/   c                 "    Uu  U l         U l        g r   r  r   s     r%   r   )CombinedExpression.set_source_expressions  s    "$(r/   c           	         [        U R                  [        U R                  R                  5      [        U R
                  R                  5      5      nUcp  [        SU R                  < SU R                  R                  R                  R                   SU R
                  R                  R                  R                   S35      eU" 5       $ )NzCannot infer type of z# expression involving these types: r  r  )
r  rB   r  r  r  r  r   r   r  r)   )r    r  s     r%   r  (CombinedExpression._resolve_output_field  s     /NN//0//0

  ''9 :((//99BBC288((22;;< = !  r/   c                 b   / n/ nUR                  U R                  5      u  pVUR                  U5        UR                  U5        UR                  U R                  5      u  pVUR                  U5        UR                  U5        SnUR
                  R                  U R                  U5      nXu-  U4$ Nz(%s))compiler  r  rR  r  opscombine_expressionrB   )r    r!   r   r   expression_paramsr#   r$   expression_wrappers           r%   r   CombinedExpression.as_sql  s    &&txx03  (&&txx03  (#nn//L!'):::r/   c                 
   U R                   R                  XX4U5      nU R                  R                  XX4U5      n[        U [        [
        45      (       d   UR                  R                  5       n UR                  R                  5       n	SX1;   aC  X:w  a>  [	        U R                   U R                  U R                  5      R                  UUUUU5      $ 1 Skn
U R                  U R                  :X  a=  X;   a8  X:X  a3  [        U R                   U R                  5      R                  UUUUU5      $ U R                  5       nXKl        Xkl         X{l        U$ ! [        [        4 a    S n Nf = f! [        [        4 a    S n	 Nf = f)NDurationField>   	DateField	TimeFieldDateTimeField)r  r=   r  r   DurationExpressionTemporalSubtractionr   r   AttributeErrorr   rB   rW   r   r   )r    r   r   r   r  r  r  r  r  r  datetime_fieldsr  s               r%   r=   %CombinedExpression.resolve_expression  s|    hh))(
 hh))(
 $!35H IJJ ++==? ++==? 8"668;O)HHdnndhh$$ JO$((*/(*488TXX>QQ  IIK C #J/    #J/   s$   E 2E- E*)E*-FFc                 h    U R                   R                  =(       a    U R                  R                  $ r   )r  r|  r  rJ   s    r%   r|  "CombinedExpression.allowed_default  s!    xx''DDHH,D,DDr/   )rB   r  r  r   rw  )r)   r*   r+   r,   r   r  r  r   r   r  r   r=   r   r|  r.   __classcell__r  s   @r%   r@   r@     sK    @E$#"; SX-^ E Er/   r@   c                   4   ^  \ rS rSrS rU 4S jrS rSrU =r$ )r  i"  c                      UR                   nUR                  5       S:X  a0  UR                  U5      u  pVUR                  R	                  U5      U4$  UR                  U5      $ ! [
         a     Nf = f)Nr  )r   r   r  r  format_for_duration_arithmeticr   )r    sider!   r   outputr#   r$   s          r%   r  DurationExpression.compile#  s~    	R&&F '')_<&..t4!~~DDSI6QQ = %%  		s   A$ $
A10A1c                   > UR                   R                  (       a  [        TU ]  X5      $ UR                  R                  U 5        / n/ nU R                  U R                  X5      u  pVUR                  U5        UR                  U5        U R                  U R                  X5      u  pVUR                  U5        UR                  U5        SnUR                  R                  U R                  U5      nXu-  U4$ r  )featureshas_native_duration_fieldr  r   r  check_expression_supportr  r  r  rR  r  combine_duration_expressionrB   )	r    r!   r   r   r  r#   r$   r  r  s	           r%   r   DurationExpression.as_sql.  s    887>(77//5ll488XB3  (ll488XB3  (#nn88U!'):::r/   c                    U R                   " X40 UD6u  pEU R                  [        R                  [        R                  1;   at   U R
                  R                  R                  5       nU R                  R                  R                  5       n1 SknXh;  d  Xx;  a  [        SU R                   S35      e XE4$ XE4$ ! [        [        4 a     XE4$ f = f)N>   r"  r   r'  r  zInvalid arguments for operator .)r   rB   r1   rI   r_   r  r   r   r  r   r  r   )	r    r!   r   r"   r#   r$   r  r  allowed_fieldss	            r%   r&   DurationExpression.as_sqlite?  s    kk(H-H>>jnnjnn==8800BBD8800BBD" 1X5S'9$..9IK  6T {s{ #J/  {s   AB; ;CCr(   )	r)   r*   r+   r,   r  r   r&   r.   r  r  s   @r%   r  r  "  s    	&;" r/   r  c                   P   ^  \ rS rSr\R
                  " 5       rU 4S jrS rSr	U =r
$ )r  iU  c                 :   > [         TU ]  XR                  U5        g r   )r  r   rW   )r    r  r  r  s      r%   r   TemporalSubtraction.__init__X  s    hh,r/   c                     UR                   R                  U 5        UR                  U R                  5      nUR                  U R                  5      nUR                   R                  U R                  R                  R                  5       X45      $ r   )r  r  r  r  r  subtract_temporalsr   r   )r    r!   r   r  r  s        r%   r   TemporalSubtraction.as_sql[  sk    //5txx(txx(~~00HH!!335s
 	
r/   r(   )r)   r*   r+   r,   r   r  r   r   r   r.   r  r  s   @r%   r  r  U  s     '')L-
 
r/   r  zdjango.db.models.F)pathc                   d    \ rS rSrSrSrS rS rS rS r	 SS	 jr
S
 rS rS rS rS rS rSrg)r   id  zDAn object capable of resolving references to existing query objects.Fc                     Xl         g)zF
Arguments:
 * name: the name of the field this expression references
Nr5  r4  s     r%   r   
F.__init__j  s	    
 	r/   c                 b    SR                  U R                  R                  U R                  5      $ N{}({}))r  r  r)   r5  rJ   s    r%   r  
F.__repr__q  s!    t~~66		BBr/   c                     [        X5      $ r   )Sliced)r    	subscripts     r%   __getitem__F.__getitem__t  s    d&&r/   c                 H    [        SU R                  R                   S35      e)Nzargument of type 'z' is not iterable)	TypeErrorr  r)   rQ   s     r%   __contains__F.__contains__w  s%     ,T^^-D-D,EEVWXXr/   Nc                 <    UR                  U R                  X#U5      $ r   )resolve_refr5  r    r   r   r   r  r  s         r%   r=   F.resolve_expression|  s       K	JJr/   c                 $    UR                  X 5      $ r   )r>  )r    r@  s     r%   r?  F.replace_expressions  s    ++r/   c                     [        U 40 UD6$ r   rZ  r\  s     r%   r^  F.asc  r`  r/   c                     [        U 4SS0UD6$ rb  rZ  r\  s     r%   rd  F.desc  rf  r/   c                 t    U R                   UR                   :H  =(       a    U R                  UR                  :H  $ r   )r  r5  rQ   s     r%   r  F.__eq__  s'    ~~0LTYY%**5LLr/   c                 ,    [        U R                  5      $ r   )r  r5  rJ   s    r%   r  
F.__hash__  s    DIIr/   c                 .    [         R                   " U 5      $ r   rJ  rJ   s    r%   r   F.copy  rL  r/   r  rw  )r)   r*   r+   r,   r-   r|  r   r  r  r  r=   r?  r^  rd  r  r  r   r.   r(   r/   r%   r   r   d  sL    NOC'Y SXK
,'8Mr/   r   c                   F   ^  \ rS rSrSrSrSrS rU 4S jrS r	S r
SrU =r$ )	ResolvedOuterRefi  z
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                     [        S5      e)NzXThis queryset contains a reference to an outer query and may only be used in a subquery.)rt  r    r  r]  s      r%   r   ResolvedOuterRef.as_sql  s    *
 	
r/   c                    > [         TU ]  " U0 UD6nUR                  (       a  [        SU R                   S35      e[
        U R                  ;   Ul        U$ )Nz<Referencing outer query window expression is not supported: r  )r  r=   r   r   r5  r   possibly_multivalued)r    r  r]  colr  s       r%   r=   #ResolvedOuterRef.resolve_expression  sX    g($9&9###N99+Q   $.#: 
r/   c                     U $ r   r(   r    relabelss     r%   r8   ResolvedOuterRef.relabeled_clone  rj  r/   c                     / $ r   r(   rJ   s    r%   rS  "ResolvedOuterRef.get_group_by_cols  r   r/   r(   )r)   r*   r+   r,   r-   r   r   r   r=   r8  rS  r.   r  r  s   @r%   r  r    s/      
 r/   r  c                   (    \ rS rSrSrSrS rS rSrg)OuterRefi  Fc                     [        U R                  U R                  5      (       a  U R                  $ [        U R                  5      $ r   )r   r5  r  r  r  s      r%   r=   OuterRef.resolve_expression  s0    dii0099		**r/   c                     U $ r   r(   r!  s     r%   r8  OuterRef.relabeled_clone  rj  r/   r(   N)	r)   r*   r+   r,   r   r   r=   r8  r.   r(   r/   r%   r'  r'    s     +
r/   r'  c                   F   ^  \ rS rSrSrU 4S jrS r     SS jrSrU =r	$ )r  i  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U ]  UR                  5        Xl        [	        U[
        5      (       a#  US:  a  [        S5      eUS-   U l        SU l        g [	        U[        5      (       Ga  UR                  b  UR                  S:  d  UR                  b  UR                  S:  a  [        S5      eUR                  b  [        S5      eUR                  (       a6  UR                  (       a%  UR                  UR                  :  a  [        S5      eUR                  c  SOUR                  S-   U l        UR                  c  S U l        g UR                  UR                  =(       d    S-
  U l        g [        S5      e)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   r5  objr   r)  rt  startlengthslicestopstepr  )r    r/  r   r  s      r%   r   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                     U R                   S-
  nU R                  c  S OXR                  -   n[        X5      nU R                  R                   SU R
                  < SU< S3$ )Nr.  (r  ))r0  r1  r2  r  r+   r/  )r    r0  r3  r   s       r%   r  Sliced.__repr__  sX    

Q{{*t0C%&	..--.a|2i]!LLr/   c                 2   UR                  U R                  X#U5      n[        U R                  [        U R
                  45      (       a  U R                  R                  XX4U5      nOUnUR                  R                  XpR                  U R                  5      $ r   )r  r5  r   r/  r'  r  r=   r   slice_expressionr0  r1  )r    r   r   r   r  r  resolvedr   s           r%   r=   Sliced.resolve_expression  sy     $$TYYINdhh4>> :;;88..EhD D$$55dJJTTr/   )r1  r/  r0  rw  )
r)   r*   r+   r,   r-   r   r  r=   r.   r  r  s   @r%   r  r    s1    W2M U Ur/   r  zdjango.db.models.Funcc                      ^  \ rS rSrSrSrSrSrSrSS.U 4S jjr	S r
S	 rS
 rS r SS jr   SS jrU 4S jr\S 5       rSrU =r$ )Funci  zAn SQL function call.Nz%(function)s(%(expressions)s)r  r   c                J  > U R                   bn  [        U5      U R                   :w  aU  [        SU R                  R                  < SU R                   < SU R                   S:X  a  SOS< S[        U5      < S3	5      e[
        TU ]  US	9  U R                  " U6 U l        X0l	        g )
N'z' takes exactly  r.  argumentr  z (z given)r   )
aritylenr  r  r)   r  r   r   rB  extra)r    r   r   rF  r  s       r%   r   Func.__init__  s    ::!c+&6$**&D NN++JJ"&**/J{B$  	l3"&"9"9;"G
r/   c                    U R                   R                  S U R                   5       5      n0 U R                  EU R	                  5       EnU(       aU  SR                  S [        UR                  5       5       5       5      nSR                  U R                  R                  X5      $ SR                  U R                  R                  U5      $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   r   r   r   s     r%   r    Func.__repr__.<locals>.<genexpr>       #P8OCHH8O   r  c              3   Z   #    U  H!  u  p[        U5      S -   [        U5      -   v   M#     g7f)=NrJ  )r   keyvals      r%   r   rL    s'      :OhcC3S):Os   )+
{}({}, {})r  )

arg_joinerjoinrB  rF  _get_repr_optionssortedr  r  r  r)   )r    r  rF  s      r%   r  Func.__repr__  s    ###P8O8O#PP:4:::!7!7!9:II :@:O E  &&t~~'>'>LLt~~66==r/   c                     0 $ )zAReturn a dict of extra __init__() options to include in the repr.r(   rJ   s    r%   rV  Func._get_repr_options!  s    	r/   c                     U R                   $ r   rB  rJ   s    r%   r   Func.get_source_expressions%  s    &&&r/   c                     Xl         g r   r\  r   s     r%   r   Func.set_source_expressions(  s    "'r/   c                     U R                  5       nXFl        [        UR                  5       H%  u  pxUR	                  XX4U5      UR                  U'   M'     U$ r   )r   r   	enumeraterB  r=   )	r    r   r   r   r  r  r  posr   s	            r%   r=   Func.resolve_expression+  sT     IIK !!"6"67HC(+(>(>Eh)A  % 8 r/   c                    UR                   R                  U 5        / n/ nU R                   H9  n	 UR                  U	5      u  pUR                  U
5        UR                  U5        M;     0 U R                  EUEnUb  X=S'   OUR                  SU R                  5        U=(       d    UR                  SU R                  5      nU=(       d    UR                  SU R                   5      nUR#                  U5      =US'   US'   XM-  U4$ ! [         a;    [        U	S[        5      nU[        L a  e UR                  [        U5      5      u  p GN[         a     UR                  [        S5      5      u  p GN/f = f)Nry  TfunctiontemplaterT  r   r	  )r  r  rB  r  r   rq   rx  r?   r   r  rR  rF  
setdefaultre  r>  rf  rT  rU  )r    r!   r   re  rf  rT  r"   	sql_partsr$   r   arg_sql
arg_paramsry  datas                 r%   r   Func.as_sql6  sg    	//5	**C
D&.&6&6s&;# W%MM*% + /$**.. 'OOJ6Btxx
DMMBJ488L$//#J
.8ooi.HH]d7m&&- " V)01>*& *^;&.&6&6u=S7T&U#  D&.&6&6uT{&C#Ds   DAE3
%E32E3c                    > [         TU ]  5       nU R                  S S  Ul        U R                  R                  5       Ul        U$ r   )r  r   rB  rF  )r    r   r  s     r%   r   	Func.copy]  s8    w|~"&"9"9!"<ZZ__&
r/   c                 :    [        S U R                   5       5      $ )Nc              3   8   #    U  H  oR                   v   M     g 7fr   r|  )r   r  s     r%   r   'Func.allowed_default.<locals>.<genexpr>e  s     X@W*--@WrN  )allrB  rJ   s    r%   r|  Func.allowed_defaultc  s    X@W@WXXXr/   )rF  rB  rw  NNN)r)   r*   r+   r,   r-   re  rf  rT  rD  r   r  rV  r   r   r=   r   r   r   r|  r.   r  r  s   @r%   r?  r?    ss    H.HJE26  >'( SX	 %'N Y Yr/   r?  zdjango.db.models.Valuec                   r   ^  \ rS rSrSrSrSrSU 4S jjrS rS r	 SU 4S jjr
S	 rS
 r\S 5       rSrU =r$ )r?   ih  z9Represent a wrapped value as a node within an expression.FTc                 ,   > [         TU ]  US9  Xl        g)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   Value.__init__q  s     	l3
r/   c                 P    U R                   R                   SU R                  < S3$ )Nr7  r8  )r  r)   r  rJ   s    r%   r  Value.__repr__}  s$    ..))*!DJJ>;;r/   c                 2   UR                   R                  U 5        U R                  nU R                  nUbV  U R                  (       a  UR                  X2S9nOUR                  X2S9n[        US5      (       a  UR                  X1U5      U/4$ Uc  S/ 4$ SU/4$ )N)r   get_placeholderNULLz%s)	r  r  r  r  r  get_db_prep_saveget_db_prep_valuer>   r|  )r    r!   r   rR  r   s        r%   r   Value.as_sql  s    //5jj11#}}"33C3O"44S4P|%677#33C:NQTPUUU; 2:cU{r/   c                 6   > [         TU ]  XX4U5      nXVl        U$ r   )r  r=   r  )r    r   r   r   r  r  r  r  s          r%   r=   Value.resolve_expression  s"     G&u5XV
r/   c                     / $ r   r(   rJ   s    r%   rS  Value.get_group_by_cols  r   r/   c                    [        U R                  [        5      (       a  [        R                  " 5       $ [        U R                  [
        5      (       a  [        R                  " 5       $ [        U R                  [        5      (       a  [        R                  " 5       $ [        U R                  [        5      (       a  [        R                  " 5       $ [        U R                  [        R                  5      (       a  [        R                  " 5       $ [        U R                  [        R                  5      (       a  [        R                  " 5       $ [        U R                  [        R                  5      (       a  [        R                   " 5       $ [        U R                  [        R"                  5      (       a  [        R$                  " 5       $ [        U R                  [&        5      (       a  [        R(                  " 5       $ [        U R                  [*        5      (       a  [        R,                  " 5       $ [        U R                  [.        5      (       a  [        R0                  " 5       $ g r   )r   r  r   r   	CharFieldboolr  r)  r'  r$  r"  datetimer  dater  timer  	timedeltar  r   r   bytesBinaryFieldr
   	UUIDFieldrJ   s    r%   r  Value._resolve_output_field  s{   djj#&&##%%djj$''&&((djj#&&&&((djj%(($$&&djj("3"344''))djj(--00##%%djj(--00##%%djj("4"455''))djj'**&&((djj%((%%''djj$''##%% (r/   c                     U R                   $ r   r  rJ   s    r%   ry  Value.empty_result_set_value  s    zzr/   r  r   rw  )r)   r*   r+   r,   r-   r  r|  r   r  r   r=   rS  r  r}  ry  r.   r  r  s   @r%   r?   r?   h  sK    C HO
<& SX&0  r/   r?   c                   T   ^  \ rS rSrSrS	U 4S jjrS rS rS r S
U 4S jjr	Sr
U =r$ )RawSQLi  Tc                 l   > Uc  [         R                  " 5       nXsU l        U l        [        TU ]  US9  g r  )r   r  r#   r$   r  r   )r    r#   r$   r   r  s       r%   r   RawSQL.__init__  s2    !<<>L #$+l3r/   c                 x    SR                  U R                  R                  U R                  U R                  5      $ NrS  )r  r  r)   r#   r$   rJ   s    r%   r  RawSQL.__repr__  s)    ""4>>#:#:DHHdkkRRr/   c                 8    SU R                   -  U R                  4$ r  )r#   r$   r   s      r%   r   RawSQL.as_sql  s     $++--r/   c                     U /$ r   r(   rJ   s    r%   rS  RawSQL.get_group_by_cols  	    vr/   c                 |  > UR                   (       a  UR                   R                  R                   Hv  nUR                  R                   HY  nUR                  R                  5       U R                  R                  5       ;   d  M;  UR                  UR                  X#U5          Mt     Mx     [        TU ])  XX4U5      $ r   )r  r  all_parentslocal_fieldscolumnlowerr#   r  r5  r  r=   )	r    r   r   r   r  r  parentparent_fieldr  s	           r%   r=   RawSQL.resolve_expression  s     ;;++++77$*LL$=$=L#**002dhhnn6FF))(--{9  %> 8 w)(
 	
r/   )r$   r#   r   rw  )r)   r*   r+   r,   r|  r   r  r   rS  r=   r.   r  r  s   @r%   r  r    s.    O4S. SX
 
r/   r  c                        \ rS rSrS rS rSrg)Stari  c                     g)Nz'*'r(   rJ   s    r%   r  Star.__repr__  s    r/   c                 
    S/ 4$ )Nr5   r(   r   s      r%   r   Star.as_sql  s    Bwr/   r(   N)r)   r*   r+   r,   r  r   r.   r(   r/   r%   r  r    s    r/   r  c                   N   ^  \ rS rSrSrS	U 4S jjrS rS r S
S jrS r	Sr
U =r$ )DatabaseDefaulti  zV
Expression to use DEFAULT keyword during insert otherwise the underlying expression.
c                 0   > [         TU ]  U5        Xl        g r   r  r   r  r    r  r   r  s      r%   r   DatabaseDefault.__init__  s    &$r/   c                     U R                   /$ r   r  rJ   s    r%   r   &DatabaseDefault.get_source_expressions        r/   c                     Uu  U l         g r   r  r   s     r%   r   &DatabaseDefault.set_source_expressions  s    "r/   c                 t    U R                   R                  UUUUUS9nU(       d  U$ [        X`R                  S9$ )N)r   r   r   r  r  r   )r  r=   r  r  )r    r   r   r   r  r  resolved_expressions          r%   r=   "DatabaseDefault.resolve_expression  sO     #oo@@# A 
 &&.H.H
 	
r/   c                 v    UR                   R                  (       d  UR                  U R                  5      $ S/ 4$ )NDEFAULT)r  "supports_default_keyword_in_insertr  r  r   s      r%   r   DatabaseDefault.as_sql  s0    ""EE##DOO44"}r/   r  r   rw  )r)   r*   r+   r,   r-   r   r   r   r=   r   r.   r  r  s   @r%   r  r    s-    %!# SX
$ r/   r  c                   R   ^  \ rS rSrSrSrSU 4S jjrS rS rS r	S r
S	 rS
rU =r$ )Coli  TFc                 F   > Uc  Un[         TU ]  US9  XsU l        U l        g r  )r  r   aliastarget)r    r  r  r   r  s       r%   r   Col.__init__  s,    !Ll3"'
DKr/   c                     U R                   U R                  p!U(       a  U[        U5      4O[        U5      4nSR                  U R                  R
                  SR                  U5      5      $ )Nr  r  )r  r  r   r  r  r)   rU  )r    r  r  identifierss       r%   r  Col.__repr__  sM    

DKKv.3uc&k*#f+t~~66		+8NOOr/   c                     U R                   U R                  R                  pCU(       a  X44OU4nSR                  [	        UR
                  U5      5      nU/ 4$ Nr  )r  r  r  rU  mapquote_name_unless_alias)r    r!   r   r  r  r  r#   s          r%   r   
Col.as_sql  sH    

DKK$6$6v).uoVIhhs8;;[IJBwr/   c                     U R                   c  U $ U R                  UR                  U R                   U R                   5      U R                  U R                  5      $ r   )r  r  r>  r  r   r!  s     r%   r8  Col.relabeled_clone   sF    ::K~~LLTZZ0$++t?P?P
 	
r/   c                     U /$ r   r(   rJ   s    r%   rS  Col.get_group_by_cols'  r  r/   c                     U R                   U R                  :X  a  U R                  R                  U5      $ U R                  R                  U5      U R                   R                  U5      -   $ r   )r  r   r   r   s     r%   r   Col.get_db_converters*  s^    ;;$+++$$66zBB  22
KK))*56 	6r/   )r  r  r   )r)   r*   r+   r,   r   r  r   r  r   r8  rS  r   r.   r  r  s   @r%   r  r    s3    !% 0P

6 6r/   r  c                   b   ^  \ rS rSrSrU 4S jrS rS rS r SS jr	S r
S	 rS
 rS rSrU =r$ )Refi2  zr
Reference to column alias of the query. For example, Ref('sum_cost') in
qs.annotate(sum_cost=Sum('cost')) query.
c                 >   > [         TU ]  5         XsU l        U l        g r   )r  r   rG  r  )r    rG  r  r  s      r%   r   Ref.__init__8  s    !%	4;r/   c                 x    SR                  U R                  R                  U R                  U R                  5      $ r  )r  r  r)   rG  r  rJ   s    r%   r  Ref.__repr__<  s)    ""4>>#:#:DIIt{{SSr/   c                     U R                   /$ r   r  rJ   s    r%   r   Ref.get_source_expressions?  s    }r/   c                     Uu  U l         g r   r  r   s     r%   r   Ref.set_source_expressionsB  s    r/   c                     U $ r   r(   r	  s         r%   r=   Ref.resolve_expressionE  s	    
 r/   c                     U R                   1$ r   )rG  rJ   s    r%   rF  Ref.get_refsL  s    		{r/   c                 f    U R                  5       nU R                  R                  U5      Ul        U$ r   )r   r  r8  )r    r"  r:  s      r%   r8  Ref.relabeled_cloneO  s(    		{{228<r/   c                 P    UR                   R                  U R                  5      / 4$ r   )r  
quote_namerG  r   s      r%   r   
Ref.as_sqlT  s     ~~((3R77r/   c                     U /$ r   r(   rJ   s    r%   rS  Ref.get_group_by_colsW  r  r/   )rG  r  rw  )r)   r*   r+   r,   r-   r   r  r   r   r=   rF  r8  r   rS  r.   r  r  s   @r%   r  r  2  sB    
.T SX
8 r/   r  c                   B   ^  \ rS rSrSrSrS rU 4S jrS rS r	Sr
U =r$ )	ExpressionListi[  z
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    U R                   R                  S U R                   5       5      $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   rJ  rK  s     r%   r   )ExpressionList.__str__.<locals>.<genexpr>e  rM  rN  )rT  rU  rB  rJ   s    r%   r  ExpressionList.__str__d  s#    ###P8O8O#PPPr/   c                 H   > U R                   (       d  g[        TU ]  " U0 UD6$ )N) r(   )rB  r  r   )r    r  r]  r  s      r%   r   ExpressionList.as_sqlg  s#    &&w~t.v..r/   c                 (    U R                   " X40 UD6$ r   )r   )r    r!   r   r"   s       r%   r&   ExpressionList.as_sqlitel  s    {{8A=AAr/   c                 v    / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   r   rR  rS  )r    group_by_colsr   s      r%   rS   ExpressionList.get_group_by_colsp  s7    //1D  !7!7!9: 2r/   r(   )r)   r*   r+   r,   r-   rf  r  r   r&   rS  r.   r  r  s   @r%   r  r  [  s*     !HQ/
B r/   r  c                   0   ^  \ rS rSrSrSrU 4S jrSrU =r$ )OrderByListiw  FzORDER BY %(expressions)sc                 8   > S U 5       n[         TU ]  " U0 UD6  g )Nc              3      #    U  H;  n[        U[        5      (       a  US    S:X  a  [        [        USS 5      SS9OUv   M=     g7f)r   r4   r.  NTrc  )r   r   r[  r   r   s     r%   r   'OrderByList.__init__.<locals>.<genexpr>|  sM      
 $ dC((T!W^ $qr(5 $s   AA)r  r   )r    r   rF  r  s      r%   r   OrderByList.__init__{  s(    
 $
 	+//r/   r(   )	r)   r*   r+   r,   r|  rf  r   r.   r  r  s   @r%   r  r  w  s    O)H	0 	0r/   r  z"django.db.models.ExpressionWrapperc                   `   ^  \ rS rSrSrU 4S jrS rS rU 4S jrS r	S r
\S	 5       rS
rU =r$ )ExpressionWrapperi  z
An expression that can wrap another expression so that it can provide
extra context to the inner expression, such as the output_field.
c                 ,   > [         TU ]  US9  Xl        g r  r  r  s      r%   r   ExpressionWrapper.__init__  s    l3$r/   c                     US   U l         g Nr   r  r   s     r%   r   (ExpressionWrapper.set_source_expressions      (r/   c                     U R                   /$ r   r  rJ   s    r%   r   (ExpressionWrapper.get_source_expressions  r  r/   c                    > [        U R                  [        5      (       a;  U R                  R                  5       nU R                  Ul        UR                  5       $ [        TU ]  5       $ r   )r   r  r  r   r   rS  r  r    r  r  s     r%   rS  #ExpressionWrapper.get_group_by_cols  sS    dooz22--/J&*&7&7J#//11 w(**r/   c                 8    UR                  U R                  5      $ r   )r  r  r   s      r%   r   ExpressionWrapper.as_sql  s    00r/   c                 b    SR                  U R                  R                  U R                  5      $ r  )r  r  r)   r  rJ   s    r%   r  ExpressionWrapper.__repr__  s!    t~~66HHr/   c                 .    U R                   R                  $ r   )r  r|  rJ   s    r%   r|  !ExpressionWrapper.allowed_default  s    ...r/   r  )r)   r*   r+   r,   r-   r   r   r   rS  r   r  r}  r|  r.   r  r  s   @r%   r  r    s;    
%#!+1I / /r/   r  c                   V   ^  \ rS rSrSrU 4S jrS rU 4S jr S	U 4S jjrS r	Sr
U =r$ )
r   i  z1The logical negation of a conditional expression.c                 H   > [         TU ]  U[        R                  " 5       S9  g r  )r  r   r   r  r  s     r%   r   NegatedExpression.__init__  s    &2E2E2GHr/   c                 6    U R                   R                  5       $ r   )r  r   rJ   s    r%   r   NegatedExpression.__invert__  s    ##%%r/   c                 X  >  [         TU ]  X5      u  p4UR                  R                  nUR                  U R                  5      (       d  SU S3U4$ SU 3U4$ ! [         aF    UR                  R                  nUR
                  (       d   gUR                  [        S5      5      s $ f = f)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  r?   r  0conditional_expression_supported_in_where_clauser  )r    r!   r   r#   r$   r  r  r  s          r%   r   NegatedExpression.as_sql  s    	1'.>KC !!%% CCDOOTTu$:;VCCcU|V##  	1**33HBB ##E$K00		1s   A 1B)B)(B)c                 x   > [         TU ]  XX4U5      n[        UR                  SS5      (       d  [	        S5      eU$ )Nrn   Fz*Cannot negate non-conditional expressions.)r  r=   rq   r  r  )r    r   r   r   r  r  r<  r  s          r%   r=   $NegatedExpression.resolve_expression  sC     7-(
 x**M5AAHIIr/   c                     UR                   R                  R                  nUR                   R                  R                  (       d(  U" U R
                  5      (       a  SR                  U5      nX#4$ 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%   ro  NegatedExpression.select_format  s\    
 ##TT 	- ##,,SS4T__EE299#>C{r/   r(   rw  )r)   r*   r+   r,   r-   r   r   r   r=   ro  r.   r  r  s   @r%   r   r     s,    ;I&$" SX r/   r   zdjango.db.models.Whenc                   ~   ^  \ rS rSrSrSrSU 4S jjrS rS rS r	S r
S	 r SS
 jrSS jrS r\S 5       rSrU =r$ )Wheni  z"WHEN %(condition)s THEN %(result)sFc                 f  > U(       a/  Uc  [        S0 UD6S p1O[        USS5      (       a  [        U40 UD6S p1Ub  [        USS5      (       a  U(       a  [        S5      e[        U[         5      (       a  U(       d  [	        S5      e[
        TU ]  S S9  Xl        U R                  U5      S   U l	        g )Nrn   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   rq   r  r   rt  r  r   	conditionr   r  )r    r%  thenlookupsr  s       r%   r   When.__init__  s     %&\\47M599%&y%<G%<d7GI}e$L$LPW"  i##IPQQd+"--d3A6r/   c                 >    SU R                   < SU R                  < 3$ )NzWHEN z THEN r%  r  rJ   s    r%   r  When.__str__  s    $(NNDKK@@r/   c                 @    SU R                   R                  < SU < S3$ N<z: >r  r)   rJ   s    r%   r  When.__repr__      !^^44d;;r/   c                 2    U R                   U R                  /$ r   r*  rJ   s    r%   r   When.get_source_expressions  s    ,,r/   c                 "    Uu  U l         U l        g r   r*  r   s     r%   r   When.set_source_expressions  s    &+#r/   c                 0    U R                   R                  /$ r   )r  r  rJ   s    r%   r  When.get_source_fields  s    1122r/   c                     U R                  5       nXFl        [        UR                  S5      (       a"  UR                  R	                  XX4S5      Ul        UR
                  R	                  XX4U5      Ul        U$ )Nr=   F)r   r   r>   r%  r=   r  )r    r   r   r   r  r  r  s          r%   r=   When.resolve_expression  si     IIK 1;; 455++88EeAK 88..(
 r/   c                    UR                   R                  U 5        Un/ nUR                  U R                  5      u  pxXuS'   UR                  U R                  5      u  pXS'   U=(       d    U R
                  nX5-  / UQUQU
Q74$ )Nr%  r  )r  r  r  r%  r  rf  )r    r!   r   rf  r"   template_params
sql_paramscondition_sqlcondition_params
result_sqlresult_paramss              r%   r   When.as_sql  s    //5'
*2*:*:4>>*J''4$$,$4$4T[[$A!
$.!,t}}) ,
,
,
 ,
 
 	
r/   c                 v    / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   r  rT  s      r%   rS  When.get_group_by_cols#  s4    113FKK0023 4r/   c                 h    U R                   R                  =(       a    U R                  R                  $ r   )r%  r|  r  rJ   s    r%   r|  When.allowed_default*  s!    ~~--M$++2M2MMr/   r*  NNrw  r   )r)   r*   r+   r,   rf  rn   r   r  r  r   r   r  r=   r   rS  r   r|  r.   r  r  s   @r%   r#  r#    sX    3HK7"A<-,3
 SX
 N Nr/   r#  zdjango.db.models.Casec                      ^  \ rS rSrSrSrSrSSS.U 4S jjrS rS	 r	S
 r
S r SS jrU 4S jr SS jrU 4S jr\S 5       rSrU =r$ )Casei/  z
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 ENDrB  N)defaultr   c                   > [        S U 5       5      (       d  [        S5      e[        TU ]  U5        [	        U5      U l        U R                  U5      S   U l        X@l        g )Nc              3   B   #    U  H  n[        U[        5      v   M     g 7fr   )r   r#  )r   cases     r%   r    Case.__init__.<locals>.<genexpr>A  s     <ed:dD))es   z.Positional arguments must all be When objects.r   )	rs  r  r  r   listcasesr   rJ  rF  )r    rJ  r   rP  rF  r  s        r%   r   Case.__init__@  sT    <e<<<LMM&%[
..w7:
r/   c                 j    SSR                  S U R                   5       5      < SU R                  < 3$ )NzCASE r  c              3   8   #    U  H  n[        U5      v   M     g 7fr   rJ  )r   r  s     r%   r   Case.__str__.<locals>.<genexpr>J  s     1jc!ffjrN  z, ELSE )rU  rP  rJ  rJ   s    r%   r  Case.__str__H  s)    II1djj11LL
 	
r/   c                 @    SU R                   R                  < SU < S3$ r-  r0  rJ   s    r%   r  Case.__repr__N  r2  r/   c                 6    U R                   U R                  /-   $ r   rP  rJ  rJ   s    r%   r   Case.get_source_expressionsQ  s    zzT\\N**r/   c                 "    UGt U l         U l        g r   rY  r   s     r%   r   Case.set_source_expressionsT  s    $)!T\r/   c                     U R                  5       nXFl        [        UR                  5       H%  u  pxUR	                  XX4U5      UR                  U'   M'     UR
                  R	                  XX4U5      Ul        U$ r   )r   r   ra  rP  r=   rJ  )	r    r   r   r   r  r  r  rb  rM  s	            r%   r=   Case.resolve_expressionW  sn     IIK "177+IC22EhAGGCL , II00(
	 r/   c                 L   > [         TU ]  5       nUR                  S S  Ul        U$ r   )r  r   rP  )r    r  r  s     r%   r   	Case.copye  s"    GLN''!*r/   c                 L   UR                   R                  U 5        U R                  (       d  UR                  U R                  5      $ 0 U R
                  EUEn/ n/ nUR                  U R                  5      u  pU R                   H9  n UR                  U5      u  pUR                  U5        UR                  U5        M;     U(       d  X4$ U=(       d    U R                  nUR                  U5      US'   XS'   UR                  U
5        U=(       d    UR                  SU R                  5      nX6-  nU R                  b(  UR                   R!                  U R"                  5      U-  nX4$ ! [         a     M  [         a"    UR                  UR                  5      u  p   M  f = f)NrP  rJ  rf  )r  r  rP  r  rJ  rF  r   r   r  r  rR  case_joinerrU  r>  rf  r  unification_cast_sqlr   )r    r!   r   rf  rb  r"   r<  
case_partsr=  default_sqldefault_paramsrM  case_sqlcase_paramsr#   s                  r%   r   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# "   .6.>.>t{{.K+s   	E++
F#8&F#"F#c                 v   > U R                   (       d  U R                  R                  5       $ [        TU ]	  5       $ r   )rP  rJ  rS  r  )r    r  s    r%   rS  Case.get_group_by_cols  s+    zz<<1133w(**r/   c                 t    U R                   R                  =(       a    [        S U R                   5       5      $ )Nc              3   8   #    U  H  oR                   v   M     g 7fr   rq  )r   case_s     r%   r   'Case.allowed_default.<locals>.<genexpr>  s      4
/9e!!zrN  )rJ  r|  rs  rP  rJ   s    r%   r|  Case.allowed_default  s1    ||++ 
 4
/3zz4
 1
 	
r/   )rP  rJ  rF  rw  rG  )r)   r*   r+   r,   r-   rf  rb  r   r  r  r   r   r=   r   r   rS  r   r|  r.   r  r  s   @r%   rI  rI  /  sn    
 5HK'+$  
<+* SX @D@+
 
 
r/   rI  c                      ^  \ rS rSrSrSrSrSrSrSU 4S jjr	S r
S	 rS
 rU 4S jr\S 5       rS rSS jrS rSrU =r$ )Subqueryi  z
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                    > [        USU5      R                  5       U l        SU R                  l        X0l        [
        TU ]  U5        g )Nr   T)rq   r:  r   r   rF  r  r   )r    querysetr   rF  r  s       r%   r   Subquery.__init__  s:    Xw9??A
"


&r/   c                     U R                   /$ r   r   rJ   s    r%   r   Subquery.get_source_expressions  s    

|r/   c                     US   U l         g r  rw  r   s     r%   r   Subquery.set_source_expressions  s    1X
r/   c                 .    U R                   R                  $ r   )r   r   rJ   s    r%   r  Subquery._resolve_output_field  s    zz&&&r/   c                 b   > [         TU ]  5       nUR                  R                  5       Ul        U$ r   )r  r   r   r:  )r    r:  r  s     r%   r   Subquery.copy  s'    kk'')r/   c                 .    U R                   R                  $ r   )r   external_aliasesrJ   s    r%   r  Subquery.external_aliases  s    zz***r/   c                 6    U R                   R                  5       $ r   )r   get_external_colsrJ   s    r%   r  Subquery.get_external_cols  s    zz++--r/   c                     UR                   R                  U 5        0 U R                  EUEnU R                  R	                  X5      u  pgUSS US'   U=(       d    UR                  SU R                  5      nX5-  nX4$ )Nr.  rG   r   rf  )r  r  rF  r   r   r>  rf  )	r    r!   r   rf  r"   r<  subquery_sqlr=  r#   s	            r%   r   Subquery.as_sql  sz    //59TZZ9=9#'::#4#4X#J &21R&8
#M22:t}}M(r/   c                 4    U R                   R                  U S9$ )N)wrapper)r   rS  rJ   s    r%   rS  Subquery.get_group_by_cols  s    zz++D+99r/   )rF  r   r   )r)   r*   r+   r,   r-   rf  r   ry  r   r   r   r   r  r   r}  r  r  r   rS  r.   r  r  s   @r%   rr  rr    sa    
  H!H''
 + +.: :r/   rr  c                   d   ^  \ rS rSrSr\R                  " 5       rSrU 4S jr	S r
U 4S jrSrU =r$ )Existsi  zEXISTS(%(subquery)s)Fc                 f   > [         TU ]  " U40 UD6  U R                  R                  5       U l        g r   )r  r   r   exists)r    rt  r]  r  s      r%   r   Exists.__init__  s)    ,V,ZZ&&(
r/   c                 t    UR                   R                  R                  (       d  SR                  U5      nX#4$ r  )r   r  r  r  rp  s       r%   ro  Exists.select_format  s1     ""++RR299#>C{r/   c                    >  [         TU ]  " U/UQ70 UD6$ ! [         aF    UR                  R                  nUR
                  (       d   gUR                  [        S5      5      s $ f = f)N)z1=0r(   F)r  r   r   r   r  r  r  r?   )r    r!   r  r]  r  r  s        r%   r   Exists.as_sql  sb    	27>(<T<V<< 	2**33HBB ##E%L11		2s    1A'
A'&A'rw  )r)   r*   r+   r,   rf  r   r  r   ry  r   ro  r   r.   r  r  s   @r%   r  r    s0    %H&&(L")2 2r/   r  zdjango.db.models.OrderByc                   d    \ rS rSrSrSrSrSS jrS rS r	S r
SS	 jrS
 rS rS rS rS rSrg)r[  i  z%(expression)s %(ordering)sFNc                     U(       a  U(       a  [        S5      eUSL d  USL a  [        S5      eX0l        X@l        X l        [	        US5      (       d  [        S5      eXl        g )Nz1nulls_first and nulls_last are mutually exclusiveFz7nulls_first and nulls_last values must be True or None.r=   z%expression must be an expression type)rt  nulls_first
nulls_lastrc  r>   r  )r    r  rc  r  r  s        r%   r   OrderBy.__init__  s]    :PQQ%:#6VWW&$$z#788DEE$r/   c                 x    SR                  U R                  R                  U R                  U R                  5      $ )Nz{}({}, descending={}))r  r  r)   r  rc  rJ   s    r%   r  OrderBy.__repr__  s.    &--NN##T__doo
 	
r/   c                     US   U l         g r  r  r   s     r%   r   OrderBy.set_source_expressions  r  r/   c                     U R                   /$ r   r  rJ   s    r%   r   OrderBy.get_source_expressions   r  r/   c                    U=(       d    U R                   nUR                  R                  (       a.  U R                  (       a  SU-  nOU R                  (       a  SU-  nOU R                  (       a2  U R
                  (       a  UR                  R                  (       d  SU-  nOBU R                  (       a1  U R
                  (       d  UR                  R                  (       d  SU-  nUR                  R                  U 5        UR                  U R                  5      u  pVUU R
                  (       a  SOSS.UEnXcR                  S5      -  nX7-  R                  5       U4$ )	Nz%s NULLS LASTz%s NULLS FIRSTz%%(expression)s IS NULL, %sz%%(expression)s IS NOT NULL, %sDESCASC)r  orderingz%(expression)s)rf  r   supports_order_by_nulls_modifierr  r  rc  order_by_nulls_firstr  r  r  r  countrstrip)r    r!   r   rf  r"   expression_sqlr$   placeholderss           r%   r   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                 4   UR                   R                  (       dm  UR                  R                  U R                  5      (       aC  U R                  5       n[        [        U R                  SS9SS9Ul        UR                  " X5      $ U R                  X5      $ )NT)r&  F)rJ  )	r  r  r  r  r  r   rI  r#  r   )r    r!   r   r   s       r%   	as_oracleOrderBy.as_oracle  s{     ##JJOO  99;D"T__40DO ;;x44{{800r/   c                 v    / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   r  rT  s      r%   rS  OrderBy.get_group_by_cols.  s4    113FKK0023 4r/   c                     U R                   (       + U l         U R                  (       a  SU l        S U l        U $ U R                  (       a  SU l        S U l        U $ r   )rc  r  r  rJ   s    r%   rh  OrderBy.reverse_ordering4  sL    "oo-"DO#D  __#D"DOr/   c                     SU l         g rN   r  rJ   s    r%   r^  OrderBy.asc>  s	    r/   c                     SU l         g r   r  rJ   s    r%   rd  OrderBy.descA  s	    r/   )rc  r  r  r  )FNNr   )r)   r*   r+   r,   rf  rn   rs  r   r  r   r   r   r  rS  rh  r^  rd  r.   r(   r/   r%   r[  r[    sD    ,HK',$
%

#!:41" r/   r[  c                   z   ^  \ rS rSrSrSrSr    SU 4S jjrS rS r	S r
SS	 jrU 4S
 jrS rS rS rSrU =r$ )WindowiE  z %(expression)s OVER (%(window)s)FTc                   > X l         X0l        X@l        [        USS5      (       d"  [	        SUR
                  R                  -  5      eU R                   bN  [        U R                   [        [        45      (       d  U R                   4U l         [        U R                   6 U l         U R                  b  [        U R                  [        [        45      (       a  [        U R                  6 U l        OK[        U R                  [        [        45      (       a  [        U R                  5      U l        O[	        S5      e[        TU ]=  US9  U R!                  U5      S   U l        g )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framerq   rt  r  r)   r   r  rO  r  r  r   r   r  r   r   source_expression)r    r  r  r  r  r   r  s         r%   r   Window.__init__M  s$    ) 
z#6>>E&&//0 
 (d//%??%)%6%6$8! .0A0A BD==$$--$77 +T]] ;DMMNC+@AA +DMM : H  	l3!%!8!8!DQ!Gr/   c                 .    U R                   R                  $ r   )r  r   rJ   s    r%   r  Window._resolve_output_fieldq  s    %%222r/   c                 ^    U R                   U R                  U R                  U R                  /$ r   r  r  r  r  rJ   s    r%   r   Window.get_source_expressionst  s%    &&(9(94==$**UUr/   c                 :    Uu  U l         U l        U l        U l        g r   r  r   s     r%   r   Window.set_source_expressionsw  s    OTL 14=$*r/   c                    UR                   R                  U 5        UR                  R                  (       d  [	        S5      eUR                  U R                  5      u  pE/ SpvU R                  b<  U R                  R                  UUSS9u  pUR                  U5        U[        U	5      -  nU R                  b<  UR                  U R                  5      u  pUR                  U
5        U[        U5      -  nU R                  (       a<  UR                  U R                  5      u  pUR                  U5        U[        U5      -  nU=(       d    U R                  nX4SR                  U5      R                  5       S.-  / UQUQ74$ )Nz1This backend does not support window expressions.r(   zPARTITION BY %(expressions)s)r!   r   rf  rB  )r  window)r  r  r  supports_over_clauser   r  r  r  r   r  r  r  r  rf  rU  strip)r    r!   r   rf  expr_sqlr$   
window_sqlwindow_paramssql_exprr=  	order_sqlorder_params	frame_sqlframe_paramss                 r%   r   Window.as_sqlz  s^   //5""77#$WXX#++D,B,BC$&M(#'#4#4#;#;!%7 $< $ H
 h'U:..M==$&.&6&6t}}&E#Ii(U<00M::&.&6&6tzz&B#Ii(U<00M,t}} #((::N:T:T:VWW%f%}%
 	
r/   c                 >  > [        U R                  [        R                  5      (       ac  U R	                  5       nUR
                  " 5       n[        R                  " 5       US   l        UR                  " U5        [        [        U]+  X5      $ U R                  X5      $ r  )r   r   r   r   r   r   r"  r   r  r  r&   r   )r    r!   r   r   rB  r  s        r%   r&   Window.as_sqlite  s}    d'')<)<==99;D!%!<!<!>171B1B1Dq!.''(:;0FF{{800r/   c           	         SR                  [        U R                  5      U R                  (       a  S[        U R                  5      -   OS[        U R                  =(       d    S5      [        U R
                  =(       d    S5      5      $ )Nz{} OVER ({}{}{})zPARTITION BY r  )r  r   r  r  r  r  rJ   s    r%   r  Window.__str__  sb    !((&&'8<8I8IOc$"3"344r#$

 b!	
 	
r/   c                 @    SU R                   R                  < SU < S3$ r-  r0  rJ   s    r%   r  Window.__repr__  r2  r/   c                     / nU R                   (       a)  UR                  U R                   R                  5       5        U R                  b)  UR                  U R                  R                  5       5        U$ r   )r  rR  rS  r  )r    r  s     r%   rS  Window.get_group_by_cols  sX      !2!2!D!D!FG==$  !@!@!BCr/   )r  r  r  r  )NNNNr   )r)   r*   r+   r,   rf  r   r   r   r  r   r   r   r&   r  r  rS  r.   r  r  s   @r%   r  r  E  s[    1H 
 "HH3VU
B1
< r/   r  c                   *    \ rS rSrSrSrSrSrS rSr	g)	WindowFrameExclusioni  zCURRENT ROWGROUPTIESz	NO OTHERSc                 L    U R                   R                   SU R                   3$ r  )r  r+   _name_rJ   s    r%   r  WindowFrameExclusion.__repr__  s"    ..--.a}==r/   r(   N)
r)   r*   r+   r,   CURRENT_ROWr  r  	NO_OTHERSr  r.   r(   r/   r%   r  r    s    KEDI>r/   r  c                   V    \ rS rSrSrSrSS jrS rS rS r	S	 r
S
 rS rS rS rSrg)WindowFramei  a>  
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                     [        U5      U l        [        U5      U l        [        U[        [
        45      (       d"  [        U R                  R                   S35      eX0l	        g )Nz3.exclusion must be a WindowFrameExclusion instance.)
r?   r0  endr   r	   r  r  r  r+   	exclusion)r    r0  r  r  s       r%   r   WindowFrame.__init__  sY    5\
:)h0D%EFF>>../ 01 1  #r/   c                 "    Uu  U l         U l        g r   r0  r  r   s     r%   r   "WindowFrame.set_source_expressions  s    $
DHr/   c                 2    U R                   U R                  /$ r   r  rJ   s    r%   r   "WindowFrame.get_source_expressions  s    

DHH%%r/   c                 P    U R                   c  gSU R                   R                   3$ )Nr  z	 EXCLUDE )r  r  rJ   s    r%   get_exclusionWindowFrame.get_exclusion  s'    >>!4>>//011r/   c                 z   UR                   R                  U 5        U R                  X R                  R                  U R
                  R                  5      u  p4U R                  (       a&  UR                  R                  (       d  [        S5      eU R                  U R                  UUU R                  5       S.-  / 4$ )Nz6This backend does not support window frame exclusions.
frame_typer0  r  exclude)r  r  window_frame_start_endr0  r  r  r  r  supports_frame_exclusionr   rf  r  r  )r    r!   r   r0  r  s        r%   r   WindowFrame.as_sql  s    //500

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

 >>*"5"5"N"N#H  MM"oo--/	 	
 		
r/   c                 @    SU R                   R                  < SU < S3$ r-  r0  rJ   s    r%   r  WindowFrame.__repr__  r2  r/   c                     / $ r   r(   rJ   s    r%   rS  WindowFrame.get_group_by_cols  r   r/   c                 >   U R                   R                  bW  U R                   R                  S:  a=  S[        U R                   R                  5      [        R                  R
                  4-  nOU R                   R                  b5  U R                   R                  S:X  a  [        R                  R                  nOU R                   R                  bN  U R                   R                  S:  a4  SU R                   R                  [        R                  R                  4-  nO[        R                  R                  nU R                  R                  bN  U R                  R                  S:  a4  SU R                  R                  [        R                  R                  4-  nOU R                  R                  b5  U R                  R                  S:X  a  [        R                  R                  nOU R                  R                  bW  U R                  R                  S:  a=  S[        U R                  R                  5      [        R                  R
                  4-  nO[        R                  R                  nU R                  U R                  UUU R                  5       S.-  $ )Nr   z%d %sr  )r0  r  absr   r  	PRECEDINGr  	FOLLOWINGUNBOUNDED_PRECEDINGr  UNBOUNDED_FOLLOWINGrf  r  r  )r    r0  r  s      r%   r  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                     [        S5      e)Nz3Subclasses must implement window_frame_start_end().r   r    r   r0  r  s       r%   r  "WindowFrame.window_frame_start_end  s    !"WXXr/   )r  r  r0  ru  )r)   r*   r+   r,   r-   rf  r   r   r   r  r   r  rS  r  r  r.   r(   r/   r%   r  r    s=     IH#%&2

(<
2Yr/   r  c                       \ rS rSrSrS rSrg)RowRangei  ROWSc                 8    UR                   R                  X#5      $ r   )r  window_frame_rows_start_endr  s       r%   r  RowRange.window_frame_start_end  s    ~~99%EEr/   r(   Nr)   r*   r+   r,   r  r  r.   r(   r/   r%   r  r    s    JFr/   r  c                       \ rS rSrSrS rSrg)
ValueRangei!  RANGEc                 8    UR                   R                  X#5      $ r   )r  window_frame_range_start_endr  s       r%   r  !ValueRange.window_frame_start_end$  s    ~~::5FFr/   r(   Nr  r(   r/   r%   r  r  !  s    JGr/   r  )fr   r  r  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   r1   r   r  rP   rI   r_   rd   ri   PositiveIntegerFieldrW   r'  r"  r   rw   r   r|   r   r   rO  from_iterabler  r  r  r  _connector_combinationsr  r  dr  rB   field_typesr  r  r  r  r  r@   r  r  r   r  r'  r  r?  r?   r  r  r  r  r  r  r  r  r   r#  rI  rr  r  r[  r  r  r  r  r  )rB   s   0r%   <module>r%     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!   /^(A3^- B^2/^7
	A
^<