
    >ȋh7                        d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ  G d d	e          Z G d
 d          Z G d dee          Z G d dee          Z G d dee          Z G d dee          Z G d dee          Z  G d dee          Z! G d dee          Z"eeee e!e"edZ#dS )    N)EmptyResultSet)models)ColPairsExistsFuncResolvedOuterRefSubqueryValue)ExactGreaterThanGreaterThanOrEqualInIsNullLessThanLessThanOrEqual)Query)ANDOR	WhereNodec                   @    e Zd ZdZdZ ej                    Zd Zd Z	dS )TupleT c                 *    t          | j                  S N)lensource_expressionsselfs    b/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/models/fields/tuple_lookups.py__len__zTuple.__len__   s    4*+++    c                 *    t          | j                  S r   )iterr   r   s    r   __iter__zTuple.__iter__"   s    D+,,,r!   N)
__name__
__module____qualname__allows_composite_expressionsfunctionr   Fieldoutput_fieldr    r$    r!   r   r   r      sJ        #' H6<>>L, , ,- - - - -r!   r   c                   j     e Zd ZdZ fdZd Zd Zd Zd Z fdZ	d fd		Z
 fd
Zd Z fdZ xZS )TupleLookupMixinTc                     |                                  r)|                                  |                                  n4|                                  t	                                                       | j        S 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   r5   z TupleLookupMixin.get_prep_lookup)   sm    ##%% 	&++---33555522444GG##%%%xr!   c                     t          | j        t          t          f          s.|                                 }t          | j        d| d          d S )N lookup of z must be a tuple or a list)
isinstancer6   tuplelistget_lhs_str
ValueErrorlookup_namer   lhs_strs     r   r1   z+TupleLookupMixin.check_rhs_is_tuple_or_list2   s^    $(UDM22 	&&((G#UU'UUU  	 	r!   c                     t          | j                  }|t          | j                  k    r1|                                 }t	          | j        d| d| d          d S )Nr:    must have z	 elements)r   lhsr6   r>   r?   r@   )r   len_lhsrB   s      r   r2   z3TupleLookupMixin.check_rhs_length_equals_lhs_length9   sl    dh--c$(mm##&&((G#XX'XXgXXX   $#r!   c                     t          | j        t          t          f          sB|                                 }| j        j        j        }t          | j        d| d|d          d S )N subquery lookup of z7 only supports OuterRef and QuerySet objects (received ))	r;   r6   r   r   r>   r8   r%   r?   r@   r   rB   rhs_clss      r   r3   z2TupleLookupMixin.check_rhs_is_supported_expressionA   s    $(%5u$=>> 	&&((Gh(1G# V V7 V VIPV V V  	 	r!   c                     t          | j        t                    rt          | j        j        j                  S d                    d | j        D                       }d| dS )Nz, c              3   >   K   | ]}t          |j                  V  d S r   )reprname).0fs     r   	<genexpr>z/TupleLookupMixin.get_lhs_str.<locals>.<genexpr>N   s*      ==qd16ll======r!   (rI   )r;   rE   r   rN   fieldrO   join)r   namess     r   r>   zTupleLookupMixin.get_lhs_strJ   s[    dh)) 	 +,,,II==DH=====Eu<<<r!   c                     t          | j        t          t          f          rt	          | j         S t                                                      S r   )r;   rE   r<   r=   r   r4   get_prep_lhsr7   s    r   rX   zTupleLookupMixin.get_prep_lhsQ   s>    dh.. 	$$(##ww##%%%r!   Nc                     t                                          |||          \  }}t          | j        t                    sd| d}||fS )NrS   rI   )r4   process_lhsr;   rE   r   )r   compiler
connectionrE   sqlparamsr8   s         r   rZ   zTupleLookupMixin.process_lhsV   sM    gg))(JDDV$(E** 	c***CF{r!   c                    |                                  r@d t          | j        | j                  D             }|                    t          |           S |                    | j                  \  }}t          | j        t                    rd|z  |fS t          | j        t                    r"t                      
                    ||          S t          d          )Nc                 @    g | ]\  }}t          ||j                   S )r+   r
   r+   rP   colvals      r   
