
    jF0                    z   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Jr  S SKJr  S SK J!r!J"r"  S SK#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+\(RX                  \(RZ                  \(R\                  \(R^                  \(R`                  4 V s0 s H(  n U \Rb                  \Rb                  \Rb                  4/_M*     sn \(RX                  \(Rd                  \(RZ                  \(R\                  \(R^                  \(R`                  4 V s0 s Hl  n U \Rf                  \Rf                  \Rf                  4\Rh                  \Rh                  \Rh                  4\Rj                  \Rj                  \Rj                  4/_Mn     sn \(RX                  \(Rd                  \(RZ                  \(R\                  \(R^                  4 V s0 s H  n U \Rf                  \Rj                  \Rj                  4\Rj                  \Rf                  \Rj                  4\Rf                  \Rh                  \Rh                  4\Rh                  \Rf                  \Rh                  4/_M     sn \(Rl                  \(Rn                  \(Rp                  \(Rr                  \(Rt                  4 V s0 s H(  n U \Rf                  \Rf                  \Rf                  4/_M*     sn \(RX                  \(Rd                  \(RZ                  \(R\                  \(R^                  \(R`                  4 V s0 s HC  n U \;" \
Ry                  S \Rf                  \Rj                  \Rh                  4 5       5      5      _ME     sn \(RX                  \Rz                  \R|                  \R~                  4\R~                  \R|                  \R~                  4\R|                  \Rz                  \R~                  4\R|                  \R~                  \R~                  4\R|                  \R|                  \R|                  4\R                  \R|                  \R                  4\R|                  \R                  \R                  4/0\(Rd                  \Rz                  \R|                  \R~                  4\R~                  \R|                  \R~                  4\Rz                  \Rz                  \R|                  4\Rz                  \R~                  \R|                  4\R~                  \Rz                  \R|                  4\R~                  \R~                  \R|                  4\R|                  \R|                  \R|                  4\R                  \R|                  \R                  4\R                  \R                  \R|                  4/	0/rA\" \;5      rBS rCS rD\D" 5         \R                  " SS9S  5       rF " S! S"\'\+5      rG " S# S$\G5      rH " S% S&\G5      rI\" S'S(9 " S) S*\(5      5       rJ " S+ S,\J5      rK " S- S.\J5      rL " S/ S0\J5      rM\" S1S(9 " S2 S3\'\+5      5       rN\" S4S(9 " S5 S6\+5      5       rO\" S7S(9 " S8 S9\O5      5       rP " S: S;\+5      rQ " S< S=\+5      rR " S> S?\+5      rS " S@ SA\+5      rT " SB SC\+5      rU " SD SE\+5      rV " SF SG\N5      rW " SH SI\W5      rX\" SJS(9 " SK SL\'\+5      5       rY " SM SN\Y5      rZ\" SOS(9 " SP SQ\+5      5       r[\" SRS(9 " SS ST\'\+5      5       r\ " SU SV\*\(5      r] " SW SX\]5      r^\" SYS(9 " SZ S[\+5      5       r_ " S\ S]\'\+5      r` " S^ S_\5      ra " S` Sa\+5      rb " Sb Sc\b5      rc " Sd Se\b5      rdgs  sn f s  sn f s  sn f s  sn f s  sn f )f    N)defaultdictDecimal)Enum)chainNoneType)UUID)EmptyResultSet
FieldErrorFullResultSet)DatabaseErrorNotSupportedError
connection)fields)
LOOKUP_SEP)PROHIBITED_FILTER_KWARGSQ)deconstructible)cached_propertyclassproperty)make_hashable)	signaturec                       \ 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DecimalField(CAST(%s AS NUMERIC)))as_sqloutput_fieldget_internal_typer   selfcompilerr   extra_contextsqlparamss         T/var/www/html/KUNJ/venv/lib/python3.13/site-packages/django/db/models/expressions.py	as_sqliteSQLiteNumericMixin.as_sqlite   sc    kk(H-H	  224F-3 {  	{	s   #= 
AA N)__name__
__module____qualname____firstlineno____doc__r*   __static_attributes__r,       r)   r   r      s    
r3   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9r3   c                 <    U R                  SU R                  S5      $ )NFrH   MULr$   s    r)   __neg__Combinable.__neg__L   s    }}R511r3   c                 :    U R                  XR                  S5      $ NFrH   ADDr$   rE   s     r)   __add__Combinable.__add__O       }}UHHe44r3   c                 :    U R                  XR                  S5      $ rR   rH   SUBrU   s     r)   __sub__Combinable.__sub__R   rX   r3   c                 :    U R                  XR                  S5      $ rR   rL   rU   s     r)   __mul__Combinable.__mul__U   rX   r3   c                 :    U R                  XR                  S5      $ rR   rH   DIVrU   s     r)   __truediv__Combinable.__truediv__X   rX   r3   c                 :    U R                  XR                  S5      $ rR   rH   MODrU   s     r)   __mod__Combinable.__mod__[   rX   r3   c                 :    U R                  XR                  S5      $ rR   rH   POWrU   s     r)   __pow__Combinable.__pow__^   rX   r3   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   NotImplementedErrorrU   s     r)   __and__Combinable.__and__a   C    4..75-QV3W3WT7QuX%%!T
 	
r3   c                 :    U R                  XR                  S5      $ rR   )rH   BITANDrU   s     r)   bitandCombinable.bitandh       }}UKK77r3   c                 :    U R                  XR                  S5      $ rR   )rH   BITLEFTSHIFTrU   s     r)   bitleftshiftCombinable.bitleftshiftk   s    }}U$5$5u==r3   c                 :    U R                  XR                  S5      $ rR   )rH   BITRIGHTSHIFTrU   s     r)   bitrightshiftCombinable.bitrightshiftn   s    }}U$6$6>>r3   c                     [        U SS5      (       a)  [        USS5      (       a  [        U 5      [        U5      -  $ [        S5      erq   rt   rU   s     r)   __xor__Combinable.__xor__q   ry   r3   c                 :    U R                  XR                  S5      $ rR   )rH   BITXORrU   s     r)   bitxorCombinable.bitxorx   r~   r3   c                     [        U SS5      (       a)  [        USS5      (       a  [        U 5      [        U5      -  $ [        S5      erq   rt   rU   s     r)   __or__Combinable.__or__{   ry   r3   c                 :    U R                  XR                  S5      $ rR   )rH   BITORrU   s     r)   bitorCombinable.bitor   s    }}UJJ66r3   c                 :    U R                  XR                  S5      $ NTrS   rU   s     r)   __radd__Combinable.__radd__       }}UHHd33r3   c                 :    U R                  XR                  S5      $ r   rZ   rU   s     r)   __rsub__Combinable.__rsub__   r   r3   c                 :    U R                  XR                  S5      $ r   rL   rU   s     r)   __rmul__Combinable.__rmul__   r   r3   c                 :    U R                  XR                  S5      $ r   rb   rU   s     r)   __rtruediv__Combinable.__rtruediv__   r   r3   c                 :    U R                  XR                  S5      $ r   rg   rU   s     r)   __rmod__Combinable.__rmod__   r   r3   c                 :    U R                  XR                  S5      $ r   rl   rU   s     r)   __rpow__Combinable.__rpow__   r   r3   c                     [        S5      eNrs   rv   rU   s     r)   __rand__Combinable.__rand__       !T
 	
