
    hh$                       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      r(\ " S S\(\&5      5       r)\&RT                  \&RV                  \&RX                  \&RZ                  \&R\                  4 V s0 s H(  n U \R^                  \R^                  \R^                  4/_M*     sn \&RT                  \&R`                  \&RV                  \&RX                  \&RZ                  \&R\                  4 V s0 s Hl  n U \Rb                  \Rb                  \Rb                  4\Rd                  \Rd                  \Rd                  4\Rf                  \Rf                  \Rf                  4/_Mn     sn \&RT                  \&R`                  \&RV                  \&RX                  \&RZ                  4 V s0 s H  n U \Rb                  \Rf                  \Rf                  4\Rf                  \Rb                  \Rf                  4\Rb                  \Rd                  \Rd                  4\Rd                  \Rb                  \Rd                  4/_M     sn \&Rh                  \&Rj                  \&Rl                  \&Rn                  \&Rp                  4 V s0 s H(  n U \Rb                  \Rb                  \Rb                  4/_M*     sn \&RT                  \&R`                  \&RV                  \&RX                  \&RZ                  \&R\                  4 V s0 s HC  n U \9" \Ru                  S \Rb                  \Rf                  \Rd                  4 5       5      5      _ME     sn \&RT                  \Rv                  \Rx                  \Rz                  4\Rz                  \Rx                  \Rz                  4\Rx                  \Rv                  \Rz                  4\Rx                  \Rz                  \Rz                  4\Rx                  \Rx                  \Rx                  4\R|                  \Rx                  \R|                  4\Rx                  \R|                  \R|                  4/0\&R`                  \Rv                  \Rx                  \Rz                  4\Rz                  \Rx                  \Rz                  4\Rv                  \Rv                  \Rx                  4\Rv                  \Rz                  \Rx                  4\Rz                  \Rv                  \Rx                  4\Rz                  \Rz                  \Rx                  4\Rx                  \Rx                  \Rx                  4\R|                  \Rx                  \R|                  4\R|                  \R|                  \Rx                  4/	0/r?\" \95      r@S rA\? H5  rB\BR                  5        H  u  rDrE\E H  u  rFrGrH\A" \F\D\G\H5        M     M      M7     \R                  " SS9S 5       rJ " S S \%\)5      rK " S! S"\K5      rL " S# S$\K5      rM\" S%S&9 " S' S(\&5      5       rN " S) S*\N5      rO " S+ S,\N5      rP " S- S.\N5      rQ\" S/S&9 " S0 S1\%\)5      5       rR\" S2S&9 " S3 S4\%\)5      5       rS " S5 S6\)5      rT " S7 S8\)5      rU " S9 S:\)5      rV " S; S<\)5      rW " S= S>\)5      rX " S? S@\)5      rY " SA SB\R5      rZ " SC SD\Z5      r[\" SES&9 " SF SG\%\)5      5       r\ " SH SI\\5      r]\" SJS&9 " SK SL\)5      5       r^\" SMS&9 " SN SO\%\)5      5       r_ " SP SQ\(\&5      r` " SR SS\`5      ra\" STS&9 " SU SV\)5      5       rb " SW SX\%\)5      rc " SY SZ\	5      rd " S[ S\\)5      re " S] S^\e5      rf " S_ S`\e5      rggs  sn f s  sn f s  sn f s  sn f s  sn f )a    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         WD:\Anime\Ugyen\janka_web_project\venv\Lib\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                       \ rS rSrSrg)OutputFieldIsNoneError   r(   N)r)   r*   r+   r,   r.   r(   r/   r%   r   r      s    r/   r   c                   r   \ rS rSrSr\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 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% r0S& r1S' r2S(r3g)+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                  5        Vs/ s H  nUb  UR                  XX4U5      OSPM     nnU R                  (       d9  [        S U 5       5      (       a"  [        U R                  R                   S35      eUR                  U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.
Nc              3   B   #    U  H  n[        U[        5      v   M     g 7fr   )r   ColPairsr   s     r%   r   4BaseExpression.resolve_expression.<locals>.<genexpr>2  s      9
3E4JtX&&3E   z4 expression does not support composite primary keys.)
r   
is_summaryr   r=   allows_composite_expressionsr   
ValueError	__class__r)   r   )	r    queryallow_joinsreuse	summarizefor_savecr   source_expressionss	            r%   r=   !BaseExpression.resolve_expression  s    " IIK  002
 3 # ''EhW 3 	 
 00S 9
