
    fki)                       S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJrJrJr  S S	KJrJrJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJ r J!r!  S SK"J#r#  S SK$J%r%   " S S5      r& " S S5      r' " S S\5      r( " S S5      r)\ " S S\)\'5      5       r*\'RV                  \'RX                  \'RZ                  \'R\                  \'R^                  4 V s0 s H(  n U \R`                  \R`                  \R`                  4/_M*     sn \'RV                  \'Rb                  \'RX                  \'RZ                  \'R\                  \'R^                  4 V s0 s Hl  n U \Rd                  \Rd                  \Rd                  4\Rf                  \Rf                  \Rf                  4\Rh                  \Rh                  \Rh                  4/_Mn     sn \'RV                  \'Rb                  \'RX                  \'RZ                  \'R\                  4 V s0 s H  n U \Rd                  \Rh                  \Rh                  4\Rh                  \Rd                  \Rh                  4\Rd                  \Rf                  \Rf                  4\Rf                  \Rd                  \Rf                  4/_M     sn \'Rj                  \'Rl                  \'Rn                  \'Rp                  \'Rr                  4 V s0 s H(  n U \Rd                  \Rd                  \Rd                  4/_M*     sn \'RV                  \'Rb                  \'RX                  \'RZ                  \'R\                  \'R^                  4 V s0 s HC  n U \:" \
Rw                  S \Rd                  \Rh                  \Rf                  4 5       5      5      _ME     sn \'RV                  \Rx                  \Rz                  \R|                  4\R|                  \Rz                  \R|                  4\Rz                  \Rx                  \R|                  4\Rz                  \R|                  \R|                  4\Rz                  \Rz                  \Rz                  4\R~                  \Rz                  \R~                  4\Rz                  \R~                  \R~                  4/0\'Rb                  \Rx                  \Rz                  \R|                  4\R|                  \Rz                  \R|                  4\Rx                  \Rx                  \Rz                  4\Rx                  \R|                  \Rz                  4\R|                  \Rx                  \Rz                  4\R|                  \R|                  \Rz                  4\Rz                  \Rz                  \Rz                  4\R~                  \Rz                  \R~                  4\R~                  \R~                  \Rz                  4/	0/r@\" \:5      rAS rB\@ H5  rC\CR                  5        H  u  rErF\F H  u  rGrHrI\B" \G\E\H\I5        M     M      M7     \R                  " SS9S 5       rK " S  S!\&\*5      rL " S" S#\L5      rM " S$ S%\L5      rN\" S&S'9 " S( S)\'5      5       rO " S* S+\O5      rP " S, S-\O5      rQ " S. S/\O5      rR\" S0S'9 " S1 S2\&\*5      5       rS\" S3S'9 " S4 S5\&\*5      5       rT " S6 S7\*5      rU " S8 S9\*5      rV " S: S;\*5      rW " S< S=\*5      rX " S> S?\*5      rY " S@ SA\*5      rZ " SB SC\S5      r[ " SD SE\[5      r\\" SFS'9 " SG SH\&\*5      5       r] " SI SJ\]5      r^\" SKS'9 " SL SM\*5      5       r_\" SNS'9 " SO SP\&\*5      5       r` " SQ SR\)\'5      ra " SS ST\a5      rb\" SUS'9 " SV SW\*5      5       rc " SX SY\&\*5      rd " SZ S[\5      re " S\ S]\*5      rf " S^ S_\f5      rg " S` Sa\f5      rhgs  sn f s  sn f s  sn f s  sn f s  sn f )b    N)defaultdictDecimal)Enum)chainNoneType)UUID)EmptyResultSet
FieldErrorFullResultSet)DatabaseErrorNotSupportedError
connection)fields)
LOOKUP_SEP)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DecimalFieldz(CAST(%s AS NUMERIC)))as_sqloutput_fieldget_internal_typer   )selfcompilerr   extra_contextsqlparamss         a/var/www/events.demo-site.click/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    
r0   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9r0   c                 <    U R                  SU R                  S5      $ )NFrE   MULr!   s    r&   __neg__Combinable.__neg__L   s    }}R511r0   c                 :    U R                  XR                  S5      $ NFrE   ADDr!   rB   s     r&   __add__Combinable.__add__O       }}UHHe44r0   c                 :    U R                  XR                  S5      $ rO   rE   SUBrR   s     r&   __sub__Combinable.__sub__R   rU   r0   c                 :    U R                  XR                  S5      $ rO   rI   rR   s     r&   __mul__Combinable.__mul__U   rU   r0   c                 :    U R                  XR                  S5      $ rO   rE   DIVrR   s     r&   __truediv__Combinable.__truediv__X   rU   r0   c                 :    U R                  XR                  S5      $ rO   rE   MODrR   s     r&   __mod__Combinable.__mod__[   rU   r0   c                 :    U R                  XR                  S5      $ rO   rE   POWrR   s     r&   __pow__Combinable.__pow__^   rU   r0   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   NotImplementedErrorrR   s     r&   __and__Combinable.__and__a   C    4..75-QV3W3WT7QuX%%!T
 	
r0   c                 :    U R                  XR                  S5      $ rO   )rE   BITANDrR   s     r&   bitandCombinable.bitandh       }}UKK77r0   c                 :    U R                  XR                  S5      $ rO   )rE   BITLEFTSHIFTrR   s     r&   bitleftshiftCombinable.bitleftshiftk   s    }}U$5$5u==r0   c                 :    U R                  XR                  S5      $ rO   )rE   BITRIGHTSHIFTrR   s     r&   bitrightshiftCombinable.bitrightshiftn   s    }}U$6$6>>r0   c                     [        U SS5      (       a)  [        USS5      (       a  [        U 5      [        U5      -  $ [        S5      ern   rq   rR   s     r&   __xor__Combinable.__xor__q   rv   r0   c                 :    U R                  XR                  S5      $ rO   )rE   BITXORrR   s     r&   bitxorCombinable.bitxorx   r{   r0   c                     [        U SS5      (       a)  [        USS5      (       a  [        U 5      [        U5      -  $ [        S5      ern   rq   rR   s     r&   __or__Combinable.__or__{   rv   r0   c                 :    U R                  XR                  S5      $ rO   )rE   BITORrR   s     r&   bitorCombinable.bitor   s    }}UJJ66r0   c                 :    U R                  XR                  S5      $ NTrP   rR   s     r&   __radd__Combinable.__radd__       }}UHHd33r0   c                 :    U R                  XR                  S5      $ r   rW   rR   s     r&   __rsub__Combinable.__rsub__   r   r0   c                 :    U R                  XR                  S5      $ r   rI   rR   s     r&   __rmul__Combinable.__rmul__   r   r0   c                 :    U R                  XR                  S5      $ r   r_   rR   s     r&   __rtruediv__Combinable.__rtruediv__   r   r0   c                 :    U R                  XR                  S5      $ r   rd   rR   s     r&   __rmod__Combinable.__rmod__   r   r0   c                 :    U R                  XR                  S5      $ r   ri   rR   s     r&   __rpow__Combinable.__rpow__   r   r0   c                     [        S5      eNrp   rs   rR   s     r&   __rand__Combinable.__rand__       !T
 	
r0   c                     [        S5      er   r   rR   s     r&   __ror__Combinable.__ror__   r   r0   c                     [        S5      er   r   rR   s     r&   __rxor__Combinable.__rxor__   r   r0   c                     [        U 5      $ N)NegatedExpressionrK   s    r&   
__invert__Combinable.__invert__   s     &&r0   r)   N)+r*   r+   r,   r-   r.   rQ   rX   rJ   r`   rj   re   rx   r   r}   r   r   rE   rL   rS   rY   r\   ra   rf   rk   rt   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r)   r0   r&   r2   r2   &   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





'r0   r2   c                       \ rS rSrSrg)OutputFieldIsNoneError   r)   N)r*   r+   r,   r-   r/   r)   r0   r&   r   r      s    r0   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    # , $r0   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(r0   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%=%== $$%//
;	< 	<r0   c                     / $ r   r)   rK   s    r&   get_source_expressions%BaseExpression.get_source_expressions       	r0   c                     U(       a   eg r   r)   r!   exprss     r&   set_source_expressions%BaseExpression.set_source_expressions   s    y5r0   c                     U Vs/ s HA  n[        US5      (       a  UO*[        U[        5      (       a  [        U5      O
[	        U5      PMC     sn$ s  snf r=   )r?   
isinstancestrFr@   )r!   expressionsargs      r&   _parse_expressions!BaseExpression._parse_expressions   s\     #
 # 3 455  *3 4 4af%*F #
 	
 
s   AAc                     [        S5      e)a.  
Responsible for returning a (sql, [params]) tuple to be included
in the current query.

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

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

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

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

Return: (sql, params)
  Where `sql` is a string containing ordered sql parameters to be
  replaced with the elements of the list `params`.
z"Subclasses must implement as_sql()r   r!   r"   r   s      r&   r   BaseExpression.as_sql   s    4 ""FGGr0   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   rK   s    r&   r   !BaseExpression.contains_aggregate   s%     
9=9T9T9V
 
 	
r0   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   rK   s    r&   r   #BaseExpression.contains_over_clause  s%     
;?;V;V;X
 
 	
r0   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   rK   s    r&   r   )BaseExpression.contains_column_references	  %     
335
 
 	
r0   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)rr   contains_subqueryr   s     r&   r   3BaseExpression.contains_subquery.<locals>.<genexpr>  s3      
5 QgdJ6P$:P:PQ5s   68r   rK   s    r&   r    BaseExpression.contains_subquery  r   r0   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   r>   allows_composite_expressionsr   
ValueError	__class__r*   r   )	r!   queryallow_joinsreuse	summarizefor_savecr   source_expressionss	            r&   r>   !BaseExpression.resolve_expression  s    $ IIK  002
 3 # ''EhW 3 	 
 00S 9
3E9
 6
 6
 >>**+ ,* *  	
  !34!
s   "B*c                 J    [        U R                  [        R                  5      $ r   )r   r   r   BooleanFieldrK   s    r&   ro   BaseExpression.conditional=  s    $++V-@-@AAr0   c                     U R                   $ r   r   rK   s    r&   fieldBaseExpression.fieldA  s       r0   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  r0   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   rK   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	  '   )r0   c                     U $ r   r)   value
expressionr   s      r&   r   "BaseExpression._convert_value_noopx  s    r0   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<7r0   IntegerFieldc                 "    U c  S $ [        U 5      $ r   )intr'  s      r&   r/  r0    s    53u:5r0   r   c                 "    U c  S $ [        U 5      $ r   r   r'  s      r&   r/  r0    s    975>9r0   )r   r    endswithr   )r!   r  internal_types      r&   r   BaseExpression.convert_value|  sn     !!//1L(  ##N33  n,  '''r0   c                 8    U R                   R                  U5      $ r   )r   
get_lookup)r!   lookups     r&   r9  BaseExpression.get_lookup  s      ++F33r0   c                 8    U R                   R                  U5      $ r   )r   get_transformr!   names     r&   r=  BaseExpression.get_transform  s      ..t44r0   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&   rB  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  rD  r   s         r&   rI  "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&   rO  BaseExpression.get_refs  s9    u//1D|MMO#D 2 r0   c                 .    [         R                   " U 5      $ r   r   rK   s    r&   r   BaseExpression.copy      yyr0   c           	      
   U R                  5       nUR                  U R                  5        Vs/ s HB  n[        U[        5      (       a  [	        U UR
                   35      OUR                  U5      PMD     sn5        U$ s  snf r   )r   r   r   r   r   r?  prefix_references)r!   prefixrD  r   s       r&   rW   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r0   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!   rE  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&&r0   c                     [        U 4SS0UD6$ N
descendingTrc  re  s     r&   descBaseExpression.desc      t7777r0   c                     U $ r   r)   rK   s    r&   reverse_orderingBaseExpression.reverse_ordering      r0   c              #      #    U v   U R                  5        H;  nU(       d  M  [        US5      (       a  UR                  5        Sh  vN   M7  Uv   M=     g N7f)zQ
Recursively yield this expression and all subexpressions, in
depth-first order.
flattenN)r   r?   ru  )r!   r   s     r&   ru  BaseExpression.flatten  sJ     
 
//1Dt4++#||~--J 2 .s   A$AAAc                 v    [        U R                  S5      (       a  U R                  R                  XU5      $ X#4$ )zn
Custom format for select clauses. For example, EXISTS expressions need
to be wrapped in CASE WHEN on Oracle.
select_format)r?   r   rx  r!   r"   r$   r%   s       r&   rx  BaseExpression.select_format  s8    
 4$$o66$$228&II{r0   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.)rr   r   r  )r!   r)  rE  s      r&   get_expression_for_validation,BaseExpression.get_expression_for_validation  s_     t?FF" $ ; ; = "!   < s   * 
AA  Ar   r   NTNFF)4r*   r+   r,   r-   r.   NotImplementedempty_result_set_valuer  
filterablewindow_compatibleallowed_defaultr|  set_returningr  r   r   r   r   r   r   r   r   r   r   r   r   r>   propertyro   r  r   r  r  staticmethodr   r   r9  r=  rB  rI  rO  r   rW  r\  r#  rg  rm  rq  ru  rx  r}  r/   r)   r0   r&   r   r      s}   /+JJO'+$M#( -
<
H8 
 

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

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

::;U##r0   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!   argsrf  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r0   c                 j    [        U[        5      (       d  [        $ UR                  U R                  :H  $ r   )r   r  r  r  rR   s     r&   __eq__Expression.__eq__,  s(    %,,!!~~..r0   c                 ,    [        U R                  5      $ r   )hashr  rK   s    r&   __hash__Expression.__hash__1  s    DMM""r0   r)   N)r*   r+   r,   r-   r.   r   	functools	lru_cacher  classmethodr  r   r  r  r  r/   r)   r0   r&   r  r    s\    D%' & ' 	$ 	$  /
#r0   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  )lhsrC   rhsresults       r&   register_combinable_fieldsr    s     9%,,c-?@r0   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  rH  
issubclass)rC   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r0   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$ )rA   i  c                 D   > [         TU ]  US9  X l        Xl        X0l        g Nr   )superr   rC   r  r  )r!   r  rC   r  r   r  s        r&   r   CombinedExpression.__init__  s"    l3"r0   c                 N    SR                  U R                  R                  U 5      $ )Nz<{}: {}>)formatr  r*   rK   s    r&   __repr__CombinedExpression.__repr__  s      !8!8$??r0   c                 d    SR                  U R                  U R                  U R                  5      $ )Nz{} {} {})r  r  rC   r  rK   s    r&   __str__CombinedExpression.__str__  s#      4>>488DDr0   c                 2    U R                   U R                  /$ r   r  r  rK   s    r&   r   )CombinedExpression.get_source_expressions  s    $((##r0   c                 "    Uu  U l         U l        g r   r  r   s     r&   r   )CombinedExpression.set_source_expressions  s    "$(r0   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  rC   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;;< = !  r0   c                 b   / n/ nUR                  U R                  5      u  pVUR                  U5        UR                  U5        UR                  U R                  5      u  pVUR                  U5        UR                  U5        SnUR
                  R                  U R                  U5      nXu-  U4$ Nz(%s))compiler  r  r[  r  opscombine_expressionrC   )r!   r"   r   r   expression_paramsr$   r%   expression_wrappers           r&   r   CombinedExpression.as_sql  s    &&txx03  (&&txx03  (#nn//L!'):::r0   c                 V  > [         T
U ]  UUUUU5      n[        U [        [        45      (       d   UR
                  R                  R                  5       n UR                  R                  R                  5       nSXx1;   a0  Xx:w  a+  [        UR
                  UR                  UR                  5      $ 1 Skn	U R                  U R                  :X  a*  Xy;   a%  Xx:X  a   [	        UR
                  UR                  5      $ U$ ! [        [        4 a    S n Nf = f! [        [        4 a    S n Nf = f)NDurationField>   	DateField	TimeFieldDateTimeField)r  r>   r   DurationExpressionTemporalSubtractionr  r   r    AttributeErrorr   r  rC   rX   )r!   r	  r
  r  r  r  resolvedr  r  datetime_fieldsr  s             r&   r>   %CombinedExpression.resolve_expression  s    7-
 $!35H IJJ #<<44FFH #<<44FFH 8"668;O)LL("4"4hll  JO$((*/(*8<<FF# #J/    #J/   s#   $C; $D ;DDD('D(c                 h    U R                   R                  =(       a    U R                  R                  $ r   )r  r  r  rK   s    r&   r  "CombinedExpression.allowed_default&  s!    xx''DDHH,D,DDr0   )rC   r  r  r   r  )r*   r+   r,   r-   r   r  r  r   r   r  r   r>   r   r  r/   __classcell__r  s   @r&   rA   rA     sK    @E$#"; SX@ E Er0   rA   c                   4   ^  \ rS rSrS rU 4S jrS rSrU =r$ )r  i+  c                      UR                   nUR                  5       S:X  a0  UR                  U5      u  pVUR                  R	                  U5      U4$  UR                  U5      $ ! [
         a     Nf = f)Nr  )r   r    r  r  format_for_duration_arithmeticr   )r!   sider"   r   outputr$   r%   s          r&   r  DurationExpression.compile,  s~    	R&&F '')_<&..t4!~~DDSI6QQ = %%  		s   A$ $
A10A1c                   > UR                   R                  (       a  [        TU ]  X5      $ UR                  R                  U 5        / n/ nU R                  U R                  X5      u  pVUR                  U5        UR                  U5        U R                  U R                  X5      u  pVUR                  U5        UR                  U5        SnUR                  R                  U R                  U5      nXu-  U4$ r  )featureshas_native_duration_fieldr  r   r  check_expression_supportr  r  r  r[  r  combine_duration_expressionrC   )	r!   r"   r   r   r  r$   r%   r  r  s	           r&   r   DurationExpression.as_sql7  s    887>(77//5ll488XB3  (ll488XB3  (#nn88U!'):::r0   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   r1  r  zInvalid arguments for operator .)r   rC   r2   rJ   r`   r  r   r    r  r   r  r   )	r!   r"   r   r#   r$   r%   r  r  allowed_fieldss	            r&   r'   DurationExpression.as_sqliteH  s    kk(H-H>>jnnjnn==8800BBD8800BBD" 1X5S'9$..9IK  6T {s{ #J/  {s   AB; ;CCr)   )	r*   r+   r,   r-   r  r   r'   r/   r  r  s   @r&   r  r  +  s    	&;" r0   r  c                   P   ^  \ rS rSr\R
                  " 5       rU 4S jrS rSr	U =r
$ )r  i^  c                 :   > [         TU ]  XR                  U5        g r   )r  r   rX   )r!   r  r  r  s      r&   r   TemporalSubtraction.__init__a  s    hh,r0   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_sqld  sk    //5txx(txx(~~00HH!!335s
 	
r0   r)   )r*   r+   r,   r-   r   r  r   r   r   r/   r  r  s   @r&   r  r  ^  s     '')L-
 
r0   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   im  zDAn object capable of resolving references to existing query objects.Fc                     Xl         g)zF
Arguments:
 * name: the name of the field this expression references
Nr?  r>  s     r&   r   
F.__init__s  s	    
 	r0   c                 b    SR                  U R                  R                  U R                  5      $ N{}({}))r  r  r*   r?  rK   s    r&   r  
