Ë
    ¹ûàgO   ã                   óŠ   — d Z ddlZddlmZ ddlmZmZ ddlmZ  G d„ de	«      Z
 G d„ d	«      Z G d
„ d«      Z G d„ d«      Zy)z]
Useful auxiliary data structures for query construction. Not useful outside
the SQL domain.
é    N)ÚFullResultSet)ÚINNERÚLOUTER)ÚRemovedInDjango60Warningc                   ó   — e Zd ZdZd„ Zy)Ú	MultiJoinz¤
    Used by join construction code to indicate the point at which a
    multi-valued join was attempted (if the caller wants to treat that
    exceptionally).
    c                 ó    — || _         || _        y ©N)ÚlevelÚnames_with_path)ÚselfÚ	names_posÚpath_with_namess      úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/db/models/sql/datastructures.pyÚ__init__zMultiJoin.__init__   s   € ØˆŒ
à.ˆÕó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r   r   r   r      s   „ ñó/r   r   c                   ó   — e Zd Zy)ÚEmptyN)r   r   r   r   r   r   r   r      s   „ Ør   r   c                   óN   — e Zd ZdZ	 dd„Zd„ Zd„ Zed„ «       Zd„ Z	d„ Z
d	„ Zd
„ Zy)ÚJoinaá  
    Used by sql.Query and sql.SQLCompiler to generate JOIN clauses into the
    FROM entry. For example, the SQL generated could be
        LEFT OUTER JOIN "sometable" T1
        ON ("othertable"."sometable_id" = "sometable"."id")

    This class is primarily used in Query.alias_map. All entries in alias_map
    must be Join compatible by providing the following attributes and methods:
        - table_name (string)
        - table_alias (possible alias for the table, can be None)
        - join_type (can be None for those entries that aren't joined from
          anything)
        - parent_alias (which table is this join's parent, can be None similarly
          to join_type)
        - as_sql()
        - relabeled_clone()
    Nc                 óX  — || _         || _        || _        || _        t	        |d«      r7|j                  «       | _        t        d„ | j                  D «       «      | _        n6t        j                  dt        «       d | _        |j                  «       | _        || _        || _        || _        y )NÚget_joining_fieldsc              3   óR   K  — | ]  \  }}|j                   |j                   f–— Œ! y ­wr
   )Úcolumn)Ú.0Ú	lhs_fieldÚ	rhs_fields      r   ú	<genexpr>z Join.__init__.<locals>.<genexpr>F   s-   è ø€ ò #á(�I˜yð ×!Ñ! 9×#3Ñ#3Ô4ñ#ùs   ‚%'zaThe usage of get_joining_columns() in Join is deprecated. Implement get_joining_fields() instead.)Ú
table_nameÚparent_aliasÚtable_aliasÚ	join_typeÚhasattrr   Újoin_fieldsÚtupleÚ	join_colsÚwarningsÚwarnr   Úget_joining_columnsÚ
join_fieldÚnullableÚfiltered_relation)r   r$   r%   r&   r'   r/   r0   r1   s           r   r   zJoin.__init__1   s¥   € ð %ˆŒØ(ˆÔà&ˆÔà"ˆŒô �:Ð3Ô4Ø)×<Ñ<Ó>ˆDÔÜ"ñ #à,0×,<Ñ,<ô#ó ˆD�Nô
 �M‰Mð0ä(ôð
  $ˆDÔØ'×;Ñ;Ó=ˆDŒNà$ˆŒà ˆŒØ!2ˆÕr   c                 óü  — g }g }|j                   }|j                  j                  }| j                  xs | j                  }|D ]Í  \  }}	t        |t        «      r; || j                  «      ›d ||«      ›�}
 || j                  «      ›d ||	«      ›�}ng|j                  j                  | j                  || j                  |	«      \  }}	|j                  |«      \  }}||z  }
