§
    iÍâhôK  ã                   óp  — d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ  ej        d¦  «        Z edd¦  «        Zd„ Z G d„ dej        ¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z d„ Z!d„ Z"d„ Z# G d„ d¦  «        Z$dS )zî
Various data structures used in query construction.

Factored out from django.db.models.query to avoid making the main module very
large and/or so that they can be used by other modules without getting into
circular import difficulties.
é    N)Ú
namedtuple)Únullcontext)Ú
FieldError)ÚDEFAULT_DB_ALIASÚDatabaseErrorÚconnectionsÚmodelsÚtransaction)Ú
LOOKUP_SEP)Útree)Úcached_property)Úmake_hashableúdjango.db.modelsÚPathInfozGfrom_opts to_opts target_fields join_field m2m direct filtered_relationc              #   ój   K  — | V — |                       ¦   «         D ]}t          |¦  «        E d {V —† Œd S ©N)Ú__subclasses__Ú
subclasses©ÚclsÚsubclasss     úS/var/www/histauto/venv/lib/python3.11/site-packages/django/db/models/query_utils.pyr   r   !   sW   è è € Ø
€I€I€IØ×&Ò&Ñ(Ô(ð (ð (ˆÝ˜hÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð(ð (ó    c                   óº   ‡ — e Zd ZdZdZdZdZeZdZdddœˆ fd	„
Z	d
„ Z
d„ Zd„ Zd„ Zd„ Z	 dd„Zd„ Zd„ Zefd„Zd„ Zed„ ¦   «         Zd„ Zd„ Zed„ ¦   «         Zˆ xZS )ÚQze
    Encapsulate filters as objects that can then be combined logically (using
    `&` and `|`).
    ÚANDÚORÚXORTNF)Ú
_connectorÚ_negatedc                ó–   •— t          ¦   «                              g |¢t          |                     ¦   «         ¦  «        ¢||¬¦  «         d S )N)ÚchildrenÚ	connectorÚnegated)ÚsuperÚ__init__ÚsortedÚitems)Úselfr   r    ÚargsÚkwargsÚ	__class__s        €r   r&   z
Q.__init__4   sQ   ø€ Ý‰Œ×ÒØ5�tÐ5�f V§\¢\¡^¤^Ñ4Ô4Ð5Ø Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 óP  — t          |dd¦  «        du rt          |¦  «        ‚| s|                     ¦   «         S |s)t          |t          ¦  «        r|                      ¦   «         S |                      |¬¦  «        }|                     | |¦  «         |                     ||¦  «         |S )NÚconditionalF)r#   )ÚgetattrÚ	TypeErrorÚcopyÚ
isinstancer   ÚcreateÚadd)r)   ÚotherÚconnÚobjs       r   Ú_combinez
Q._combine;   s¤   € Ý�5˜-¨Ñ/Ô/°5Ð8Ð8Ý˜EÑ"Ô"Ð"Øð 	 Ø—:’:‘<”<ÐØð 	� E­1Ñ-Ô-ð 	Ø—9’9‘;”;Ðà�kŠk DˆkÑ)Ô)ˆØ�Š��dÑÔÐØ�Š��tÑÔÐØˆ
r   c                 ó8   — |                       || j        ¦  «        S r   )r8   r   ©r)   r5   s     r   Ú__or__zQ.__or__H   s   € Ø�}Š}˜U D¤GÑ,Ô,Ð,r   c                 ó8   — |                       || j        ¦  «        S r   )r8   r   r:   s     r   Ú__and__z	Q.__and__K   ó   € Ø�}Š}˜U D¤HÑ-Ô-Ð-r   c                 ó8   — |                       || j        ¦  «        S r   )r8   r   r:   s     r   Ú__xor__z	Q.__xor__N   r>   r   c                 óV   — |                       ¦   «         }|                     ¦   «          |S r   )r1   Únegate)r)   r7   s     r   Ú
__invert__zQ.__invert__Q   s!   € Ø�iŠi‰kŒkˆØ�
Š
‰ŒˆØˆ
r   c                 ól   — |                      | ||dd|¬¦  «        \  }}|                     |¦  «         |S )NF)Úallow_joinsÚ
split_subqÚcheck_filterableÚ	summarize)Ú_add_qÚpromote_joins)r)   ÚqueryrE   ÚreuserH   Úfor_saveÚclauseÚjoinss           r   Úresolve_expressionzQ.resolve_expressionV   sM   € ð
 ŸšØØØ#ØØ"Øð %ñ 
