
    fki<                     r   S SK r S SKJr  S SKJrJr  S SKJrJrJ	r	J
r
JrJr  S SKJrJrJrJrJrJrJr  S SKJr  S SKJrJrJr   " S S	\	5      r " S
 S5      r " S S\\5      r " S S\\5      r " S S\\5      r " S S\\5      r  " S S\\5      r! " S S\\5      r" " S S\\5      r#\\\ \!\"\#\S.r$g)    N)EmptyResultSet)NotSupportedErrormodels)ColPairsExistsFuncResolvedOuterRefSubqueryValue)ExactGreaterThanGreaterThanOrEqualInIsNullLessThanLessThanOrEqual)Query)ANDOR	WhereNodec                   P    \ rS rSrSrSr\R                  " 5       rS r	S r
S rSrg)	Tuple   T c                 ,    [        U R                  5      $ N)lensource_expressionsselfs    j/var/www/events.demo-site.click/venv/lib/python3.13/site-packages/django/db/models/fields/tuple_lookups.py__len__Tuple.__len__   s    4**++    c                 ,    [        U R                  5      $ r   )iterr   r   s    r!   __iter__Tuple.__iter__"   s    D++,,r$   c                    UR                  5       S:  ac  [        U R                  S   =n[        5      (       a?  UR	                  5       nSUl        [        U/U R                  SS  Q76 R                  X5      $ U R                  X5      $ )N)   %   r   VALUES   )get_database_version
isinstancer   r   copyfunctionas_sql)r    compiler
connection
first_exprs       r!   	as_sqliteTuple.as_sqlite%   s    **,w6:11!44Je<
 <
 $*J"*JBd&=&=ab&ABII  {{800r$    N)__name__
__module____qualname____firstlineno__allows_composite_expressionsr1   r   Fieldoutput_fieldr"   r'   r6   __static_attributes__r8   r$   r!   r   r      s'    #' H<<>L,-	1r$   r   c                   ~   ^  \ rS rSrSrU 4S jrS rS rS rS r	U 4S jr
SU 4S	 jjrU 4S
 jrS rU 4S jrSrU =r$ )TupleLookupMixin1   Tc                    > U R                  5       (       a,  U R                  5         U R                  5         U R                  $ U R                  5         [        TU ]  5         U R                  $ r   )rhs_is_direct_valuecheck_rhs_is_tuple_or_list"check_rhs_length_equals_lhs_length!check_rhs_is_supported_expressionsuperget_prep_lookuprhsr    	__class__s    r!   rJ    TupleLookupMixin.get_prep_lookup4   sW    ##%%++-335 xx 224G#%xxr$   c                     [        U R                  [        [        45      (       d,  U R	                  5       n[        U R                  < SU S35      eg )N lookup of z must be a tuple or a list)r/   rK   tuplelistget_lhs_str