r3   c                     [        S5      er   r   rU   s     r)   __ror__Combinable.__ror__   r   r3   c                     [        S5      er   r   rU   s     r)   __rxor__Combinable.__rxor__   r   r3   c                     [        U 5      $ N)NegatedExpressionrN   s    r)   
__invert__Combinable.__invert__   s     &&r3   r,   N)+r-   r.   r/   r0   r1   rT   r[   rM   rc   rm   rh   r{   r   r   r   r   rH   rO   rV   r\   r_   rd   ri   rn   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r,   r3   r)   r5   r5   &   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





'r3   r5   c                       \ rS rSrSrg)OutputFieldIsNoneError   r,   N)r-   r.   r/   r0   r2   r,   r3   r)   r   r      s    r3   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    # , $r3   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(r3   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%=%== $$%//
;	< 	<r3   c                     / $ r   r,   rN   s    r)   get_source_expressions%BaseExpression.get_source_expressions       	r3   c                     U(       a   eg r   r,   r$   exprss     r)   set_source_expressions%BaseExpression.set_source_expressions   s    y5r3   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@   )rB   
isinstancestrFrC   )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Gr3   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   rN   s    r)   r   !BaseExpression.contains_aggregate   s%     
9=9T9T9V
 
 	
r3   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   rN   s    r)   r   #BaseExpression.contains_over_clause  s%     
;?;V;V;X
 
 	
r3   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   rN   s    r)   r   )BaseExpression.contains_column_references	  %     
335
 
 	
r3   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)ru   contains_subqueryr   s     r)   r   3BaseExpression.contains_subquery.<locals>.<genexpr>  s3      
5 QgdJ6P$:P:PQ5s   68r   rN   s    r)   r    BaseExpression.contains_subquery  r   r3   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>3  s      9
3E4JtX&&3E   z4 expression does not support composite primary keys.)
r   
is_summaryr   rA   allows_composite_expressionsr   
ValueError	__class__r-   r   )	r$   queryallow_joinsreuse	summarizefor_savecr   source_expressionss	            r)   rA   !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   BooleanFieldrN   s    r)   rr   BaseExpression.conditional=  s    $++V-@-@AAr3   c                     U R                   $ r   r   rN   s    r)   fieldBaseExpression.fieldA  s       r3   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_fieldE  s0     113(F  r3   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   rN   s    r)   _output_field_or_none$BaseExpression._output_field_or_noneO  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>h  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_fieldZ  s{    
!%!7!7!9
 )L&!,0@0@AA$ )22;;",,55	  '   )r3   c                     U $ r   r,   value
expressionr   s      r)   r   "BaseExpression._convert_value_noopx  s    r3   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<7r3   IntegerFieldc                 "    U c  S $ [        U 5      $ r   )intr*  s      r)   r2  r3    s    53u:5r3   r   c                 "    U c  S $ [        U 5      $ r   r   r*  s      r)   r2  r3    s    975>9r3   )r!   r"   endswithr   )r$   r  internal_types      r)   r   BaseExpression.convert_value|  sn     !!//1L(  ##N33  n,  '''r3   c                 8    U R                   R                  U5      $ r   )r!   
get_lookup)r$   lookups     r)   r<  BaseExpression.get_lookup  s      ++F33r3   c                 8    U R                   R                  U5      $ r   )r!   get_transformr$   names     r)   r@  BaseExpression.get_transform  s      ..t44r3   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)   rE  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c  S OUR	                  U5      PM     sn5        U$ s  snf r   )getr   r   r   replace_expressions)r$   replacementsreplacementr  rG  r   s         r)   rL  "BaseExpression.replace_expressions  s    K&**400;0&*&A&A&CC"CK		$$ /.D $*B*B<*PP.	
 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)   rR  BaseExpression.get_refs  s9    u//1D|MMO#D 2 r3   c                 .    [         R                   " U 5      $ r   r   rN   s    r)   r   BaseExpression.copy      yyr3   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   rB  prefix_references)r$   prefixrG  r   s       r)   rZ   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r3   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$   rH  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&&r3   c                     [        U 4SS0UD6$ N
descendingTrf  rh  s     r)   descBaseExpression.desc      t7777r3   c                     U $ r   r,   rN   s    r)   reverse_orderingBaseExpression.reverse_ordering      r3   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   rB   rx  )r$   r   s     r)   rx  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)rB   r!   r{  r$   r%   r'   r(   s       r)   r{  BaseExpression.select_format  s8    
 4$$o66$$228&II{r3   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.)ru   r   r
  )r$   r,  rH  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/   r0   r1   NotImplementedempty_result_set_valuer  