F.__repr__z  s!    t~~66		BBr0   c                     [        X5      $ r   )Sliced)r!   	subscripts     r&   __getitem__F.__getitem__}  s    d&&r0   c                 H    [        SU R                  R                   S35      e)Nzargument of type 'z' is not iterable)	TypeErrorr  r*   rR   s     r&   __contains__F.__contains__  s%     ,T^^-D-D,EEVWXXr0   Nc                 <    UR                  U R                  X#U5      $ r   )resolve_refr?  r!   r	  r
  r  r  r  s         r&   r>   F.resolve_expression  s       K	JJr0   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   )rH  r?  splitr   r   r  r=  )r!   rJ  rK  
field_name
transforms	transformtransform_classs          r&   rI  F.replace_expressions  s    '++D11K>"&))//*"=
 K'++AjM::K 66>K#I)77	BO&)+6K	 $
 r0   c                     [        U 40 UD6$ r   rc  re  s     r&   rg  F.asc  ri  r0   c                     [        U 4SS0UD6$ rk  rc  re  s     r&   rm  F.desc  ro  r0   c                 t    U R                   UR                   :H  =(       a    U R                  UR                  :H  $ r   )r  r?  rR   s     r&   r  F.__eq__  s'    ~~0LTYY%**5LLr0   c                 ,    [        U R                  5      $ r   )r  r?  rK   s    r&   r  
F.__hash__  s    DIIr0   c                 .    [         R                   " U 5      $ r   rS  rK   s    r&   r   F.copy  rU  r0   r
  r  )r*   r+   r,   r-   r.   r  r   r  r  r  r>   rI  rg  rm  r  r  r   r/   r)   r0   r&   r   r   m  sL    NOC'Y SXK
('8Mr0   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  rf  s      r&   r   ResolvedOuterRef.as_sql  s    *
 	
r0   c                    > [         TU ]  " U0 UD6nUR                  (       a  [        SU R                   S35      e[
        U R                  ;   Ul        U$ )Nz<Referencing outer query window expression is not supported: r  )r  r>   r   r   r?  r   possibly_multivalued)r!   r  rf  colr  s       r&   r>   #ResolvedOuterRef.resolve_expression  sX    g($9&9###N99+Q   $.#: 