|j                  |	«      \  }}||z  }|j                  |
› d|› �«       ŒÏ | j                  j                  | j                  | j                  «      }|r9|j                  |«      \  }}|j                  d|z  «       |j                  |«       | j                  rD	 |j                  | j                  «      \  }}|j                  d|z  «       |j                  |«       |s9t#        | j                  d| j                  «      }t%        d|j&                  z  «      ‚dj)                  |«      }| j                  | j*                  k(  rdnd| j                  z  }| j,                  ›d	 || j*                  «      ›|›d
|›d�}||fS # t         $ r Y Œ¬w xY w)z™
        Generate the full
           LEFT OUTER JOIN sometable ON sometable.somecol = othertable.othercol, params
        clause for this join.
        ú.z = z(%s)ÚfieldzaJoin generated an empty ON clause. %s did not yield either joining columns or extra restrictions.z AND Ú ú %sú z ON (ú))Úquote_name_unless_aliasÚopsÚ
quote_namer)   r+   Ú
isinstanceÚstrr%   r&   Úprepare_join_on_clauseÚcompileÚappendr/   Úget_extra_restrictionÚextendr1   r   ÚgetattrÚ
ValueErrorÚ	__class__Újoinr$   r'   )r   ÚcompilerÚ
connectionÚjoin_conditionsÚparamsÚqnÚqn2r)   ÚlhsÚrhsÚlhs_full_nameÚrhs_full_nameÚlhs_sqlÚ
lhs_paramsÚrhs_sqlÚ
rhs_paramsÚ
extra_condÚ	extra_sqlÚextra_paramsÚdeclared_fieldÚon_clause_sqlÚ	alias_strÚsqls                          r   Úas_sqlzJoin.as_sqlX   ss  € ð ˆØˆØ×-Ñ-ˆØ�n‰n×'Ñ'ˆð ×&Ñ&Ò8¨$¯.©.ˆØ#ò 	I‰HˆC�Ü˜#œsÔ#ñ ,.¨d×.?Ñ.?Õ+@Á#ÀcÄ(Ð K�Ù+-¨d×.>Ñ.>Õ+?ÁÀSÄÐ J‘à%Ÿ>™>×@Ñ@Ø×%Ñ% s¨D×,<Ñ,<¸có‘��Sð '/×&6Ñ&6°sÓ&;Ñ#�˜Ø '¨*Ñ 4�Ø&.×&6Ñ&6°sÓ&;Ñ#�˜Ø '¨*Ñ 4�Ø×"Ñ" m _°C¸°Ð#GÕHð	Ið$ —_‘_×:Ñ:Ø×Ñ˜d×/Ñ/ó
ˆ
ñ Ø&.×&6Ñ&6°zÓ&BÑ#ˆI�|Ø×"Ñ" 6¨IÑ#5Ô6Ø�M‰M˜,Ô'Ø×!Ò!ð,Ø*2×*:Ñ*:¸4×;QÑ;QÓ*RÑ'�	˜<ð  ×&Ñ& v°	Ñ'9Ô:Ø—‘˜lÔ+Ùä$ T§_¡_°g¸t¿¹ÓOˆNÜð9Ø;I×;SÑ;SñTóð ð  Ÿ™ _Ó5ˆà×"Ñ" d§o¡oÒ5‰B¸EÀD×DTÑDTÑ<Tð 	ð �N‹NÙˆt�‰ÔÚÚð	
ˆð �Fˆ{Ðøô- !ò Ùðús   ÆI/ É/	I;É:I;c           	      ón  — |j                  | j                  | j                  «      }|j                  | j                  | j                  «      }| j                  �| j                  j	                  |«      }nd }| j                  | j                  ||| j                  | j                  | j                  |¬«      S )N)r1   )
Úgetr%   r&   r1   Úrelabeled_clonerE   r$   r'   r/   r0   )r   Ú
change_mapÚnew_parent_aliasÚnew_table_aliasr1   s        r   r_   zJoin.relabeled_cloneš   sŸ   € Ø%Ÿ>™>¨$×*;Ñ*;¸T×=NÑ=NÓOÐØ$Ÿ.™.¨×)9Ñ)9¸4×;KÑ;KÓLˆØ×!Ñ!Ð-Ø $× 6Ñ 6× FÑ FÀzÓ RÑà $ÐØ�~‰~Ø�O‰OØØØ�N‰NØ�O‰OØ�M‰MØ/ð ó 
ð 	
r   c                 ót   — | j                   | j                  | j                  | j                  | j                  fS r
   )rE   r$   r%   r/   r1   ©r   s    r   ÚidentityzJoin.identity«   s5   € ð �N‰NØ�O‰OØ×ÑØ�O‰OØ×"Ñ"ð