filterablewindow_compatibleallowed_defaultr  set_returningr	  r   r   r   r   r   r   r    r   r   r   r   r   rA   propertyrr   r  r!   r  r  staticmethodr   r   r<  r@  rE  rL  rR  r   rZ  r_  r&  rj  rp  rt  rx  r{  r  r2   r,   r3   r)   r   r      s}   /+JJO'+$M#( -
<
H8 
 

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

 
 
 
 
 SX$L B B ! !     <   ( (,45 P'8r3   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                 ,    [        U R                  5      $ r   )r   r   )clss    r)   _constructor_signature!Expression._constructor_signature  s     &&r3   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   FieldrB  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##r3   c                 h   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$   argsri  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r3   c                 j    [        U[        5      (       d  [        $ UR                  U R                  :H  $ r   )r   r  r  r  rU   s     r)   __eq__Expression.__eq__,  s(    %,,!!~~..r3   c                 ,    [        U R                  5      $ r   )hashr  rN   s    r)   __hash__Expression.__hash__1  s    DMM""r3   r,   N)r-   r.   r/   r0   r1   r   	functools	lru_cacher  classmethodr  r   r  r  r  r2   r,   r3   r)   r  r    s\    D%' & ' 	$ 	$  /
#r3   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  )lhsrF   rhsresults       r)   register_combinable_fieldsr    s     9%,,c-?@r3   c            	          [          H4  n U R                  5        H  u  pU H  u  p4n[        X1XE5        M     M     M6     g r   )_connector_combinationsr  r  )drF   field_typesr  r  r  s         r)   _register_combinable_fieldsr    s8    $&'ggi"I$/ &*33G %0 '0 %r3   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  rK  
issubclass)rF   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r3   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$ )rD   i  c                 D   > [         TU ]  US9  X l        Xl        X0l        g Nr   )superr   rF   r  r  )r$   r  rF   r  r!   r  s        r)   r   CombinedExpression.__init__  s"    l3"r3   c                 N    SR                  U R                  R                  U 5      $ )Nz<{}: {}>)formatr  r-   rN   s    r)   __repr__CombinedExpression.__repr__  s      !8!8$??r3   c                 d    SR                  U R                  U R                  U R                  5      $ )Nz{} {} {})r  r  rF   r  rN   s    r)   __str__CombinedExpression.__str__  s#      4>>488DDr3   c                 2    U R                   U R                  /$ r   r  r  rN   s    r)   r   )CombinedExpression.get_source_expressions  s    $((##r3   c                 "    Uu  U l         U l        g r   r  r   s     r)   r   )CombinedExpression.set_source_expressions  s    "$(r3   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  rF   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;;< = !  r3   c                 t   / 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5      4$ Nz(%s))	compiler  r  r^  r  opscombine_expressionrF   r  )r$   r%   r   r   expression_paramsr'   r(   expression_wrappers           r)   r    CombinedExpression.as_sql  s    &&txx03  (&&txx03  (#nn//L!'/@)AAAr3   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  rA   r   DurationExpressionTemporalSubtractionr  r!   r"   AttributeErrorr   r  rF   r[   )r$   r  r  r  r  r  resolvedr  r  datetime_fieldsr  s             r)   rA   %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  rN   s    r)   r  "CombinedExpression.allowed_default*  s!    xx''DDHH,D,DDr3   )rF   r  r  r   r  )r-   r.   r/   r0   r   r  r  r   r   r  r    rA   r   r  r2   __classcell__r  s   @r)   rD   rD     sL    @E$#"B SX@ E Er3   rD   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.compile0  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5      4$ r  )featureshas_native_duration_fieldr  r    r  check_expression_supportr  r  r  r^  r  combine_duration_expressionrF   r  )	r$   r%   r   r   r  r'   r(   r  r  s	           r)   r    DurationExpression.as_sql;  s    887>(77//5ll488XB3  (ll488XB3  (#nn88U!'/@)AAAr3   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   r4  r  zInvalid arguments for operator .)r    rF   r5   rM   rc   r  r!   r"   r  r   r  r   )	r$   r%   r   r&   r'   r(   r  r  allowed_fieldss	            r)   r*   DurationExpression.as_sqliteL  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/   r0   r  r    r*   r2   r  r  s   @r)   r  r  /  s    	&B" r3   r  c                   P   ^  \ rS rSr\R
                  " 5       rU 4S jrS rSr	U =r
$ )r  ib  c                 :   > [         TU ]  XR                  U5        g r   )r  r   r[   )r$   r  r  r  s      r)   r   TemporalSubtraction.__init__e  s    hh,r3   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_sqlh  sk    //5txx(txx(~~00HH!!335s
 	
r3   r,   )r-   r.   r/   r0   r   r  r!   r   r    r2   r  r  s   @r)   r  r  b  s     '')L-
 
r3   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   iq  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rB  rA  s     r)   r   
F.__init__w  s	    
 	r3   c                 b    SR                  U R                  R                  U R                  5      $ N{}({}))r  r  r-   rB  rN   s    r)   r  
F.__repr__~  s!    t~~66		BBr3   c                     [        X5      $ r   )Sliced)r$   	subscripts     r)   __getitem__F.__getitem__  s    d&&r3   c                 H    [        SU R                  R                   S35      e)Nzargument of type 'z' is not iterable)	TypeErrorr  r-   rU   s     r)   __contains__F.__contains__  s%     ,T^^-D-D,EEVWXXr3   Nc                 <    UR                  U R                  X#U5      $ r   )resolve_refrB  r$   r  r  r  r  r  s         r)   rA   F.resolve_expression  s       K	JJr3   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   )rK  rB  splitr   r   r  r@  )r$   rM  rN  
field_name
transforms	transformtransform_classs          r)   rL  F.replace_expressions  s    '++D11K>"&))//*"=
 K'++AjM::K 66>K#I)77	BO&)+6K	 $
 r3   c                     [        U 40 UD6$ r   rf  rh  s     r)   rj  F.asc  rl  r3   c                     [        U 4SS0UD6$ rn  rf  rh  s     r)   rp  F.desc  rr  r3   c                 t    U R                   UR                   :H  =(       a    U R                  UR                  :H  $ r   )r  rB  rU   s     r)   r  F.__eq__  s'    ~~0LTYY%**5LLr3   c                 ,    [        U R                  5      $ r   )r  rB  rN   s    r)   r  
F.__hash__  s    DIIr3   c                 .    [         R                   " U 5      $ r   rV  rN   s    r)   r   F.copy  rX  r3   r  r  )r-   r.   r/   r0   r1   r  r   r  r  r   rA   rL  rj  rp  r  r  r   r2   r,   r3   r)   r   r   q  sL    NOC'Y SXK
('8Mr3   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  ri  s      r)   r    ResolvedOuterRef.as_sql  s    *
 	
r3   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  rA   r   r   rB  r   possibly_multivalued)r$   r  ri  colr  s       r)   rA   #ResolvedOuterRef.resolve_expression  sX    g($9&9###N99+Q   $.#: 
r3   c                     U $ r   r,   r$   relabelss     r)   rE   ResolvedOuterRef.relabeled_clone  rv  r3   c                     / $ r   r,   rN   s    r)   r_  "ResolvedOuterRef.get_group_by_cols  r   r3   r,   )r-   r.   r/   r0   r1   r   r   r    rA   rE  r_  r2   r  r  s   @r)   r8  r8    s/      
 r3   r8  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   rB  r  r8  r:  s      r)   rA   OuterRef.resolve_expression  s0    dii0099		**r3   c                     U $ r   r,   rA  s     r)   rE  OuterRef.relabeled_clone  rv  r3   r,   N)	r-   r.   r/   r0   r   r   rA   rE  r2   r,   r3   r)   rG  rG    s     +
r3   rG  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   rB  objr   r6  r
  startlengthslicestopstepr  )r$   rO  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Vr3   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$ )NrN  (r$  ))rP  rQ  rR  r  r/   rO  )r$   rP  rS  r  s       r)   r  Sliced.__repr__  sX    