r0   c                     U $ r   r)   r!   relabelss     r&   rB   ResolvedOuterRef.relabeled_clone  rs  r0   c                     / $ r   r)   rK   s    r&   r\  "ResolvedOuterRef.get_group_by_cols  r   r0   r)   )r*   r+   r,   r-   r.   r   r   r   r>   rB  r\  r/   r  r  s   @r&   r/  r/    s/      
 r0   r/  c                   (    \ rS rSrSrSrS rS rSrg)OuterRefi  Fc                     [        U R                  U R                  5      (       a  U R                  $ [        U R                  5      $ r   )r   r?  r  r/  r1  s      r&   r>   OuterRef.resolve_expression  s0    dii0099		**r0   c                     U $ r   r)   r8  s     r&   rB  OuterRef.relabeled_clone  rs  r0   r)   N)	r*   r+   r,   r-   r   r   r>   rB  r/   r)   r0   r&   r>  r>    s     +
r0   r>  c                   F   ^  \ rS rSrSrU 4S jrS r     SS jrSrU =r	$ )r  i  z
An object that contains a slice of an F expression.

Object resolves the column on which the slicing is applied, and then
applies the slicing if possible.
c                   > [         TU ]  UR                  5        Xl        [	        U[
        5      (       a#  US:  a  [        S5      eUS-   U l        SU l        g [	        U[        5      (       Ga  UR                  b  UR                  S:  d  UR                  b  UR                  S:  a  [        S5      eUR                  b  [        S5      eUR                  (       a6  UR                  (       a%  UR                  UR                  :  a  [        S5      eUR                  c  SOUR                  S-   U l        UR                  c  S U l        g UR                  UR                  =(       d    S-
  U l        g [        S5      e)Nr   z#Negative indexing is not supported.   zStep argument is not supported.z,Slice stop must be greater than slice start.z7Argument to slice must be either int or slice instance.)r  r   r?  objr   r3  r  startlengthslicestopstepr  )r!   rF  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Vr0   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$ )NrE  (r!  ))rG  rH  rI  r  r,   rF  )r!   rG  rJ  r  s       r&   r  Sliced.__repr__  sX    

Q{{*t0C%&	..--.a|2i]!LLr0   c                 2   UR                  U R                  X#U5      n[        U R                  [        U R
                  45      (       a  U R                  R                  XX4U5      nOUnUR                  R                  XpR                  U R                  5      $ r   )r  r?  r   rF  r>  r  r>   r   slice_expressionrG  rH  )r!   r	  r
  r  r  r  r  r   s           r&   r>   Sliced.resolve_expression  sy     $$TYYINdhh4>> :;;88..EhD D$$55dJJTTr0   )rH  rF  rG  r  )
r*   r+   r,   r-   r.   r   r  r>   r/   r  r  s   @r&   r  r    s1    W2M U Ur0   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  rE  argumentr  z (z given)r   )
aritylenr  r  r*   r  r   r   r  extra)r!   r   r   r\  r  s       r&   r   Func.__init__"  s    ::!c+&6$**&D NN++JJ"&**/J{B$  	l3"&"9"9;"G
r0   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>2       #P8OCHH8O   r!  c              3   Z   #    U  H!  u  p[        U5      S -   [        U5      -   v   M#     g7f)=Nr`  )r   r  r  s      r&   r   rb  5  s'      :OhcC3S):Os   )+
{}({}, {})r  )