3E9
 6
 6
 >>**+ ,* *  	
  !34!
s   "B*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.field@  s       r/   c                 B    U R                  5       nUc  [        S5      eU$ )z+Return the output type of this expressions.z4Cannot resolve expression type, unknown output_field)_resolve_output_fieldr   r   s     r%   r   BaseExpression.output_fieldD  s0     113(F  r/   c                 <     U R                   $ ! [         a     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   rJ   s    r%   _output_field_or_none$BaseExpression._output_field_or_noneN  s%    	$$$% 		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>g  s      
!9vFF!9s   	z!Expression contains mixed types: , . You must set output_field.N)get_source_fieldsr   r  r   r)   )r    sources_iterr   r  s       r%   r  $BaseExpression._resolve_output_fieldY  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_noopw  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>  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_value{  sn     !!//1L(  ##N33  n,  '''r/   c                 8    U R                   R                  U5      $ r   )r   
get_lookup)r    lookups     r%   r8  BaseExpression.get_lookup  s      ++F33r/   c                 8    U R                   R                  U5      $ r   )r   get_transformr    names     r%   r<  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%   rA  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replacementr  rC  r   s         r%   rH  "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%   rN  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   r>  prefix_references)r    prefixrC  r   s       r%   rV   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%   r[   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    rD  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
descendingTrb  rd  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>   rt  )r    r   s     r%   rt  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   rw  r    r!   r#   r$   s       r%   rw  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   r  )r    r(  rD  s      r%   get_expression_for_validation,BaseExpression.get_expression_for_validation  s]    t?FF" $ ; ; = "!   < s   * 
AA  Ar   r   NTNFF)4r)   r*   r+   r,   r-   NotImplementedempty_result_set_valuer  
filterablewindow_compatibleallowed_defaultr{  set_returningr  r   r   r   r   r   r   r   r   r   r   r   r   r=   propertyrn   r  r   r  r  staticmethodr   r   r8  r<  rA  rH  rN  r   rV  r[  r"  rf  rl  rp  rt  rw  r|  r.   r(   r/   r%   r   r      s}   /+JJO'+$M#( -
<
H8 
 

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

 
 
 
 
 SX#J B B ! !     <   ( (,45 P'8r/   r   c                   z    \ rS rSrSr\\R                  " SS9S 5       5       r\	S 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                   ^  [        U[        5      (       a  [        [        T R                  U5      5      $ [        U[        5      (       a#  [        U 4S jUR                  5        5       5      $ [        U[        R                  5      (       aY  UR                  (       a=  UR                  (       a,  UR                  R                  R                  UR                  4$ [        U5      $ [        U5      $ )Nc              3   N   >#    U  H  u  pUTR                  U5      4v   M     g 7fr   )	_identity)r   keyvalr  s      r%   r   'Expression._identity.<locals>.<genexpr>  s!     Q=xs#s}}S12=s   "%)r   tuplemapr  dictitemsr   Fieldr>  model_metalabeltyper   )r  r'  s   ` r%   r  Expression._identity  s    eU##S]]E233eT""Q5;;=QQQeV\\**zzekk{{((..

::;U##r/   c                 f   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  pgU R                  U5      nUR                  Xg45        M*     [        U5      $ r   )_constructor_argsr  bind_partialapply_defaultsiter	argumentsr  nextr  r  appendr  )r    argsre  r  r  identityr   r'  s           r%   r  Expression.identity  s    --//<<TSDSFS	  ",,2245	YNN##JC NN5)EOOSL) $ Xr/   c                 j    [        U[        5      (       d  [        $ UR                  U R                  :H  $ r   )r   r  r  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  classmethodr  r   r  r  r  r.   r(   r/   r%   r  r    s\    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     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  rG  
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                   r   ^  \ 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U 4S	 j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  rZ  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                 V  > [         T
U ]  UUUUU5      n[        U [        [        45      (       d   UR
                  R                  R                  5       n UR                  R                  R                  5       nSXx1;   a0  Xx:w  a+  [        UR
                  UR                  UR                  5      $ 1 Skn	U R                  U R                  :X  a*  Xy;   a%  Xx:X  a   [	        UR
                  UR                  5      $ U$ ! [        [        4 a    S n Nf = f! [        [        4 a    S n Nf = f)NDurationField>   	DateField	TimeFieldDateTimeField)r  r=   r   DurationExpressionTemporalSubtractionr  r   r   AttributeErrorr   r  rB   rW   )r    r  r	  r
  r  r  resolvedr  r  datetime_fieldsr  s             r%   r=   %CombinedExpression.resolve_expression  s    7-
 $!35H IJJ #<<44FFH #<<44FFH 8"668;O)LL("4"4hll  JO$((*/(*8<<FF# #J/    #J/   s#   $C; $D ;DDD('D(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   r~  )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  rZ  r  combine_duration_expressionrB   )	r    r!   r   r   r  r#   r$   r  r  s	           r%   r   DurationExpression.as_sql5  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   r0  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_sqliteF  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  i\  c                 :   > [         TU ]  XR                  U5        g r   )r  r   rW   )r    r  r  r  s      r%   r   TemporalSubtraction.__init___  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_sqlb  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  \  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   ik  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r>  r=  s     r%   r   
F.__init__q  s	    
 	r/   c                 b    SR                  U R                  R                  U R                  5      $ N{}({}))r  r  r)   r>  rJ   s    r%   r  
F.__repr__x  s!    t~~66		BBr/   c                     [        X5      $ r   )Sliced)r    	subscripts     r%   __getitem__F.__getitem__{  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__~  s%     ,T^^-D-D,EEVWXXr/   Nc                 <    UR                  U R                  X#U5      $ r   )resolve_refr>  r    r  r	  r
  r  r  s         r%   r=   F.resolve_expression  s       K	JJr/   c                 0   UR                  U 5      =nb  U$ U R                  R                  [        5      tp4U(       d  U $ UR                  [	        U5      5      =n b  UR
                  c  U $ U H#  nUR                  U5      nUc  U s  $ U" U5      nM%     U$ r   )rG  r>  splitr   r   r  r<  )r    rI  rJ  
field_name
transforms	transformtransform_classs          r%   rH  F.replace_expressions  s    '++D11K>"&))//*"=
 K'++AjM::K 66>K#I)77	BO&)+6K	 $
 r/   c                     [        U 40 UD6$ r   rb  rd  s     r%   rf  F.asc  rh  r/   c                     [        U 4SS0UD6$ rj  rb  rd  s     r%   rl  F.desc  rn  r/   c                 t    U R                   UR                   :H  =(       a    U R                  UR                  :H  $ r   )r  r>  rQ   s     r%   r  F.__eq__  s'    ~~0LTYY%**5LLr/   c                 ,    [        U R                  5      $ r   )r  r>  rJ   s    r%   r  
F.__hash__  s    DIIr/   c                 .    [         R                   " U 5      $ r   rR  rJ   s    r%   r   F.copy  rT  r/   r  r~  )r)   r*   r+   r,   r-   r  r   r  r  r  r=   rH  rf  rl  r  r  r   r.   r(   r/   r%   r   r   k  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.)r  r    r  re  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   r>  r   possibly_multivalued)r    r  re  colr  s       r%   r=   #ResolvedOuterRef.resolve_expression  sX    g($9&9###N99+Q   $.#: 
r/   c                     U $ r   r(   r    relabelss     r%   rA   ResolvedOuterRef.relabeled_clone  rr  r/   c                     / $ r   r(   rJ   s    r%   r[  "ResolvedOuterRef.get_group_by_cols  r   r/   r(   )r)   r*   r+   r,   r-   r   r   r   r=   rA  r[  r.   r  r  s   @r%   r0  r0    s/      
 r/   r0  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   r>  r  r0  r2  s      r%   r=   OuterRef.resolve_expression  s0    dii0099		**r/   c                     U $ r   r(   r9  s     r%   rA  OuterRef.relabeled_clone  rr  r/   r(   N)	r)   r*   r+   r,   r   r   r=   rA  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   r>  objr   r2  r  startlengthslicestopstepr  )r    rG  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$ )NrF  (r   ))rH  rI  rJ  r  r+   rG  )r    rH  rK  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  r>  r   rG  r?  r  r=   r   slice_expressionrH  rI  )r    r  r	  r
  r  r  r  r   s           r%   r=   Sliced.resolve_expression  sy     $$TYYINdhh4>> :;;88..EhD D$$55dJJTTr/   )rI  rG  rH  r~  )
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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  rF  argumentr  z (z given)r   )
aritylenr  r  r)   r  r   r   r  extra)r    r   r   r]  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>0       #P8OCHH8O   r   c              3   Z   #    U  H!  u  p[        U5      S -   [        U5      -   v   M#     g7f)=Nra  )r   r  r  s      r%   r   rc  3  s'      :OhcC3S):Os   )+
{}({}, {})r  )

arg_joinerjoinr  r]  _get_repr_optionssortedr  r  r  r)   )r    r  r]  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%   rk  Func._get_repr_options9  s    	r/   c                     U R                   $ r   r  rJ   s    r%   r   Func.get_source_expressions=  s    &&&r/   c                     Xl         g r   rq  r   s     r%   r   Func.set_source_expressions@  s    "'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)Nr  Tfunctiontemplateri  r   r  )r  r  r  r  r   rq   r  r?   r   r  rZ  r]  
setdefaultrv  rG  rw  ri  rj  )r    r!   r   rv  rw  ri  r"   	sql_partsr$   r   arg_sql
arg_paramsr  datas                 r%   r   Func.as_sqlC  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   r  r]  )r    r   r  s     r%   r   	Func.copyj  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>r  s     X@W*--@Wre  )allr  rJ   s    r%   r  Func.allowed_defaultp  s    X@W@WXXXr/   )r]  r  NNN)r)   r*   r+   r,   r-   rv  rw  ri  r[  r   r  rk  r   r   r   r   r   r  r.   r  r  s   @r%   rV  rV    sg    H.HJE26  >'( %'N Y Yr/   rV  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?   iu  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__~  s     	l3
r/   c                 P    U R                   R                   SU R                  < S3$ )NrO  rP  )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   r  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%   r[  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  r2  r0  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%   r  Value.empty_result_set_value  s    zzr/   r  r   r~  )r)   r*   r+   r,   r-   r  r  r   r  r   r=   r[  r  r  r  r.   r  r  s   @r%   r?   r?   u  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      $ Nrh  )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%   r[  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  r>  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   r~  )r)   r*   r+   r,   r  r   r  r   r[  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   r~  )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)   rj  )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  rj  r  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  rG  r  r   r9  s     r%   rA  Col.relabeled_clone-  sF    ::K~~LLTZZ0$++t?P?P
 	