ð 	
r   c                 ó`   — t        |t        «      st        S | j                  |j                  k(  S r
   )r<   r   ÚNotImplementedre   ©r   Úothers     r   Ú__eq__zJoin.__eq__µ   s%   € Ü˜%¤Ô&Ü!Ð!Ø�}‰} §¡Ñ.Ð.r   c                 ó,   — t        | j                  «      S r
   ©Úhashre   rd   s    r   Ú__hash__zJoin.__hash__º   ó   € Ü�D—M‘MÓ"Ð"r   c                 ó>   — | j                  i «      }t        |_        |S r
   )r_   r   r'   ©r   Únews     r   ÚdemotezJoin.demote½   s   € Ø×"Ñ" 2Ó&ˆÜˆŒØˆ
r   c                 ó>   — | j                  i «      }t        |_        |S r
   )r_   r   r'   rq   s     r   ÚpromotezJoin.promoteÂ   s   € Ø×"Ñ" 2Ó&ˆÜˆŒØˆ
r   r
   )r   r   r   r   r   r\   r_   Úpropertyre   rj   rn   rs   ru   r   r   r   r   r      sF   „ ñð4 ó%3òN@òD
ð" ñ
ó ð
ò/ò
#òó
r   r   c                   óJ   — e Zd ZdZdZdZdZd„ Zd„ Zd„ Z	e
d„ «       Zd„ Zd„ Zy)	Ú	BaseTablezÂ
    The BaseTable class is used for base table references in FROM clause. For
    example, the SQL "foo" in
        SELECT * FROM "foo" WHERE somecond
    could be generated by this class.
    Nc                 ó    — || _         || _        y r
   )r$   r&   )r   r$   Úaliass      r   r   zBaseTable.__init__Ô   s   € Ø$ˆŒØ ˆÕr   c                 óš   — | j                   | j                  k(  rdnd| j                   z  }|j                  | j                  «      }||z   g fS )Nr5   r6   )r&   r$   r9   )r   rG   rH   rZ   Úbase_sqls        r   r\   zBaseTable.as_sqlØ   sN   € à×"Ñ" d§o¡oÒ5‰B¸EÀD×DTÑDTÑ<Tð 	ð ×3Ñ3°D·O±OÓDˆØ˜)Ñ# RÐ'Ð'r   c                 ó‚   — | j                  | j                  |j                  | j                  | j                  «      «      S r
   )rE   r$   r^   r&   )r   r`   s     r   r_   zBaseTable.relabeled_cloneß   s3   € Ø�~‰~Ø�O‰O˜ZŸ^™^¨D×,<Ñ,<¸d×>NÑ>NÓOó
ð 	
r   c                 óH   — | j                   | j                  | j                  fS r
   )rE   r$   r&   rd   s    r   re   zBaseTable.identityä   s   € à�~‰~˜tŸ™°×0@Ñ0@Ð@Ð@r   c                 ó`   — t        |t        «      st        S | j                  |j                  k(  S r
   )r<   rx   rg   re   rh   s     r   rj   zBaseTable.__eq__è   s%   € Ü˜%¤Ô+Ü!Ð!Ø�}‰} §¡Ñ.Ð.r   c                 ó,   — t        | j                  «      S r
   rl   rd   s    r   rn   zBaseTable.__hash__í   ro   r   )r   r   r   r   r'   r%   r1   r   r\   r_   rv   re   rj   rn   r   r   r   rx   rx   È   sH   „ ñð €IØ€LØÐò!ò(ò
ð
 ñAó ðAò/ó
#r   rx   )r   r,   Údjango.core.exceptionsr   Údjango.db.models.sql.constantsr   r   Údjango.utils.deprecationr   Ú	Exceptionr   r   r   rx   r   r   r   ú<module>r…      sE   ðñó
 å 0ß 8Ý =ô
/�	ô 
/÷	ñ 	÷gñ g÷T&#ò &#r   