<listcomp>z0TupleLookupMixin.process_rhs.<locals>.<listcomp>^   s<       C c(8999  r!   z(%s)z=Composite field lookups only work with composite expressions.)r0   ziprE   r6   compiler   r;   r   r   r4   process_rhsr?   )r   r[   r\   argsr]   r^   r8   s         r   ri   zTupleLookupMixin.process_rhs\   s    ##%% 	  #DHdh 7 7  D ##E4L111"**4844KC$(H-- |V++DHe,, ww**8Z@@@ S  r!   c                 :    t          | j        j         d          )Nzp.get_fallback_sql() must be implemented for backends that don't have the supports_tuple_lookups feature enabled.)NotImplementedErrorr8   r%   )r   r[   r\   s      r   get_fallback_sqlz!TupleLookupMixin.get_fallback_sqln   s.    !~& X X X
 
 	
r!   c                     |j         j        s|                     ||          S t                                          ||          S r   )featuressupports_tuple_lookupsrm   r4   as_sql)r   r[   r\   r8   s      r   rq   zTupleLookupMixin.as_sqlt   s?    "9 	?((:>>>ww~~h
333r!   r   )r%   r&   r'   r(   r5   r1   r2   r3   r>   rX   rZ   ri   rm   rq   __classcell__r8   s   @r   r.   r.   &   s        #'                & & & & &
         $
 
 
4 4 4 4 4 4 4 4 4r!   r.   c                        e Zd Z fdZ xZS )
TupleExactc                 V   t          | j        t                    r)t          t          |                               ||          S |                     ||           d t          | j        | j                  D             }t          |t                    }|                    ||          S )Nc                 4    g | ]\  }}t          ||          S r,   r   rc   s      r   rf   z/TupleExact.get_fallback_sql.<locals>.<listcomp>   s$    KKKxsC5c??KKKr!   	connector)r;   r6   r   r4   r.   rq   ri   rg   rE   r   r   )r   r[   r\   lookupsrootr8   s        r   rm   zTupleExact.get_fallback_sql{   s    dh&& 	N)40077*MMM:... LK3tx3J3JKKKC000{{8Z000r!   )r%   r&   r'   rm   rr   rs   s   @r   ru   ru   z   s8        
1 
1 
1 
1 
1 
1 
1 
1 
1r!   ru   c                       e Zd Zd Zd ZdS )TupleIsNullc                     | j         }t          |t          t          f          rt	          |          dk    r|d         }t          |t
                    r|S t          d          )N   r   z>The QuerySet value for an isnull lookup must be True or False.)r6   r;   r<   r=   r   boolr?   )r   r6   s     r   r5   zTupleIsNull.get_prep_lookup   sb    hcE4=)) 	c#hh!mma&Cc4   	JL
 
 	
r!   c                     | j         fd| j        D             }t          |rt          nt                    }|                    ||          S )Nc                 0    g | ]}t          |          S r,   )r   )rP   rd   r6   s     r   rf   z&TupleIsNull.as_sql.<locals>.<listcomp>   s#    8886#s##888r!   ry   )r6   rE   r   r   r   rq   )r   r[   r\   r{   r|   r6   s        @r   rq   zTupleIsNull.as_sql   sV    
 h8888tx888#,>BB3???{{8Z000r!   N)r%   r&   r'   r5   rq   r,   r!   r   r~   r~      s2        
 
 
1 1 1 1 1r!   r~   c                       e Zd Zd ZdS )TupleGreaterThanc                    |                      ||           t          j        t          t          g          }t          j        t
          t          g          }d | j        D             }d | j        D             }t          |d d                   }t          |d d                   }t          |          }	t          |          }
t          |          }t          |          }t           ||	|
          g|          x}}t          ||          D ][\  }	}
t          |          }t          |          }t           ||	|
          g|          }|j                            |           |}\|                    ||          S )Nc                 6    g | ]}t          d           D ]}|S    rangerP   rd   _s      r   rf   z5TupleGreaterThan.get_fallback_sql.<locals>.<listcomp>   +    ???SeAhh??S????r!   c                 6    g | ]}t          d           D ]}|S r   r   rP   re   r   s      r   rf   z5TupleGreaterThan.get_fallback_sql.<locals>.<listcomp>   r   r!   ry   ri   	itertoolscycler   r   r   r   rE   r6   r#   nextr   rg   childrenappendrq   r   r[   r\   r{   
connectors	cols_list	vals_list	cols_iter	vals_iterrd   re   lookuprz   r|   nodechilds                   r   rm   z!TupleGreaterThan.get_fallback_sql   sp   :... /;"677_b#Y//
??DH???	??DH???	3B3((	3B3((	9oo9oog$$	S!1!1 2iHHHHtIy11 	 	HC']]FZ((Ivvc3//0IFFFEM  '''DD{{8Z000r!   Nr%   r&   r'   rm   r,   r!   r   r   r      #        1 1 1 1 1r!   r   c                       e Zd Zd ZdS )TupleGreaterThanOrEqualc                    |                      ||           t          j        t          t          g          }t          j        t
          t          g          }d | j        D             }d | j        D             }t          |          }t          |          }t          |          }	t          |          }
t          |          }t          |          }t           ||	|
          g|          x}}t          ||          D ][\  }	}