arg_joinerjoinr  r\  _get_repr_optionssortedr  r  r  r*   )r!   r  r\  s      r&   r  Func.__repr__1  s    ###P8O8O#PP:4:::!7!7!9:II :@:O E  &&t~~'>'>LLt~~66==r0   c                     0 $ )zAReturn a dict of extra __init__() options to include in the repr.r)   rK   s    r&   rj  Func._get_repr_options;  s    	r0   c                     U R                   $ r   r  rK   s    r&   r   Func.get_source_expressions?  s    &&&r0   c                     Xl         g r   rp  r   s     r&   r   Func.set_source_expressionsB  s    "'r0   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templaterh  r   r  )r  r  r  r  r   rr   r  r@   r   r  r[  r\  
setdefaultru  rH  rv  rh  ri  r  )r!   r"   r   ru  rv  rh  r#   	sql_partsr%   r   arg_sql
arg_paramsr  datas                 r&   r   Func.as_sqlE  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  r\  )r!   r   r  s     r&   r   	Func.copyl  s8    w|~"&"9"9!"<ZZ__&
r0   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>t  s     X@W*--@Wrd  )allr  rK   s    r&   r  Func.allowed_defaultr  s    X@W@WXXXr0   )r\  r  NNN)r*   r+   r,   r-   r.   ru  rv  rh  rZ  r   r  rj  r   r   r   r   r   r  r/   r  r  s   @r&   rU  rU    sg    H.HJE26  >'( %.N Y Yr0   rU  zdjango.db.models.Valuec                   r   ^  \ rS rSrSrSrSrSU 4S jjrS rS r	 SU 4S jjr
S	 rS
 r\S 5       rSrU =r$ )r@   iw  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
r0   c                 P    U R                   R                   SU R                  < S3$ )NrN  rO  )r  r*   r(  rK   s    r&   r  Value.__repr__  s$    ..))*!DJJ>;;r0   c                 2   UR                   R                  U 5        U R                  nU R                  nUbV  U R                  (       a  UR                  X2S9nOUR                  X2S9n[        US5      (       a  UR                  X1U5      U/4$ Uc  S/ 4$ SU/4$ )N)r   get_placeholderNULLz%s)	r  r  r(  r  r  get_db_prep_saveget_db_prep_valuer?   r  )r!   r"   r   r  r   s        r&   r   Value.as_sql  s    //5jj11#}}"33C3O"44S4P|%677#33C:NQTPUUU; 2:cU{r0   c                 6   > [         TU ]  XX4U5      nXVl        U$ r   )r  r>   r  r!   r	  r
  r  r  r  r  r  s          r&   r>   Value.resolve_expression  s"     G&u5XV
r0   c                     / $ r   r)   rK   s    r&   r\  Value.get_group_by_cols  r   r0   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  r3  r1  r.  r,  datetimer  dater  timer  	timedeltar  r   r   bytesBinaryFieldr
   	UUIDFieldrK   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$''##%% (r0   c                     U R                   $ r   r(  rK   s    r&   r  Value.empty_result_set_value  s    zzr0   r  r   r  )r*   r+   r,   r-   r.   r  r  r   r  r   r>   r\  r  r  r  r/   r  r  s   @r&   r@   r@   w  sK    C HO