Q{{*t0C%&	..--.a|2i]!LLr3   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#  rB  r   rO  rG  r  rA   r!   slice_expressionrP  rQ  )r$   r  r  r  r  r  r  r   s           r)   rA   Sliced.resolve_expression  sy     $$TYYINdhh4>> :;;88..EhD D$$55dJJTTr3   )rQ  rO  rP  r  )
r-   r.   r/   r0   r1   r   r  rA   r2   r  r  s   @r)   r  r    s1    W2M U Ur3   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  rN  argumentr  z (z given)r   )
aritylenr  r  r-   r  r   r   r  extra)r$   r!   r   re  r  s       r)   r   Func.__init__&  s    ::!c+&6$**&D NN++JJ"&**/J{B$  	l3"&"9"9;"G
r3   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>6       #P8OCHH8O   r$  c              3   Z   #    U  H!  u  p[        U5      S -   [        U5      -   v   M#     g7f)=Nri  )r   r  r  s      r)   r   rk  9  s'      :OhcC3S):Os   )+
{}({}, {})r  )

arg_joinerjoinr  re  _get_repr_optionssortedr  r  r  r-   )r$   r  re  s      r)   r  Func.__repr__5  s    ###P8O8O#PP:4:::!7!7!9:II :@:O E  &&t~~'>'>LLt~~66==r3   c                     0 $ )zAReturn a dict of extra __init__() options to include in the repr.r,   rN   s    r)   rs  Func._get_repr_options?  s    	r3   c                     U R                   $ r   r  rN   s    r)   r   Func.get_source_expressionsC  s    &&&r3   c                     Xl         g r   ry  r   s     r)   r   Func.set_source_expressionsF  s    "'r3   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5      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N8f = f)Nr  Tfunctiontemplaterq  r   r  )r  r  r  r  r   ru   r  rC   r   r  r^  re  
setdefaultr~  rK  r  rq  rr  r  )r$   r%   r   r~  r  rq  r&   	sql_partsr(   r   arg_sql
arg_paramsr  datas                 r)   r    Func.as_sqlI  sk    	//5	**C
D&.&6&6s&;# W%MM*% + /$**.. 'OOJ6Btxx
DMMBJ488L$//#J
.8ooi.HH]d7mf--- " V)01>*& *^;&.&6&6u=S7T&U#  D&.&6&6uT{&C#Ds   DAE<%E<;E<c                    > [         TU ]  5       nU R                  S S  Ul        U R                  R                  5       Ul        U$ r   )r  r   r  re  )r$   r   r  s     r)   r   	Func.copyp  s8    w|~"&"9"9!"<ZZ__&
r3   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>x  s     X@W*--@Wrm  )allr  rN   s    r)   r  Func.allowed_defaultv  s    X@W@WXXXr3   )re  r  NNN)r-   r.   r/   r0   r1   r~  r  rq  rc  r   r  rs  r   r   r    r   r   r  r2   r  r  s   @r)   r^  r^    sg    H.HJE26  >'( %.N Y Yr3   r^  zdjango.db.models.Valuec                   x   ^  \ 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U 4S	 jjrS
 rS r\S 5       rSrU =r$ )rC   i{  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
r3   c                 P    U R                   R                   SU R                  < S3$ )NrW  rX  )r  r-   r+  rN   s    r)   r  Value.__repr__  s$    ..))*!DJJ>;;r3   c                 ,   UR                   R                  U 5        U R                  nU R                  nUbF  U R                  (       a  UR                  X2S9nOUR                  X2S9n UR                  nU" X1U5      $ Uc  gSU44$ ! [         a     Nf = f)N)r   )NULLr,   %s)	r  r  r+  r  r  get_db_prep_saveget_db_prep_valueget_placeholder_sqlr  )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F&2&F&F# +3*EE; cV| " s   (B 
BBc                     U R                   " X40 UD6u  pE U R                  R                  5       S:X  a,  [        U R                  [
        5      (       a  SU-  nXE4$ SU-  nXE4$ ! [         a     XE4$ f = f)Nr   z(CAST(%s AS REAL))r   )r    r!   r"   r   r+  r   r   r#   s         r)   r*   Value.as_sqlite  s    kk(H-H	  224Fdjj'22.4C
 { 2C7C {  	{	s   AA$ A$ $
A32A3c                 6   > [         TU ]  XX4U5      nXVl        U$ r   )r  rA   r  r$   r  r  r  r  r  r  r  s          r)   rA   Value.resolve_expression  s"     G&u5XV
r3   c                     / $ r   r,   rN   s    r)   r_  Value.get_group_by_cols  r   r3   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  r6  r4  r1  r/  datetimer  dater  timer  	timedeltar  r   r   bytesBinaryFieldr
   	UUIDFieldrN   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$''##%% (r3   c                     U R                   $ r   r+  rN   s    r)   r  Value.empty_result_set_value  s    zzr3   r  r   r  )r-   r.   r/   r0   r1   r  r  r   r  r    r*   rA   r_  r  r  r  r2   r  r  s   @r)   rC   rC   {  sP    C HO
<,
 SX&0  r3   rC   zdjango.db.models.JSONNullc                   >   ^  \ rS rSrSrU 4S jrS rS rS rSr	U =r
$ )JSONNulli  z Represent JSON `null` primitive.c                 8   > SSK Jn  [        TU ]  S U" 5       S9  g )Nr   )	JSONFieldr   )django.db.modelsr  r  r   )r$   r  r  s     r)   r   JSONNull.__init__  s    .IK8r3   c                 4    U R                   R                   S3$ )Nz()r  r-   rN   s    r)   r  JSONNull.__repr__  s    ..))*"--r3   c                 b    U R                   R                  U R                  U5      nUc  SnSU44$ )Nnullr  )r!   r  r+  )r$   r%   r   r+  s       r)   r    JSONNull.as_sql  s4    !!33DJJ
K=EeX~r3   c                 2    U R                  X5      u  p4SnX44$ )NzJSON_EXTRACT(%s, '$')r    )r$   r%   r   r'   r(   s        r)   as_mysqlJSONNull.as_mysql  s    kk(7%{r3   r,   )r-   r.   r/   r0   r1   r   r  r    r  r2   r  r  s   @r)   r  r    s    *9
. r3   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3r3   c                 x    SR                  U R                  R                  U R                  U R                  5      $ Nrp  )r  r  r-   r'   r(   rN   s    r)   r  RawSQL.__repr__  s)    ""4>>#:#:DHHdkkRRr3   c                 8    SU R                   -  U R                  4$ r  )r'   r(   r   s      r)   r    RawSQL.as_sql   s     $++--r3   c                     U /$ r   r,   rN   s    r)   r_  RawSQL.get_group_by_cols  	    vr3   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#  rB  r  rA   )	r$   r  r  r  r  r  parentparent_fieldr  s	           r)   rA   RawSQL.resolve_expression  s     ;;++++77$*LL$=$=L#**002dhhnn6FF))(--{9  %> 8 w)(
 	