r/   c                     U /$ r   r(   rJ   s    r%   r[  Col.get_group_by_cols4  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_converters7  s^    ;;$+++$$66zBB  22
KK))*56 	6r/   )r  r  r   )r)   r*   r+   r,   r   r5  r   r  r   rA  r[  r   r.   r  r  s   @r%   r  r    s3    !% 0P

6 6r/   r  c                   d   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	 rS
 rS rS rSrU =r$ )r  i?  c                 D   > [         TU ]  US9  Xl        X l        X0l        g r  )r  r   r  targetssources)r    r  r  r  r   r  s        r%   r   ColPairs.__init__@  s"    l3
r/   c                 ,    [        U R                  5      $ r   )r\  r  rJ   s    r%   __len__ColPairs.__len__F  s    4<<  r/   c                 4    [        U R                  5       5      $ r   )r  get_colsrJ   s    r%   __iter__ColPairs.__iter__I  s    DMMO$$r/   c           
          U R                   R                   SU R                  < SU R                  < SU R                  < SU R
                  < S3
$ )NrO  r   rP  )r  r)   r  r  r  r   rJ   s    r%   r  ColPairs.__repr__L  sL    ~~&&'qb8H||b!2!2 5Q8	
r/   c           	          [        U R                  U R                  5       VVs/ s H  u  p[        U R                  X5      PM     snn$ s  snnf r   )zipr  r  r  r  )r    r  r  s      r%   r  ColPairs.get_colsR  sE     #&dllDLL"A
"A 