ô 
‰ˆ�ð 	×Ò˜EÑ"Ô"Ð"Øˆr   c                 ó¶  — |s| S |                       | j        | j        ¬¦  «        }| j        D �]*}|}t	          |t
          ¦  «        rá|\  }}t          |v r|                     t          d¦  «        \  }}n|}d }t          j	        |¦  «        }	|	 
                    |¦  «        x}
|	ur‚|€d}|
                     |¦  «        x}€:|
                     |¦  «        x}	 �" ||
¦  «        }
d}|
                     |¦  «        }|€|dk    r|
                     d¦  «        }d}|� ||
|¦  «        }n| 
                    |¦  «        }|j                             |¦  «         �Œ,|S )N)r#   r$   é   ÚexactÚisnullT)r3   r#   r$   r"   r2   Útupler   Úrsplitr	   ÚFÚreplace_expressionsÚ
get_lookupÚget_transformÚappend)r)   ÚreplacementsÚcloneÚchildÚchild_replacementÚlhsÚrhsÚpathÚlookupÚfieldÚfield_replacementÚlookup_classÚtransform_classs                r   rX   zQ.replace_expressionsf   s�  € Øð 	ØˆKØ—’ d¤n¸d¼l�ÑKÔKˆØ”]ð  	5ñ  	5ˆEØ %ÐÝ˜%¥Ñ'Ô'ð LØ ‘��SÝ Ð$Ð$Ø#&§:¢:­j¸!Ñ#<Ô#<‘L�D˜&˜&à�DØ!�FÝœ ™œ�à).×)BÒ)BÀ<Ñ)PÔ)PÐPÐ%Øðð ð �~Ø!(˜Ø(9×(DÒ(DÀVÑ(LÔ(LÐL˜ÐUà/@×/NÒ/NÈvÑ/VÔ/VÐV˜OØ!%ð&ð 1@°Ð@QÑ0RÔ0RÐ-Ø%,˜FØ+<×+GÒ+GÈÑ+OÔ+O˜LØ�{ v°Ò'8Ð'8Ø'8×'CÒ'CÀHÑ'MÔ'M˜Ø"˜Ø#Ð/Ø,8¨LÐ9JÈCÑ,PÔ,PÐ)øà$)×$=Ò$=¸lÑ$KÔ$KÐ!ØŒN×!Ò!Ð"3Ñ4Ô4Ð4Ñ4Øˆr   c              #   ó¾   K  — | V — | j         D ]N}t          |t          ¦  «        r|d         }t          |d¦  «        r|                     ¦   «         E d{V —† ŒJ|V — ŒOdS )zg
        Recursively yield this Q object and all subexpressions, in depth-first
        order.
        rR   ÚflattenN)r"   r2   rU   Úhasattrri   )r)   r^   s     r   ri   z	Q.flatten�   s‡   è è € ð
 ˆ
ˆ
ˆ
Ø”]ð 	ð 	ˆEÝ˜%¥Ñ'Ô'ð !à˜aœ�Ý�u˜iÑ(Ô(ð Ø Ÿ=š=™?œ?Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*à����ð	ð 	r   c           
      ó>  — ddl m}m} ddlm} ddlm} ddlm}  |d¦  «        }| 	                    ¦   «         D ]8\  }	}