r3   )r(   r'   r   r  )r-   r.   r/   r0   r  r   r  r    r_  rA   r2   r  r  s   @r)   r  r    s.    O4S. SX
 
r3   r  c                        \ rS rSrS rS rSrg)Stari  c                     g)Nz'*'r,   rN   s    r)   r  Star.__repr__  s    r3   c                     g)N)r9   r,   r,   r   s      r)   r    Star.as_sql  s    r3   r,   N)r-   r.   r/   r0   r  r    r2   r,   r3   r)   r  r    s    r3   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    &$r3   c                     U R                   /$ r   r,  rN   s    r)   r   &DatabaseDefault.get_source_expressions)        r3   c                     Uu  U l         g r   r  r   s     r)   r   &DatabaseDefault.set_source_expressions,  s    "r3   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,  rA   r  r  )r$   r  r  r  r  r  resolved_expressions          r)   rA   "DatabaseDefault.resolve_expression/  sO     #oo@@# A 
 &&.H.H
 	
r3   c                 p    UR                   R                  (       d  UR                  U R                  5      $ g)N)DEFAULTr,   )r  "supports_default_keyword_in_insertr  r,  r   s      r)   r    DatabaseDefault.as_sqlA  s)    ""EE##DOO44r3   r  r   r  )r-   r.   r/   r0   r1   r   r   r   rA   r    r2   r  r  s   @r)   r  r    s-    
%!# SX
$ r3   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$ )ColiG  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__K  s,    !Ll3"'
DKr3   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-   rr  )r$   r  r  identifierss       r)   r  Col.__repr__Q  sM    

DKKv.3uc&k*#f+t~~66		+8NOOr3   c                     U R                   U R                  R                  pCU(       a  X44OU4nSR                  [	        UR
                  U5      5      nUS4$ )Nr  r,   )r  r  r  rr  r  
quote_name)r$   r%   r   r  r  r  r'   s          r)   r    
Col.as_sqlV  sH    

DKK$6$6v).uoVIhhs8..<=Bwr3   c                     U R                   c  U $ U R                  UR                  U R                   U R                   5      U R                  U R                  5      $ r   )r  r  rK  r  r!   rA  s     r)   rE  Col.relabeled_clone\  sF    ::K~~LLTZZ0$++t?P?P
 	
r3   c                     U /$ r   r,   rN   s    r)   r_  Col.get_group_by_colsc  r  r3   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_convertersf  s^    ;;$+++$$66zBB  22
KK))*56 	6r3   )r  r  r   )r-   r.   r/   r0   r   r=  r   r  r    rE  r_  r   r2   r  r  s   @r)   r  r  G  s3    !% 0P

6 6r3   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  in  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__o  s"    l3
r3   c                 ,    [        U R                  5      $ r   )rd  r  rN   s    r)   __len__ColPairs.__len__u  s    4<<  r3   c                 4    [        U R                  5       5      $ r   )r  get_colsrN   s    r)   __iter__ColPairs.__iter__x  s    DMMO$$r3   c           
          U R                   R                   SU R                  < SU R                  < SU R                  < SU R
                  < S3
$ )NrW  r$  rX  )r  r-   r  r  r  r!   rN   s    r)   r  ColPairs.__repr__{  sL    ~~&&'qb8H||b!2!2 5Q8	
r3   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_cols  sE     #&dllDLL"A
"A 

F+"A
 	
 
s   "A
c                 "    U R                  5       $ r   )r  rN   s    r)   r   ColPairs.get_source_expressions  s    }}r3   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   r>  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5      4$ )Nr$  )r  r    r  r^  rr  r  )	r$   r%   r   cols_sqlcols_paramsra  r>  r'   r(   s	            r)   r    ColPairs.as_sql  sf    }}C**X:KCOOC v& 
 yy"E+$666r3   c                     U R                  UR                  U R                  U R                  5      U R                  U R                  U R
                  5      $ r   )r  rK  r  r  r  r  rA  s     r)   rE  ColPairs.relabeled_clone  s;    ~~LLTZZ0$,,djj
 	
r3   c                     U $ r   r,   r:  s      r)   rA   ColPairs.resolve_expression  rv  r3   c                     X#4$ r   r,   r|  s       r)   r{  ColPairs.select_format  s
    {r3   )r  r  r  )r-   r.   r/   r0   r   r  r	  r  r  r   r   r    rE  rA   r{  r2   r  r  s   @r)   r  r  n  s?    !%

4

7

 r3   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$ )Refi  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   rS  r"  )r$   rS  r"  r  s      r)   r   Ref.__init__  s    !%	4;r3   c                 x    SR                  U R                  R                  U R                  U R                  5      $ r  )r  r  r-   rS  r"  rN   s    r)   r  Ref.__repr__  s)    ""4>>#:#:DIIt{{SSr3   c                     U R                   /$ r   r"  rN   s    r)   r   Ref.get_source_expressions  s    }r3   c                     Uu  U l         g r   r'  r   s     r)   r   Ref.set_source_expressions  s    r3   c                     U $ r   r,   r$  s         r)   rA   Ref.resolve_expression  s	    
 r3   c                     U R                   1$ r   )rS  rN   s    r)   rR  Ref.get_refs  s    		{r3   c                 f    U R                  5       nU R                  R                  U5      Ul        U$ r   )r   r"  rE  )r$   rB  rG  s      r)   rE  Ref.relabeled_clone  s(    		{{228<r3   c                 P    UR                   R                  U R                  5      S4$ r  )r  r  rS  r   s      r)   r    