<& SX&0  r0   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3r0   c                 x    SR                  U R                  R                  U R                  U R                  5      $ Nrg  )r  r  r*   r$   r%   rK   s    r&   r  RawSQL.__repr__  s)    ""4>>#:#:DHHdkkRRr0   c                 8    SU R                   -  U R                  4$ r  )r$   r%   r   s      r&   r   RawSQL.as_sql  s     $++--r0   c                     U /$ r   r)   rK   s    r&   r\  RawSQL.get_group_by_cols  	    vr0   c                 |  > UR                   (       a  UR                   R                  R                   Hv  nUR                  R                   HY  nUR                  R                  5       U R                  R                  5       ;   d  M;  UR                  UR                  X#U5          Mt     Mx     [        TU ])  XX4U5      $ r   )r  r  all_parentslocal_fieldscolumnlowerr$   r  r?  r  r>   )	r!   r	  r
  r  r  r  parentparent_fieldr  s	           r&   r>   RawSQL.resolve_expression  s     ;;++++77$*LL$=$=L#**002dhhnn6FF))(--{9  %> 8 w)(
 	
r0   )r%   r$   r   r  )r*   r+   r,   r-   r  r   r  r   r\  r>   r/   r  r  s   @r&   r  r    s.    O4S. SX
 
r0   r  c                        \ rS rSrS rS rSrg)Stari  c                     g)Nz'*'r)   rK   s    r&   r  Star.__repr__  s    r0   c                 
    S/ 4$ )Nr6   r)   r   s      r&   r   Star.as_sql  s    Bwr0   r)   N)r*   r+   r,   r-   r  r   r/   r)   r0   r&   r  r    s    r0   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    &$r0   c                     U R                   /$ r   r)  rK   s    r&   r   &DatabaseDefault.get_source_expressions        r0   c                     Uu  U l         g r   r  r   s     r&   r   &DatabaseDefault.set_source_expressions   s    "r0   c                 t    U R                   R                  UUUUUS9nU(       d  U$ [        X`R                  S9$ )N)r	  r
  r  r  r  r   )r)  r>   r  r  )r!   r	  r
  r  r  r  resolved_expressions          r&   r>   "DatabaseDefault.resolve_expression  sO     #oo@@# A 
 &&.H.H
 	
r0   c                 v    UR                   R                  (       d  UR                  U R                  5      $ S/ 4$ )NDEFAULT)r  "supports_default_keyword_in_insertr  r)  r   s      r&   r   DatabaseDefault.as_sql  s0    ""EE##DOO44"}r0   r  r   r  )r*   r+   r,   r-   r.   r   r   r   r>   r   r/   r  r  s   @r&   r  r    s-    
%!# SX
$ r0   r  c                   R   ^  \ rS rSrSrSrSU 4S jjrS rS rS r	S r
S	 rS
rU =r$ )Coli  TFc                 F   > Uc  Un[         TU ]  US9  XsU l        U l        g r  )r  r   aliastarget)r!   r  r  r   r  s       r&   r   Col.__init__  s,    !Ll3"'
DKr0   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*   ri  )r!   r  r  identifierss       r&   r  Col.__repr__%  sM    

DKKv.3uc&k*#f+t~~66		+8NOOr0   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  ri  r  quote_name_unless_alias)r!   r"   r   r  r  r  r$   s          r&   r   
Col.as_sql*  sH    

DKK$6$6v).uoVIhhs8;;[IJBwr0   c                     U R                   c  U $ U R                  UR                  U R                   U R                   5      U R                  U R                  5      $ r   )r  r  rH  r  r   r8  s     r&   rB  Col.relabeled_clone0  sF    ::K~~LLTZZ0$++t?P?P
 	
r0   c                     U /$ r   r)   rK   s    r&   r\  Col.get_group_by_cols7  r  r0   c                     U R                   U R                  :X  a  U R                  R                  U5      $ U R                  R                  U5      U R                   R                  U5      -   $ r   )r  r   r   r   s     r&   r   Col.get_db_converters:  s^    ;;$+++$$66zBB  22
KK))*56 	6r0   )r  r  r   )r*   r+   r,   r-   r   r4  r   r  r   rB  r\  r   r/   r  r  s   @r&   r  r    s3    !% 0P

6 6r0   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  iB  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__C  s"    l3
r0   c                 ,    [        U R                  5      $ r   )r[  r  rK   s    r&   __len__ColPairs.__len__I  s    4<<  r0   c                 4    [        U R                  5       5      $ r   )r  get_colsrK   s    r&   __iter__ColPairs.__iter__L  s    DMMO$$r0   c           
          U R                   R                   SU R                  < SU R                  < SU R                  < SU R
                  < S3
$ )NrN  r!  rO  )r  r*   r  r  r  r   rK   s    r&   r  ColPairs.__repr__O  sL    ~~&&'qb8H||b!2!2 5Q8	
r0   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_colsU  sE     #&dllDLL"A
"A 

F+"A
 	
 
s   "A
c                 "    U R                  5       $ r   )r  rK   s    r&   r   ColPairs.get_source_expressions[  s    }}r0   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   r5  s   `  r&   r   ColPairs.set_source_expressions^  sS    XRWXXXXX.34es

e4-23Uc		U3 53s   A!A&c                     / n/ nU R                  5       nU H8  nUR                  X5      u  pxUR                  U5        UR                  U5        M:     SR	                  U5      U4$ )Nr!  )r  r   r  r[  ri  )	r!   r"   r   cols_sqlcols_paramsr^  r5  r$   r%   s	            r&   r   ColPairs.as_sqlc  sa    }}C**X:KCOOC v& 
 yy"K//r0   c                     U R                  UR                  U R                  U R                  5      U R                  U R                  U R
                  5      $ r   )r  rH  r  r  r  r  r8  s     r&   rB  ColPairs.relabeled_cloneo  s;    ~~LLTZZ0$,,djj
 	
r0   c                     U $ r   r)   r1  s      r&   r>   ColPairs.resolve_expressiont  rs  r0   c                     X#4$ r   r)   ry  s       r&   rx  ColPairs.select_formatw  s
    {r0   )r  r  r  )r*   r+   r,   r-   r   r  r  r  r  r   r   r   rB  r>   rx  r/   r  r  s   @r&   r  r  B  s?    !%

4