t          |
d¦  «        s ||
¦  «        }
|                     |
|	d¬	¦  «         Œ9|                      |d
¦  «        d¦  «         t          |         }|j        j        r7|                     t!           || d |¦   «         ¬¦  «        ¦  «        ¦  «         n|                     | ¦  «         |                     |¬¦  «        }|j        rt'          j        |¬¦  «        nt+          ¦   «         }	 |5  |                     |¦  «        ducddd¦  «         S # 1 swxY w Y   dS # t.          $ r'}t0                               d| |¦  «         Y d}~dS d}~ww xY w)z|
        Do a database query to check if the expressions of the Q instance
        matches against the expressions.
        r   )ÚBooleanFieldÚValue)ÚCoalesce)ÚQuery)ÚSINGLENrP   F)ÚselectrR   Ú_checkT)Úoutput_field)Úusingz.Got a database error calling check() on %r: %s)Údjango.db.modelsrl   rm   Údjango.db.models.functionsrn   Údjango.db.models.sqlro   Údjango.db.models.sql.constantsrp   r(   rj   Úadd_annotationr   ÚfeaturesÚsupports_comparing_boolean_exprÚadd_qr   Úget_compilerÚin_atomic_blockr
   Úatomicr   Úexecute_sqlr   ÚloggerÚwarning)r)   Úagainstrt   rl   rm   rn   ro   rp   rK   ÚnameÚvalueÚ
connectionÚcompilerÚcontext_managerÚes                  r   ÚcheckzQ.checkœ   sS  € ð 	9Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø7Ð7Ð7Ð7Ð7Ð7Ø.Ð.Ð.Ð.Ð.Ð.Ø9Ð9Ð9Ð9Ð9Ð9à��d‘”ˆØ"Ÿ=š=™?œ?ð 	<ð 	<‰KˆD�%Ý˜5Ð"6Ñ7Ô7ð %Ø˜˜e™œ�Ø× Ò  ¨°UÐ Ñ;Ô;Ð;Ð;Ø×Ò˜U˜U 1™XœX xÑ0Ô0Ð0Ý  Ô'ˆ
àÔÔ>ð 	Ø�KŠK�˜(˜( 4¨¸L¸L¹N¼NÐKÑKÔKÑLÔLÑMÔMÐMÐMà�KŠK˜ÑÔÐØ×%Ò%¨EÐ%Ñ2Ô2ˆð Ô)ð�KÔ UÐ+Ñ+Ô+Ð+å‘”ð 	ð
	Ø ð @ð @Ø×+Ò+¨FÑ3Ô3¸4Ð?ð@ð @ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð @ð @øåð 	ð 	ð 	Ý�NŠNÐKÈTÐSTÑUÔUÐUØ�4�4�4�4�4øøøøð	øøøs<   Ä8E+ Ä:EÅE+ ÅE"Å"E+ Å%E"Å&E+ Å+
FÅ5FÆFc                 ó  — | j         j        ›d| j         j        ›�}|                     d¦  «        r|                     dd¦  «        }t          | j        ¦  «        }i }| j        | j        k    r
| j        |d<   | j	        rd|d<   |||fS )Nú.zdjango.db.models.query_utilsr   r   Tr    )
r,   Ú
__module__Ú__name__Ú
startswithÚreplacerU   r"   r#   Údefaultr$   )r)   rb   r*   r+   s       r   ÚdeconstructzQ.deconstructÀ   sš   € Øœ.Ô3Ð3Ð3°T´^Ô5LÐ5LÐMˆØ�?Š?Ð9Ñ:Ô:ð 	TØ—<’<Ð >Ð@RÑSÔSˆDÝ�T”]Ñ#Ô#ˆØˆØŒ>˜Tœ\Ò)Ð)Ø#'¤>ˆF�<Ñ ØŒ<ð 	&Ø!%ˆF�:ÑØ�T˜6Ð!Ð!r   c                 ó4  — |                       ¦   «         \  }}}|g|                     ¦   «         ¢}|D ]X}t          |t          ¦  «        r,|\  }}t	          |¦  «        }|                     ||f¦  «         ŒC|                     |¦  «         ŒYt          |¦  «        S r   )r’   r(   r2   rU   r   r[   )r)   rb   r*   r+   Úidentityr^   Úargr…   s           r   r”   z
Q.identityÌ   s    € à!×-Ò-Ñ/Ô/Ñˆˆd�FØÐ*˜6Ÿ<š<™>œ>Ð*ˆØð 	'ð 	'ˆEÝ˜%¥Ñ'Ô'ð 'Ø"‘
��UÝ% eÑ,Ô,�Ø—’  e Ñ-Ô-Ð-Ð-à—’ Ñ&Ô&Ð&Ð&Ý�X‰ŒÐr   c                 óZ   — t          |t          ¦  «        st          S |j        | j        k    S r   )r2   r   ÚNotImplementedr”   r:   s     r   Ú__eq__zQ.__eq__Ù   s)   € Ý˜%¥Ñ#Ô#ð 	"Ý!Ð!ØŒ~ ¤Ò.Ð.r   c                 ó*   — t          | j        ¦  «        S r   )Úhashr”   )r)   s    r   Ú__hash__z
Q.__hash__Þ   s   € Ý�D”MÑ"Ô"Ð"r   c                 óL   — ddl m} d„ |                     | ¦  «        D ¦   «         S )zŽ
        Retrieve all base fields referenced directly or through F expressions
        excluding any fields referenced through joins.
        r   )rK   c                 óP   — h | ]#}|                      t          d ¦  «        d         ’Œ$S )rR   r   )Úsplitr   )Ú.0r^   s     r   ú	<setcomp>z+Q.referenced_base_fields.<locals>.<setcomp>ê   s8   € ð 