Ref.as_sql  s     ~~((3R77r3   c                     U /$ r   r,   rN   s    r)   r_  Ref.get_group_by_cols  r  r3   )rS  r"  r  )r-   r.   r/   r0   r1   r   r  r   r   rA   rR  rE  r    r_  r2   r  r  s   @r)   r!  r!    sB    
.T SX
8 r3   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   ri  rj  s     r)   r   )ExpressionList.__str__.<locals>.<genexpr>  rl  rm  )rq  rr  r  rN   s    r)   r  ExpressionList.__str__  s#    ###P8O8O#PPPr3   c                 H   > U R                   (       d  g[        TU ]  " U0 UD6$ )N) r,   )r  r  r    )r$   r  ri  r  s      r)   r    ExpressionList.as_sql  s#    &&w~t.v..r3   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Ar3   c                 v    / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   r   r^  r_  )r$   group_by_colsr   s      r)   r_   ExpressionList.get_group_by_cols  s7    //1D  !7!7!9: 2r3   r,   )r-   r.   r/   r0   r1   r  r  r    r*   r_  r2   r  r  s   @r)   r6  r6    s*     !HQ/
B r3   r6  c                   @   ^  \ rS rSrSrSrU 4S jr\S 5       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   r8   rN  NTro  )r   r   rg  r   r   s     r)   r   'OrderByList.__init__.<locals>.<genexpr>  sM      
 $ dC((T!W^ $qr(5 $s   AA)r  r   )r$   r   re  r  s      r)   r   OrderByList.__init__  s(    
 $
 	+//r3   c                     Uc  g [        U[        [        45      (       a  U(       d  g U " U6 $ [        U[        5      (       d  [	        US5      (       a  U " U5      $ [        U SU< S35      e)NrA   z] must be either a string reference to a field, an expression, or a list or tuple of them not r  )r   listr  r   rB   r
  )r  contextparams      r)   
from_paramOrderByList.from_param  st    =edE]++;s##wu6J'K'Ku:i DDI9AO
 	
r3   r,   )r-   r.   r/   r0   r  r  r   r  rO  r2   r  r  s   @r)   rE  rE    s&    O)H	0 
 
r3   rE  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$r3   c                     US   U l         g Nr   r  r   s     r)   r   (ExpressionWrapper.set_source_expressions      (r3   c                     U R                   /$ r   r  rN   s    r)   r   (ExpressionWrapper.get_source_expressions  r  r3   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(**r3   c                 8    UR                  U R                  5      $ r   )r  r,  r   s      r)   r    ExpressionWrapper.as_sql%  s    00r3   c                 b    SR                  U R                  R                  U R                  5      $ r  )r  r  r-   r,  rN   s    r)   r  ExpressionWrapper.__repr__(  s!    t~~66HHr3   c                 .    U R                   R                  $ r   )r,  r  rN   s    r)   r  !ExpressionWrapper.allowed_default+  s    ...r3   r  )r-   r.   r/   r0   r1   r   r   r   r_  r    r  r  r  r2   r  r  s   @r)   rR  rR    s;    
%#!+1I / /r3   rR  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   i0  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__3  s    &2E2E2GHr3   c                 6    U R                   R                  5       $ r   )r,  r   rN   s    r)   r   NegatedExpression.__invert__6  s    ##%%r3   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  rC   r  0conditional_expression_supported_in_where_clauser,  )r$   r%   r   r'   r(   r  r  r  s          r)   r    NegatedExpression.as_sql9  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$ )Nrr   Fz*Cannot negate non-conditional expressions.)r  rA   ru   r,  r  )r$   r  r  r  r  r  r  r  s          r)   rA   $NegatedExpression.resolve_expressionI  sC     7-(
 x**M5AAHIIr3   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  rk  r  rj  r,  r  )r$   r%   r'   r(   $expression_supported_in_where_clauses        r)   r{  NegatedExpression.select_formatS  s\    
 ##TT 	- ##,,SS4T__EE299#>C{r3   r,   r  )r-   r.   r/   r0   r1   r   r   r    rA   r{  r2   r  r  s   @r)   r   r   0  s,    ;I&$" SX r3   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$ )Whenic  z"WHEN %(condition)s THEN %(result)sFc                   > U(       a{  [         R                  " U5      =n(       a/  SR                  S [        U5       5       5      n[	        SU 35      e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 )Nr$  c              3   .   #    U  H  nS U S 3v   M     g7f)r`  Nr,   )r   ks     r)   r    When.__init__.<locals>.<genexpr>l  s     'Q:PQ!A3a:Ps   z"The following kwargs are invalid: rr   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   intersectionrr  rt  r  r   ru   r   r
  r  r   	conditionr   r  )r$   rz  thenlookupsinvalid_kwargsinvalid_strr  s         r)   r   When.__init__i  s    !9!F!Fw!OO~O"ii'Q&:P'QQ"D[M RSS %&\\47M599%&y%<G%<d7GI}e$L$LPW"  i##IPQQd+"--d3A6r3   c                 >    SU R                   < SU R                  < 3$ )NzWHEN z THEN rz  r  rN   s    r)   r  When.__str__}  s    $(NNDKK@@r3   c                 @    SU R                   R                  < SU < S3$ N<z: >r  rN   s    r)   r  When.__repr__      !^^44d;;r3   c                 2    U R                   U R                  /$ r   r  rN   s    r)   r   When.get_source_expressions  s    ,,r3   c                 "    Uu  U l         U l        g r   r  r   s     r)   r   When.set_source_expressions  s    &+#r3   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  rA   rz  r  s          r)   rA   When.resolve_expression  sO     G&u5XV/ ..;;Eu < AK r3   c                 0    U R                   R                  /$ r   )r  r  rN   s    r)   r&  When.get_source_fields  s    1122r3   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$ )Nrz  r  )r  r  r  rz  r  r  )r$   r%   r   r  r&   template_params
sql_paramscondition_sqlcondition_params
result_sqlresult_paramss              r)   r    When.as_sql  s    //5'
*2*:*:4>>*J''4$$,$4$4T[[$A!
$.!,t}}) ,
,
,
 ,
 
 	