0

 r0   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   rP  r  )r!   rP  r  r  s      r&   r   Ref.__init__  s    !%	4;r0   c                 x    SR                  U R                  R                  U R                  U R                  5      $ r  )r  r  r*   rP  r  rK   s    r&   r  Ref.__repr__  s)    ""4>>#:#:DIIt{{SSr0   c                     U R                   /$ r   r  rK   s    r&   r   Ref.get_source_expressions  s    }r0   c                     Uu  U l         g r   r  r   s     r&   r   Ref.set_source_expressions  s    r0   c                     U $ r   r)   r  s         r&   r>   Ref.resolve_expression  s	    
 r0   c                     U R                   1$ r   )rP  rK   s    r&   rO  Ref.get_refs  s    		{r0   c                 f    U R                  5       nU R                  R                  U5      Ul        U$ r   )r   r  rB  )r!   r9  rD  s      r&   rB  Ref.relabeled_clone  s(    		{{228<r0   c                 P    UR                   R                  U R                  5      / 4$ r   )r  
quote_namerP  r   s      r&   r   
Ref.as_sql  s     ~~((3R77r0   c                     U /$ r   r)   rK   s    r&   r\  Ref.get_group_by_cols  r  r0   )rP  r  r  )r*   r+   r,   r-   r.   r   r  r   r   r>   rO  rB  r   r\  r/   r  r  s   @r&   r  r  {  sB    
.T SX
8 r0   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   r`  ra  s     r&   r   )ExpressionList.__str__.<locals>.<genexpr>  rc  rd  )rh  ri  r  rK   s    r&   r  ExpressionList.__str__  s#    ###P8O8O#PPPr0   c                 H   > U R                   (       d  g[        TU ]  " U0 UD6$ )N) r)   )r  r  r   )r!   r  rf  r  s      r&   r   ExpressionList.as_sql  s#    &&w~t.v..r0   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Ar0   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r0   r)   )r*   r+   r,   r-   r.   rv  r  r   r'   r\  r/   r  r  s   @r&   r  r    s*     !HQ/
B r0   r  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   r5   rE  NTrl  )r   r   rd  r   r   s     r&   r   'OrderByList.__init__.<locals>.<genexpr>  sM      
 $ dC((T!W^ $qr(5 $s   AA)r  r   )r!   r   r\  r  s      r&   r   OrderByList.__init__  s(    
 $
 	+//r0   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)Nr>   z] must be either a string reference to a field, an expression, or a list or tuple of them not r  )r   listr  r   r?   r  )r  contextparams      r&   
from_paramOrderByList.from_param  st    =edE]++;s##wu6J'K'Ku:i DDI9AO
 	
r0   r)   )r*   r+   r,   r-   r  rv  r   r  r4  r/   r  r  s   @r&   r*  r*    s&    O)H	0 
 
r0   r*  z"django.db.models.ExpressionWrapperc                   `   ^  \ rS rSrSrU 4S jrS rS rU 4S jrS r	S r
\S	 5       rS
rU =r$ )ExpressionWrapperi  z
An expression that can wrap another expression so that it can provide
extra context to the inner expression, such as the output_field.
c                 ,   > [         TU ]  US9  Xl        g r  r  r  s      r&   r   ExpressionWrapper.__init__  s    l3$r0   c                     US   U l         g Nr   r  r   s     r&   r   (ExpressionWrapper.set_source_expressions      (r0   c                     U R                   /$ r   r  rK   s    r&   r   (ExpressionWrapper.get_source_expressions  r  r0   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(**r0   c                 8    UR                  U R                  5      $ r   )r  r)  r   s      r&   r   ExpressionWrapper.as_sql  s    00r0   c                 b    SR                  U R                  R                  U R                  5      $ r  )r  r  r*   r)  rK   s    r&   r  ExpressionWrapper.__repr__  s!    t~~66HHr0   c                 .    U R                   R                  $ r   )r)  r  rK   s    r&   r  !ExpressionWrapper.allowed_default  s    ...r0   r  )r*   r+   r,   r-   r.   r   r   r   r\  r   r  r  r  r/   r  r  s   @r&   r7  r7    s;    
%#!+1I / /r0   r7  c                   V   ^  \ rS rSrSrU 4S jrS rU 4S jr S	U 4S jjrS r	Sr
U =r$ )
r   i  z1The logical negation of a conditional expression.c                 H   > [         TU ]  U[        R                  " 5       S9  g r  )r  r   r   r  rA  s     r&   r   NegatedExpression.__init__  s    &2E2E2GHr0   c                 6    U R                   R                  5       $ r   )r)  r   rK   s    r&   r   NegatedExpression.__invert__
  s    ##%%r0   c                 X  >  [         TU ]  X5      u  p4UR                  R                  nUR                  U R                  5      (       d  SU S3U4$ SU 3U4$ ! [         aF    UR                  R                  nUR
                  (       d   gUR                  [        S5      5      s $ f = f)N)z1=1r)   Tz
CASE WHEN z = 0 THEN 1 ELSE 0 ENDzNOT )r  r   r   r   r  &supports_boolean_expr_in_select_clauser  r@   r  0conditional_expression_supported_in_where_clauser)  )r!   r"   r   r$   r%   r  r  r  s          r&   r   NegatedExpression.as_sql  s    	1'.>KC !!%% CCDOOTTu$:;VCCcU|V##  	1**33HBB ##E$K00		1s   A 1B)B)(B)c                 x   > [         TU ]  XX4U5      n[        UR                  SS5      (       d  [	        S5      eU$ )Nro   Fz*Cannot negate non-conditional expressions.)r  r>   rr   r)  r  )r!   r	  r
  r  r  r  r  r  s          r&   r>   $NegatedExpression.resolve_expression  sC     7-(
 x**M5AAHIIr0   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  rP  r  rO  r)  r  )r!   r"   r$   r%   $expression_supported_in_where_clauses        r&   rx  NegatedExpression.select_format'  s\    
 ##TT 	- ##,,SS4T__EE299#>C{r0   r)   r  )r*   r+   r,   r-   r.   r   r   r   r>   rx  r/   r  r  s   @r&   r   r     s,    ;I&$" SX r0   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$ )Wheni7  z"WHEN %(condition)s THEN %(result)sFc                 f  > U(       a/  Uc  [        S0 UD6S p1O[        USS5      (       a  [        U40 UD6S p1Ub  [        USS5      (       a  U(       a  [        S5      e[        U[         5      (       a  U(       d  [	        S5      e[
        TU ]  S S9  Xl        U R                  U5      S   U l	        g )Nro   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   rr   r  r   r  r  r   	conditionr   r  )r!   r[  thenlookupsr  s       r&   r   When.__init__=  s     %&\\47M599%&y%<G%<d7GI}e$L$LPW"  i##IPQQd+"--d3A6r0   c                 >    SU R                   < SU R                  < 3$ )NzWHEN z THEN r[  r  rK   s    r&   r  When.__str__N  s    $(NNDKK@@r0   c                 @    SU R                   R                  < SU < S3$ N<z: >r  r*   rK   s    r&   r  When.__repr__Q      !^^44d;;r0   c                 2    U R                   U R                  /$ r   r`  rK   s    r&   r   When.get_source_expressionsT  s    ,,r0   c                 "    Uu  U l         U l        g r   r`  r   s     r&   r   When.set_source_expressionsW  s    &+#r0   c                    > [         TU ]  XX4U5      nU(       a-  UR                  b   U R                  R                  XX4SS9Ul        U$ )NF)r  )r  r>   r[  r  s          r&   r>   When.resolve_expressionZ  sO     G&u5XV/ ..;;Eu < AK r0   c                 0    U R                   R                  /$ r   )r  r  rK   s    r&   r#  When.get_source_fieldsf  s    1122r0   c                    UR                   R                  U 5        Un/ nUR                  U R                  5      u  pxXuS'   UR                  U R                  5      u  pXS'   U=(       d    U R
                  nX5-  / UQUQU
Q74$ )Nr[  r  )r  r  r  r[  r  rv  )r!   r"   r   rv  r#   template_params
sql_paramscondition_sqlcondition_params
result_sqlresult_paramss              r&   r   When.as_sqlj  s    //5'
*2*:*:4>>*J''4$$,$4$4T[[$A!
$.!,t}}) ,
,
,
 ,
 
 	