ð 
ð 
Ø.3ˆE�KŠK�
 AÑ&Ô& qÔ)ð
ð 
ð 
r   )rw   rK   Úget_children_from_q)r)   rK   s     r   Úreferenced_base_fieldszQ.referenced_base_fieldsá   sF   € ð 	/Ð.Ð.Ð.Ð.Ð.ð
ð 
Ø7<×7PÒ7PÐQUÑ7VÔ7Vð
ñ 
ô 
ð 	
r   )NTNFF)rŽ   r�   Ú__qualname__Ú__doc__r   r   r   r‘   r.   r&   r8   r;   r=   r@   rC   rP   rX   ri   r   rŠ   r’   r   r”   r˜   r›   r¢   Ú__classcell__)r,   s   @r   r   r   '   sn  ø€ € € € € ðð ð €CØ	€BØ
€CØ€GØ€Kà)-¸ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð-ð -ð -ð.ð .ð .ð.ð .ð .ðð ð ð SXðð ð ð ð %ð %ð %ðNð ð ð $4ð "ð "ð "ð "ðH
"ð 
"ð 
"ð ð
ð 
ñ „_ð
ð/ð /ð /ð
#ð #ð #ð ð

ð 

ñ „_ð

ð 

ð 

ð 

ð 

r   r   c                   ó&   — e Zd ZdZd„ Zdd„Zd„ ZdS )ÚDeferredAttributez„
    A wrapper for a deferred-loading field. When the value is read from this
    object the first time, the query is executed.
    c                 ó   — || _         d S r   )rd   )r)   rd   s     r   r&   zDeferredAttribute.__init__õ   s   € ØˆŒ
ˆ
ˆ
r   Nc                 ó  — |€| S |j         }| j        j        }||vrc|                      |¦  «        }|€G|                     ¦   «         s| j        j        rt          d¦  «        ‚|                     |g¬¦  «         n|||<   ||         S )zx
        Retrieve and caches the value from the datastore on the first lookup.
        Return the cached value.
        Nz4Cannot read a generated field from an unsaved model.)Úfields)Ú__dict__rd   ÚattnameÚ_check_parent_chainÚ
_is_pk_setÚ	generatedÚAttributeErrorÚrefresh_from_db)r)   Úinstancer   ÚdataÚ
field_nameÚvals         r   Ú__get__zDeferredAttribute.__get__ø   s®   € ð
 ÐØˆKØÔ ˆØ”ZÔ'ˆ