F+"A
 	
 
s   "A
c                 "    U R                  5       $ r   )r  rJ   s    r%   r   ColPairs.get_source_expressionsX  s    }}r/   c                    ^  [        U 4S jU 5       5      (       d   eU Vs/ s H  o"R                  PM     snT l        U Vs/ s H  o"R                  PM     snT l        g s  snf s  snf )Nc              3      >#    U  H5  n[        U[        5      =(       a    UR                  TR                  :H  v   M7     g 7fr   )r   r  r  )r   r   r    s     r%   r   2ColPairs.set_source_expressions.<locals>.<genexpr>\  s/     XRW$:dC(ETZZ4::-EERWs   =A )r  r  r  r  r  )r    r   r6  s   `  r%   r   ColPairs.set_source_expressions[  sS    XRWXXXXX.34es

e4-23Uc		U3 53s   A!A&c                     / n/ nU R                  5       nU H8  nUR                  X5      u  pxUR                  U5        UR                  U5        M:     SR	                  U5      U4$ )Nr   )r  r   r  rZ  rj  )	r    r!   r   cols_sqlcols_paramsr]  r6  r#   r$   s	            r%   r   ColPairs.as_sql`  sa    }}C**X:KCOOC v& 
 yy"K//r/   c                     U R                  UR                  U R                  U R                  5      U R                  U R                  U R
                  5      $ r   )r  rG  r  r  r  r  r9  s     r%   rA  ColPairs.relabeled_clonel  s;    ~~LLTZZ0$,,djj
 	