ValueErrorlookup_namer    lhs_strs     r!   rF   +TupleLookupMixin.check_rhs_is_tuple_or_list=   sO    $((UDM22&&(G##&k':TU  3r$   c                     [        U R                  5      nU[        U R                  5      :w  a/  U R                  5       n[	        U R
                  < SU SU S35      eg )NrP    must have z	 elements)r   lhsrK   rS   rT   rU   )r    len_lhsrW   s      r!   rG   3TupleLookupMixin.check_rhs_length_equals_lhs_lengthD   s\    dhh-c$((m#&&(G##&k'+gYiX  $r$   c                     [        U R                  [        [        45      (       dP  U R	                  5       nU R                  R
                  R                  n[        U R                  < SU SU< S35      eg )N subquery lookup of z7 only supports OuterRef and QuerySet objects (received ))	r/   rK   r	   r   rS   rM   r9   rT   rU   r    rW   rhs_clss      r!   rH   2TupleLookupMixin.check_rhs_is_supported_expressionL   sv    $((%5u$=>>&&(Ghh((11G##&&:7) DIIPSTV  ?r$   c                     [        U R                  [        5      (       a)  [        U R                  R                  R
                  5      $ SR                  S U R                   5       5      nSU S3$ )Nz, c              3   L   #    U  H  n[        UR                  5      v   M     g 7fr   )reprname).0fs     r!   	<genexpr>/TupleLookupMixin.get_lhs_str.<locals>.<genexpr>Y   s     =Hqd166llHs   "$(r`   )r/   r[   r   rf   fieldrg   join)r    namess     r!   rS   TupleLookupMixin.get_lhs_strU   sR    dhh))++,,II=DHH==EugQ<r$   c                    > [        U R                  [        [        45      (       a  [	        U R                  6 $ [
        TU ]  5       $ r   )r/   r[   rQ   rR   r   rI   get_prep_lhsrL   s    r!   rr   TupleLookupMixin.get_prep_lhs\   s5    dhh..$((##w#%%r$   c                 x   > [         TU ]  XU5      u  pE[        U R                  [        5      (       d  SU S3nXE4$ )Nrl   r`   )rI   process_lhsr/   r[   r   )r    r3   r4   r[   sqlparamsrM   s         r!   ru   TupleLookupMixin.process_lhsa   s<    g)(D$((E**cU!*C{r$   c           	        > U R                  5       (       ao  [        U R                  U R                  5       VVs/ s H+  u  p4[	        US5      (       a  UO[        XCR                  S9PM-     nnnUR                  [        U6 5      $ UR                  U R                  5      u  pg[        U R                  [        5      (       a  SU-  U4$ [        U R                  [        5      (       a  [        TU ]5  X5      $ [        S5      es  snnf )Nr2   r?   z(%s)z=Composite field lookups only work with composite expressions.)rE   zipr[   rK   hasattrr   r?   compiler   r/   r   r   rI   process_rhsrT   )	r    r3   r4   colvalargsrv   rw   rM   s	           r!   r~   TupleLookupMixin.process_rhsg   s    ##%% !$DHHdhh 7 !8HC sH-- s1A1ABC !8   ##E4L11"**4884KC$((H--|V++DHHe,,w*8@@ S !s   2Dc                 F    [        U R                  R                   S35      e)Nzp.get_fallback_sql() must be implemented for backends that don't have the supports_tuple_lookups feature enabled.)NotImplementedErrorrM   r9   )r    r3   r4   s      r!   get_fallback_sql!TupleLookupMixin.get_fallback_sql}   s+    !~~&&' (W X
 	
r$   c                   > UR                   R                  (       d|  [        U R                  [        5      (       a]  U R                  R
                  (       aB  [        U [        [        [        [        45      (       a  U R                  nSU S3n[        U5      eUR                   R                  (       d  U R                  X5      $ [        TU ]=  X5      $ )N"zN" cannot be used to target composite fields through subqueries on this backend)features*supports_tuple_comparison_against_subqueryr/   rK   r   subqueryr   r   r   r   rU   r   supports_tuple_lookupsr   rI   r2   )r    r3   r4   lookupmsgrM   s        r!   r2   TupleLookupMixin.as_sql   s    ##NN488U++!!{$6/R  %%FF8 5 5  $C((""99((>>w~h33r$   r8   r   )r9   r:   r;   r<   r=   rJ   rF   rG   rH   rS   rr   ru   r~   r   r2   r@   __classcell__rM   s   @r!   rB   rB   1   s@    #'  &
,
4 4r$   rB   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )
TupleExact   c                 N  > [        U R                  [        5      (       a  [        [        U ]  X5      $ U R                  X5        [        U R                  U R                  5       VVs/ s H  u  p4[        X45      PM     nnn[        U[        S9nUR                  X5      $ s  snnf N	connector)r/   rK   r   rI   rB   r2   r~   r{   r[   r   r   r   )r    r3   r4   r   r   lookupsrootrM   s          r!   r   TupleExact.get_fallback_sql   s    dhh&&)47MM. 47txx3JK3Jxs5?3JKC0{{800 Ls   (B!r8   )r9   r:   r;   r<   r   r@   r   r   s   @r!   r   r      s    
1 
1r$   r   c                        \ rS rSrS rS rSrg)TupleIsNull   c                     U R                   n[        U[        [        45      (       a  [	        U5      S:X  a  US   n[        U[
        5      (       a  U$ [        S5      e)Nr-   r   z>The QuerySet value for an isnull lookup must be True or False.)rK   r/   rQ   rR   r   boolrT   )r    rK   s     r!   rJ   TupleIsNull.get_prep_lookup   sQ    hhcE4=))c#h!ma&Cc4  JL
 	
r$   c                     U R                   nU R                   Vs/ s H  n[        XC5      PM     nn[        XS(       a  [        O[
        S9nUR                  X5      $ s  snf r   )rK   r[   r   r   r   r   r2   )r    r3   r4   rK   r   r   r   s          r!   r2   TupleIsNull.as_sql   sN    
 hh/3xx8x6##x8#B3?{{800 9s   Ar8   N)r9   r:   r;   r<   rJ   r2   r@   r8   r$   r!   r   r      s    
1r$   r   c                       \ rS rSrS rSrg)TupleGreaterThan   c                    U R                  X5        [        R                  " [        [        /5      n[        R                  " [
        [        /5      nU R                   VVs/ s H  n[        S5        H  oePM     M     nnnU R                   VVs/ s H  n[        S5        H  ohPM     M     n	nn[        US S 5      n
[        U	S S 5      n[        U
5      n[        U5      n[        U5      n[        U5      n[        U" XX5      /US9=p[        X5       HI  u  pX[        U5      n[        U5      n[        U" XX5      /US9nUR                  R                  U5        UnMK     UR!                  X5      $ s  snnf s  snnf N   r   r~   	itertoolscycler   r   r   r   r[   rangerK   r&   nextr   r{   childrenappendr2   r    r3   r4   r   
connectorsr   _	cols_listr   	vals_list	cols_iter	vals_iterr   r   r   nodechilds                    r!   r   !TupleGreaterThan.get_fallback_sql   sD   . //;"67__b#Y/
$(HH?HSeAhShSH	?$(HH?HSeAhShSH	?3B(	3B(	9o9og$	!1 2iHHI1HC']FZ(Ivc/0IFEMM  'D 2 {{800# @?   !E5E;r8   Nr9   r:   r;   r<   r   r@   r8   r$   r!   r   r          1r$   r   c                       \ rS rSrS rSrg)TupleGreaterThanOrEqual   c                    U R                  X5        [        R                  " [        [        /5      n[        R                  " [
        [        /5      nU R                   VVs/ s H  n[        S5        H  oePM     M     nnnU R                   VVs/ s H  n[        S5        H  ohPM     M     n	nn[        U5      n
[        U	5      n[        U
5      n[        U5      n[        U5      n[        U5      n[        U" XX5      /US9=p[        X5       HI  u  pX[        U5      n[        U5      n[        U" XX5      /US9nUR                  R                  U5        UnMK     UR!                  X5      $ s  snnf s  snnf Nr   r   r   r   s                    r!   r   (TupleGreaterThanOrEqual.get_fallback_sql   s6   . //;"67__b#Y/
$(HH?HSeAhShSH	?$(HH?HSeAhShSH	?O	O	9o9og$	!1 2iHHI1HC']FZ(Ivc/0IFEMM  'D 2 {{800# @?   !E/E5r8   Nr   r8   r$   r!   r   r      r   r$   r   c                       \ rS rSrS rSrg)TupleLessThan   c                    U R                  X5        [        R                  " [        [        /5      n[        R                  " [
        [        /5      nU R                   VVs/ s H  n[        S5        H  oePM     M     nnnU R                   VVs/ s H  n[        S5        H  ohPM     M     n	nn[        US S 5      n
[        U	S S 5      n[        U
5      n[        U5      n[        U5      n[        U5      n[        U" XX5      /US9=p[        X5       HI  u  pX[        U5      n[        U5      n[        U" XX5      /US9nUR                  R                  U5        UnMK     UR!                  X5      $ s  snnf s  snnf r   r~   r   r   r   r   r   r   r[   r   rK   r&   r   r   r{   r   r   r2   r   s                    r!   r   TupleLessThan.get_fallback_sql   sD   . //8U"34__b#Y/
$(HH?HSeAhShSH	?$(HH?HSeAhShSH	?3B(	3B(	9o9og$	!1 2iHHI1HC']FZ(Ivc/0IFEMM  'D 2 {{800# @?r   r8   Nr   r8   r$   r!   r   r      r   r$   r   c                       \ rS rSrS rSrg)TupleLessThanOrEquali  c                    U R                  X5        [        R                  " [        [        /5      n[        R                  " [
        [        /5      nU R                   VVs/ s H  n[        S5        H  oePM     M     nnnU R                   VVs/ s H  n[        S5        H  ohPM     M     n	nn[        U5      n
[        U	5      n[        U
5      n[        U5      n[        U5      n[        U5      n[        U" XX5      /US9=p[        X5       HI  u  pX[        U5      n[        U5      n[        U" XX5      /US9nUR                  R                  U5        UnMK     UR!                  X5      $ s  snnf s  snnf r   r   r   s                    r!   r   %TupleLessThanOrEqual.get_fallback_sql  s6   . //8U"34__b#Y/
$(HH?HSeAhShSH	?$(HH?HSeAhShSH	?O	O	9o9og$	!1 2iHHI1HC']FZ(Ivc/0IFEMM  'D 2 {{800# @?r   r8   Nr   r8   r$   r!   r   r     r   r$   r   c                   R   ^  \ rS rSrU 4S jrS rS rS rU 4S jrU 4S jr	Sr
U =r$ )	TupleIni+  c                   > U R                  5       (       a<  U R                  5         U R                  5         U R                  5         U R                  $ U R	                  5         [
        [        U ]  5         U R                  $ r   )	rE   rF   *check_rhs_is_collection_of_tuples_or_lists+check_rhs_elements_length_equals_lhs_lengthcheck_rhs_is_queryrI   rB   rJ   rK   rL   s    r!   rJ   TupleIn.get_prep_lookup,  sf    ##%%++-;;=<<>
 xx ##%"D9;xxr$   c                     [        S U R                   5       5      (       d,  U R                  5       n[        U R                  < SU S35      eg )Nc              3   N   #    U  H  n[        U[        [        45      v   M     g 7fr   )r/   rQ   rR   )rh   valss     r!   rj   ETupleIn.check_rhs_is_collection_of_tuples_or_lists.<locals>.<genexpr>8  s     Hxt:dUDM22xs   #%rP   z( must be a collection of tuples or lists)allrK   rS   rT   rU   rV   s     r!   r   2TupleIn.check_rhs_is_collection_of_tuples_or_lists7  sT    HtxxHHH&&(G##&k' ;: :  Ir$   c                    ^ [        U R                  5      m[        U4S jU R                   5       5      (       d/  U R	                  5       n[        U R                  < SU ST S35      eg )Nc              3   @   >#    U  H  nT[        U5      :H  v   M     g 7fr   )r   )rh   r   r\   s     r!   rj   FTupleIn.check_rhs_elements_length_equals_lhs_length.<locals>.<genexpr>A  s     =HD7c$i'Hs   rP   rZ   z elements each)r   r[   r   rK   rS   rT   rU   )r    rW   r\   s     @r!   r   3TupleIn.check_rhs_elements_length_equals_lhs_length?  sh    dhh-=DHH===&&(G##&k' ;$I^5  >r$   c                     [        U R                  [        [        45      (       dP  U R	                  5       nU R                  R
                  R                  n[        U R                  < SU SU< S35      eg )Nr_   z" must be a Query object (received r`   )	r/   rK   r   r
   rS   rM   r9   rT   rU   ra   s      r!   r   TupleIn.check_rhs_is_queryH  ss    $((UH$566&&(Ghh((11G##&&:7) D44;;aA  7r$   c                   > U R                  5       (       d  [        [        U ]  X5      $ U R                  nU(       d  [
        e/ nU R                  nU Hu  n[        S U 5       5      (       a  M  UR                  [        [        XV5       VVs/ s H+  u  px[        US5      (       a  UO[        XR                  S9PM-     snn6 5        Mw     U(       d  [
        eUR                  [        U6 5      $ s  snnf )Nc              3   (   #    U  H  oS L v   M
     g 7fr   r8   rh   r   s     r!   rj   &TupleIn.process_rhs.<locals>.<genexpr>a       /$3$;$   r2   rz   )rE   rI   rB   r~   rK   r   r[   anyr   r   r{   r|   r   r?   r}   )
r    r3   r4   rK   resultr[   r   r   r   rM   s
            r!   r~   TupleIn.process_rhsQ  s    '')))4<XRRhh   hhD /$///MM ),C )7HC  'sH55  !&s9I9I!JK )7	 $   v//s   2C0c                   >^ U R                   nU(       d  [        e[        U[        5      (       a  [        R
                  R                  U4S jUR                  US9R                  5       S    5       5      nUR                  5       nUR                  [        R                  " [        U R                  U5       VVs/ s H  u  pV[        XV5      PM     snn6 5        UR!                  [#        U5      5      $ U R%                  5       (       d  [&        [(        U ]W  X5      $ [-        / [.        S9nU R                  nU Hk  n	[1        S U	 5       5      (       a  M  [        X5       VVs/ s H  u  pV[        XV5      PM     n
nnUR2                  R5                  [-        U
[6        S95        Mm     UR2                  (       d  [        eUR+                  X5      $ s  snnf s  snnf )Nc              3   b   >#    U  H$  n[        US    =m[        5      (       a  TOT/v   M&     g7f)r   N)r/   r   )rh   selectselect_exprs     r!   rj   +TupleIn.get_fallback_sql.<locals>.<genexpr>z  s@      6 VF "&)#;;hGG  %' Vs   ,/)r4   r   r   c              3   (   #    U  H  oS L v   M
     g 7fr   r8   r   s     r!   rj   r     r   r   )rK   r   r/   r   r   chainfrom_iterableget_compiler
get_selectcloneadd_qr   Qr{   r[   r   r}   r   rE   rI   rB   r2   r   r   r   r   r   r   )r    r3   r4   rK   	rhs_exprsr   r   r   r[   r   r   r   rM   s              @r!   r   TupleIn.get_fallback_sqlu  sz   hh  c5!!!55 6 "..*.EPPRSTU6 I ))+CII3txx;ST;Sxs5?;STU ##F3K00))++)47MM
 r*hhD /$///7:3~F~83uS~GFMM  7c!BC  }}  {{800- U" Gs   <G$Gr8   )r9   r:   r;   r<   rJ   r   r   r   r~   r   r@   r   r   s   @r!   r   r   +  s'    	"0H%1 %1r$   r   )exactgtgteltlteinisnull)%r   django.core.exceptionsr   	django.dbr   r   django.db.models.expressionsr   r   r   r	   r
   r   django.db.models.lookupsr   r   r   r   r   r   r   django.db.models.sqlr   django.db.models.sql.wherer   r   r   r   rB   r   r   r   r   r   r   r   tuple_lookupsr8   r$   r!   <module>r	     s     1 /    ' 9 91D 1.c4 c4L1!5 11"F 1,1' 181.0B 181$h 181+_ 18o1 o1f 
"

r$   