Ø˜TÐ!Ð!ð ×*Ò*¨8Ñ4Ô4ˆCØˆ{Ø×*Ò*Ñ,Ô,ð °´Ô1Eð Ý(ØNñô ð ð ×(Ò(°°Ð(Ñ=Ô=Ð=Ð=à#&��ZÑ Ø�JÔÐr   c                 óª   — |j         }|                     | j        j        ¦  «        }| j        j        r | j        |k    rt          ||j        ¦  «        S dS )zÁ
        Check if the field value can be fetched from a parent field already
        loaded in the instance. This can be done if the to-be fetched
        field is a primary key field.
        N)Ú_metaÚget_ancestor_linkrd   ÚmodelÚprimary_keyr/   r¬   )r)   r²   ÚoptsÚ
link_fields       r   r­   z%DeferredAttribute._check_parent_chain  sT   € ð Œ~ˆØ×+Ò+¨D¬JÔ,<Ñ=Ô=ˆ
ØŒ:Ô!ð 	9 d¤j°JÒ&>Ð&>Ý˜8 ZÔ%7Ñ8Ô8Ð8Øˆtr   r   )rŽ   r�   r£   r¤   r&   r¶   r­   © r   r   r§   r§   ï   sP   € € € € € ðð ð
ð ð ð ð  ð  ð  ð.
ð 
ð 
ð 
ð 
r   r§   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Úclass_or_instance_methodzŒ
    Hook used in RegisterLookupMixin to return partial functions depending on
    the caller type (instance or class of models.Field).
    c                 ó"   — || _         || _        d S r   )Úclass_methodÚinstance_method)r)   rÂ   rÃ   s      r   r&   z!class_or_instance_method.__init__"  s   € Ø(ˆÔØ.ˆÔÐÐr   c                 ón   — |€t          j        | j        |¦  «        S t          j        | j        |¦  «        S r   )Ú	functoolsÚpartialrÂ   rÃ   )r)   r²   Úowners      r   r¶   z class_or_instance_method.__get__&  s4   € ØÐÝÔ$ TÔ%6¸Ñ>Ô>Ð>ÝÔ  Ô!5°xÑ@Ô@Ð@r   N)rŽ   r�   r£   r¤   r&   r¶   r¾   r   r   rÀ   rÀ     sA   € € € € € ðð ð