r3   c                 v    / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   rA  r`  s      r)   r_  When.get_group_by_cols  s4    113FKK0023 4r3   c                 h    U R                   R                  =(       a    U R                  R                  $ r   )rz  r  r  rN   s    r)   r  When.allowed_default  s!    ~~--M$++2M2MMr3   r  NNr  r   )r-   r.   r/   r0   r  rr   r   r  r  r   r   rA   r&  r    r_  r   r  r2   r  r  s   @r)   rt  rt  c  sX    3HK7(A<-, SX
3
 N Nr3   rt  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$ )Casei  z
An SQL searched CASE expression:

    CASE
        WHEN n > 0
            THEN 'positive'
        WHEN n < 0
            THEN 'negative'
        ELSE 'zero'
    END
z#CASE %(cases)s ELSE %(default)s ENDra  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   rt  )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   rL  casesr   r  re  )r$   r  r!   r  re  r  s        r)   r   Case.__init__  sT    <e<<<LMM&%[
..w7:
r3   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   ri  )r   r  s     r)   r   Case.__str__.<locals>.<genexpr>  s     1jc!ffjrm  z, ELSE )rr  r  r  rN   s    r)   r  Case.__str__  s)    II1djj11LL
 	
r3   c                 @    SU R                   R                  < SU < S3$ r  r  rN   s    r)   r  Case.__repr__  r  r3   c                 6    / U R                   QU R                  P$ r   r  r  rN   s    r)   r   Case.get_source_expressions  s    **T\\**r3   c                 "    UGt U l         U l        g r   r  r   s     r)   r   Case.set_source_expressions  s    $)!T\r3   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''!*r3   c                    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                  nU(       a  UR                  U5      u  pOC[        U[        5      (       a  UR                  =nb  SSKJn  U" X5      nUR                  U5      $ 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U[-        U5      4$ ! [         a     GM^  [         a    U	R                  n   GM/  f = f)Nr   )Castr  r  r  )r  r  r  r  r  re  r   r   r  r  r^  r   rC   r  django.db.models.functionsr  case_joinerrr  rK  r  unification_cast_sqlr!   r  )r$   r%   r   r  r  r&   r  
case_partsr  r  case_sqlcase_paramsr  default_sqldefault_paramsr!   r  r'   s                     r)   r    Case.as_sql  s    	//5zz##DLL119TZZ9=9

JJD(0(8(8(>% h'k*  llG*2*:*:7*C'K 7E**%,%B%BB\O;w5##G,,!5T%5%5#.#3#3J#? %0	".)M22:t}}M(%%1..55d6G6GH3NCE*%%%; "   ++s   ,F88
G!G! G!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(**r3   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!!zrm  )r  r  r  r  rN   s    r)   r  Case.allowed_default  s1    ||++ 
 4
/3zz4
 1
 	
r3   )r  r  re  r  )r-   r.   r/   r0   r1   r  r  r   r  r  r   r   r   r    r_  r   r  r2   r  r  s   @r)   r  r    sb    
 5HK'+$  
<+* @D)&V+
 
 
r3   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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        UR	                  SU R
                  5      U l        X0l        [        TU ]!  U5        g )Nr  Tr  )	ru   rG  r  r   r   r  re  r  r   )r$   querysetr!   re  r  s       r)   r   Subquery.__init__#  sP    Xw9??A
"

		*dmm<
&r3   c                     U R                   /$ r   r  rN   s    r)   r   Subquery.get_source_expressions+  s    

|r3   c                     US   U l         g rV  r  r   s     r)   r   Subquery.set_source_expressions.  s    1X
r3   c                 .    U R                   R                  $ r   )r  r!   rN   s    r)   r  Subquery._resolve_output_field1  s    zz&&&r3   c                   > [         TU ]  " U0 UD6n[        U 5      [        L a  U R                  [        R                  :X  a  SUR
                  l         U R                    U R                  (       aS  [        U R                  5      [        UR
                  R                  5      La  [        UR
                  U R                  S9$ UR
                  $ U$ ! [         a    UR
                  s $ f = f)NTr   )
r  rA   r  r  r  r  r   r!   r  rR  )r$   r  ri  r  r  s       r)   rA   Subquery.resolve_expression4  s    7-t>v>:!dmmx7H7H&H/3HNN,&!!   T$*;*;%<D++E & )dFWFWXX>>! " &~~%&s   C C+*C+c                 b   > [         TU ]  5       nUR                  R                  5       Ul        U$ r   )r  r   r  rG  )r$   rG  r  s     r)   r   Subquery.copyE  s'    kk'')r3   c                 .    U R                   R                  $ r   )r  external_aliasesrN   s    r)   r  Subquery.external_aliasesJ  s    zz***r3   c                 6    U R                   R                  5       $ r   )r  get_external_colsrN   s    r)   r  Subquery.get_external_colsN  s    zz++--r3   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$ )NrN  rK   r   r  )r  r  re  r  r    rK  r  )	r$   r%   r   r  r&   r  subquery_sqlr  r'   s	            r)   r    Subquery.as_sqlQ  sz    //59TZZ9=9#'::#4#4X#J &21R&8
#M22:t}}M(r3   c                 4    U R                   R                  U S9$ )N)wrapper)r  r_  rN   s    r)   r_  Subquery.get_group_by_cols[  s    zz++D+99r3   )re  r  r  r   )r-   r.   r/   r0   r1   r  r   r  r   r   r   r   r  rA   r   r  r  r  r    r_  r2   r  r  s   @r)   r  r    sf    
  H!H''"
 + +.: :r3   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  ri  r  s      r)   r   Exists.__init__d  s)    ,V,ZZ&&(
r3   c                 t    UR                   R                  R                  (       d  SR                  U5      nX#4$ rp  )r   r  rj  r  r|  s       r)   r{  Exists.select_formath  s1     ""++RR299#>C{r3   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  rj  r  rC   )r$   r%   r  ri  r  r  s        r)   r    Exists.as_sqlp  sb    	27>(<T<V<< 	2**33HBB ##E%L11		2s    1A'
A'&A'r  )r-   r.   r/   r0   r  r   r  r!   r  r   r{  r    r2   r  r  s   @r)   r  r  _  s0    %H&&(L")2 2r3   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)rg  iz  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.rA   z%expression must be an expression type)r
  nulls_first
nulls_lastro  rB   r,  )r$   r,  ro  r  r  s        r)   r   OrderBy.__init__  s]    :PQQ%:#6VWW&$$z#788DEE$r3   c                 x    SR                  U R                  R                  U R                  U R                  5      $ )Nz{}({}, descending={}))r  r  r-   r,  ro  rN   s    r)   r  OrderBy.__repr__  s.    &--NN##T__doo
 	
r3   c                     US   U l         g rV  r  r   s     r)   r   OrderBy.set_source_expressions  rX  r3   c                     U R                   /$ r   r  rN   s    r)   r   OrderBy.get_source_expressions  r  r3   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  r^  rr  r  r   supports_order_by_nulls_modifierr  r  ro  order_by_nulls_firstr  r  countrstrip)r$   r%   r   r  r&   r  r(   r>  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9r3   c                 4   UR                   R                  (       dm  UR                  R                  U R                  5      (       aC  U R                  5       n[        [        U R                  SS9SS9Ul        UR                  " X5      $ U R                  X5      $ )NT)r{  F)r  )	r  rj  r  rk  r,  r   r  rt  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0r3   c                 v    / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   rA  r`  s      r)   r_  OrderBy.get_group_by_cols  s4    113FKK0023 4r3   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   )ro  r  r  rN   s    r)   rt  OrderBy.reverse_ordering  sL    "oo-"DO#D  __#D"DOr3   c                     SU l         g rR   rH  rN   s    r)   rj  OrderBy.asc  s	    r3   c                     SU l         g r   rH  rN   s    r)   rp  OrderBy.desc  s	    r3   )ro  r,  r  r  )FNNr   )r-   r.   r/   r0   r  rr   r  r	  r   r  r   r   r    r  r_  rt  rj  rp  r2   r,   r3   r)   rg  rg  z  sK    ,HK',$#' 
%