r/   c                     U $ r   r(   r2  s      r%   r=   ColPairs.resolve_expressionq  rr  r/   c                     X#4$ r   r(   rx  s       r%   rw  ColPairs.select_formatt  s
    {r/   )r  r  r  )r)   r*   r+   r,   r   r  r  r  r  r   r   r   rA  r=   rw  r.   r  r  s   @r%   r  r  ?  s?    !%

4

0

 r/   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$ )Refix  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   rO  r  )r    rO  r  r  s      r%   r   Ref.__init__~  s    !%	4;r/   c                 x    SR                  U R                  R                  U R                  U R                  5      $ r  )r  r  r)   rO  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_expressions  s    r/   c                     U $ r   r(   r  s         r%   r=   Ref.resolve_expression  s	    
 r/   c                     U R                   1$ r   )rO  rJ   s    r%   rN  Ref.get_refs  s    		{r/   c                 f    U R                  5       nU R                  R                  U5      Ul        U$ r   )r   r  rA  )r    r:  rC  s      r%   rA  Ref.relabeled_clone  s(    		{{228<r/   c                 P    UR                   R                  U R                  5      / 4$ r   )r  
quote_namerO  r   s      r%   r   
Ref.as_sql  s     ~~((3R77r/   c                     U /$ r   r(   rJ   s    r%   r[  Ref.get_group_by_cols  r  r/   )rO  r  r~  )r)   r*   r+   r,   r-   r   r  r   r   r=   rN  rA  r   r[  r.   r  r  s   @r%   r  r  x  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   ra  rb  s     r%   r   )ExpressionList.__str__.<locals>.<genexpr>  rd  re  )ri  rj  r  rJ   s    r%   r  ExpressionList.__str__  s#    ###P8O8O#PPPr/   c                 H   > U R                   (       d  g[        TU ]  " U0 UD6$ )N) r(   )r  r  r   )r    r  re  r  s      r%   r   ExpressionList.as_sql  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_sqlite  s    {{8A=AAr/   c                 v    / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   r   rZ  r[  )r    group_by_colsr   s      r%   r[   ExpressionList.get_group_by_cols  s7    //1D  !7!7!9: 2r/   r(   )r)   r*   r+   r,   r-   rw  r  r   r&   r[  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$ )OrderByListi  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   rF  NTrk  )r   r   rc  r   r   s     r%   r   'OrderByList.__init__.<locals>.<genexpr>  sM      
 $ dC((T!W^ $qr(5 $s   AA)r  r   )r    r   r]  r  s      r%   r   OrderByList.__init__  s(    
 $
 	+//r/   r(   )	r)   r*   r+   r,   r  rw  r   r.   r  r  s   @r%   r,  r,    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   r[  r  r    r(  r  s     r%   r[  #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   r[  r   r  r  r  r.   r  r  s   @r%   r3  r3    s;    
%#!+1I / /r/   r3  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  rL  r  rK  r(  r  )r    r!   r#   r$   $expression_supported_in_where_clauses        r%   rw  NegatedExpression.select_format  s\    
 ##TT 	- ##,,SS4T__EE299#>C{r/   r(   r~  )r)   r*   r+   r,   r-   r   r   r   r=   rw  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U 4S	 jjrS
 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   r  r  r   	conditionr   r  )r    rW  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 rW  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_expressionsB  s    ,,r/   c                 "    Uu  U l         U l        g r   r\  r   s     r%   r   When.set_source_expressionsE  s    &+#r/   c                    > [         TU ]  XX4U5      nU(       a-  UR                  b   U R                  R                  XX4SS9Ul        U$ )NF)r  )r  r=   rW  r  s          r%   r=   When.resolve_expressionH  sM     G&u5XV/..;;Eu < AK r/   c                 0    U R                   R                  /$ r   )r  r  rJ   s    r%   r"  When.get_source_fieldsS  s    1122r/   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$ )NrW  r  )r  r  r  rW  r  rw  )r    r!   r   rw  r"   template_params