r0   c                 v    / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   r&  r]  s      r&   r\  When.get_group_by_colsy  s4    113FKK0023 4r0   c                 h    U R                   R                  =(       a    U R                  R                  $ r   )r[  r  r  rK   s    r&   r  When.allowed_default  s!    ~~--M$++2M2MMr0   r`  NNr  r   )r*   r+   r,   r-   rv  ro   r   r  r  r   r   r>   r#  r   r\  r   r  r/   r  r  s   @r&   rY  rY  7  sX    3HK7"A<-, SX
3
 N Nr0   rY  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 ENDrX  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   rY  )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   r1  casesr   r  r\  )r!   r  r   r  r\  r  s        r&   r   Case.__init__  sT    <e<<<LMM&%[
..w7:
r0   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   r`  )r   r  s     r&   r   Case.__str__.<locals>.<genexpr>  s     1jc!ffjrd  z, ELSE )ri  r  r  rK   s    r&   r  Case.__str__  s)    II1djj11LL
 	
r0   c                 @    SU R                   R                  < SU < S3$ rc  rf  rK   s    r&   r  Case.__repr__  rh  r0   c                 6    / U R                   QU R                  P$ r   r  r  rK   s    r&   r   Case.get_source_expressions  s    **T\\**r0   c                 "    UGt U l         U l        g r   r  r   s     r&   r   Case.set_source_expressions  s    $)!T\r0   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''!*r0   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4$ ! [         a     GMU  [         a    U	R                  n   GM&  f = f)Nr   )Castr  r  rv  )r  r  r  r  r  r\  r   r   r  r  r[  r   r@   r  django.db.models.functionsr  case_joinerri  rH  rv  unification_cast_sqlr   )r!   r"   r   rv  r  r#   rr  
case_partsrs  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J; "   ++s   ,F//
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(**r0   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!!zrd  )r  r  r  r  rK   s    r&   r  Case.allowed_default  s1    ||++ 
 4
/3zz4
 1
 	
r0   )r  r  r\  r}  )r*   r+   r,   r-   r.   rv  r  r   r  r  r   r   r   r   r\  r   r  r/   r  r  s   @r&   r  r    sb    
 5HK'+$  
<+* @D)V+
 
 
r0   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	  Trv  )	rr   rD  r	  r   r   rv  r\  r  r   )r!   querysetr   r\  r  s       r&   r   Subquery.__init__  sP    Xw9??A
"

		*dmm<
&r0   c                     U R                   /$ r   r	  rK   s    r&   r   Subquery.get_source_expressions  s    

|r0   c                     US   U l         g r;  r  r   s     r&   r   Subquery.set_source_expressions  s    1X
r0   c                 .    U R                   R                  $ r   )r	  r   rK   s    r&   r  Subquery._resolve_output_field  s    zz&&&r0   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  r>   r  r  rv  r	  r   r   r  r7  )r!   r  rf  r  r  s       r&   r>   Subquery.resolve_expression  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	  rD  )r!   rD  r  s     r&   r   Subquery.copy  s'    kk'')r0   c                 .    U R                   R                  $ r   )r	  external_aliasesrK   s    r&   r  Subquery.external_aliases  s    zz***r0   c                 6    U R                   R                  5       $ r   )r	  get_external_colsrK   s    r&   r  Subquery.get_external_cols  s    zz++--r0   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$ )NrE  rH   r   rv  )r  r  r\  r	  r   rH  rv  )	r!   r"   r   rv  r#   rr  subquery_sqlrs  r$   s	            r&   r   Subquery.as_sql"  sz    //59TZZ9=9#'::#4#4X#J &21R&8
#M22:t}}M(r0   c                 4    U R                   R                  U S9$ )N)wrapper)r	  r\  rK   s    r&   r\  Subquery.get_group_by_cols,  s    zz++D+99r0   )r\  r	  rv  r   )r*   r+   r,   r-   r.   rv  r   r  r   r   r   r   r  r>   r   r  r  r  r   r\  r/   r  r  s   @r&   r  r    sf    
  H!H''"
 + +.: :r0   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$ )Existsi0  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  rf  r  s      r&   r   Exists.__init__5  s)    ,V,ZZ&&(
r0   c                 t    UR                   R                  R                  (       d  SR                  U5      nX#4$ rU  )r   r  rO  r  ry  s       r&   rx  Exists.select_format9  s1     ""++RR299#>C{r0   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  rO  r  r@   )r!   r"   r  rf  r  r  s        r&   r   Exists.as_sqlA  sb    	27>(<T<V<< 	2**33HBB ##E%L11		2s    1A'
A'&A'r  )r*   r+   r,   r-   rv  r   r  r   r  r   rx  r   r/   r  r  s   @r&   r  r  0  s0    %H&&(L")2 2r0   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)rd  iK  z%(expression)s %(ordering)sFTNc                     U(       a  U(       a  [        S5      eUSL d  USL a  [        S5      eX0l        X@l        X l        [	        US5      (       d  [        S5      eXl        g )Nz1nulls_first and nulls_last are mutually exclusiveFz7nulls_first and nulls_last values must be True or None.r>   z%expression must be an expression type)r  nulls_first
nulls_lastrl  r?   r)  )r!   r)  rl  r  r  s        r&   r   OrderBy.__init__R  s]    :PQQ%:#6VWW&$$z#788DEE$r0   c                 x    SR                  U R                  R                  U R                  U R                  5      $ )Nz{}({}, descending={}))r  r  r*   r)  rl  rK   s    r&   r  OrderBy.__repr__^  s.    &--NN##T__doo
 	
r0   c                     US   U l         g r;  r  r   s     r&   r   OrderBy.set_source_expressionsc  r=  r0   c                     U R                   /$ r   r  rK   s    r&   r   OrderBy.get_source_expressionsf  r  r0   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[  ri  rv  r   supports_order_by_nulls_modifierr  r  rl  order_by_nulls_firstr  r  countrstrip)r!   r"   r   rv  r#   rx  r%   r5  r   r$   
col_paramsexpression_sqlplaceholderss                r&   r   OrderBy.as_sqli  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9r0   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  rO  r  rP  r)  r   r  rY  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0r0   c                 v    / nU R                  5        H"  nUR                  UR                  5       5        M$     U$ r   r&  r]  s      r&   r\  OrderBy.get_group_by_cols  s4    113FKK0023 4r0   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   )rl  r  r  rK   s    r&   rq  OrderBy.reverse_ordering  sL    "oo-"DO#D  __#D"DOr0   c                     SU l         g rO   r-  rK   s    r&   rg  OrderBy.asc  s	    r0   c                     SU l         g r   r-  rK   s    r&   rm  OrderBy.desc  s	    r0   )rl  r)  r  r  )FNNr   )r*   r+   r,   r-   rv  ro   r|  r  r   r  r   r   r   r  r\  rq  rg  rm  r/   r)   r0   r&   rd  rd  K  sK    ,HK',$#' 
%