#!":H1" r3   rg  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         [        R                  SU R                  5      U l        [        TU ]9  US9  U R                  U5      S   U l        g )Nr  Fz3Expression '%s' isn't compatible with OVER clauses.zWindow.order_byr   r   )partition_byorder_byframeru   r
  r  r-   r   r  rL  r6  rE  rO  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#../@$--Pl3!%!8!8!DQ!Gr3   c                 .    U R                   R                  $ r   )r  r!   rN   s    r)   r  Window._resolve_output_field  s    %%222r3   c                 ^    U R                   U R                  U R                  U R                  /$ r   r  r  r  r  rN   s    r)   r   Window.get_source_expressions
  s%    &&(9(94==$**UUr3   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=$*r3   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   r  ra  )r,  window)r  r  r  supports_over_clauser   r  r  r  r    r  r  r  r  r  rr  strip)r$   r%   r   r  expr_sqlr(   
window_sqlwindow_paramssql_exprr  	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%}%
 	
r3   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      $ rV  )r   r!   r   r   r   r   r/  r   r  r  r*   r    )r$   r%   r   r   r  r  s        r)   r*   Window.as_sqlite1  s}    d'')<)<==99;D!%!<!<!>171B1B1Dq!.''(:;0FF{{800r3   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  rN   s    r)   r  Window.__str__;  sb    !((&&'8<8I8IOc$"3"344r#$

 b!	
 	
r3   c                 @    SU R                   R                  < SU < S3$ r  r  rN   s    r)   r  Window.__repr__C  r  r3   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  r^  r_  r  )r$   rB  s     r)   r_  Window.get_group_by_colsF  sX      !2!2!D!D!FG==$  !@!@!BCr3   )r  r  r  r  )NNNNr   )r-   r.   r/   r0   r  r   r   r   r  r   r   r    r*   r  r  r_  r2   r  r  s   @r)   r  r    sZ    1H 
 H63VU
B1
< r3   r  c                   *    \ rS rSrSrSrSrSrS rSr	g)	WindowFrameExclusioniO  zCURRENT ROWGROUPTIESz	NO OTHERSc                 L    U R                   R                   SU R                   3$ )Nr  )r  r/   _name_rN   s    r)   r  WindowFrameExclusion.__repr__U  s"    ..--.a}==r3   r,   N)
r-   r.   r/   r0   CURRENT_ROWr3  r4  	NO_OTHERSr  r2   r,   r3   r)   r2  r2  O  s    KEDI>r3   r2  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)WindowFrameiY  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.)
rC   rP  endr   r	   r2  r  r  r/   	exclusion)r$   rP  r=  r>  s       r)   r   WindowFrame.__init__d  sY    5\
:)h0D%EFF>>../ 01 1  #r3   c                 "    Uu  U l         U l        g r   rP  r=  r   s     r)   r   "WindowFrame.set_source_expressionsn  s    $
DHr3   c                 2    U R                   U R                  /$ r   rA  rN   s    r)   r   "WindowFrame.get_source_expressionsq  s    

DHH%%r3   c                 P    U R                   c  gSU R                   R                   3$ )Nr<  z	 EXCLUDE )r>  r+  rN   s    r)   get_exclusionWindowFrame.get_exclusiont  s'    >>!4>>//011r3   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.-  S4$ )Nz6This backend does not support window frame exclusions.
frame_typerP  r=  excluder,   )r  r  window_frame_start_endrP  r+  r=  r>  r  supports_frame_exclusionr   r  rJ  rF  )r$   r%   r   rP  r=  s        r)   r    WindowFrame.as_sqly  s    //500

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

 >>*"5"5"N"N#H  MM"oo--/	 	
 		
r3   c                 @    SU R                   R                  < SU < S3$ r  r  rN   s    r)   r  WindowFrame.__repr__  r  r3   c                     / $ r   r,   rN   s    r)   r_  WindowFrame.get_group_by_cols  r   r3   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 %srI  )rP  r+  absr   r  	PRECEDINGr8  	FOLLOWINGUNBOUNDED_PRECEDINGr=  UNBOUNDED_FOLLOWINGr  rJ  rF  )r$   rP  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}}//))+	 
 
 	
r3   c                     [        S5      e)Nz3Subclasses must implement window_frame_start_end().r   r$   r   rP  r=  s       r)   rL  "WindowFrame.window_frame_start_end  s    !"WXXr3   )r=  r>  rP  r  )r-   r.   r/   r0   r1   r  r   r   r   rF  r    r  r_  r  rL  r2   r,   r3   r)   r;  r;  Y  s=     IH#%&2

(<
2Yr3   r;  c                       \ rS rSrSrS rSrg)RowRangei  ROWSc                 8    UR                   R                  X#5      $ r   )r  window_frame_rows_start_endr[  s       r)   rL  RowRange.window_frame_start_end  s    ~~99%EEr3   r,   Nr-   r.   r/   r0   rJ  rL  r2   r,   r3   r)   r^  r^    s    JFr3   r^  c                       \ rS rSrSrS rSrg)
ValueRangei  RANGEc                 8    UR                   R                  X#5      $ r   )r  window_frame_range_start_endr[  s       r)   rL  !ValueRange.window_frame_start_end  s    ~~::5FFr3   r,   Nrc  r,   r3   r)   re  re    s    JGr3   re  )er   r  r  collectionsr   decimalr   enumr   	itertoolsr   typesr	   uuidr
   django.core.exceptionsr   r   r   	django.dbr   r   r   r  r   django.db.models.constantsr   django.db.models.query_utilsr   r   django.utils.deconstructr   django.utils.functionalr   r   django.utils.hashabler   django.utils.inspectr   r   r5   r   r   r  rT   rM   rc   rh   rm   PositiveIntegerFieldr[   r4  r/  r   r{   r   r   r   r   rL  from_iterabler  r  r  r  r  r  r  r  r  r  rD   r  r  r   r8  rG  r  r^  rC   r  r  r  r  r  r  r!  r6  rE  rR  r   rt  r  r  r  rg  r  r2  r;  r^  re  )rF   s   0r)   <module>rz     s      #      L L B B # 1 D 4 B / *  A' A'H	Z 	V Vr
 *# *# *#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H   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 ./]J ] 0]@ 12u  3. 
Z  
F: %j %P$6* $6N6z 6r&* &RT 8
. 
> :;!/*J !/ <!/H0) 0f -.MN: MN /MN` -.`
z `
 /`
FD:~z D:N2X 26 01fj f 2fRh hV>4 >TY* TYnF{ FG Go3"$ s!   (/^$A3^)B^.!/^3
A
^8