sql_paramscondition_sqlcondition_params
result_sqlresult_paramss              r%   r   When.as_sqlW  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(  r\  s      r%   r[  When.get_group_by_colsf  s4    113FKK0023 4r/   c                 h    U R                   R                  =(       a    U R                  R                  $ r   )rW  r  r  rJ   s    r%   r  When.allowed_defaultm  s!    ~~--M$++2M2MMr/   r\  NNr~  r   )r)   r*   r+   r,   rw  rn   r   r  r  r   r   r=   r"  r   r[  r   r  r.   r  r  s   @r%   rU  rU  %  sX    3HK7"A<-, SX	3
 N Nr/   rU  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U 4S jr SS jrU 4S jr\S 5       rSrU =r$ )Caseir  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 ENDrY  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   rU  )r   cases     r%   r    Case.__init__.<locals>.<genexpr>  s     <ed:dD))er  z.Positional arguments must all be When objects.r   )	r  r  r  r   listcasesr   r|  r]  )r    r|  r   r  r]  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   ra  )r   r  s     r%   r   Case.__str__.<locals>.<genexpr>  s     1jc!ffjre  z, ELSE )rj  r  r|  rJ   s    r%   r  Case.__str__  s)    II1djj11LL
 	
r/   c                 @    SU R                   R                  < SU < S3$ r_  rb  rJ   s    r%   r  Case.__repr__  rd  r/   c                 6    U R                   U R                  /-   $ r   r  r|  rJ   s    r%   r   Case.get_source_expressions  s    zzT\\N**r/   c                 "    UGt U l         U l        g r   r  r   s     r%   r   Case.set_source_expressions  s    $)!T\r/   c                 L   > [         TU ]  5       nUR                  S S  Ul        U$ r   )r  r   r  )r    r  r  s     r%   r   	Case.copy  s"    GLN''!*r/   c                 N   UR                   R                  U 5        U R                  (       d  UR                  U R                  5      $ 0 U R
                  EUEn/ n/ nU R                   H9  n	 UR                  U	5      u  pUR                  U
5        UR                  U5        M;     UR                  U R                  5      u  pU(       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     GM  [         a"    UR                  U	R                  5      u  p   M  f = f)Nr  r|  rw  )r  r  r  r  r|  r]  r   r   r  r  rZ  case_joinerrj  rG  rw  r  unification_cast_sqlr   )r    r!   r   rw  r  r"   rn  
case_partsro  r  case_sqlcase_paramsdefault_sqldefault_paramsr#   s                  r%   r   Case.as_sql  s    	//5zz##DLL119TZZ9=9

JJD(0(8(8(>% h'k*  +3*:*:4<<*H'K..!5T%5%5#.#3#3J#? %0	".)M22:t}}M(%%1..55d6G6GH3NC' "   .6.>.>t{{.K+s   ,E++
F$9&F$#F$c                 v   > U R                   (       d  U R                  R                  5       $ [        TU ]	  5       $ r   )r  r|  r[  r  )r    r  s    r%   r[  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   r  )r   case_s     r%   r   'Case.allowed_default.<locals>.<genexpr>  s      4
/9e!!zre  )r|  r  r  r  rJ   s    r%   r  Case.allowed_default  s1    ||++ 
 4
/3zz4
 1
 	
r/   )r  r|  r]  ry  )r)   r*   r+   r,   r-   rw  r  r   r  r  r   r   r   r   r[  r   r  r.   r  r  s   @r%   r{  r{  r  sb    
 5HK'+$  
<+* @DB+
 
 
r/   r{  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   rC  r  r   r]  r  r   )r    querysetr   r]  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 r7  r  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  rC  )r    rC  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$ )NrF  rG   r   rw  )r  r  r]  r  r   rG  rw  )	r    r!   r   rw  r"   rn  subquery_sqlro  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  r[  rJ   s    r%   r[  Subquery.get_group_by_cols  s    zz++D+99r/   )r]  r  r   )r)   r*   r+   r,   r-   rw  r   r  r   r   r   r   r  r   r  r  r  r   r[  r.   r  r  s   @r%   r  r    sa    
  H!H''
 + +.: :r/   r  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    r  re  r  s      r%   r   Exists.__init__  s)    ,V,ZZ&&(
r/   c                 t    UR                   R                  R                  (       d  SR                  U5      nX#4$ rQ  )r   r  rK  r  rx  s       r%   rw  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  rK  r  r?   )r    r!   r  re  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'r  )r)   r*   r+   r,   rw  r   r  r   r  r   rw  r   r.   r  r  s   @r%   r  r    s0    %H&&(L")2 2r/   r  zdjango.db.models.OrderByc                   h    \ rS 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)rc  i  z%(expression)s %(ordering)sFTNc                     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)r  nulls_first
nulls_lastrk  r>   r(  )r    r(  rk  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(  rk  rJ   s    r%   r  OrderBy.__repr__/  s.    &--NN##T__doo
 	
r/   c                     US   U l         g r7  r  r   s     r%   r   OrderBy.set_source_expressions4  r9  r/   c                     U R                   /$ r   r  rJ   s    r%   r   OrderBy.get_source_expressions7  r  r/   c                    [        U R                  [        5      (       a  / n/ nU R                  R                  5        H[  nU R	                  5       nUR
                  " U/5        UR                  U5      u  pUR                  U	5        UR                  U
5        M]     SR                  U5      U4$ 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  pUU R                  (       a  SOSS.UEnXcR'                  S	5      -  nX<-  R)                  5       U4$ )
Nr   z%s NULLS LASTz%s NULLS FIRSTz%%(expression)s IS NULL, %sz%%(expression)s IS NOT NULL, %sDESCASC)r(  orderingz%(expression)s)r   r(  r  r  r   r   r  r  rZ  rj  rw  r   supports_order_by_nulls_modifierr  r  rk  order_by_nulls_firstr  r  countrstrip)r    r!   r   rw  r"   ry  r$   r6  r   r#   
col_paramsexpression_sqlplaceholderss                r%   r   OrderBy.as_sql:  s   doox00IF//1yy{++SE2"*"2"24"8  %j) 2 99Y'//,t}}??*X5!!+h6J$7$7$L$L88C!!OO
(;(;(P(P<xG//5!)!1!1$//!B("&//u
 

 	..!122'//1699r/   c                 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)rX  F)r|  )	r  rK  r  rL  r(  r   r{  rU  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(  r\  s      r%   r[  OrderBy.get_group_by_colso  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   )rk  r  r  rJ   s    r%   rp  OrderBy.reverse_orderingu  sL    "oo-"DO#D  __#D"DOr/   c                     SU l         g rN   r/  rJ   s    r%   rf  OrderBy.asc  s	    r/   c                     SU l         g r   r/  rJ   s    r%   rl  OrderBy.desc  s	    r/   )rk  r(  r  r  )FNNr   )r)   r*   r+   r,   rw  rn   r{  r  r   r  r   r   r   r  r[  rp  rf  rl  r.   r(   r/   r%   rc  rc    sK    ,HK',$#' 
%

#!":H1" r/   rc  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$ )Windowi  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   r  r  r)   r   r  r  r  r,  r   r   r  r   r   source_expression)r    r(  r  r  r  r   r  s         r%   r   Window.__init__  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_field  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_expressions  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_expressions  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   rw  rY  )r(  window)r  r  r  supports_over_clauser   r  r  r  r   r  r  r  r  rw  rj  strip)r    r!   r   rw  expr_sqlr$   
window_sqlwindow_paramssql_exprro  	order_sqlorder_params	frame_sqlframe_paramss                 r%   r   Window.as_sql  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      $ r7  )r   r   r   r   r   r   r+  r   r  r  r&   r   )r    r!   r   r   r  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_  rb  rJ   s    r%   r  Window.__repr__  rd  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  rZ  r[  r  )r    r)  s     r%   r[  Window.get_group_by_cols  sX      !2!2!D!D!FG==$  !@!@!BCr/   )r  r  r  r  )NNNNr   )r)   r*   r+   r,   rw  r   r   r   r  r   r   r   r&   r  r  r[  r.   r  r  s   @r%   r  r    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?   rH  endr   r	   r  r  r  r+   	exclusion)r    rH  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   rH  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_typerH  r  exclude)r  r  window_frame_start_endrH  r'  r  r  r  supports_frame_exclusionr   rw  r#  r  )r    r!   r   rH  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_  rb  rJ   s    r%   r  WindowFrame.__repr__8  rd  r/   c                     / $ r   r(   rJ   s    r%   r[  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"  )rH  r'  absr   r  	PRECEDINGr  	FOLLOWINGUNBOUNDED_PRECEDINGr  UNBOUNDED_FOLLOWINGrw  r#  r  )r    rH  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   rH  r  s       r%   r%  "WindowFrame.window_frame_start_endW  s    !"WXXr/   )r  r  rH  r  )r)   r*   r+   r,   r-   rw  r   r   r   r  r   r  r[  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_endr4  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%   r7  r7  [  s    JFr/   r7  c                       \ rS rSrSrS rSrg)
ValueRangeib  RANGEc                 8    UR                   R                  X#5      $ r   )r  window_frame_range_start_endr4  s       r%   r%  !ValueRange.window_frame_start_ende  s    ~~::5FFr/   r(   Nr<  r(   r/   r%   r>  r>  b  s    JGr/   r>  )hr   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   r  rP   rI   r_   rd   ri   PositiveIntegerFieldrW   r0  r+  r   rw   r   r|   r   r   r  from_iterabler  r  r  r  _connector_combinationsr  r  dr  rB   field_typesr  r  r  r  r  r@   r  r  r   r0  r?  r  rV  r?   r  r  r  r  r  r  r  r,  r3  r   rU  r{  r  r  rc  r  r  r  r7  r>  )rB   s   0r%   <module>rV     s1       #      L L B B # 1 * 4 B /  A' A'H	Z 	T Tn
 *# *# *#B 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!! "!TE+Z TEn0+ 0f
, 
 *+=
 = ,=@"q "J
q 
6UQ 6Ur -.ZYz ZY /ZYz ./M
 M 0M` 
Z  
F: $j $N$6* $6N6z 6r&* &RT 80. 0  :;!/*J !/ <!/H0) 0f -.IN: IN /INX -.V
z V
 /V
r2:~z 2:j2X 26 01fj f 2fRq qh>4 >TY* TYnF{ FG GI1"$ s!   $/^>A3_B_/_
A
_