t          |          }t          |          }t           ||	|
          g|          }|j                            |           |}\|                    ||          S )Nc                 6    g | ]}t          d           D ]}|S r   r   r   s      r   rf   z<TupleGreaterThanOrEqual.get_fallback_sql.<locals>.<listcomp>   r   r!   c                 6    g | ]}t          d           D ]}|S r   r   r   s      r   rf   z<TupleGreaterThanOrEqual.get_fallback_sql.<locals>.<listcomp>   r   r!   ry   r   r   s                   r   rm   z(TupleGreaterThanOrEqual.get_fallback_sql   s\   :... /;"677_b#Y//
??DH???	??DH???	OO	OO	9oo9oog$$	S!1!1 2iHHHHtIy11 	 	HC']]FZ((Ivvc3//0IFFFEM  '''DD{{8Z000r!   Nr   r,   r!   r   r   r      r   r!   r   c                       e Zd Zd ZdS )TupleLessThanc                    |                      ||           t          j        t          t          g          }t          j        t
          t          g          }d | j        D             }d | j        D             }t          |d d                   }t          |d d                   }t          |          }	t          |          }
t          |          }t          |          }t           ||	|
          g|          x}}t          ||          D ][\  }	}
t          |          }t          |          }t           ||	|
          g|          }|j                            |           |}\|                    ||          S )Nc                 6    g | ]}t          d           D ]}|S r   r   r   s      r   rf   z2TupleLessThan.get_fallback_sql.<locals>.<listcomp>   r   r!   c                 6    g | ]}t          d           D ]}|S r   r   r   s      r   rf   z2TupleLessThan.get_fallback_sql.<locals>.<listcomp>   r   r!   r   ry   ri   r   r   r   r   r   r   rE   r6   r#   r   r   rg   r   r   rq   r   s                   r   rm   zTupleLessThan.get_fallback_sql   sp   :... /8U"344_b#Y//
??DH???	??DH???	3B3((	3B3((	9oo9oog$$	S!1!1 2iHHHHtIy11 	 	HC']]FZ((Ivvc3//0IFFFEM  '''DD{{8Z000r!   Nr   r,   r!   r   r   r      r   r!   r   c                       e Zd Zd ZdS )TupleLessThanOrEqualc                    |                      ||           t          j        t          t          g          }t          j        t
          t          g          }d | j        D             }d | j        D             }t          |          }t          |          }t          |          }	t          |          }
t          |          }t          |          }t           ||	|
          g|          x}}t          ||          D ][\  }	}
t          |          }t          |          }t           ||	|
          g|          }|j                            |           |}\|                    ||          S )Nc                 6    g | ]}t          d           D ]}|S r   r   r   s      r   rf   z9TupleLessThanOrEqual.get_fallback_sql.<locals>.<listcomp>   r   r!   c                 6    g | ]}t          d           D ]}|S r   r   r   s      r   rf   z9TupleLessThanOrEqual.get_fallback_sql.<locals>.<listcomp>   r   r!   ry   r   r   s                   r   rm   z%TupleLessThanOrEqual.get_fallback_sql   s\   :... /8U"344_b#Y//