/ð /ð /ðAð Að Að Að Ar   rÀ   c                   ó  — e Zd Zd„ Zej        d„ ¦   «         Zd„ Z eee¦  «        Z	 e
e¦  «        Zd„ Zd„ Zed„ ¦   «         Ze
d„ ¦   «         Zdd	„Zdd
„Z eee¦  «        Z e
e¦  «        Zdd„Zdd„Z eee¦  «        Z e
e¦  «        ZdS )ÚRegisterLookupMixinc                 óR   — |                       ¦   «                              |d ¦  «        S r   )Úget_lookupsÚget)r)   Úlookup_names     r   Ú_get_lookupzRegisterLookupMixin._get_lookup-  s$   € Ø×ÒÑ!Ô!×%Ò% k°4Ñ8Ô8Ð8r   c                 óh   — d„ t          j        | ¦  «        D ¦   «         }|                      |¦  «        S )Nc                 óD   — g | ]}|j                              d i ¦  «        ‘ŒS )Úclass_lookups)r«   rÌ   )rŸ   Úparents     r   ú
<listcomp>z9RegisterLookupMixin.get_class_lookups.<locals>.<listcomp>2  s7   € ð 
ð 
ð 
Ø9?ˆFŒO×Ò °Ñ4Ô4ð
ð 
ð 
r   )ÚinspectÚgetmroÚmerge_dicts)r   rÑ   s     r   Úget_class_lookupsz%RegisterLookupMixin.get_class_lookups0  s?   € ð
ð 
ÝCJÄ>ÐRUÑCVÔCVð
ñ 
ô 
ˆð �Š˜}Ñ-Ô-Ð-r   c                 ó`   — |                       ¦   «         }t          | dd ¦  «        x}ri |¥|¥S |S ©NÚinstance_lookups)r×   r/   )r)   rÑ   rÚ   s      r   Úget_instance_lookupsz(RegisterLookupMixin.get_instance_lookups7  sE   € Ø×.Ò.Ñ0Ô0ˆÝ& tÐ-?ÀÑFÔFÐFÐð 	9Ø8�mÐ8Ð'7Ð8Ð8ØÐr   c                 ó¼   — ddl m} |                      |¦  «        }|€*t          | d¦  «        r| j                             |¦  «        S |�t          ||¦  «        sd S |S )Nr   )ÚLookuprs   )Údjango.db.models.lookupsrÝ   rÎ   rj   rs   rY   Ú
issubclass)r)   rÍ   rÝ   Úfounds       r   rY   zRegisterLookupMixin.get_lookup@  sp   € Ø3Ð3Ð3Ð3Ð3Ð3à× Ò  Ñ-Ô-ˆØˆ=�W T¨>Ñ:Ô:ˆ=ØÔ$×/Ò/°Ñ<Ô<Ð<ØÐ¥Z°°vÑ%>Ô%>ÐØ�4Øˆr   c                 ó¼   — ddl m} |                      |¦  «        }|€*t          | d¦  «        r| j                             |¦  «        S |�t          ||¦  «        sd S |S )Nr   )Ú	Transformrs   )rÞ   râ   rÎ   rj   rs   rZ   rß   )r)   rÍ   râ   rà   s       r   rZ   z!RegisterLookupMixin.get_transformJ  sp   € Ø6Ð6Ð6Ð6Ð6Ð6à× Ò  Ñ-Ô-ˆØˆ=�W T¨>Ñ:Ô:ˆ=ØÔ$×2Ò2°;Ñ?Ô?Ð?ØÐ¥Z°°yÑ%AÔ%AÐØ�4Øˆr   c                 óX   — i }t          | ¦  «        D ]}|                     |¦  «         Œ|S )z«
        Merge dicts in reverse to preference the order of the original list. e.g.,
        merge_dicts([a, b]) will preference the keys in 'a' over those in 'b'.
        )ÚreversedÚupdate)ÚdictsÚmergedÚds      r   rÖ   zRegisterLookupMixin.merge_dictsT  s8   € ð ˆÝ˜%‘”ð 	ð 	ˆAØ�MŠM˜!ÑÔÐÐØˆr   c                 ó\   — t          | ¦  «        D ]}|j                             ¦   «          Œd S r   )r   r×   Úcache_clearr   s     r   Ú_clear_cached_class_lookupsz/RegisterLookupMixin._clear_cached_class_lookups_  s9   € å" 3™œð 	5ð 	5ˆHØÔ&×2Ò2Ñ4Ô4Ð4Ð4ð	5ð 	5r   Nc                 ót   — |€|j         }d| j        vri | _        || j        |<   |                      ¦   «          |S )NrÑ   )rÍ   r«   rÑ   rë   ©r   rc   rÍ   s      r   Úregister_class_lookupz)RegisterLookupMixin.register_class_lookupd  sI   € ØÐØ Ô,ˆKØ #¤,Ð.Ð.Ø "ˆCÔØ)/ˆÔ˜+Ñ&Ø×'Ò'Ñ)Ô)Ð)Øˆr   c                 óL   — |€|j         }d| j        vri | _        || j        |<   |S rÙ   )rÍ   r«   rÚ   ©r)   rc   rÍ   s      r   Úregister_instance_lookupz,RegisterLookupMixin.register_instance_lookupm  s7   € ØÐØ Ô,ˆKØ T¤]Ð2Ð2Ø$&ˆDÔ!Ø-3ˆÔ˜kÑ*Øˆr   c                 óP   — |€|j         }| j        |= |                      ¦   «          dS )zn
        Remove given lookup from cls lookups. For use in tests only as it's
        not thread-safe.
        N)rÍ   rÑ   rë   rí   s      r   Ú_unregister_class_lookupz,RegisterLookupMixin._unregister_class_lookupz  s5   € ð
 ÐØ Ô,ˆKØÔ˜kÐ*Ø×'Ò'Ñ)Ô)Ð)Ð)Ð)r   c                 ó(   — |€|j         }| j        |= dS )zs
        Remove given lookup from instance lookups. For use in tests only as
        it's not thread-safe.
        N)rÍ   rÚ   rð   s      r   Ú_unregister_instance_lookupz/RegisterLookupMixin._unregister_instance_lookup„  s#   € ð
 ÐØ Ô,ˆKØÔ! +Ð.Ð.Ð.r   r   )rŽ   r�   r£   rÎ   rÅ   Úcacher×   rÛ   rÀ   rË   ÚclassmethodrY   rZ   ÚstaticmethodrÖ   rë   rî   rñ   Úregister_lookupró   rõ   Ú_unregister_lookupr¾   r   r   rÉ   rÉ   ,  sq  € € € € € ð9ð 9ð 9ð „_ð.ð .ñ „_ð.ðð ð ð +Ð*Ð+<Ð>RÑSÔS€KØ#˜Ð$5Ñ6Ô6Ððð ð ðð ð ð ðð ñ „\ðð ð5ð 5ñ „[ð5ðð ð ð ðð ð ð ð /Ð.ØÐ7ñô €Oð (˜KÐ(=Ñ>Ô>Ðð*ð *ð *ð *ð/ð /ð /ð /ð 2Ð1Ø Ð"=ñô Ðð  +˜{Ð+CÑDÔDÐÐÐr   rÉ   c                 óÒ   — | j         sdS t          | j         dd¦  «        rdS |s| j         S | j        |vrdS |r.| |vr*t	          d| j        j        j        › d| j        › d�¦  «        ‚dS )aØ  
    Return whether `field` should be used to descend deeper for
    `select_related()` purposes.

    Arguments:
     * `field` - the field to be checked. Can be either a `Field` or
       `ForeignObjectRel` instance.
     * `restricted` - a boolean field, indicating if the field list has been
       manually restricted using a select_related() clause.
     * `requested` - the select_related() dictionary.
     * `select_mask` - the dictionary of selected fields.
    FÚparent_linkzField rŒ   zM cannot be both deferred and traversed using select_related at the same time.T)Úremote_fieldr/   Únullr„   r   rº   r¸   Úobject_name)rd   Ú
restrictedÚ	requestedÚselect_masks       r   Úselect_related_descendr  “  s¹   € ð Ôð Øˆuõ ˆuÔ! =°%Ñ8Ô8ð Øˆuð ð Ø”:ˆ~Ðð „z˜Ð"Ð"Øˆuð ð 
�u KÐ/Ð/ÝðL�U”[Ô&Ô2ð Lð L°U´Zð Lð Lð Lñ
ô 
ð 	
ð ˆ4r   c                 óÊ   — t          dt          | ¦  «        dz   ¦  «        D ]A}t          j        | d|…         ¦  «        }|                     |¦  «        r|| |d…         fc S ŒBdS )zÕ
    Check if the lookup_parts contains references to the given annotations set.
    Because the LOOKUP_SEP is contained in the default annotation names, check
    each prefix of the lookup_parts for a match.
    rR   r   N)Nr¾   )ÚrangeÚlenr   ÚjoinrÌ   )Úlookup_partsÚannotationsÚnÚlevel_n_lookups       r   Úrefs_expressionr  ¹  sz   € õ �1•c˜,Ñ'Ô'¨!Ñ+Ñ,Ô,ð 4ð 4ˆÝ#œ¨°a¸°cÔ):Ñ;Ô;ˆØ�?Š?˜>Ñ*Ô*ð 	4Ø! <°°°Ô#3Ð3Ð3Ð3Ð3ð	4àˆ8r   c                 óp   ‡ — ˆ fd„} ||¦  «        p%t          |dd¦  «        o ||j        j        ¦  «        S )zÞ
    Check that self.model is compatible with target_opts. Compatibility
    is OK if:
      1) model and opts match (where proxy inheritance is removed)
      2) model is parent of opts' model or the other way around
    c                 óf   •— ‰j         j        | j        k    p| j        ‰j         j        v p‰| j        v S r   )r¸   Úconcrete_modelÚall_parents)r¼   rº   s    €r   rŠ   z-check_rel_lookup_compatibility.<locals>.checkÎ  s=   ø€ àŒKÔ&¨$Ô*=Ò=ð )ØÔ" e¤kÔ&=Ð=ð)à˜Ô(Ð(ð	
r   r»   F)r/   rº   r¸   )rº   Útarget_optsrd   rŠ   s   `   r   Úcheck_rel_lookup_compatibilityr  Æ  sX   ø€ ð
ð 
ð 
ð 
ð 
ð  ˆ5�ÑÔð Ý��} eÑ,Ô,ÐI°°°u´{Ô7HÑ1IÔ1Iðr   c                   óL   — e Zd ZdZ e¦   «         dœd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚFilteredRelationz7Specify custom filtering in the ON clause of SQL joins.©Ú	conditionc                ó¨   — |st          d¦  «        ‚|| _        d | _        t          |t          ¦  «        st          d¦  «        ‚|| _        d | _        d S )Nzrelation_name cannot be empty.z*condition argument must be a Q() instance.)Ú
ValueErrorÚrelation_nameÚaliasr2   r   r  Úresolved_condition)r)   r  r  s      r   r&   zFilteredRelation.__init__æ  sa   € Øð 	?ÝÐ=Ñ>Ô>Ð>Ø*ˆÔØˆŒ
Ý˜)¥QÑ'Ô'ð 	KÝÐIÑJÔJÐJð #ˆŒØ"&ˆÔÐÐr   c                 óš   — t          || j        ¦  «        st          S | j        |j        k    o| j        |j        k    o| j        |j        k    S r   )r2   r,   r—   r  r  r  r:   s     r   r˜   zFilteredRelation.__eq__ó  sQ   € Ý˜% ¤Ñ0Ô0ð 	"Ý!Ð!àÔ %Ô"5Ò5ð 2Ø”
˜eœkÒ)ð2à” %¤/Ò1ð	
r   c                 ó˜   — t          | j        | j        ¬¦  «        }| j        |_        | j        x}�|                     ¦   «         |_        |S )Nr  )r  r  r  r  r  r]   )r)   r]   r  s      r   r]   zFilteredRelation.cloneü  sJ   € Ý  Ô!3¸t¼~ÐNÑNÔNˆØ”jˆŒØ"&Ô"9Ð9ÐÐFØ'9×'?Ò'?Ñ'AÔ'AˆEÔ$Øˆr   c                 ót   — |                       ¦   «         }|j        x}r|                     |¦  «        |_        |S r   )r]   r  Úrelabeled_clone)r)   Ú
change_mapr]   r  s       r   r  z FilteredRelation.relabeled_clone  s<   € Ø—
’
‘”ˆØ!&Ô!9Ð9Ðð 	VØ'9×'IÒ'IÈ*Ñ'UÔ'UˆEÔ$Øˆr   c                 ó‚   — |                       ¦   «         }|                     | j        |ddd¬¦  «        d         |_        |S )NTF)Ú	can_reuserE   rF   Úupdate_join_typesr   )r]   Úbuild_filterr  r  )r)   rK   rL   r*   r+   r]   s         r   rP   z#FilteredRelation.resolve_expression	  sN   € Ø—
’
‘”ˆØ#(×#5Ò#5ØŒNØØØØ#ð $6ñ $
ô $
ð ô$ˆÔ ð ˆr   c                 ó6   — |                      | j        ¦  «        S r   )Úcompiler  )r)   r‡   r†   s      r   Úas_sqlzFilteredRelation.as_sql  s   € Ø×Ò Ô 7Ñ8Ô8Ð8r   N)rŽ   r�   r£   r¤   r   r&   r˜   r]   r  rP   r'  r¾   r   r   r  r  ã  s‡   € € € € € ØAÐAà34°1±3´3ð 'ð 'ð 'ð 'ð 'ð
ð 
ð 
ðð ð ðð ð ð	ð 	ð 	ð9ð 9ð 9ð 9ð 9r   r  )%r¤   rÅ   rÔ   ÚloggingÚcollectionsr   Ú
contextlibr   Údjango.core.exceptionsr   Ú	django.dbr   r   r   r	   r
   Údjango.db.models.constantsr   Údjango.utilsr   Údjango.utils.functionalr   Údjango.utils.hashabler   Ú	getLoggerr�   r   r   ÚNoder   r§   rÀ   rÉ   r  r  r  r  r¾   r   r   ú<module>r3     s9  ððð ð Ð Ð Ð Ø €€€Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "Ø "Ð "Ð "Ð "Ð "Ð "à -Ð -Ð -Ð -Ð -Ð -Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø /Ð /Ð /Ð /Ð /Ð /à	ˆÔ	Ð-Ñ	.Ô	.€ð
 ˆ:ØØMñô €ð(ð (ð (ðE
ð E
ð E
ð E
ð E
ˆŒ	ñ E
ô E
ð E
ðP*ð *ð *ð *ð *ñ *ô *ð *ðZAð Að Að Að Añ Aô Að Að dEð dEð dEð dEð dEñ dEô dEð dEðN#ð #ð #ðL
ð 
ð 
ðð ð ð:29ð 29ð 29ð 29ð 29ñ 29ô 29ð 29ð 29ð 29r   