#!":H1" r0   rd  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framerr   r  r  r*   r   r  r1  r  r*  r4  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r0   c                 .    U R                   R                  $ r   )r  r   rK   s    r&   r  Window._resolve_output_field  s    %%222r0   c                 ^    U R                   U R                  U R                  U R                  /$ r   r  r  r  r  rK   s    r&   r   Window.get_source_expressions  s%    &&(9(94==$**UUr0   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=$*r0   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   rv  rX  )r)  window)r  r  r  supports_over_clauser   r  r  r  r   r  r  r  r  rv  ri  strip)r!   r"   r   rv  expr_sqlr%   
window_sqlwindow_paramssql_exprrs  	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%}%
 	
r0   c                 >  > [        U R                  [        R                  5      (       ac  U R	                  5       nUR
                  " 5       n[        R                  " 5       US   l        UR                  " U5        [        [        U]+  X5      $ U R                  X5      $ r;  )r   r   r   r   r   r   r,  r   r  r  r'   r   )r!   r"   r   r   r  r  s        r&   r'   Window.as_sqlite  s}    d'')<)<==99;D!%!<!<!>171B1B1Dq!.''(:;0FF{{800r0   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  rK   s    r&   r  Window.__str__  sb    !((&&'8<8I8IOc$"3"344r#$

 b!	
 	
r0   c                 @    SU R                   R                  < SU < S3$ rc  rf  rK   s    r&   r  Window.__repr__  rh  r0   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!   r'  s     r&   r\  Window.get_group_by_cols  sX      !2!2!D!D!FG==$  !@!@!BCr0   )r  r  r  r  )NNNNr   )r*   r+   r,   r-   rv  r   r   r   r  r   r   r   r'   r  r  r\  r/   r  r  s   @r&   r  r    sZ    1H 
 H63VU
B1
< r0   r  c                   *    \ rS rSrSrSrSrSrS rSr	g)	WindowFrameExclusioni   zCURRENT ROWGROUPTIESz	NO OTHERSc                 L    U R                   R                   SU R                   3$ )Nr  )r  r,   _name_rK   s    r&   r  WindowFrameExclusion.__repr__&  s"    ..--.a}==r0   r)   N)
r*   r+   r,   r-   CURRENT_ROWr  r  	NO_OTHERSr  r/   r)   r0   r&   r  r     s    KEDI>r0   r  c                   V    \ rS rSrSrSrSS jrS rS rS r	S	 r
S
 rS rS rS rSrg)WindowFramei*  a>  
Model the frame clause in window expressions. There are two types of frame
clauses which are subclasses, however, all processing and validation (by no
means intended to be complete) is done here. Thus, providing an end for a
frame is optional (the default is UNBOUNDED FOLLOWING, which is the last
row in the frame).
z7%(frame_type)s BETWEEN %(start)s AND %(end)s%(exclude)sNc                     [        U5      U l        [        U5      U l        [        U[        [
        45      (       d"  [        U R                  R                   S35      eX0l	        g )Nz3.exclusion must be a WindowFrameExclusion instance.)
r@   rG  endr   r	   r  r  r  r,   	exclusion)r!   rG  r  r  s       r&   r   WindowFrame.__init__5  sY    5\
:)h0D%EFF>>../ 01 1  #r0   c                 "    Uu  U l         U l        g r   rG  r  r   s     r&   r   "WindowFrame.set_source_expressions?  s    $
DHr0   c                 2    U R                   U R                  /$ r   r!  rK   s    r&   r   "WindowFrame.get_source_expressionsB  s    

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

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

 >>*"5"5"N"N#H  MM"oo--/	 	
 		
r0   c                 @    SU R                   R                  < SU < S3$ rc  rf  rK   s    r&   r  WindowFrame.__repr__^  rh  r0   c                     / $ r   r)   rK   s    r&   r\  WindowFrame.get_group_by_colsa  r   r0   c                 >   U R                   R                  bW  U R                   R                  S:  a=  S[        U R                   R                  5      [        R                  R
                  4-  nOU R                   R                  b5  U R                   R                  S:X  a  [        R                  R                  nOU R                   R                  bN  U R                   R                  S:  a4  SU R                   R                  [        R                  R                  4-  nO[        R                  R                  nU R                  R                  bN  U R                  R                  S:  a4  SU R                  R                  [        R                  R                  4-  nOU R                  R                  b5  U R                  R                  S:X  a  [        R                  R                  nOU R                  R                  bW  U R                  R                  S:  a=  S[        U R                  R                  5      [        R                  R
                  4-  nO[        R                  R                  nU R                  U R                  UUU R                  5       S.-  $ )Nr   z%d %sr)  )rG  r(  absr   r  	PRECEDINGr  	FOLLOWINGUNBOUNDED_PRECEDINGr  UNBOUNDED_FOLLOWINGrv  r*  r&  )r!   rG  r  s      r&   r  WindowFrame.__str__d  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}}//))+	 
 
 	
r0   c                     [        S5      e)Nz3Subclasses must implement window_frame_start_end().r   r!   r   rG  r  s       r&   r,  "WindowFrame.window_frame_start_end}  s    !"WXXr0   )r  r  rG  r  )r*   r+   r,   r-   r.   rv  r   r   r   r&  r   r  r\  r  r,  r/   r)   r0   r&   r  r  *  s=     IH#%&2

(<
2Yr0   r  c                       \ rS rSrSrS rSrg)RowRangei  ROWSc                 8    UR                   R                  X#5      $ r   )r  window_frame_rows_start_endr;  s       r&   r,  RowRange.window_frame_start_end  s    ~~99%EEr0   r)   Nr*   r+   r,   r-   r*  r,  r/   r)   r0   r&   r>  r>    s    JFr0   r>  c                       \ rS rSrSrS rSrg)
ValueRangei  RANGEc                 8    UR                   R                  X#5      $ r   )r  window_frame_range_start_endr;  s       r&   r,  !ValueRange.window_frame_start_end  s    ~~::5FFr0   r)   NrC  r)   r0   r&   rE  rE    s    JGr0   rE  )ir   r  r  collectionsr   decimalr   enumr   	itertoolsr   typesr	   uuidr
   django.core.exceptionsr   r   r   	django.dbr   r   r   django.db.modelsr   django.db.models.constantsr   django.db.models.query_utilsr   django.utils.deconstructr   django.utils.functionalr   r   django.utils.hashabler   django.utils.inspectr   r   r2   r   r   r  rQ   rJ   r`   re   rj   PositiveIntegerFieldrX   r1  r,  r   rx   r   r}   r   r   r1  from_iterabler  r  r  r  _connector_combinationsr  r  dr  rC   field_typesr  r  r  r  r  rA   r  r  r   r/  r>  r  rU  r@   r  r  r  r  r  r  r  r*  r7  r   rY  r  r  r  rd  r  r  r  r>  rE  )rC   s   0r&   <module>r^     s3      #      L L B B # 1 * 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 
!A"#'')	; +Cf&sIsFC !, #, 
! S!! "!TE+Z TEn0+ 0f
, 
 *+=
 = ,=@"q "J
q 
6UQ 6Ur -.ZYz ZY /ZYz ./M
 M 0M` 
Z  
F: %j %P$6* $6N6z 6r&* &RT 8
. 
> :;!/*J !/ <!/H0) 0f -.JN: JN /JNZ -.`
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Q2"$ s!   &/_ A3_B_
/_
A
_