??DH???	??DH???	OO	OO	9oo9oog$$	S!1!1 2iHHHHtIy11 	 	HC']]FZ((Ivvc3//0IFFFEM  '''DD{{8Z000r!   Nr   r,   r!   r   r   r      r   r!   r   c                   D     e Zd Z fdZd Zd Zd Z fdZ fdZ xZ	S )TupleInc                 *   |                                  r=|                                  |                                  |                                  n;|                                  t          t          |                                            | j        S r   )	r0   r1   *check_rhs_is_collection_of_tuples_or_lists+check_rhs_elements_length_equals_lhs_lengthcheck_rhs_is_queryr4   r.   r5   r6   r7   s    r   r5   zTupleIn.get_prep_lookup  s    ##%% 	<++---;;===<<>>>>##%%%"D))99;;;xr!   c                     t          d | j        D                       s.|                                 }t          | j        d| d          d S )Nc              3   N   K   | ] }t          |t          t          f          V  !d S r   )r;   r<   r=   )rP   valss     r   rR   zETupleIn.check_rhs_is_collection_of_tuples_or_lists.<locals>.<genexpr>  s0      HHt:dUDM22HHHHHHr!   r:   z( must be a collection of tuples or lists)allr6   r>   r?   r@   rA   s     r   r   z2TupleIn.check_rhs_is_collection_of_tuples_or_lists  sq    HHtxHHHHH 	&&((G# : :' : : :  	 	r!   c                     t          | j                  t          fd| j        D                       s1|                                 }t          | j        d| d d          d S )Nc              3   >   K   | ]}t          |          k    V  d S r   )r   )rP   r   rF   s     r   rR   zFTupleIn.check_rhs_elements_length_equals_lhs_length.<locals>.<genexpr>$  s.      ==D7c$ii'======r!   r:   rD   z elements each)r   rE   r   r6   r>   r?   r@   )r   rB   rF   s     @r   r   z3TupleIn.check_rhs_elements_length_equals_lhs_length"  s    dh--====DH===== 	&&((G# 5 5' 5 5$5 5 5  	 	r!   c                     t          | j        t          t          f          sB|                                 }| j        j        j        }t          | j        d| d|d          d S )NrH   z" must be a Query object (received rI   )	r;   r6   r   r	   r>   r8   r%   r?   r@   rJ   s      r   r   zTupleIn.check_rhs_is_query+  s    $(UH$566 	&&((Gh(1G# A A7 A A4;A A A  	 	r!   c           
         |                                  s)t          t          |                               ||          S | j        }|st
          g }| j        }|D ]P}t          d |D                       r|                    t          d t          ||          D                         Q|st
          |                    t          |           S )Nc              3      K   | ]}|d u V  	d S r   r,   rP   re   s     r   rR   z&TupleIn.process_rhs.<locals>.<genexpr>D  &      //33$;//////r!   c                 @    g | ]\  }}t          ||j                   S ra   rb   rc   s      r   rf   z'TupleIn.process_rhs.<locals>.<listcomp>H  s<       $C c0@AAA  r!   )r0   r4   r.   ri   r6   r   rE   anyr   r   rg   rh   )r   r[   r\   r6   resultrE   r   r8   s          r   ri   zTupleIn.process_rhs4  s    '')) 	S)400<<XzRRRh 	!   h 	 	D //$///// MM (+C       	!  v///r!   c           	        	 | j         }|st          t          |t                    rt          j                            	fd|                    |                                          d         D                       }|	                                }|
                    t          j        d t          | j        |          D                         |                    t!          |                    S |                                 s)t%          t&          |                               ||          S t+          g t,                    }| j        }|D ]d}t/          d |D                       rd t          ||          D             }|j                            t+          |t4                               e|j        st          |                    ||          S )Nc              3   \   K   | ]&}t          |d          xt                    rngV  'dS )r   N)r;   r   )rP   selectselect_exprs     r   rR   z+TupleIn.get_fallback_sql.<locals>.<genexpr>Y  sZ       6 6  "&)#;;hGG'KK%	6 6 6 6 6 6r!   )r\   r   c                 4    g | ]\  }}t          ||          S r,   rx   rc   s      r   rf   z,TupleIn.get_fallback_sql.<locals>.<listcomp>c  s$    TTTxsC5c??TTTr!   ry   c              3      K   | ]}|d u V  	d S r   r,   r   s     r   rR   z+TupleIn.get_fallback_sql.<locals>.<genexpr>q  r   r!   c                 4    g | ]\  }}t          ||          S r,   rx   rc   s      r   rf   z,TupleIn.get_fallback_sql.<locals>.<listcomp>s  s$    FFF83uS#FFFr!   )r6   r   r;   r   r   chainfrom_iterableget_compiler
get_selectcloneadd_qr   Qrg   rE   rh   r   r0   r4   r.   rq   r   r   r   r   r   r   )r   r[   r\   r6   	rhs_exprsr|   rE   r   r{   r   r8   s            @r   rm   zTupleIn.get_fallback_sqlT  s   h 	!  c5!! 	N!55 6 6 6 6 "..*.EEPPRRSTU6 6 6  I ))++CIITT3tx;S;STTTU   ##F3KK000))++ 	N)40077*MMM r***h 	D 	DD //$///// FFs3~~FFFGM  7c!B!B!BCCCC} 	!  {{8Z000r!   )
r%   r&   r'   r5   r   r   r   ri   rm   rr   rs   s   @r   r   r     s        	 	 	 	 	      0 0 0 0 0@$1 $1 $1 $1 $1 $1 $1 $1 $1r!   r   )exactgtgteltlteinisnull)$r   django.core.exceptionsr   	django.dbr   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   r.   ru   r~   r   r   r   r   r   tuple_lookupsr,   r!   r   <module>r      s       1 1 1 1 1 1                                       ' & & & & & 9 9 9 9 9 9 9 9 9 9	- 	- 	- 	- 	-D 	- 	- 	-Q4 Q4 Q4 Q4 Q4 Q4 Q4 Q4h1 1 1 1 1!5 1 1 11 1 1 1 1"F 1 1 1,1 1 1 1 1' 1 1 181 1 1 1 1.0B 1 1 181 1 1 1 1$h 1 1 181 1 1 1 1+_ 1 1 18j1 j1 j1 j1 j1 j1 j1 j1\ 
"

 r!   