§
    ¤”j È ã                   óP  — d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZ ddlmZmZ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!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,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddgZE eBd¦  «        ZF eBd¦  «        ZGd„ ZHd„ ZId„ ZJd„ ZKd„ ZL edd ¦  «        ZM G d!„ d¦  «        ZN ed"d#¦  «        ZO G d$„ de¦  «        ZPd)d&„ZQ G d'„ d(¦  «        ZRdS )*aW  
Create SQL statements for QuerySets.

The code in here encapsulates all of the SQL construction so that QuerySets
themselves do not have to (and could be backed by things other than SQL
databases). The abstraction barrier only works one way: this module has to know
all about the internals of models in order to get the information it needs.
é    N)ÚCounterÚ
namedtuple)ÚIteratorÚMapping)ÚchainÚcountÚproduct)Úascii_uppercase)ÚFieldDoesNotExistÚ
FieldError)ÚDEFAULT_DB_ALIASÚNotSupportedErrorÚconnections)ÚCount)Ú
LOOKUP_SEP)ÚBaseExpressionÚColÚExistsÚFÚOuterRefÚRefÚResolvedOuterRefÚValue)ÚField)ÚMultiColSource)ÚLookup)ÚQÚcheck_rel_lookup_compatibilityÚrefs_expression)ÚINNERÚLOUTERÚ	ORDER_DIRÚSINGLE)Ú	BaseTableÚEmptyÚJoinÚ	MultiJoin)ÚANDÚORÚ
ExtraWhereÚNothingNodeÚ	WhereNode)Úcached_property)Ú_lazy_re_compile)ÚNodeÚQueryÚRawQueryz['`\"\]\[;\s]|--|/\*|\*/z[\w-]+c                 óœ   — | €t          ¦   «         S t          t          j        d„ |                      ¦   «         D ¦   «         ¦  «        ¦  «        S )Nc              3   óP   K  — | ]!}|j         r|j        |j        fn|j        fV — Œ"d S ©N)ÚconcreteÚnameÚattname©Ú.0Úfs     úi/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/db/models/sql/query.pyú	<genexpr>z,get_field_names_from_opts.<locals>.<genexpr>?   sL   è è € ð 
ð 
ØAB 1¤:Ð<ˆQŒV�Q”YÐÐ°A´F°9ð
ð 
ð 
ð 
ð 
ð 
ó    )Úsetr   Úfrom_iterableÚ
get_fields)Úoptss    r;   Úget_field_names_from_optsrB   ;   sX   € Ø€|Ý‰uŒuˆÝÝÔð 
ð 
ØFJÇoÂoÑFWÔFWð
ñ 
ô 
ñ 	
ô 	
ñô ð r=   c              #   ó.  K  — t          | t          ¦  «        r| j        V — d S t          | d¦  «        r`|                      ¦   «         D ]M}t          |t          ¦  «        r
|j        V — Œ!t          |t
          ¦  «        rt          |¦  «        E d {V —† ŒLd S d S )NÚflatten)Ú
isinstancer   r6   ÚhasattrrD   r   Úget_children_from_q)ÚexprÚchilds     r;   Úget_paths_from_expressionrJ   E   sº   è è € Ý�$�ÑÔð 6ØŒiˆˆˆˆˆÝ	��yÑ	!Ô	!ð 6Ø—\’\‘^”^ð 	6ð 	6ˆEÝ˜%¥Ñ#Ô#ð 6Ø”jÐ Ð Ð Ð Ý˜E¥1Ñ%Ô%ð 6Ý.¨uÑ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5øð6ð 6ð	6ð 	6r=   c              #   óF  K  — | j         D ]–}t          |t          ¦  «        rt          |¦  «        E d {V —† Œ-t          |t          ¦  «        r/|\  }}|V — t          |d¦  «        rt          |¦  «        E d {V —† Œqt          |d¦  «        rt          |¦  «        E d {V —† Œ—d S )NÚresolve_expression)ÚchildrenrE   r/   rG   ÚtuplerF   rJ   )ÚqrI   ÚlhsÚrhss       r;   rG   rG   P   sâ   è è € Ø”ð 	8ð 	8ˆÝ�e�TÑ"Ô"ð 	8Ý*¨5Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ý˜�uÑ%Ô%ð 	8Ø‰HˆC�ØˆIˆIˆIÝ�sÐ0Ñ1Ô1ð :Ý4°SÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9øÝ�UÐ0Ñ1Ô1ð 	8Ý0°Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7øð	8ð 	8r=   c                 ó:  ‡ ‡— ddl m} t          |t          ¦  «        rt	          ‰ ‰|¦  «        S t          |t
          ¦  «        rs|\  }}|                     ‰ t          z   ¦  «        r|                     ‰ ‰d¦  «        }t          |t          ¦  «        s!t          |d¦  «        rt          ‰ ‰|¦  «        }||fS t          |t          ¦  «        rX|                     ¦   «         }|j                             ‰ t          z   ¦  «        r!|j                             ‰ ‰d¦  «        |_        nwt          ||¦  «        rt          d¦  «        ‚t          |d¦  «        rH|                     ¦   «         }|                     ˆ ˆfd„|                     ¦   «         D ¦   «         ¦  «         |S )Nr   )ÚQuerySeté   rL   z>Passing a QuerySet within a FilteredRelation is not supported.c                 ó2   •— g | ]}t          ‰‰|¦  «        ‘ŒS © ©Úget_child_with_renamed_prefix)r9   Úgrand_childÚprefixÚreplacements     €€r;   ú
<listcomp>z1get_child_with_renamed_prefix.<locals>.<listcomp>y   s5   ø€ ð ð ð àõ .¨f°kÀ;ÑOÔOðð ð r=   )Údjango.db.models.queryrS   rE   r/   Úrename_prefix_from_qrN   Ú
startswithr   Úreplacer   rF   rX   Úcopyr6   Ú
ValueErrorÚset_source_expressionsÚget_source_expressions)rZ   r[   rI   rS   rP   rQ   s   ``    r;   rX   rX   ]   s¾  øø€ Ø/Ð/Ð/Ð/Ð/Ð/å�%�ÑÔð @Ý# F¨K¸Ñ?Ô?Ð?Ý�%�ÑÔð Ø‰ˆˆSØ�>Š>˜&¥:Ñ-Ñ.Ô.ð 	6Ø—+’+˜f k°1Ñ5Ô5ˆCÝ˜#�qÑ!Ô!ð 	J¥g¨cÐ3GÑ&HÔ&Hð 	JÝ/°¸ÀSÑIÔIˆCØ�Cˆxˆå�%�ÑÔð 
Ø—
’
‘”ˆØŒ:× Ò  ­*Ñ!4Ñ5Ô5ð 	DØœ×+Ò+¨F°KÀÑCÔCˆEŒJøÝ	�E˜8Ñ	$Ô	$ð 
õ
 ØLñ
ô 
ð 	
õ 
�Ð,Ñ	-Ô	-ð 
Ø—
’
‘”ˆØ×$Ò$ðð ð ð ð à#(×#?Ò#?Ñ#AÔ#Aðñ ô ñ	
ô 	
ð 	
ð €Lr=   c                 ój   ‡ ‡— t          j        ˆ ˆfd„|j        D ¦   «         |j        |j        ¦  «        S )Nc                 ó2   •— g | ]}t          ‰‰|¦  «        ‘ŒS rV   rW   )r9   ÚcrZ   r[   s     €€r;   r\   z(rename_prefix_from_q.<locals>.<listcomp>ƒ   s&   ø€ ÐSÐSÐSÀ1Õ	& v¨{¸AÑ	>Ô	>ÐSÐSÐSr=   )r   ÚcreaterM   Ú	connectorÚnegated)rZ   r[   rO   s   `` r;   r^   r^   �   s>   øø€ ÝŒ8ØSÐSÐSÐSÐSÈÌ
ÐSÑSÔSØ	ŒØ	Œ	ñô ð r=   ÚJoinInfo)Úfinal_fieldÚtargetsrA   ÚjoinsÚpathÚtransform_functionc                   óZ   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	e
d	„ ¦   «         Zd
„ Zd„ ZdS )r1   zA single raw SQL query.rV   c                 óx   — || _         || _        || _        d | _        d\  | _        | _        i | _        i | _        d S )N©r   N)ÚparamsÚsqlÚusingÚcursorÚlow_markÚ	high_markÚextra_selectÚannotation_select)Úselfru   rv   rt   s       r;   Ú__init__zRawQuery.__init__’   sD   € ØˆŒØˆŒØˆŒ
ØˆŒð )0Ñ%ˆŒ�t”~ØˆÔØ!#ˆÔÐÐr=   c                 ó,   — |                       |¦  «        S r4   ©Úclone©r|   rv   s     r;   r   zRawQuery.chainž   s   € Ø�zŠz˜%Ñ Ô Ð r=   c                 ó:   — t          | j        || j        ¬¦  «        S )N)rt   )r1   ru   rt   r�   s     r;   r€   zRawQuery.clone¡   s   € Ý˜œ %°´Ð<Ñ<Ô<Ð<r=   c                 ó¢   ‡— | j         €|                      ¦   «          t          | j                 j        j        Šˆfd„| j         j        D ¦   «         S )Nc                 ó2   •— g | ]} ‰|d          ¦  «        ‘ŒS ©r   rV   )r9   Úcolumn_metaÚ	converters     €r;   r\   z(RawQuery.get_columns.<locals>.<listcomp>¨   s'   ø€ ÐUÐUÐU¨k�	�	˜+ aœ.Ñ)Ô)ÐUÐUÐUr=   )rw   Ú_execute_queryr   rv   ÚintrospectionÚidentifier_converterÚdescription)r|   r‡   s    @r;   Úget_columnszRawQuery.get_columns¤   sN   ø€ ØŒ;ÐØ×ÒÑ!Ô!Ð!Ý ¤
Ô+Ô9ÔNˆ	ØUÐUÐUÐU¸T¼[Ô=TÐUÑUÔUÐUr=   c                 ó¸   — |                       ¦   «          t          | j                 j        j        st          | j        ¦  «        }n| j        }t          |¦  «        S r4   )rˆ   r   rv   ÚfeaturesÚcan_use_chunked_readsÚlistrw   Úiter)r|   Úresults     r;   Ú__iter__zRawQuery.__iter__ª   sQ   € ð 	×ÒÑÔÐÝ˜4œ:Ô&Ô/ÔEð 	!õ ˜$œ+Ñ&Ô&ˆFˆFà”[ˆFÝ�F‰|Œ|Ðr=   c                 ó(   — d| j         j        ›d| ›d�S )Nú<z: ú>)Ú	__class__Ú__name__©r|   s    r;   Ú__repr__zRawQuery.__repr__¶   s   € € Ø!œ^Ô4Ð4Ð4°d°d°dÐ;Ð;r=   c                 ód   — | j         €d S t          | j         t          ¦  «        rt          nt          S r4   )rt   rE   r   ÚdictrN   r™   s    r;   Úparams_typezRawQuery.params_type¹   s*   € àŒ;ÐØ�4Ý! $¤+­wÑ7Ô7ÐB�tˆt½UÐBr=   c                 ób   — | j         €| j        S | j        |                       | j        ¦  «        z  S r4   )r�   ru   rt   r™   s    r;   Ú__str__zRawQuery.__str__¿   s/   € ØÔÐ#Ø”8ˆOØŒx˜$×*Ò*¨4¬;Ñ7Ô7Ñ7Ð7r=   c                 ó¤  ‡— t           | j                 }| j        }|j        j        Š|t
          u r!t          ˆfd„| j        D ¦   «         ¦  «        }nF|t          u r&ˆfd„| j                             ¦   «         D ¦   «         }n|€d }nt          d|z  ¦  «        ‚| 
                    ¦   «         | _
        | j
                             | j        |¦  «         d S )Nc              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r4   rV   )r9   ÚvalÚadapters     €r;   r<   z*RawQuery._execute_query.<locals>.<genexpr>Ì   s+   øè è € Ð?Ð?¨C˜7˜7 3™<œ<Ð?Ð?Ð?Ð?Ð?Ð?r=   c                 ó.   •— i | ]\  }}| ‰|¦  «        “ŒS rV   rV   )r9   Úkeyr¢   r£   s      €r;   ú
<dictcomp>z+RawQuery._execute_query.<locals>.<dictcomp>Î   s'   ø€ ÐLÐLÐL©H¨C°�c˜7˜7 3™<œ<ÐLÐLÐLr=   zUnexpected params type: %s)r   rv   r�   ÚopsÚadapt_unknown_valuerN   rt   rœ   ÚitemsÚRuntimeErrorrw   Úexecuteru   )r|   Ú
connectionr�   rt   r£   s       @r;   rˆ   zRawQuery._execute_queryÄ   sÜ   ø€ Ý  ¤Ô,ˆ
ð Ô&ˆØ”.Ô4ˆØ�%ÐÐÝÐ?Ð?Ð?Ð?°4´;Ð?Ñ?Ô?Ñ?Ô?ˆFˆFØ�DÐ Ð ØLÐLÐLÐL¸¼×8IÒ8IÑ8KÔ8KÐLÑLÔLˆFˆFØÐ ØˆFˆFåÐ;¸kÑIÑJÔJÐJà ×'Ò'Ñ)Ô)ˆŒØŒ×Ò˜DœH fÑ-Ô-Ð-Ð-Ð-r=   N)rV   )r˜   Ú
__module__Ú__qualname__Ú__doc__r}   r   r€   rŒ   r“   rš   Úpropertyr�   rŸ   rˆ   rV   r=   r;   r1   r1   �   s¸   € € € € € Ø!Ð!ð
$ð 
$ð 
$ð 
$ð!ð !ð !ð=ð =ð =ðVð Vð Vð
ð 
ð 
ð<ð <ð <ð ðCð Cñ „XðCð
8ð 8ð 8ð
.ð .ð .ð .ð .r=   ÚExplainInfo)ÚformatÚoptionsc                   ó²  — e Zd ZdZdZdZ eeg¦  «        ZdZe	Z
eZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd	Z dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ* e¦   «         dfZ+dZ,ded
„Z-e.d„ ¦   «         Z/e0d„ ¦   «         Z1d„ Z2d„ Z3d„ Z4dfd„Z5d„ Z6d„ Z7dgd„Z8d„ Z9d„ Z:d„ Z;d„ Z<d„ Z=ded„Z>d„ Z?dgd„Z@d„ ZAdgd„ZBdgd„ZCd„ ZDdhd „ZEd!„ ZFdid#„ZGd$„ ZHd%„ ZId&„ ZJd'„ ZKdgd(„ZLd)„ ZMd*„ ZNdgd+„ZOd,„ ZPd-„ ZQded.„ZRd/„ ZSd0„ ZTdgd1„ZUd2„ ZVdjd3„ZWdjd4„ZXd5„ ZYd6„ ZZd7„ Z[d8„ Z\d9„ Z]	 	 	 	 	 	 	 	 dkd:„Z^d;„ Z_d<„ Z`d=„ Zad>„ Zb	 	 	 	 	 	 	 dld?„Zcd@„ ZddmdA„Ze	 	 dndB„ZfdC„ ZgehdodD„¦   «         ZiehdE„ ¦   «         ZjdpdF„ZkdG„ ZldH„ ZmdI„ ZndqdJ„ZodK„ Zpe.dL„ ¦   «         ZqdM„ ZrdN„ ZsdO„ ZtdP„ ZudQ„ ZvdR„ ZwdS„ ZxdedT„ZydU„ ZzdodV„Z{dedW„Z|dX„ Z}dY„ Z~dZ„ Zd[„ Z€d\„ Z�d]„ Z‚d^„ Zƒd_„ Z„d`„ Z…e.da„ ¦   «         Z†e.db„ ¦   «         Z‡dc„ Zˆdd„ Z‰dS )rr0   zA single SQL query.ÚTNÚSQLCompilerTFrV   r   é   c                 óÐ   — || _         i | _        i | _        || _        i | _        i | _        t          ¦   «         | _        t          ¦   «         | _	        i | _
        i | _        i | _        d S r4   )ÚmodelÚalias_refcountÚ	alias_mapÚ
alias_colsÚexternal_aliasesÚ	table_mapr>   Úused_aliasesr,   ÚwhereÚannotationsÚextraÚ_filtered_relations)r|   r¹   r¼   s      r;   r}   zQuery.__init__$  sh   € ØˆŒ
Ø ˆÔð ˆŒà$ˆŒð
 !#ˆÔØˆŒÝ™EœEˆÔå‘[”[ˆŒ
àˆÔð ˆŒ
à#%ˆÔ Ð Ð r=   c                 ó   — t          | j        ¦  «        dk    r%| j        d         }t          |dd ¦  «        p|j        S t          | j        ¦  «        dk    r8t          t          | j                             ¦   «         ¦  «        ¦  «        j        S d S )NrT   r   Útarget)	ÚlenÚselectÚgetattrÚfieldr{   Únextr‘   ÚvaluesÚoutput_field)r|   rÇ   s     r;   rÌ   zQuery.output_field@  s�   € åˆtŒ{ÑÔ˜qÒ Ð Ø”[ ”^ˆFÝ˜6 8¨TÑ2Ô2ÐB°f´lÐBÝ�Ô'Ñ(Ô(¨AÒ-Ð-Ý�˜TÔ3×:Ò:Ñ<Ô<Ñ=Ô=Ñ>Ô>ÔKÐKð .Ð-r=   c                 ó    — | j         D ]}|c S d S r4   )r»   ©r|   Úaliass     r;   Ú
base_tablezQuery.base_tableH  s&   € à”^ð 	ð 	ˆEØˆLˆLˆLð	ð 	r=   c                 ó:   — |                       ¦   «         \  }}||z  S )a(  
        Return the query as a string of SQL with the parameter values
        substituted in (use sql_with_params() to see the unsubstituted string).

        Parameter values won't necessarily be quoted correctly, since that is
        done by the database interface at execution time.
        )Úsql_with_params)r|   ru   rt   s      r;   rŸ   zQuery.__str__M  s#   € ð ×*Ò*Ñ,Ô,‰ˆˆVØ�V‰|Ðr=   c                 óZ   — |                       t          ¦  «                             ¦   «         S )zw
        Return the query as an SQL string and the parameters that will be
        substituted into the query.
        )Úget_compilerr   Úas_sqlr™   s    r;   rÒ   zQuery.sql_with_paramsX  s%   € ð
 × Ò Õ!1Ñ2Ô2×9Ò9Ñ;Ô;Ð;r=   c                 óR   — |                       ¦   «         }||t          | ¦  «        <   |S )z4Limit the amount of work when a Query is deepcopied.)r€   Úid)r|   Úmemor’   s      r;   Ú__deepcopy__zQuery.__deepcopy___  s#   € à—’‘”ˆØˆ�R�‰XŒX‰Øˆr=   c                 óœ   — |€|€t          d¦  «        ‚|rt          |         } |j                             | j        ¦  «        | |||¦  «        S )NzNeed either using or connection)rb   r   r§   Úcompiler)r|   rv   r¬   Úelide_emptys       r;   rÔ   zQuery.get_compilere  s\   € Øˆ=˜ZÐ/ÝÐ>Ñ?Ô?Ð?Øð 	,Ý$ UÔ+ˆJØ5ˆzŒ~×&Ò& t¤}Ñ5Ô5Ø�*˜e [ñ
ô 
ð 	
r=   c                 ó,   — | j         r| j         j        S dS )z¸
        Return the Options instance (the model._meta) from which to start
        processing. Normally, this is self.model._meta, but it can be changed
        by subclasses.
        N)r¹   Ú_metar™   s    r;   Úget_metazQuery.get_metan  s#   € ð Œ:ð 	$Ø”:Ô#Ð#ð	$ð 	$r=   c                 ó¤  — t          ¦   «         }| j        |_        | j                             ¦   «         |_        | j                             ¦   «         |_        | j                             ¦   «         |_        | j                             ¦   «         |_        | j                             ¦   «         |_        | j         	                    ¦   «         |_        | j
                             ¦   «         |_
        | j        �| j                             ¦   «         |_        | j        r#t          d„ | j        D ¦   «         ¦  «        |_        d|_        | j                             ¦   «         |_        | j        �| j                             ¦   «         |_        | j        �| j                             ¦   «         |_        | j        durt          j        |j        ¦  «        |_        d| j        v r| j                             ¦   «         |_        | j                             ¦   «         |_        | j                             ¦   «         |_        |j                             dd¦  «         |S )zf
        Return a copy of the current Query. A lightweight alternative to
        deepcopy().
        Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS rV   r   )r9   Úquerys     r;   r\   zQuery.clone.<locals>.<listcomp>‹  s    € ÐBÐBÐB 5�—’‘”ÐBÐBÐBr=   FÚsubq_aliasesrÐ   )r%   r—   Ú__dict__ra   rº   r»   r½   r¾   rÀ   r€   rÁ   Úannotation_select_maskÚcombined_queriesrN   Ú_annotation_select_cacherÂ   Úextra_select_maskÚ_extra_select_cacheÚselect_relatedÚdeepcopyrã   r¿   rÃ   Úpop)r|   Úobjs     r;   r€   zQuery.clonew  sð  € õ
 ‰gŒgˆØœˆŒà”}×)Ò)Ñ+Ô+ˆŒà!Ô0×5Ò5Ñ7Ô7ˆÔØœ×+Ò+Ñ-Ô-ˆŒØ#Ô4×9Ò9Ñ;Ô;ˆÔØœ×+Ò+Ñ-Ô-ˆŒØ”J×$Ò$Ñ&Ô&ˆŒ	ØÔ*×/Ò/Ñ1Ô1ˆŒØÔ&Ð2Ø)-Ô)D×)IÒ)IÑ)KÔ)KˆCÔ&ØÔ ð 	Ý#(ØBÐB¨DÔ,AÐBÑBÔBñ$ô $ˆCÔ ð (,ˆÔ$Ø”J—O’OÑ%Ô%ˆŒ	ØÔ!Ð-Ø$(Ô$:×$?Ò$?Ñ$AÔ$AˆCÔ!ØÔ#Ð/Ø&*Ô&>×&CÒ&CÑ&EÔ&EˆCÔ#ØÔ eÐ+Ð+õ "&¤¨sÔ/AÑ!BÔ!BˆCÔØ˜Tœ]Ð*Ð*Ø#Ô0×5Ò5Ñ7Ô7ˆCÔØÔ,×1Ò1Ñ3Ô3ˆÔØ"&Ô":×"?Ò"?Ñ"AÔ"AˆÔàŒ×Ò˜ tÑ,Ô,Ð,Øˆ
r=   c                 óà   — |                       ¦   «         }|r|j        |k    r||_        |j        st          ¦   «         |_        d|_        t          |d¦  «        r|                     ¦   «          |S )z¤
        Return a copy of the current Query that's ready for another operation.
        The klass argument changes the type of the Query, e.g. UpdateQuery.
        FÚ_setup_query)r€   r—   Úfilter_is_stickyr>   r¿   rF   rï   )r|   Úklassrí   s      r;   r   zQuery.chain¤  st   € ð
 �jŠj‰lŒlˆØð 	"�S”] eÒ+Ð+Ø!ˆCŒMØÔ#ð 	%Ý"™uœuˆCÔØ$ˆÔÝ�3˜Ñ'Ô'ð 	Ø×ÒÑÔÐØˆ
r=   c                 óX   — |                       ¦   «         }|                     |¦  «         |S r4   )r€   Úchange_aliases)r|   Ú
change_mapr€   s      r;   Úrelabeled_clonezQuery.relabeled_clone³  s(   € Ø—
’
‘”ˆØ×Ò˜ZÑ(Ô(Ð(Øˆr=   c                 ó@   — | j         sd }|                     ||¦  «        S r4   ©r¼   Úget_col)r|   rÅ   rÉ   rÏ   s       r;   Ú_get_colzQuery._get_col¸  s%   € ØŒð 	ØˆEØ�~Š~˜e UÑ+Ô+Ð+r=   c                 ó*  ‡ ‡— |si S d}d}i Š‰ j         }|                     ¦   «         D ]ô\  }}‰                      |¦  «         |                     ‰ ddd¬¦  «        }|j        st          d|z  ¦  «        ‚‰                      |g¦  «         |t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        z  }|t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        z  }| 	                    ‰¦  «        }|‰ j
        |<   |‰t          ||¦  «        <   Œõˆ fd„|D ¦   «         }	‰                      |¦  «         ‰ j                             ¦   «         \  }
}}t          d	„ ‰ j
                             ¦   «         D ¦   «         ¦  «        p|}t!          ‰ j        t$          ¦  «        s‰ j        s|s|s|s|s‰ j        s‰ j        �r®d
dlm} ‰                      ¦   «         }d|_         |‰ j        |¦  «        }d|_        d|_        |                     ‰ j        ¦  «         |                     d¬¦  «         |j        �s"|j        r>|r<‰ j        j         j!         "                    | #                    ¦   «         ¦  «        f|_        d|_        |sÔtI          ¦   «         }t!          ‰ j        t$          ¦  «        r!‰ j        D ]}||                     ¦   «         z  }Œ|	                     ¦   «         D ]}||                     ¦   «         z  }Œ‰ j                             ¦   «         D ].\  }}| %                    ¦   «         r| &                    |¦  «         Œ/|                     |¦  «         i }|	                     ¦   «         D ]§\  }}i Š‰  '                    |gd¬¦  «        D ]j}| (                    |¦  «        x}sLtS          |¦  «        dz   }d|› �}t          ||¦  «        }|||<   ||j
        |<   |                     |g¦  «         |‰|<   Œk| 	                    ‰¦  «        |j
        |<   Œ¨|j*        dk    rJ|j        sC|j         s<‰ j        j         j!         "                    | #                    ¦   «         ¦  «        f|_*        nƒ‰ }d‰ _*        d‰ _        i ‰ _+        ‰ j
        rId„ ‰ j
                             ¦   «         D ¦   «         Šˆfd„|	                     ¦   «         D ¦   «         ‰ _
        n|	‰ _
        ‰                      |	¦  «         d„ |j                             ¦   «         D ¦   «         }t          d„ |D ¦   «         ¦  «         }|                     d¬¦  «         | ,                    ¦   «          d|_        d|_        | -                    ||¬¦  «        }| .                    t^          ¦  «        }|€|}nP| 0                    |j                             ¦   «         ¦  «        }tc          | 2                    |f|¦  «        ¦  «        }tg          ti          |j        |¦  «        ¦  «        S )zU
        Return the dictionary with the values of the existing aggregations.
        FTN©Úallow_joinsÚreuseÚ	summarizez!%s is not an aggregate expressionc              3   óP   •K  — | ] }t          ‰j        |         d d¦  «        V — Œ!dS )Úcontains_subqueryFN©rÈ   rÁ   ©r9   Úrefr|   s     €r;   r<   z(Query.get_aggregation.<locals>.<genexpr>Ó  sL   øè è € ð !ð !àõ ˜Ô(¨Ô-Ð/BÀEÑJÔJð!ð !ð !ð !ð !ð !r=   c              3   óP   •K  — | ] }t          ‰j        |         d d¦  «        V — Œ!dS )Úcontains_over_clauseTNr  r  s     €r;   r<   z(Query.get_aggregation.<locals>.<genexpr>×  sL   øè è € ð ð àõ ˜Ô(¨Ô-Ð/EÀtÑLÔLðð ð ð ð ð r=   c                 óF   •— i | ]}|‰j                              |¦  «        “ŒS rV   )rÁ   rì   )r9   rÏ   r|   s     €r;   r¦   z)Query.get_aggregation.<locals>.<dictcomp>à  s,   ø€ ÐVÐVÐV¸U�e˜TÔ-×1Ò1°%Ñ8Ô8ÐVÐVÐVr=   c              3   ó8   K  — | ]}t          |d d¦  «        V — ŒdS )Úcontains_aggregateTN)rÈ   )r9   Ú
annotations     r;   r<   z(Query.get_aggregation.<locals>.<genexpr>æ  sC   è è € ð ð àõ ˜
Ð$8¸$Ñ?Ô?ðð ð ð ð ð r=   r   )ÚAggregateQuery©Úforce)Úresolve_refsrT   Ú__colrV   c                 ó6   — i | ]\  }}t          ||¦  «        |“ŒS rV   )r   )r9   rÏ   r	  s      r;   r¦   z)Query.get_aggregation.<locals>.<dictcomp>Q  s8   € ð  ð  ð  á)˜˜zõ ˜˜zÑ*Ô*¨Jð ð  ð  r=   c                 óB   •— i | ]\  }}||                      ‰¦  «        “ŒS rV   )Úreplace_expressions)r9   rÏ   Ú	aggregateÚreplacementss      €r;   r¦   z)Query.get_aggregation.<locals>.<dictcomp>U  s=   ø€ ð $ð $ð $á(˜˜yð ˜9×8Ò8¸ÑFÔFð$ð $ð $r=   c                 ó   — g | ]	}|j         ‘Œ
S rV   )Úempty_result_set_value)r9   Ú
expressions     r;   r\   z)Query.get_aggregation.<locals>.<listcomp>]  s+   € ð 
ð 
ð 
àð Ô-ð
ð 
ð 
r=   c              3   ó(   K  — | ]}|t           u V — Œd S r4   )ÚNotImplemented)r9   r’   s     r;   r<   z(Query.get_aggregation.<locals>.<genexpr>a  s'   è è € ÐVÐV¸6˜f­Ð6ÐVÐVÐVÐVÐVÐVr=   )rÜ   )5rå   r©   Úcheck_aliasrL   r  Ú	TypeErrorÚappend_annotation_maskÚanyÚget_refsr  rÁ   r   Úset_annotation_maskrÀ   Úsplit_having_qualifyrË   rE   Úgroup_byrN   Ú	is_slicedÚdistinctÚ
combinatorÚdjango.db.models.sql.subqueriesr
  r€   Úsubqueryr¹   Úselect_for_updaterê   r{   Úclear_orderingÚdefault_colsrÞ   Úpkrø   Úget_initial_aliasr>   Úget_group_by_colsÚaddÚ	_gen_colsÚgetrÆ   rÇ   rÂ   Úclear_limitsrÔ   Úexecute_sqlr#   Úget_convertersrÊ   Úapply_convertersrœ   Úzip) r|   rv   Úaggregate_exprsÚrefs_subqueryÚrefs_windowrå   rÏ   Úaggregate_exprr  Ú
aggregatesÚ_ÚhavingÚqualifyÚhas_existing_aggregationr
  Úinner_queryÚouter_queryÚannotation_maskrH   Úannotation_aliasr	  Úcol_refsÚcolÚcol_refÚindexÚ	col_aliasÚempty_set_resultrÜ   rÛ   r’   Ú
convertersr  s    `                              @r;   Úget_aggregationzQuery.get_aggregation½  sS  øø€ ð ð 	ØˆIð ˆØˆØˆØ!%Ô!<ÐØ%4×%:Ò%:Ñ%<Ô%<ð 	<ð 	<Ñ!ˆE�>Ø×Ò˜UÑ#Ô#Ð#Ø&×9Ò9Ø $¨d¸dð :ñ ô ˆIð Ô/ð MÝÐ CÀeÑ KÑLÔLÐLð ×'Ò'¨¨Ñ0Ô0Ð0Ø�Sð !ð !ð !ð !à$×-Ò-Ñ/Ô/ð!ñ !ô !ñ ô ñ ˆMð �3ð ð ð ð à$×-Ò-Ñ/Ô/ðñ ô ñ ô ñ ˆKð "×5Ò5°lÑCÔCˆIØ&/ˆDÔ˜UÑ#Ø2;ˆL�˜U IÑ.Ô.Ñ/Ð/ð WÐVÐVÐVÀoÐVÑVÔVˆ
Ø× Ò Ð!7Ñ8Ô8Ð8ð "œZ×<Ò<Ñ>Ô>Ñˆˆ6�7åð ð à"&Ô"2×"9Ò"9Ñ";Ô";ðñ ô ñ ô ð ð ð 	!õ$ �t”}¥eÑ,Ô,ðe	1àŒ~ðe	1ð (ðe	1ð ð	e	1ð
 ðe	1ð ðe	1ð Œ}ðe	1ð Œñe	1ð GÐFÐFÐFÐFÐFàŸ*š*™,œ,ˆKØ#'ˆKÔ Ø(˜.¨¬°[ÑAÔAˆKØ,1ˆKÔ)Ø).ˆKÔ&Ø×+Ò+¨DÔ,BÑCÔCÐCð ×&Ò&¨UÐ&Ñ3Ô3Ð3ØÔ'ñ Eð Ô+ð Ð0Hð àœ
Ô(Ô+×3Ò3°K×4QÒ4QÑ4SÔ4SÑTÔTð,�KÔ(ð ,1�Ô(Øð Eõ
 '*¡e¤e�OÝ! $¤-µÑ7Ô7ð ?Ø$(¤Mð ?ð ?˜DØ+¨t¯}ª}©¬Ñ>˜O˜OØ%/×%6Ò%6Ñ%8Ô%8ð @ð @˜	Ø'¨9×+=Ò+=Ñ+?Ô+?Ñ?˜˜ð 9=Ô8N×8TÒ8TÑ8VÔ8Vð Bð BÑ4Ð(¨*Ø%×7Ò7Ñ9Ô9ð BØ+×/Ò/Ð0@ÑAÔAÐAøØ×3Ò3°OÑDÔDÐDð ˆHØ$.×$4Ò$4Ñ$6Ô$6ð ð Ñ ��yØ!�ØŸ>š>¨9¨+ÀE˜>ÑJÔJð 0ð 0�CØ'/§|¢|°CÑ'8Ô'8Ð8˜Gð HÝ # H¡¤°Ñ 1˜Ø$3¨E O O˜	Ý"% i°Ñ"5Ô"5˜Ø(/˜ ™Ø=@˜Ô/°	Ñ:Ø#×:Ò:¸I¸;ÑGÔGÐGØ(/�L Ñ%Ð%Ø1:×1NÒ1NØ ñ2ô 2�Ô'¨Ñ.Ð.ð Ô" bÒ(Ð(Ø#Ô0ð )à#Ô:ð )ð ”JÔ$Ô'×/Ò/°×0MÒ0MÑ0OÔ0OÑPÔPð&�Ô"øð ˆKØˆDŒKØ %ˆDÔØˆDŒJØÔð .ð ð  à-1Ô-=×-CÒ-CÑ-EÔ-Eð ñ  ô  �ð$ð $ð $ð $à,6×,<Ò,<Ñ,>Ô,>ð$ñ $ô $�Ô Ð ð
 $.�Ô Ø×$Ò$ ZÑ0Ô0Ð0ð
ð 
à)Ô;×BÒBÑDÔDð
ñ 
ô 
Ðõ ÐVÐVÐEUÐVÑVÔVÑVÔVÐVˆØ×"Ò"¨Ð"Ñ.Ô.Ð.Ø× Ò Ñ"Ô"Ð"Ø(-ˆÔ%Ø%*ˆÔ"Ø×+Ò+¨E¸{Ð+ÑKÔKˆØ×%Ò%¥fÑ-Ô-ˆØˆ>Ø%ˆFˆFà!×0Ò0°Ô1N×1UÒ1UÑ1WÔ1WÑXÔXˆJÝ˜(×3Ò3°V°I¸zÑJÔJÑKÔKˆFå•C˜Ô5°vÑ>Ô>Ñ?Ô?Ð?r=   c                 ó€   — |                       ¦   «         }|                     |dt          d¦  «        i¦  «        d         S )zO
        Perform a COUNT() query using the current filter constraints.
        Ú__countÚ*)r€   rH  r   )r|   rv   rí   s      r;   Ú	get_countzQuery.get_countp  s7   € ð �jŠj‰lŒlˆØ×"Ò" 5¨9µe¸C±j´jÐ*AÑBÔBÀ9ÔMÐMr=   c                 ó   — | j         S r4   )rÀ   r™   s    r;   Úhas_filterszQuery.has_filtersw  s
   € ØŒzÐr=   c                 ó  — |                       ¦   «         }|j        r|j        sb|j        du rE|                     d„ | j        j        j        D ¦   «         d¦  «         |                     d¬¦  «         | 	                    ¦   «          |j
        r.|j        dk    r#t          d„ |j
        D ¦   «         ¦  «        |_
        |                     d¬¦  «         |r|                     d¬	¦  «         |                     t!          d¦  «        d
¦  «         |S )NTc              3   ó$   K  — | ]}|j         V — Œd S r4   ©r7   r8   s     r;   r<   zQuery.exists.<locals>.<genexpr>  s$   è è € ÐIÐI 1�Q”YÐIÐIÐIÐIÐIÐIr=   F©Úallow_aliasesÚunionc              3   óB   K  — | ]}|                      d ¬¦  «        V — ŒdS )F)ÚlimitN)Úexists)r9   Úcombined_querys     r;   r<   zQuery.exists.<locals>.<genexpr>†  sG   è è € ð 'ð 'à"ð ×%Ò%¨EÐ%Ñ2Ô2ð'ð 'ð 'ð 'ð 'ð 'r=   r  rT   )ÚhighÚa)r€   r"  r!  r   Ú
add_fieldsr¹   rÞ   Úconcrete_fieldsÚset_group_byÚclear_select_clauseræ   r#  rN   r'  Ú
set_limitsÚadd_annotationr   )r|   rV  rO   s      r;   rW  zQuery.existsz  s&  € Ø�JŠJ‰LŒLˆØ”
ð 	$˜qœ{ð 	$ØŒz˜TÐ!Ð!Ø—’ØIÐI¨¬
Ô(8Ô(HÐIÑIÔIÈ5ñô ð ð
 —’¨U�Ñ3Ô3Ð3Ø×!Ò!Ñ#Ô#Ð#ØÔð 	 !¤,°'Ò"9Ð"9Ý!&ð 'ð 'à&'Ô&8ð'ñ 'ô 'ñ "ô "ˆAÔð 	
×Ò˜tÐÑ$Ô$Ð$Øð 	!Ø�LŠL˜aˆLÑ Ô Ð Ø	×Ò�˜q™œ 3Ñ'Ô'Ð'Øˆr=   c                 ó€   — |                       |¦  «        }|                     |¬¦  «        }|                     ¦   «         S )N©rv   )rW  rÔ   Úhas_results)r|   rv   rO   rÛ   s       r;   rc  zQuery.has_results�  s8   € Ø�KŠK˜ÑÔˆØ—>’>¨�>Ñ.Ô.ˆØ×#Ò#Ñ%Ô%Ð%r=   c                 ó:  — |                       ¦   «         }|D ]3}t                               |¦  «        rd|v rt          d|›d�¦  «        ‚Œ4t	          ||¦  «        |_        |                     |¬¦  «        }d                     |                     ¦   «         ¦  «        S )Nz--zInvalid option name: ú.rb  ú
)	r€   ÚEXPLAIN_OPTIONS_PATTERNÚ	fullmatchrb   r±   Úexplain_inforÔ   ÚjoinÚexplain_query)r|   rv   r²   r³   rO   Úoption_namerÛ   s          r;   ÚexplainzQuery.explain•  s¥   € Ø�JŠJ‰LŒLˆØ"ð 	Kð 	KˆKå+×5Ò5°kÑBÔBðKà˜;Ð&Ð&å Ð!I¸Ð!IÐ!IÐ!IÑJÔJÐJð 'õ % V¨WÑ5Ô5ˆŒØ—>’>¨�>Ñ.Ô.ˆØ�yŠy˜×/Ò/Ñ1Ô1Ñ2Ô2Ð2r=   c                 ó  ‡ ‡— ‰ j         |j         k    rt          d¦  «        ‚‰ j        rt          d¦  «        ‚‰ j        |j        k    rt          d¦  «        ‚‰ j        |j        k    rt          d¦  «        ‚‰                      ¦   «         }|                     ‰ |h¬¦  «         i Š|t          k    }|rt          ¦   «         nt          ‰ j	        ¦  «        }t          |dd¦  «        }|                     ˆ fd„‰ j	        D ¦   «         ¦  «         t          ¦   «         }t          |j	        ¦  «        d	d
…         }|D ]¢}	|j	        |	         }
|
                     ‰¦  «        }
‰                      |
|¬¦  «        }|
j        t           k    r|                     |¦  «         |                     |¦  «         |	|k    r|‰|	<   |j        |	         s‰                      |¦  «         Œ£|                     |¦  «         |                     ‰ ¦  «         ‰ xj        |j        z  c_        |j                             ¦   «         }|                     ‰¦  «         ‰ j                             ||¦  «         |j        r'‰                      ˆfd„|j        D ¦   «         ¦  «         nd‰ _        |t8          k    r‰ j        r|j        rt=          d¦  «        ‚‰ j                             |j        ¦  «         t          ¦   «         }‰ j         �|                     ‰ j         ¦  «         |j         �|                     |j         ¦  «         |r‰  !                    |¦  «         ‰ xj"        |j"        z  c_"        |j#        p‰ j#        ‰ _#        |j$        p‰ j$        ‰ _$        d
S )aN  
        Merge the 'rhs' query into the current one (with any 'rhs' effects
        being applied *after* (that is, "to the right of") anything in the
        current query. 'rhs' is not modified during a call to this function.

        The 'connector' parameter describes how to connect filters from the
        'rhs' query.
        z4Cannot combine queries on two different base models.z3Cannot combine queries once a slice has been taken.z6Cannot combine a unique query with a non-unique query.z6Cannot combine queries with different distinct fields.)Úexcludeé   Fc              3   óR   •K  — | ]!}‰j         |         j        t          k    ¯|V — Œ"d S r4   ©r»   Ú	join_typer    )r9   Újr|   s     €r;   r<   z Query.combine.<locals>.<genexpr>Î  s@   øè è € ð 
ð 
Ø¨¬¸Ô):Ô)DÍÒ)MÐ)MˆAÐ)MÐ)MÐ)MÐ)Mð
ð 
r=   rT   N©rý   c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rV   ©rõ   ©r9   rB  rô   s     €r;   r\   z!Query.combine.<locals>.<listcomp>ø  s'   ø€ ÐSÐSÐSÀ˜S×0Ò0°Ñ<Ô<ÐSÐSÐSr=   rV   zSWhen merging querysets using 'or', you cannot have extra(select=...) on both sides.)%r¹   r  r!  r"  Údistinct_fieldsr*  Úbump_prefixr(   r>   r»   ÚJoinPromoterÚ	add_votesr�   rõ   rj  rs  r    r,  Údiscardrº   Úunref_aliasÚupdate_join_typesrã   rÀ   r€   Úrelabel_aliasesrÇ   Ú
set_selectr)   rÂ   rb   Úupdaterè   Úset_extra_maskÚextra_tablesÚorder_byÚextra_order_by)r|   rQ   ri   Úinitial_aliasÚconjunctionrý   ÚjoinpromoterÚ	rhs_votesÚ
rhs_tablesrÏ   rj  Ú	new_aliasÚwrè   rô   s   `             @r;   ÚcombinezQuery.combine¡  sµ  øø€ ð Œ:˜œÒ"Ð"ÝÐRÑSÔSÐSØŒ>ð 	SÝÐQÑRÔRÐRØŒ=˜CœLÒ(Ð(ÝÐTÑUÔUÐUØÔ 3Ô#6Ò6Ð6ÝÐTÑUÔUÐUð ×.Ò.Ñ0Ô0ˆØ�Š˜ } oˆÑ6Ô6Ð6ð ˆ
Ø¥3Ò&ˆð %Ð=•‘”�­#¨d¬nÑ*=Ô*=ˆÝ# I¨q°%Ñ8Ô8ˆØ×Òð 
ð 
ð 
ð 
Ø”~ð
ñ 
ô 
ñ 	
ô 	
ð 	
õ ‘E”Eˆ	õ ˜#œ-Ñ(Ô(¨¨¨Ô,ˆ
Øð 	,ð 	,ˆEØ”= Ô'ˆDð ×'Ò'¨
Ñ3Ô3ˆDØŸ	š	 $¨e˜	Ñ4Ô4ˆIØŒ~¥Ò&Ð&Ø—’˜iÑ(Ô(Ð(ð �MŠM˜)Ñ$Ô$Ð$Ø˜	Ò!Ð!Ø$-�
˜5Ñ!ØÔ% eÔ,ð ,ð
 × Ò  Ñ+Ô+Ð+øØ×Ò˜yÑ)Ô)Ð)Ø×&Ò& tÑ,Ô,Ð,ð 	ÐÔ˜SÔ-Ñ-ÐÔð ŒI�OŠOÑÔˆØ	×Ò˜*Ñ%Ô%Ð%ØŒ
�Š�q˜)Ñ$Ô$Ð$ð Œ:ð 	Ø�OŠOÐSÐSÐSÐSÈÌ
ÐSÑSÔSÑTÔTÐTÐTàˆDŒKà�Š?ˆ?ð Œzð ˜cœið Ý ð7ñô ð ð 	Œ
×Ò˜#œ)Ñ$Ô$Ð$Ý™EœEÐØÔ!Ð-Ø×$Ò$ TÔ%;Ñ<Ô<Ð<ØÔ Ð,Ø×$Ò$ SÔ%:Ñ;Ô;Ð;Øð 	3Ø×ÒÐ 1Ñ2Ô2Ð2ØÐÔ˜SÔ-Ñ-ÐÔð œÐ5¨¬ˆŒØ!Ô0ÐG°DÔ4GˆÔÐÐr=   c                 óŒ  — |€i }i ||j         <   |j        D ]Í}|                     |j        d ¦  «        }|                     |j        d ¦  «        }|€|€|                     |i ¦  «         ŒS|rx|j        s)t          t          t          |¦  «        ¦  «        ¦  «        ‚|                     |i ¦  «        }|j
        j        j        j        }|                      |j        ||¦  «         ŒÎ|                     ¦   «         D ]Ë\  }	}| j                             |	¦  «        x}
r:|                     |
j        ¦  «        }|                     |	|fi ¦  «        }|j        }nC|                     |	¦  «        }t+          |d¦  «        sŒ�|j        }|                     |i ¦  «        }|j        j        j        }|                      |j        ||¦  «         ŒÌ|S )NrÉ   )r)  r\  rì   r6   r7   Ú
setdefaultÚis_relationr   rÊ   r‘   Úremote_fieldr¹   rÞ   Úconcrete_modelÚ_get_defer_select_maskr©   rÃ   r.  Ú	get_fieldÚrelation_namerÉ   rF   )r|   rA   ÚmaskÚselect_maskrÉ   Ú
field_maskÚfield_att_maskÚfield_select_maskÚrelated_modelÚ
field_nameÚfiltered_relationÚrelationÚreverse_rels                r;   r”  zQuery._get_defer_select_mask  sò  € ØÐØˆKØ!ˆ�D”GÑð
 Ô)ð 	ð 	ˆEØŸš %¤*¨dÑ3Ô3ˆJØ!ŸXšX e¤m°TÑ:Ô:ˆNØÐ! nÐ&<Ø×&Ò& u¨bÑ1Ô1Ð1Ð1Øð ØÔ(ð =Ý$¥T­$¨zÑ*:Ô*:Ñ%;Ô%;Ñ<Ô<Ð<Ø$/×$:Ò$:¸5À"Ñ$EÔ$EÐ!Ø %Ô 2Ô 8Ô >Ô M�Ø×+Ò+Ø!Ô'¨Ð5Fñô ð øð '+§j¢j¡l¤lð 	ð 	Ñ"ˆJ˜
Ø$(Ô$<×$@Ò$@ÀÑ$LÔ$LÐLÐ ð FØŸ>š>Ð*;Ô*IÑJÔJ�Ø$/×$:Ò$:¸JÈÐ;QÐSUÑ$VÔ$VÐ!Ø œ��à"Ÿnšn¨ZÑ8Ô8�õ ˜{¨GÑ4Ô4ð ØØ#Ô)�Ø$/×$:Ò$:¸5À"Ñ$EÔ$EÐ!Ø!œKÔ-Ô<ˆMØ×'Ò'ØÔ# ZÐ1Bñô ð ð ð Ðr=   c                 óš  — |€i }i ||j         <   |                     ¦   «         D ]§\  }}|                     |¦  «        }||j        v r|j        }n|}|                     |i ¦  «        }|rb|j        s)t          t          t          |¦  «        ¦  «        ¦  «        ‚|j
        j        j        j        }	|                      |	j        ||¦  «         Œ¨|S r4   )r)  r©   r•  Úrelated_objectsrÉ   r�  r‘  r   rÊ   r‘   r’  r¹   rÞ   r“  Ú_get_only_select_mask)
r|   rA   r—  r˜  r�  r™  rÉ   Ú	field_keyr›  rœ  s
             r;   r£  zQuery._get_only_select_maskB  sè   € ØÐØˆKØ!ˆ�D”GÑà&*§j¢j¡l¤lð 	ð 	Ñ"ˆJ˜
Ø—N’N :Ñ.Ô.ˆEð ˜Ô,Ð,Ð,Ø!œK�	�	à!�	Ø +× 6Ò 6°yÀ"Ñ EÔ EÐØð ØÔ(ð =Ý$¥T­$¨zÑ*:Ô*:Ñ%;Ô%;Ñ<Ô<Ð<Ø %Ô 2Ô 8Ô >Ô M�Ø×*Ò*Ø!Ô'¨Ð5Fñô ð øð Ðr=   c                 ó  — | j         \  }}|si S i }|D ]7}|}|                     t          ¦  «        D ]}|                     |i ¦  «        }ŒŒ8|                      ¦   «         }|r|                      ||¦  «        S |                      ||¦  «        S )aÐ  
        Convert the self.deferred_loading data structure to an alternate data
        structure, describing the field that *will* be loaded. This is used to
        compute the columns to select from the database and also by the
        QuerySet class to work out which fields are being initialized on each
        model. Models that have all their fields included aren't mentioned in
        the result, only those that have field restrictions in place.
        )Údeferred_loadingÚsplitr   r�  rß   r”  r£  )r|   Úfield_namesÚdeferr—  r�  Ú	part_maskÚpartrA   s           r;   Úget_select_maskzQuery.get_select_maskY  s±   € ð "Ô2Ñˆ�UØð 	ØˆIØˆØ%ð 	;ð 	;ˆJØˆIØ"×(Ò(­Ñ4Ô4ð ;ð ;�Ø%×0Ò0°°rÑ:Ô:�	�	ð;à�}Š}‰ŒˆØð 	;Ø×.Ò.¨t°TÑ:Ô:Ð:Ø×)Ò)¨$°Ñ5Ô5Ð5r=   c                 ó:  — | j                              |¦  «        }|s#|r!|d         }| j        |xx         dz  cc<   |dfS |r7d| j        t	          | j        ¦  «        dz   fz  }|                     |¦  «         n|�|j        n|}|g| j         |<   d| j        |<   |dfS )a  
        Return a table alias for the given table_name and whether this is a
        new alias or not.

        If 'create' is true, a new alias is always created. Otherwise, the
        most recently created alias for the table (if one exists) is reused.
        r   rT   Fú%s%dNT)r¾   r.  rº   Úalias_prefixrÆ   r»   ÚappendrÏ   )r|   Ú
table_namerh   rž  Ú
alias_listrÏ   s         r;   Útable_aliaszQuery.table_aliaso  sÛ   € ð ”^×'Ò'¨
Ñ3Ô3ˆ
Øð 	 ˜*ð 	 Ø˜q”MˆEØÔ Ð&Ð&Ô&¨!Ñ+Ð&Ð&Ñ&Ø˜%�<Ðð ð 	1Ø˜dÔ/µ°T´^Ñ1DÔ1DÀqÑ1HÐIÑIˆEØ×Ò˜eÑ$Ô$Ð$Ð$ð ,=Ð+HÐ!Ô'Ð'Èjð ð +0¨ˆDŒN˜:Ñ&Ø%&ˆÔ˜EÑ"Ø�dˆ{Ðr=   c                 ó0   — | j         |xx         dz  cc<   dS )z-Increases the reference count for this alias.rT   N©rº   rÎ   s     r;   Ú	ref_aliaszQuery.ref_aliasŠ  s'   € àÔ˜EÐ"Ð"Ô" aÑ'Ð"Ð"Ñ"Ð"Ð"r=   rT   c                 ó0   — | j         |xx         |z  cc<   dS )z-Decreases the reference count for this alias.Nrµ  )r|   rÏ   Úamounts      r;   r~  zQuery.unref_aliasŽ  s'   € àÔ˜EÐ"Ð"Ô" fÑ,Ð"Ð"Ñ"Ð"Ð"r=   c                 ó  ‡ ‡‡— t          ‰¦  «        Š‰rï‰                     d¦  «        Š‰ j        ‰         j        €Œ*‰ j        ‰         j        €J ‚‰ j        ‰         j        }|o‰ j        |         j        t
          k    }‰ j        ‰         j        t
          k    }‰ j        ‰         j        s|rQ|sO‰ j        ‰                              ¦   «         ‰ j        ‰<   ‰                     ˆˆˆ fd„‰ j        D ¦   «         ¦  «         ‰°ídS dS )a   
        Promote recursively the join type of given aliases and its children to
        an outer join. If 'unconditional' is False, only promote the join if
        it is nullable or the parent join is an outer join.

        The children promotion is done to avoid join chains that contain a LOUTER
        b INNER c. So, if we have currently a INNER b INNER c and a->b is promoted,
        then we must also promote b->c automatically, or otherwise the promotion
        of a->b doesn't actually change anything in the query results.
        r   Nc              3   óP   •K  — | ] }‰j         |         j        ‰k    r|‰v¯|V — Œ!d S r4   )r»   Úparent_alias)r9   rj  rÏ   Úaliasesr|   s     €€€r;   r<   z&Query.promote_joins.<locals>.<genexpr>°  sQ   øè è € ð ð àØ”~ dÔ+Ô8¸EÒAÐAØ GÐ+Ð+ð ð ,Ð+Ð+Ð+ð	ð r=   )	r�   rì   r»   rs  r»  r!   ÚnullableÚpromoteÚextend)r|   r¼  r»  Úparent_louterÚalready_louterrÏ   s   ``   @r;   Úpromote_joinszQuery.promote_joins’  s<  øøø€ õ �w‘-”-ˆØð 	Ø—K’K ‘N”NˆEØŒ~˜eÔ$Ô.Ð6ð à”> %Ô(Ô2Ð>Ð>Ð>Øœ>¨%Ô0Ô=ˆLàÐQ ¤°Ô!=Ô!GÍ6Ò!Qð ð "œ^¨EÔ2Ô<ÅÒFˆNØ”˜uÔ%Ô.ð 	°-ð 	Èð 	Ø(,¬°uÔ(=×(EÒ(EÑ(GÔ(G�”˜uÑ%ð —’ð ð ð ð ð ð à $¤ðñ ô ñ ô ð ð% ð 	ð 	ð 	ð 	ð 	r=   c                 ób  — t          |¦  «        }|r�|                     d¦  «        }| j        |         j        t          k    ri| j        |                              ¦   «         | j        |<   | j        |         j        }| j        |         j        t          k    r|                     |¦  «         |°›dS dS )a¹  
        Change join type from LOUTER to INNER for all joins in aliases.

        Similarly to promote_joins(), this method must ensure no join chains
        containing first an outer, then an inner join are generated. If we
        are demoting b->c join in chain a LOUTER b LOUTER c then we must
        demote a->b automatically, or otherwise the demotion of b->c doesn't
        actually change anything in the query results. .
        r   N)	r�   rì   r»   rs  r!   Údemoter»  r    r°  )r|   r¼  rÏ   r»  s       r;   Údemote_joinszQuery.demote_joins·  s®   € õ �w‘-”-ˆØð 	1Ø—K’K ‘N”NˆEØŒ~˜eÔ$Ô.µ&Ò8Ð8Ø(,¬°uÔ(=×(DÒ(DÑ(FÔ(F�”˜uÑ%Ø#œ~¨eÔ4ÔA�Ø”> ,Ô/Ô9½UÒBÐBØ—N’N <Ñ0Ô0Ð0ð ð 	1ð 	1ð 	1ð 	1ð 	1r=   c                 óÆ   — | j                              ¦   «                              ¦   «         D ]4\  }}||                     |d¦  «        z
  }|                      ||¦  «         Œ5dS )zp
        Reset reference counts for aliases so that they match the value passed
        in `to_counts`.
        r   N)rº   ra   r©   r.  r~  )r|   Ú	to_countsrÏ   Úcur_refcountÚunref_amounts        r;   Úreset_refcountszQuery.reset_refcountsÊ  sn   € ð
 $(Ô#6×#;Ò#;Ñ#=Ô#=×#CÒ#CÑ#EÔ#Eð 	2ð 	2ÑˆE�<Ø'¨)¯-ª-¸¸qÑ*AÔ*AÑAˆLØ×Ò˜U LÑ1Ô1Ð1Ð1ð	2ð 	2r=   c                 ót  ‡— t          ‰¦  «                             ‰                     ¦   «         ¦  «        sJ ‚| j                             ‰¦  «         t          | j        t          ¦  «        r%t          ˆfd„| j        D ¦   «         ¦  «        | _        t          ˆfd„| j        D ¦   «         ¦  «        | _        | j	        o$ˆfd„| j	         
                    ¦   «         D ¦   «         | _	        ‰ 
                    ¦   «         D ]’\  }}|| j        vrŒ| j        |                              ‰¦  «        }|| j        |<   | j        |         | j        |<   | j        |= | j        |= | j        |j                 }t!          |¦  «        D ]\  }}||k    r|||<    nŒŒ“ˆfd„| j         
                    ¦   «         D ¦   «         | _        dS )z²
        Change the aliases in change_map (which maps old-alias -> new-alias),
        relabelling any references to them in select columns and the where
        clause.
        c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rV   rw  rx  s     €r;   r\   z(Query.change_aliases.<locals>.<listcomp>ã  s'   ø€ ÐJÐJÐJ°S�×$Ò$ ZÑ0Ô0ÐJÐJÐJr=   c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rV   rw  rx  s     €r;   r\   z(Query.change_aliases.<locals>.<listcomp>å  s'   ø€ ÐTÐTÐTÀ˜S×0Ò0°Ñ<Ô<ÐTÐTÐTr=   c                 óB   •— i | ]\  }}||                      ‰¦  «        “ŒS rV   rw  )r9   r¥   rB  rô   s      €r;   r¦   z(Query.change_aliases.<locals>.<dictcomp>æ  s=   ø€ ð 1
ð 1
ð 1
á��Sð �×$Ò$ ZÑ0Ô0ð1
ð 1
ð 1
r=   c                 óL   •— i | ] \  }}‰                      ||¦  «        |p|‰v “Œ!S rV   ©r.  )r9   rÏ   Úaliasedrô   s      €r;   r¦   z(Query.change_aliases.<locals>.<dictcomp>ú  sI   ø€ ð !
ð !
ð !
ñ ��wð �NŠN˜5 %Ñ(Ô(¨7Ð+I°e¸zÐ6Ið!
ð !
ð !
r=   N)r>   Ú
isdisjointrË   rÀ   r€  rE   r   rN   rÇ   rÁ   r©   r»   rõ   rº   r¾   r±  Ú	enumerater½   )r|   rô   Ú	old_aliasrŒ  Ú
alias_dataÚtable_aliasesÚposrÏ   s    `      r;   ró   zQuery.change_aliasesÓ  s  ø€ õ �:‰Œ×)Ò)¨*×*;Ò*;Ñ*=Ô*=Ñ>Ô>Ð>Ð>Ð>ð 	Œ
×"Ò" :Ñ.Ô.Ð.Ý�d”m¥UÑ+Ô+ð 	Ý!ØJÐJÐJÐJ¸D¼MÐJÑJÔJñô ˆDŒMõ ÐTÐTÐTÐTÈÌÐTÑTÔTÑUÔUˆŒØÔ+ð 
ð 1
ð 1
ð 1
ð 1
à Ô,×2Ò2Ñ4Ô4ð1
ñ 1
ô 1
ˆÔð %/×$4Ò$4Ñ$6Ô$6ð 	ð 	Ñ ˆI�yØ ¤Ð.Ð.ØØœ¨	Ô2×BÒBÀ:ÑNÔNˆJØ(2ˆDŒN˜9Ñ%Ø-1Ô-@ÀÔ-KˆDÔ 	Ñ*ØÔ# IÐ.Ø”˜yÐ)à œN¨:Ô+@ÔAˆMÝ'¨Ñ6Ô6ð ð ‘
��UØ˜IÒ%Ð%Ø)2�M #Ñ&Ø�Eð &øð!
ð !
ð !
ð !
ð #'Ô"7×"=Ò"=Ñ"?Ô"?ð!
ñ !
ô !
ˆÔÐÐr=   c                 óî  ‡ ‡— ˆ fd„}‰ j         |j         k    rdS t          j        ¦   «         dz  }t           |¦   «         ¦  «        D ],\  }}|‰ j        vr	|‰ _          n||k    rt          d¦  «        ‚Œ-‰ j                             ‰ j         g¦  «        ‰ _        |j                             ‰ j        ¦  «        |_        ‰€i Š‰                      ˆˆ fd„t          ‰ j        ¦  «        D ¦   «         ¦  «         dS )a;  
        Change the alias prefix to the next letter in the alphabet in a way
        that the other query's aliases and this query's aliases will not
        conflict. Even tables that previously had no alias will get an alias
        after this call. To prevent changing aliases use the exclude parameter.
        c               3   ó*  •K  — t           } t          t          ‰j        ¦  «        dz   ¦  «        }|V — t	          d¦  «        D ]P}|r| |                      |¦  «        d…         n| }t          ||¬¦  «        D ]}d                     |¦  «        V — Œd}ŒQdS )a  
            Generate a sequence of characters in alphabetical order:
                -> 'A', 'B', 'C', ...

            When the alphabet is finished, the sequence will continue with the
            Cartesian product:
                -> 'AA', 'AB', 'AC', ...
            rT   N)ÚrepeatÚ )r
   ÚchrÚordr¯  r   rD  r	   rj  )ÚalphabetrZ   ÚnÚseqÚsr|   s        €r;   Ú
prefix_genz%Query.bump_prefix.<locals>.prefix_gen  sµ   øè è € õ 'ˆHÝ�˜TÔ.Ñ/Ô/°!Ñ3Ñ4Ô4ˆFØˆLˆLˆLÝ˜1‘X”Xð ð �Ø<BÐP�h˜xŸ~š~¨fÑ5Ô5Ð7Ð7Ô8Ð8È�Ý  ¨QÐ/Ñ/Ô/ð %ð %�AØŸ'š' !™*œ*Ð$Ð$Ð$Ð$Ø��ð	ð r=   Né   z6Maximum recursion depth exceeded: too many subqueries.c                 ó8   •— i | ]\  }}|‰v¯	|d ‰j         |fz  “ŒS )r®  )r¯  )r9   r×  rÏ   ro  r|   s      €€r;   r¦   z%Query.bump_prefix.<locals>.<dictcomp>0  sA   ø€ ð ð ð á�C˜Ø Ð'Ð'ð �v Ô!2°CÐ 8Ñ8à'Ð'Ð'r=   )	r¯  ÚsysÚgetrecursionlimitrÓ  rã   ÚRecursionErrorrT  ró   r»   )r|   Úother_queryro  râ  Úlocal_recursion_limitr×  rZ   s   ` `    r;   rz  zQuery.bump_prefix   sK  øø€ ð	ð 	ð 	ð 	ð 	ð$ Ô Ô 8Ò8Ð8àˆFõ !$Ô 5Ñ 7Ô 7¸2Ñ =ÐÝ$ Z Z¡\¤\Ñ2Ô2ð 	ð 	‰KˆC�Ø˜TÔ.Ð.Ð.Ø$*�Ô!Ø�ØÐ*Ò*Ð*Ý$ØLñô ð ð +ð !Ô-×3Ò3°TÔ5FÐ4GÑHÔHˆÔØ#.Ô#;×#AÒ#AÀ$ÔBSÑ#TÔ#TˆÔ Øˆ?ØˆGØ×Òðð ð ð ð å"+¨D¬NÑ";Ô";ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r=   c                 óâ   — | j         r| j        }|                      |¦  «         nJ| j        rA|                      |                      |                      ¦   «         j        d¦  «        ¦  «        }nd}|S )zf
        Return the first alias for this query, after increasing its reference
        count.
        N)r»   rÐ   r¶  r¹   rj  Úbase_table_classrß   Údb_tablerÎ   s     r;   r*  zQuery.get_initial_alias7  sl   € ð
 Œ>ð 	Ø”OˆEØ�NŠN˜5Ñ!Ô!Ð!Ð!ØŒZð 	Ø—I’I˜d×3Ò3°D·M²M±O´OÔ4LÈdÑSÔSÑTÔTˆEˆEàˆEØˆr=   c                 ób   — t          d„ | j                             ¦   «         D ¦   «         ¦  «        S )zÛ
        Return the number of tables in this query with a non-zero reference
        count. After execution, the reference counts are zeroed, so tables
        added in compiler will not be seen by this method.
        c                 ó   — g | ]}|¯d ‘ŒS ©rT   rV   )r9   r   s     r;   r\   z-Query.count_active_tables.<locals>.<listcomp>K  s   € ÐIÐIÐI˜%À5ÐI�AÐIÐIÐIr=   )rÆ   rº   rË   r™   s    r;   Úcount_active_tableszQuery.count_active_tablesE  s0   € õ ÐIÐI 4Ô#6×#=Ò#=Ñ#?Ô#?ÐIÑIÔIÑJÔJÐJr=   c                 óÂ  ‡‡— ˆˆfd„| j                              ¦   «         D ¦   «         }|r0‰j        |v r‰j        }n|d         }|                      |¦  «         |S |                      ‰j        d‰j        ¬¦  «        \  }}‰j        r=| j         ‰j                 j        t          k    s‰j	        rt          }nt          }|‰_        |‰_        ‰| j         |<   ‰j        x}r�‰}	|	�t          ‰¦  «        |hz  }	t          | j         ¦  «        }
|                     | |	¬¦  «        ‰_        |
t          | j         ¦  «        k     r"| j                              |¦  «        | j         |<   |S )a+  
        Return an alias for the 'join', either reusing an existing alias for
        that join or creating a new one. 'join' is either a base_table_class or
        join_class.

        The 'reuse' parameter can be either None which means all joins are
        reusable, or it can be a set containing the aliases that can be reused.

        A join is always created as LOUTER if the lhs alias is LOUTER to make
        sure chains like t1 LOUTER t2 INNER t3 aren't generated. All new
        joins are created as LOUTER if the join is nullable.
        c                 ó2   •— g | ]\  }}‰�|‰v ¯|‰k    ¯|‘ŒS r4   rV   )r9   rZ  rt  rj  rý   s      €€r;   r\   zQuery.join.<locals>.<listcomp>Z  s:   ø€ ð 
ð 
ð 
á��1Ø�  e  °°d²°ð à1:°°r=   éÿÿÿÿT)rh   rž  Nru  )r»   r©   r³  r¶  r±  rž  rs  r»  r!   r½  r    r>   rÆ   rL   rì   )r|   rj  rý   Úreuse_aliasesÚreuse_aliasrÏ   r9  rs  rž  Úresolve_reuseÚ	joins_lens    ``        r;   rj  z
Query.joinM  sœ  øø€ ð
ð 
ð 
ð 
ð 
àœ×,Ò,Ñ.Ô.ð
ñ 
ô 
ˆð
 ð 	ØÔ =Ð0Ð0Ø"Ô.��ð ,¨BÔ/�Ø�NŠN˜;Ñ'Ô'Ð'ØÐð ×#Ò#ØŒO D¸DÔ<Rð $ñ 
ô 
‰ˆˆqð Œ>ð 	'ØŒ~˜dÔ/Ô0Ô:½fÒDÐDÈÌÐDÝ"�	�	å!�	Ø&ˆDŒNØ ˆÔØ $ˆŒ�uÑØ $Ô 6Ð6Ðð 	BØ!ˆMØÐ(Ý # E¡
¤
¨e¨WÑ 4�Ý˜DœNÑ+Ô+ˆIØ%6×%IÒ%IØ˜Mð &Jñ &ô &ˆDÔ"ð
 �3˜tœ~Ñ.Ô.Ò.Ð.Ø(,¬×(:Ò(:¸5Ñ(AÔ(A�”˜uÑ%Øˆr=   c                 óV  — ||v r||         S |                      |¦  «        }|s|S |}|D ]v}||v r|j        }||         }Œ|j        |         s|j        }Œ+|                     |¦  «        }|                      |j        g||¦  «        }	|j        }|	j        d         x}||<   Œw|p|d         S )a}  
        Make sure the given 'model' is joined in the query. If 'model' isn't
        a parent of 'opts' or if it is None this method is a no-op.

        The 'alias' is the root alias for starting the join, 'seen' is a dict
        of model -> alias of existing joins. It must also contain a mapping
        of None -> some alias. This will be returned in the no-op case.
        ró  N)Úget_base_chainrÞ   ÚparentsÚget_ancestor_linkÚsetup_joinsr6   rn   )
r|   rA   r¹   rÏ   Úseenr   Ú	curr_optsÚ	int_modelÚ
link_fieldÚ	join_infos
             r;   Újoin_parent_modelzQuery.join_parent_modelƒ  sá   € ð �Dˆ=ˆ=Ø˜”;ÐØ×#Ò# EÑ*Ô*ˆØð 	ØˆLØˆ	Øð 	:ð 	:ˆIØ˜DÐ Ð Ø%œO�	Ø˜Yœ�Øð
 Ô$ YÔ/ð Ø%œO�	ØØ"×4Ò4°YÑ?Ô?ˆJØ×(Ò(¨*¬/Ð):¸IÀuÑMÔMˆIØ!œˆIØ&/¤o°bÔ&9Ð9ˆE�D˜‘O�OØÐ"˜˜Tœ
Ð"r=   c                 óX   — t                                |¦  «        rt          d¦  «        ‚d S )NzbColumn aliases cannot contain whitespace characters, quotation marks, semicolons, or SQL comments.)ÚFORBIDDEN_ALIAS_PATTERNÚsearchrb   rÎ   s     r;   r  zQuery.check_alias¤  s9   € Ý"×)Ò)¨%Ñ0Ô0ð 	Ýð/ñô ð ð	ð 	r=   c                 ó(  ‡— |                       ‰¦  «         |                     | dd¬¦  «        }|r|                      ‰g¦  «         n@ˆfd„t                               | j        ¦  «        D ¦   «         }|                      |¦  «         || j        ‰<   dS )z0Add a single annotation expression to the Query.TN)rü   rý   c              3   ó(   •K  — | ]}|‰k    ¯|V — Œd S r4   rV   )r9   ÚvaluerÏ   s     €r;   r<   z'Query.add_annotation.<locals>.<genexpr>²  s5   øè è € ð ð àØ˜E’>�>ð à!�>�>�>ðð r=   )r  rL   r  rœ   Úfromkeysr{   r  rÁ   )r|   r	  rÏ   rÇ   r?  s     `  r;   r`  zQuery.add_annotation«  s³   ø€ à×Ò˜ÑÔÐØ×2Ò2°4ÀTÐQUÐ2ÑVÔVˆ
Øð 	6Ø×'Ò'¨¨Ñ0Ô0Ð0Ð0ðð ð ð å!Ÿ]š]¨4Ô+AÑBÔBðñ ô ˆOð
 ×$Ò$ _Ñ5Ô5Ð5Ø",ˆÔ˜ÑÐÐr=   c                 ó¼  ‡‡‡— |                       ¦   «         }|                     ‰¦  «         d|_         |j        j        ‰g‰¢R i ‰¤Ž |j        r't          ˆˆˆfd„|j        D ¦   «         ¦  «        |_        |j         	                    ¦   «         D ]O\  }} |j        ‰g‰¢R i ‰¤Ž}t          |d¦  «        r|j                             |j        ¦  «         ||j        |<   ŒP‰j         	                    ¦   «         D ]a\  }}	t          |	t          ¦  «        o|	j        j        j        j        |k    p$t          |	t(          ¦  «        o|	j        |	j        k    |j        |<   Œb|S )NTc                 ó2   •— g | ]} |j         ‰g‰¢R i ‰¤Ž‘ŒS rV   )rL   )r9   rX  ÚargsÚkwargsrâ   s     €€€r;   r\   z,Query.resolve_expression.<locals>.<listcomp>Ã  sF   ø€ ð ð ð à&ð 6�NÔ5°eÐM¸dÐMÐMÐMÀfÐMÐMðð ð r=   r½   )r€   rz  r%  rÀ   rL   r#  rN   ræ   rÁ   r©   rF   r½   r‚  r»   rE   r&   Ú
join_fieldrœ  rÞ   rì  r$   r±  r³  )
r|   râ   r  r  r€   r¥   r  ÚresolvedrÏ   Útables
    ```      r;   rL   zQuery.resolve_expressionº  s©  øøø€ Ø—
’
‘”ˆà×Ò˜%Ñ Ô Ð ØˆŒØ&ˆŒÔ& uÐ>¨tÐ>Ð>Ð>°vÐ>Ð>Ð>àÔð 	Ý%*ðð ð ð ð ð à*/Ô*@ðñ ô ñ&ô &ˆEÔ"ð  Ô+×1Ò1Ñ3Ô3ð 	.ð 	.‰JˆC�Ø/�uÔ/°ÐG¸ÐGÐGÐGÀÐGÐGˆHÝ�xÐ!3Ñ4Ô4ð IØÔ)×0Ò0°Ô1GÑHÔHÐHØ%-ˆEÔ˜cÑ"Ð"à!œO×1Ò1Ñ3Ô3ð 	ð 	‰LˆE�5å˜5¥$Ñ'Ô'ð KØÔ$Ô2Ô8ÔAÀUÒJð-õ ˜5¥)Ñ,Ô,ÐV°Ô1AÀUÔEVÒ1Vð	 Ô" 5Ñ)Ð)ð ˆr=   c                 ó¬   ‡ — t          ‰ j                             ¦   «         ‰ j        j        ¦  «        }ˆ fd„‰                      |d¬¦  «        D ¦   «         S )Nc                 ó0   •— g | ]}|j         ‰j        v ¯|‘ŒS rV   )rÏ   r½   )r9   rB  r|   s     €r;   r\   z+Query.get_external_cols.<locals>.<listcomp>Ù  s3   ø€ ð 
ð 
ð 
àØŒy˜DÔ1Ð1Ð1ð à1Ð1Ð1r=   T)Úinclude_external)r   rÁ   rË   rÀ   rM   r-  )r|   Úexprss   ` r;   Úget_external_colszQuery.get_external_cols×  sa   ø€ Ý�dÔ&×-Ò-Ñ/Ô/°´Ô1DÑEÔEˆð
ð 
ð 
ð 
à—~’~ e¸d�~ÑCÔCð
ñ 
ô 
ð 	
r=   c                 ój   — |                       ¦   «         }t          d„ |D ¦   «         ¦  «        r|p| gS |S )Nc              3   ó$   K  — | ]}|j         V — Œd S r4   )Úpossibly_multivalued)r9   rB  s     r;   r<   z*Query.get_group_by_cols.<locals>.<genexpr>å  s%   è è € ÐAÐA¨CˆsÔ'ÐAÐAÐAÐAÐAÐAr=   )r  r  )r|   ÚwrapperÚexternal_colss      r;   r+  zQuery.get_group_by_colsß  sG   € ð
 ×.Ò.Ñ0Ô0ˆÝÐAÐA°=ÐAÑAÔAÑAÔAð 	%Ø�O˜tÐ$Ð$ØÐr=   c                 ó
  — | j         rB|j        j        s6|                      d¬¦  «         | j        D ]}|                     d¬¦  «         Œ|                      |¬¦  «                             ¦   «         \  }}| j         rd|z  }||fS )NFr  )r¬   z(%s))r%  rŽ   Ú*ignores_unnecessary_order_by_in_subqueriesr'  ræ   rÔ   rÕ   )r|   rÛ   r¬   râ   ru   rt   s         r;   rÕ   zQuery.as_sqlé  s¤   € ð ŒMð	2àÔ'ÔRð	2ð ×Ò eÐÑ,Ô,Ð,ØÔ.ð 2ð 2�Ø×$Ò$¨5Ð$Ñ1Ô1Ð1Ð1Ø×'Ò'°:Ð'Ñ>Ô>×EÒEÑGÔG‰ˆˆVØŒ=ð 	Ø˜3‘,ˆCØ�Fˆ{Ðr=   c                 ó  ‡ ‡‡— t          |d¦  «        r|                     ‰ ‰‰|¬¦  «        }n[t          |t          t          f¦  «        r?ˆˆˆ fd„|D ¦   «         }t          |¦  «        }t          |d¦  «        r ||Ž S  ||¦  «        S |S )NrL   )rý   rü   rþ   c              3   óF   •K  — | ]}‰                      |‰‰¦  «        V — Œd S r4   )Úresolve_lookup_value)r9   Ú	sub_valuerü   Ú	can_reuser|   s     €€€r;   r<   z-Query.resolve_lookup_value.<locals>.<genexpr>  sI   øè è € ð ð àð ×)Ò)¨)°YÀÑLÔLðð ð ð ð ð r=   Ú_make)rF   rL   rE   r�   rN   Útype)r|   r  r!  rü   rþ   rË   Útype_s   ` ``   r;   r  zQuery.resolve_lookup_valueø  sÈ   øøø€ Ý�5Ð.Ñ/Ô/ð 	!Ø×,Ò,ØØØ'Ø#ð	 -ñ ô ˆEˆEõ ˜¥¥e˜}Ñ-Ô-ð 
	!ðð ð ð ð ð à!&ðñ ô ˆFõ ˜‘K”KˆEÝ�u˜gÑ&Ô&ð &Ø�u˜f�~Ð%Ø�5˜‘=”=Ð Øˆr=   c                 ó   — |                      t          ¦  «        }| j        r>t          || j        ¦  «        \  }}|r$| j        |         }|rt	          ||¦  «        }|d|fS |                      ||                      ¦   «         ¦  «        \  }}}}	|dt          |¦  «        t          |	¦  «        z
  …         }
t          |	¦  «        dk    r4|
s2t          d|›d|                      ¦   «         j	        j
        ›d�¦  «        ‚|	|
dfS )zX
        Solve the lookup type from the lookup (e.g.: 'foobar__id__icontains').
        rV   r   rT   zInvalid lookup "z" for model ú".F)r§  r   rÁ   r   r   Únames_to_pathrß   rÆ   r   r¹   r˜   )r|   Úlookuprþ   Úlookup_splittedr	  Úexpression_lookupsr  r9  rÉ   Úlookup_partsÚfield_partss              r;   Úsolve_lookup_typezQuery.solve_lookup_type  s  € ð !Ÿ,š,¥zÑ2Ô2ˆØÔð 	:Ý-<Ø Ô!1ñ.ô .Ñ*ˆJÐ*ð ð :Ø!Ô-¨jÔ9�
Øð =Ý!$ Z°Ñ!<Ô!<�JØ)¨2¨zÐ9Ð9Ø$(×$6Ò$6°ÈÏÊÉÌÑ$XÔ$XÑ!ˆˆ5�!�\Ø% a­#¨oÑ*>Ô*>ÅÀ\ÑARÔARÑ*RÐ&RÔSˆÝˆ|ÑÔ˜qÒ Ð ¨Ð Ý�*à�6�6˜4Ÿ=š=™?œ?Ô0Ô9Ð9Ð9ð;ñô ð ð ˜[¨%Ð/Ð/r=   c                 ó–   — t          |d¦  «        r6t          |j        j        ||¦  «        st	          d|›d|j        ›d�¦  «        ‚dS dS )z˜
        Check whether the object passed while querying is of the correct type.
        If not, raise a ValueError specifying the wrong object.
        rÞ   zCannot query "z": Must be "z" instance.N)rF   r   rÞ   r¹   rb   Úobject_name)r|   r  rA   rÉ   s       r;   Úcheck_query_object_typezQuery.check_query_object_type$  sn   € õ
 �5˜'Ñ"Ô"ð 	Ý1°%´+Ô2CÀTÈ5ÑQÔQð Ý �jà�u�u˜dÔ.Ð.Ð.ð0ñô ð ð	ð 	ðð r=   c                 ó~  — |j         r±t          |t          ¦  «        rG|j        s@t	          |j        ||¦  «        s*t          d|j        j        j        ›d|j        ›d�¦  «        ‚t          |d¦  «        r|  
                    |||¦  «         dS t          |d¦  «        r|D ]}|  
                    |||¦  «         ŒdS dS dS )z3Check the type of object passed to query relations.zCannot use QuerySet for "z": Use a QuerySet for "r&  rÞ   r“   N)r‘  rE   r0   Úhas_select_fieldsr   r¹   rb   rÞ   r/  rF   r0  )r|   rÉ   r  rA   Úvs        r;   Úcheck_related_objectszQuery.check_related_objects0  s  € àÔð 	Aõ ˜5¥%Ñ(Ô(ðAàÔ/ðAõ 7°u´{ÀDÈ%ÑPÔPðAõ
 !�jà”{Ô(Ô4Ð4Ð4°dÔ6FÐ6FÐ6FðHñô ð õ ˜ Ñ(Ô(ð AØ×,Ò,¨U°D¸%Ñ@Ô@Ð@Ð@Ð@Ý˜ 
Ñ+Ô+ð AØð Að A�AØ×0Ò0°°D¸%Ñ@Ô@Ð@Ð@ð'	Að 	Að"Að AðAð Ar=   c                 óü   — t          |d¦  «        r-t          |dd¦  «        st          |j        j        dz   ¦  «        ‚t          |d¦  «        r,|                     ¦   «         D ]}|                      |¦  «         ŒdS dS )z>Raise an error if expression cannot be used in a WHERE clause.rL   Ú
filterableTz$ is disallowed in the filter clause.rd   N)rF   rÈ   r   r—   r˜   rd   Úcheck_filterable)r|   r  rH   s      r;   r7  zQuery.check_filterableG  s¯   € å�:Ð3Ñ4Ô4ð 	½WØ˜ dñ>
ô >
ð 	õ $ØÔ$Ô-ð 1ñ ñô ð õ �:Ð7Ñ8Ô8ð 	,Ø"×9Ò9Ñ;Ô;ð ,ð ,�Ø×%Ò% dÑ+Ô+Ð+Ð+ð	,ð 	,ð,ð ,r=   c                 ó  — |pdg�^ }}|D ]}|                       ||¦  «        }Œ|                     |¦  «        }|s1|                       ||¦  «        }d}|                     |¦  «        }|sdS  |||¦  «        }|j        €9|j        s2|dvrt	          d¦  «        ‚ |                     d¦  «        |d¦  «        S |dk    rF|j        dk    r;t
          t                   j        j        r |                     d¦  «        |d¦  «        S |S )a1  
        Try to extract transforms and lookup from given lhs.

        The lhs value is something that works like SQLExpression.
        The rhs value is what the lookup is going to compare against.
        The lookups is a list of names to extract using get_lookup()
        and get_transform().
        ÚexactN)r9  Úiexactz Cannot use None as a query valueÚisnullTrÛ  )	Útry_transformÚ
get_lookuprQ   Úcan_use_none_as_rhsrb   r   r   rŽ   Ú!interprets_empty_strings_as_nulls)	r|   ÚlookupsrP   rQ   Ú
transformsÚlookup_namer6   Úlookup_classr(  s	            r;   Úbuild_lookupzQuery.build_lookupT  s?  € ð $+Ð#7¨w¨iÑ ˆ�[Øð 	0ð 	0ˆDØ×$Ò$ S¨$Ñ/Ô/ˆCˆCð —~’~ kÑ2Ô2ˆØð 	ð ×$Ò$ S¨+Ñ6Ô6ˆCØ!ˆKØŸ>š>¨+Ñ6Ô6ˆLØð Ø�à�˜c 3Ñ'Ô'ˆð Œ:Ð fÔ&@ÐØÐ"5Ð5Ð5Ý Ð!CÑDÔDÐDØ+�3—>’> (Ñ+Ô+¨C°Ñ6Ô6Ð6ð ˜7Ò"Ð"Ø”
˜bÒ Ð ÝÕ,Ô-Ô6ÔXð !ð ,�3—>’> (Ñ+Ô+¨C°Ñ6Ô6Ð6àˆr=   c                 ó*  — |                      |¦  «        }|r ||¦  «        S |j        j        }t          j        ||j                             ¦   «         ¦  «        }|rdd                     |¦  «        z  }nd}t          d|›d|j        ›d|›�¦  «        ‚)z€
        Helper method for build_lookup(). Try to fetch and initialize
        a transform for name parameter from lhs.
        z, perhaps you meant %s?z or re  zUnsupported lookup 'z' for z# or join on the field not permitted)	Úget_transformrÌ   r—   ÚdifflibÚget_close_matchesÚget_lookupsrj  r   r˜   )r|   rP   r6   Útransform_classrÌ   Úsuggested_lookupsÚ
suggestions          r;   r<  zQuery.try_transform‚  s¹   € ð
 ×+Ò+¨DÑ1Ô1ˆØð 	Ø"�? 3Ñ'Ô'Ð'àÔ+Ô5ˆLÝ 'Ô 9Ø�cÔ&×2Ò2Ñ4Ô4ñ!ô !Ðð !ð !Ø6¸¿ºÐEVÑ9WÔ9WÑW�
�
à �
Ý�*à!%   |Ô'<Ð'<Ð'<¸j¸jðJñô ð r=   c
                 óH
  ‡— t          |t          ¦  «        rt          d¦  «        ‚t          |t          ¦  «        r|                      |||||||||	¬¦	  «	        S t          |d¦  «        rt          |dd¦  «        st          d¦  «        ‚|                     | |||¬¦  «        }
t          |
t          ¦  «        s|  
                    dg|
d	¦  «        }
t          |
gt          ¬
¦  «        g fS |\  }}|st          d|z  ¦  «        ‚|                      ||¦  «        \  }}}|r|                      |¦  «         |s"t          |¦  «        dk    rt          d¦  «        ‚| j                             ¦   «         Š|                      ||||¦  «        }ˆfd„| j                             ¦   «         D ¦   «         }|r|                      |¦  «         |r0|  
                    |||¦  «        }
t          |
gt          ¬
¦  «        g fS |                      ¦   «         }|                      ¦   «         }| p| }	 |                      |||||¬¦  «        }t          |t.          ¦  «        rt1          |¦  «        }|                      |j        ||j        ¦  «         |j        | _        n3# t<          $ r&}|                      |||j         ¦  «        cY d}~S d}~ww xY w| !                    |j        ¦  «         |  "                    |j#        |j        |j$        ¦  «        \  }}}|�| !                    |¦  «         |j        j%        rSt          |¦  «        dk    r#|  &                    |d         |j        |¦  «        }n?tO          |||j#        |j        ¦  «        }n"|  &                    |d         |j        |¦  «        }|  
                    |||¦  «        }
|
j(        }t          |
gt          ¬
¦  «        }|dk    o|
j)        d	u o| }|�r3|dk    s
|
j)        du �r#|
j)        ��d	}|dk    �r|  *                    |d         ¦  «        s!| j+        |d                  j,        tZ          k    rh|d          .                    d¦  «        }|  &                    |d         |j#        d         |¦  «        }| /                     ||d¦  «        t          ¦  «         t          |t`          ¦  «        rY|  *                    |j1        ¦  «        r?|j1         .                    d¦  «        }| /                     ||d¦  «        t          ¦  «         ||s|ndfS )a/  
        Build a WhereNode for a single filter clause but don't add it
        to this Query. Query.add_q() will then add this filter to the where
        Node.

        The 'branch_negated' tells us if the current branch contains any
        negations. This will be used to determine if subqueries are needed.

        The 'current_negated' is used to determine if the current filter is
        negated or not and this will be used to determine if IS NULL filtering
        is needed.

        The difference between current_negated and branch_negated is that
        branch_negated is set on first negation, but current_negated is
        flipped for each negation.

        Note that add_filter will not do any negating itself, that is done
        upper in the code by add_q().

        The 'can_reuse' is a set of reusable joins for multijoins.

        The method will create a filter clause that can be added to the current
        query. However, if the filter isn't added to the query then the caller
        is responsible for unreffing the joins used.
        z"Cannot parse keyword query as dict)Úbranch_negatedÚcurrent_negatedr¿   rü   Ú
split_subqr7  rþ   r  rL   ÚconditionalFz3Cannot filter against a non-conditional expression.rû   r9  T)ri   zCannot parse keyword query %rrT   ú7Joined field references are not permitted in this queryc                 óN   •— h | ]!\  }}|‰                      |d ¦  «        k    ¯|’Œ"S r…   rÐ  )r9   Úkr3  Ú	pre_joinss      €r;   ú	<setcomp>z%Query.build_filter.<locals>.<setcomp>á  s<   ø€ ð 
ð 
ð 
Ù�!�Q¸¸Y¿]º]È1ÈaÑ=PÔ=PÒ9PÐ9PˆAÐ9PÐ9PÐ9Pr=   )r!  Ú
allow_manyNr   r;  ró  rV   )2rE   rœ   r   r   Ú_add_qrF   rÈ   r  rL   r   rD  r,   r(   r-  r7  rÆ   rº   ra   r  r©   rß   r*  rü  r   r�   r4  rl   rA   rn   Ú_lookup_joinsr'   Úsplit_excludeÚnames_with_pathr‚  Ú
trim_joinsrm   ro   r‘  rù   r   rB  rQ   Úis_nullabler»   rs  r!   r=  r,  r   rÅ   )r|   Úfilter_exprrN  rO  r!  rü   rP  r7  rþ   r  Ú	conditionÚargr  r@  ÚpartsÚreffed_expressionÚ
used_joinsrA   rÏ   rW  r  Úerm   Ú	join_listrB  Úlookup_typeÚclauseÚrequire_outerrC  rU  s                                @r;   Úbuild_filterzQuery.build_filter˜  sµ  ø€ õJ �k¥4Ñ(Ô(ð 	CÝÐAÑBÔBÐBÝ�k¥1Ñ%Ô%ð 	Ø—;’;ØØ-Ø /Ø&Ø'Ø%Ø!1Ø#Ø"3ð ñ 
ô 
ð 
õ �;Ð 4Ñ5Ô5ð 	=Ý˜;¨°uÑ=Ô=ð WÝÐ UÑVÔVÐVØ#×6Ò6Ø +°YÈ)ð 7ñ ô ˆIõ ˜i­Ñ0Ô0ð JØ ×-Ò-¨w¨i¸ÀDÑIÔI�	Ý˜i˜[µCÐ8Ñ8Ô8¸"Ð<Ð<Ø ‰
ˆˆUØð 	DÝÐ<¸sÑBÑCÔCÐCØ,0×,BÒ,BÀ3È	Ñ,RÔ,RÑ)ˆ�Ð)àð 	5Ø×!Ò!Ð"3Ñ4Ô4Ð4àð 	X�s 5™zœz¨Aš~˜~ÝÐVÑWÔWÐWàÔ'×,Ò,Ñ.Ô.ˆ	Ø×)Ò)¨%°¸KÈÑSÔSˆð
ð 
ð 
ð 
ØÔ-×3Ò3Ñ5Ô5ð
ñ 
ô 
ˆ
ð ð 	)Ø×!Ò! %Ñ(Ô(Ð(àð 	=Ø×)Ò)¨'Ð3DÀeÑLÔLˆIÝ˜i˜[µCÐ8Ñ8Ô8¸"Ð<Ð<à�}Š}‰ŒˆØ×&Ò&Ñ(Ô(ˆØ'Ð'Ð9¨z¨>ˆ
ð	QØ×(Ò(ØØØØ#Ø%ð )ñ ô ˆIõ ˜%¥Ñ*Ô*ð $Ý˜U™œ�Ø×&Ò& yÔ'<¸eÀYÄ^ÑTÔTÐTð "+¤ˆDÔÐøÝð 	Qð 	Qð 	QØ×%Ò% k°9¸aÔ>OÑPÔPÐPÐPÐPÐPÐPÐPøøøøð	Qøøøð
 	×Ò˜)œ/Ñ*Ô*Ð*Ø$(§O¢OØÔ˜yœ°	´ñ%
ô %
Ñ!ˆ�˜	ð Ð Ø×Ò˜YÑ'Ô'Ð'àÔ Ô,ð 	JÝ�7‰|Œ|˜qÒ Ð Ø—m’m G¨A¤J°	Ô0EÀuÑMÔM��å$Ø˜7 IÔ$5°yÔ7Lñô ��ð —-’- ¨¤
¨IÔ,AÀ5ÑIÔIˆCà×%Ò% g¨s°EÑ:Ô:ˆ	ØÔ+ˆÝ˜I˜;µ#Ð6Ñ6Ô6ˆð ˜8Ò#ÐU¨	¬¸Ð(=ÐUÀoÐBUð 	ð ñ	@à Ò(Ð(¨I¬M¸UÐ,BÑ,BØ”Ñ)à ˆMØ˜hÒ&Ñ&ð ×$Ò$ W¨Q¤ZÑ0Ô0ð>à”~ i°¤mÔ4Ô>Å&ÒHÐHà#*¨1¤:×#8Ò#8¸Ñ#BÔ#B�LØŸ-š-¨°¬
°IÔ4EÀaÔ4HÈ%ÑPÔP�CØ—J’J˜|˜|¨C°Ñ7Ô7½Ñ=Ô=Ð=õ ˜e¥SÑ)Ô)ð @¨d×.>Ò.>¸u¼|Ñ.LÔ.Lð @Ø#(¤<×#:Ò#:¸8Ñ#DÔ#D�LØ—J’J˜|˜|¨E°5Ñ9Ô9½3Ñ?Ô?Ð?Ø¨Ð>�z�z¸BÐ>Ð>s   È$A+J Ê
K ÊJ;Ê5K Ê;K c                 óN   — |                       t          ||f¦  «        ¦  «         d S r4   )Úadd_qr   )r|   Ú
filter_lhsÚ
filter_rhss      r;   Ú
add_filterzQuery.add_filter<  s'   € Ø�
Š
•1�j *Ð-Ñ.Ô.Ñ/Ô/Ð/Ð/Ð/r=   c                 óØ   ‡ — ˆ fd„‰ j         D ¦   «         }‰                      |‰ j        ¦  «        \  }}|r ‰ j                             |t
          ¦  «         ‰                      |¦  «         dS )zo
        A preprocessor for the internal _add_q(). Responsible for doing final
        join promotion.
        c                 óJ   •— h | ]}‰j         |         j        t          k    ¯|’Œ S rV   rr  )r9   rZ  r|   s     €r;   rV  zQuery.add_q.<locals>.<setcomp>J  s4   ø€ ð 
ð 
ð 
Ø¨¬¸Ô):Ô)DÍÒ)MÐ)MˆAÐ)MÐ)MÐ)Mr=   N)r»   rX  r¿   rÀ   r,  r(   rÅ  )r|   Úq_objectÚexisting_innerrg  r9  s   `    r;   rk  zQuery.add_q?  s�   ø€ ð
ð 
ð 
ð 
Ø”~ð
ñ 
ô 
ˆð —K’K ¨$Ô*;Ñ<Ô<‰	ˆ�Øð 	(ØŒJ�NŠN˜6¥3Ñ'Ô'Ð'Ø×Ò˜.Ñ)Ô)Ð)Ð)Ð)r=   c                 ó<   — |                       |d¬¦  «        d         S )NF)rü   r   )ri  )r|   r^  s     r;   Úbuild_wherezQuery.build_whereR  s    € Ø× Ò  ¸%Ð Ñ@Ô@ÀÔCÐCr=   c                 ó,   — t          ¦   «         | _        d S r4   )r,   rÀ   r™   s    r;   Úclear_wherezQuery.clear_whereU  s   € Ý‘[”[ˆŒ
ˆ
ˆ
r=   c
                 óž  — |j         }
||j        z  }|p|j        }t          |
|j        ¬¦  «        }t          |j         t	          |j        ¦  «        |¦  «        }|j        D ]P}|                      |||||||||	¬¦	  «	        \  }}|                     |¦  «         |r|                     ||
¦  «         ŒQ|	r| 	                    | ¦  «        }ng }||fS )z%Add a Q-object to the current filter.)ri   rj   )r!  rN  rO  rü   rP  r7  rþ   r  )
ri   rj   r,   r{  rÆ   rM   ri  r|  r,  r  )r|   rq  r¿   rN  rO  rü   rP  r7  rþ   r  ri   Útarget_clauser‰  rI   Úchild_clauseÚneeded_inners                   r;   rX  zQuery._add_qX  s  € ð Ô&ˆ	Ø˜8Ô+Ñ+ˆØ'Ð;¨8Ô+;ˆÝ!¨I¸xÔ?OÐPÑPÔPˆÝ#ØÔ¥ HÔ$5Ñ 6Ô 6¸ñ
ô 
ˆð Ô&ð 	;ð 	;ˆEØ)-×):Ò):ØØ&Ø-Ø /Ø'Ø%Ø!1Ø#Ø"3ð *;ñ 
*ô 
*Ñ&ˆL˜,ð ×"Ò" <Ñ0Ô0Ð0Øð ;Ø×!Ò! ,°	Ñ:Ô:Ð:øØð 	Ø'×9Ò9¸$Ñ?Ô?ˆLˆLàˆLØ˜lÐ*Ð*r=   c           	      ó6  — ||_         |                      |j        ¦  «        \  }}}|rt          d|j        z  ¦  «        ‚t	          |j        ¦  «        D ]–}|                      |¦  «        \  }}}|sdnd}	|d |	 …         }
t          |
¦  «        D ]Z\  }}t          |¦  «        |k    r(||         |k    rt          d|j        ›d|›d�¦  «        ‚Œ@t          d|›d|j        ›d�¦  «        ‚Œ—t          |j        ||j        ¦  «        |_        || j	        |j         <   d S )	NzAFilteredRelation's relation_name cannot contain lookups (got %r).rp  rT   zCFilteredRelation's condition doesn't support relations outside the z (got z).zaFilteredRelation's condition doesn't support nested relations deeper than the relation_name (got z for )
rÏ   r-  r–  rb   rG   r_  rÓ  rÆ   r^   rÃ   )r|   rž  rÏ   Úrelation_lookup_partsÚrelation_field_partsr9  r(  r+  Úlookup_field_partsÚshiftÚlookup_field_pathÚidxÚlookup_field_parts                r;   Úadd_filtered_relationzQuery.add_filtered_relation�  s�  € Ø"'ÐÔØ9=×9OÒ9OØÔ+ñ:
ô :
Ñ6ÐÐ3°Qð !ð 	ÝðØ/Ô=ñ>ñô ð õ *Ð*;Ô*EÑFÔFð 	ð 	ˆFØ26×2HÒ2HÈÑ2PÔ2PÑ/ˆLÐ,¨aØ)Ð0�A�A¨qˆEØ 2°7°U°F°7Ô ;ÐÝ*3Ð4EÑ*FÔ*Fð ð Ñ&�Ð&ÝÐ+Ñ,Ô,¨sÒ2Ð2Ø+¨CÔ0Ð4EÒEÐEÝ(˜jð  1Ô>Ð>Ð>ÀÀÀðHñô ð ð Fõ %˜*ð #) & &Ð*;Ô*IÐ*IÐ*IðKñô ð ðõ ';ØÔ+ØØÔ'ñ'
ô '
ÐÔ#ð
 =NˆÔ Ð!2Ô!8Ñ9Ð9Ð9r=   c           	      óî  — g g }}t          |¦  «        D �]P\  }}|g f}	|dk    r|�|j        j        }d}
d}	 |€t          ‚|                     |¦  «        }
nÊ# t          $ r½ || j        v r| j        |         j        }
nž|| j        v r•|dk    r�| j        |         }t          |j	        v rZ|j	         
                    t          ¦  «        }|                      ||||¦  «        \  }}
}}|                     |dd…         ¦  «         n|                     |j	        ¦  «        }
Y nw xY w|
�E|
j        r|
j        st          d|z  ¦  «        ‚	 |
j        j        j        }nv# t&          $ r d}Y nhw xY w|dz  }|dk    s|rTt)          g t+          |¦  «        ¢| j        ¢| j        ¢¦  «        }t          d|›dd	                     |¦  «        ›�¦  «        ‚ �n›|�]||j        urT|                     |¦  «        }|r=|                     |¦  «         |	d                              |¦  «         |d         j        }t3          |
d
¦  «        rï|r|
                     |¦  «        }n|
j        }|sjt          |¦  «        D ]Z\  }}|j        rN|	d                              |d|dz   …         ¦  «         |                     |	¦  «         t=          |dz   |¦  «        ‚Œ[|d         }|                     |¦  «         |j        }|j        }|j         }|	d                              |¦  «         |                     |	¦  «         �Œ|
}|
f}|r5|dz   tC          |¦  «        k    rt          d||dz            ›d|›d�¦  «        ‚ |||||dz   d…         fS )aì  
        Walk the list of names and turns them into PathInfo tuples. A single
        name in 'names' can generate multiple PathInfos (m2m, for example).

        'names' is the path of names to travel, 'opts' is the model Options we
        start the name resolving from, 'allow_many' is as for setup_joins().
        If fail_on_missing is set to True, then a name that can't be resolved
        will generate a FieldError.

        Return a list of PathInfo tuples. In addition return the final field
        (the last used join field) and target (which is a field guaranteed to
        contain the same value as the final field). Finally, return those names
        that weren't found (which are likely transforms and the final lookup).
        r)  Nr   ró  z¬Field %r does not generate an automatic reverse relation and therefore cannot be used for reverse querying. If it is a GenericForeignKey, consider adding a GenericRelation.rT   zCannot resolve keyword 'z' into field. Choices are: ú, Ú
path_infosúCannot resolve keyword z into field. Join on 'z' not permitted.)"rÓ  r)  r6   r   r•  r{   rÌ   rÃ   r   r–  r§  r'  r¿  r‘  rœ  r   r¹   rÞ   r“  ÚAttributeErrorÚsortedrB   rj  Úget_path_to_parentÚto_optsrF   Úget_path_infor†  Úm2mr°  r'   r  Útarget_fieldsrÆ   )r|   ÚnamesrA   rW  Úfail_on_missingro   r[  r×  r6   Úcur_names_with_pathrÉ   rž  ra  Úfiltered_relation_pathr9  r¹   Ú	availableÚpath_to_parentÚ	pathinfosÚ	inner_posÚpÚlastrl   rm   s                           r;   r'  zQuery.names_to_path¤  ss  € ð !# BˆoˆÝ" 5Ñ)Ô)ð a	ñ a	‰IˆC�Ø#'¨ *ÐØ�tŠ|ˆ| Ð 0Ø”w”|�àˆEØ $ÐðPØ�<Ý+Ð+ØŸš tÑ,Ô,��øÝ$ð Pð Pð PØ˜4Ô1Ð1Ð1Ø Ô2°4Ô8ÔE�E�EØ˜TÔ5Ð5Ð5¸#Àº(¸(Ø(,Ô(@ÀÔ(FÐ%Ý!Ð%6Ô%DÐDÐDØ 1Ô ?× EÒ EÅjÑ QÔ Q˜Ø>B×>PÒ>PØ!Ø Ø&Ø+ñ	?ô ?Ñ;Ð.°°q¸!ð ŸšÐ$:¸3¸B¸3Ô$?Ñ@Ô@Ð@Ð@à $§¢Ð/@Ô/NÑ OÔ O˜øøðPøøøð  Ð ð Ô$ð ¨UÔ-@ð Ý$ð4ð 7;ñ;ñô ð ð!Ø!œKÔ-Ô<�E�EøÝ%ð !ð !ð !ð !�E�E�Eð!øøøð �q‘�Ø˜"’9�9 �9Ý &ðÝ6°tÑ<Ô<ðà!Ô3ðð "Ô5ðñ!ô !�Iõ %˜*à-1¨T¨T°4·9²9¸YÑ3GÔ3GÐ3GðIñô ð ð ‘ð Ð E°´Ð$;Ð$;Ø!%×!8Ò!8¸Ñ!?Ô!?�Ø!ð 6Ø—K’K Ñ/Ô/Ð/Ø'¨Ô*×1Ò1°.ÑAÔAÐAØ)¨"Ô-Ô5�DÝ�u˜lÑ+Ô+ð Ø$ð 1Ø %× 3Ò 3Ð4EÑ FÔ F�I�Ià %Ô 0�IØ!ð FÝ(1°)Ñ(<Ô(<ð Fð F™˜	 1Øœ5ð FØ/°Ô2×9Ò9¸)ÀAÈ	ÐTUÉÐDUÔ:VÑWÔWÐWØ+×2Ò2Ð3FÑGÔGÐGÝ"+¨C°!©G°_Ñ"EÔ"EÐEðFð ! ”}�Ø—’˜IÑ&Ô&Ð&Ø"œo�Ø”|�ØÔ,�Ø# AÔ&×-Ò-¨iÑ8Ô8Ð8Ø×&Ò&Ð':Ñ;Ô;Ð;Ñ;ð $�Ø ˜(�Ø"ð  s¨Q¡wµ#°e±*´*Ò'<Ð'<Ý$˜*à-2°3¸±7¬^¨^¨^¸T¸T¸TðCñô ð ð Ø�[ '¨5°°q±°°Ô+;Ð;Ð;s$   ·AÁCDÄDÅEÅE$Å#E$c           
      óú  ‡ ‡‡— |g}ˆ fd„}dŠt          t          |¦  «        dd¦  «        D ]T}	 ‰                      |d|…         ||d¬¦  «        \  }	Š}
}||d…         } n # t          $ r}|dk    r‚ |ŠY d}~ŒMd}~ww xY w|D ]'}ˆˆˆ fd„}t	          j        |||¬	¦  «        }d|_        Œ(|	D ]»}|j        r!|j                             ¦   «         }|j	        }nd}d}|j
        }|j        r‰                      |j        ¦  «        }nd}‰                      |j        ||t           |j        ||¬
¦  «        }|j        r|nd}‰                      ||¬¦  «        }|                     |¦  «         Œ¼t)          ‰|
|||	|¦  «        S )a‚  
        Compute the necessary table joins for the passage through the fields
        given in 'names'. 'opts' is the Options class for the current model
        (which gives the table we are starting from), 'alias' is the alias for
        the table to start the joining from.

        The 'can_reuse' defines the reverse foreign key joins we can reuse. It
        can be None in which case all joins are reusable or a set of aliases
        that can be reused. Note that non-reverse foreign keys are always
        reusable when using setup_joins().

        If 'allow_many' is False, then any reverse foreign key seen will
        generate a MultiJoin exception.

        Return the final field involved in the joins, the target field (used
        for any 'where' constraint), the final 'opts' value, the joins, the
        field path traveled to generate the joins, and a transform function
        that takes a field and alias and is equivalent to `field.get_col(alias)`
        in the simple case but wraps field transforms if they were included in
        names.

        The target field is the field containing the concrete value. Final
        field can be something different, for example foreign key pointing to
        that value. Final field is needed for example in some value
        conversions (convert 'obj' in fk__id=obj to pk val using the foreign
        key field for example).
        c                 ó@   •— ‰j         sd }|                      |¦  «        S r4   r÷   )rÉ   rÏ   r|   s     €r;   Úfinal_transformerz,Query.setup_joins.<locals>.final_transformerA  s$   ø€ Ø”?ð Ø�Ø—=’= Ñ'Ô'Ð'r=   Nr   ró  T)r�  rT   c                óš   •— 	  || |¦  «        }‰                      ||¦  «        S # t          $ r t          ‰t          ¦  «        r‰r‰‚‚ w xY wr4   )r<  r   rE   r   )rÉ   rÏ   r6   ÚpreviousÚwrappedrl   Úlast_field_exceptionr|   s        €€€r;   Ú	transformz$Query.setup_joins.<locals>.transform_  sm   ø€ ðØ&˜h u¨eÑ4Ô4�GØ×-Ò-¨g°tÑ<Ô<Ð<øÝ!ð ð ð å! +­uÑ5Ô5ð Ð:Nð Ø2Ð2àðøøøs	   ƒ!% ¥%A
)r6   r�  )rž  ru  )ÚrangerÆ   r'  r   Ú	functoolsÚpartialÚhas_transformsrž  r€   rÏ   r‹  Údirectr]  r  Ú
join_classrì  r    r�  rj  r°  rk   )r|   r�  rA   rÏ   r!  rW  rn   r›  Úpivotro   rm   ÚrestrA  Úexcr6   r   rj  rž  r³  r½  r¬   rý   rl   rŸ  s   `                     @@r;   rü  zQuery.setup_joins  sC  øøø€ ðF �ˆð	(ð 	(ð 	(ð 	(ð 	(ð  $ÐÝ�3˜u™:œ: q¨"Ñ-Ô-ð 	ð 	ˆEðØ37×3EÒ3EØ˜&˜5˜&”MØØØ$(ð	 4Fñ 4ô 4Ñ0��k 7¨Dð  # 5 6 6œ]�
Ø�øõ ð /ð /ð /Ø˜A’:�:ð à+.Ð(Ð(Ð(Ð(Ð(Ð(øøøøð/øøøð ð 	4ð 	4ˆDð	ð 	ð 	ð 	ð 	ð 	ð 	õ !*Ô 1Ø Ð/@ð!ñ !ô !Ðð 04ÐÔ,Ð,ð ð 	 ð 	 ˆDØÔ%ð #Ø$(Ô$:×$@Ò$@Ñ$BÔ$BÐ!Ø/Ô5��à$(Ð!Ø"�Ø”<ˆDØŒ{ð  Ø×+Ò+¨D¬OÑ<Ô<��à�ØŸšØ”ØØÝØ”ØØ"3ð )ñ ô ˆJð "&¤Ð3�I�I¨tˆEØ—I’I˜j°�IÑ6Ô6ˆEØ�LŠL˜ÑÔÐÐÝ˜ W¨d°E¸4ÐARÑSÔSÐSs   ¯&A!Á!
A>Á+	A9Á9A>c                 óä  ‡‡— |dd…         }t          t          |¦  «        ¦  «        D ]½\  }}t          |¦  «        dk    s|j        s n�|j        r n”d„ |j        j        D ¦   «         }d„ |D ¦   «         Š‰                     |¦  «        s n[ˆfd„|j        j        D ¦   «         Št          ˆfd„|D ¦   «         ¦  «        }|  
                    |                     ¦   «         ¦  «         Œ¾||d         |fS )aâ  
        The 'target' parameter is the final field being joined to, 'joins'
        is the full list of join aliases. The 'path' contain the PathInfos
        used to create the joins.

        Return the final target field and table alias and the new active
        joins.

        Always trim any direct join if the target column is already in the
        previous table. Can't trim reverse joins as it's unknown if there's
        anything on the other side of the join.
        NrT   c                 ó   — h | ]	}|j         ’Œ
S rV   ©Úcolumn©r9   Úts     r;   rV  z#Query.trim_joins.<locals>.<setcomp>ž  s   € ÐUÐUÐU¨˜AœHÐUÐUÐUr=   c                 ó   — h | ]	}|j         ’Œ
S rV   r¬  r®  s     r;   rV  z#Query.trim_joins.<locals>.<setcomp>Ÿ  s   € Ð5Ð5Ð5¨˜1œ8Ð5Ð5Ð5r=   c                 óV   •— i | ]%}|d          j         ‰v ¯|d          j         |d         “Œ&S )rT   r   r¬  )r9   ÚrÚcur_targetss     €r;   r¦   z$Query.trim_joins.<locals>.<dictcomp>¢  s@   ø€ ð ð ð àØ�Q”4”; +Ð-Ð-ð �!””˜Q˜qœTà-Ð-Ð-r=   c              3   ó2   •K  — | ]}‰|j                  V — Œd S r4   r¬  )r9   r¯  Útargets_dicts     €r;   r<   z#Query.trim_joins.<locals>.<genexpr>§  s*   øè è € ÐDÐD°q˜L¨¬Ô2ÐDÐDÐDÐDÐDÐDr=   ró  )rÓ  ÚreversedrÆ   r¥  rž  r  Úforeign_related_fieldsÚissubsetÚrelated_fieldsrN   r~  rì   )	r|   rm   rn   ro   r×  ÚinfoÚjoin_targetsr³  rµ  s	          @@r;   r\  zQuery.trim_joins‹  s%  øø€ ð �a�a�a”ˆÝ"¥8¨D¡>¤>Ñ2Ô2ð 	*ð 	*‰IˆC�Ý�5‰zŒz˜QŠˆ d¤kˆØ�ØÔ%ð Ø�ØUÐU¨d¬oÔ.TÐUÑUÔUˆLØ5Ð5¨WÐ5Ñ5Ô5ˆKØ×'Ò'¨Ñ5Ô5ð Ø�ðð ð ð àœÔ7ðñ ô ˆLõ
 ÐDÐDÐDÐD¸GÐDÑDÔDÑDÔDˆGØ×Ò˜UŸYšY™[œ[Ñ)Ô)Ð)Ð)Ø˜˜bœ	 5Ð(Ð(r=   c              #   ón  K  — |D ]¯}t          |t          ¦  «        r|V — Œ|r9t          t          |dd ¦  «        ¦  «        r|                     ¦   «         E d {V —† ŒWt          |d¦  «        rH|st          |t          ¦  «        rŒ|                      |                     ¦   «         ||¬¦  «        E d {V —† Œ°d S )Nr  rd   )r  r  )	rE   r   ÚcallablerÈ   r  rF   r   r-  rd   )Úclsr  r  r  rH   s        r;   r-  zQuery._gen_cols«  s  è è € àð 	ð 	ˆDÝ˜$¥Ñ$Ô$ð Ø�
�
�
�
Ø!ð ¥hÝ˜Ð1°4Ñ8Ô8ñ'ô 'ð ð  ×1Ò1Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ý˜Ð7Ñ8Ô8ð Ø#ð ­
°4½Ñ(=Ô(=ð ØØŸ=š=Ø×/Ò/Ñ1Ô1Ø%5Ø!-ð )ñ ô ð ð ð ð ð ð ð øð	ð 	r=   c              #   óT   K  — d„ |                       |¦  «        D ¦   «         E d {V —† d S )Nc              3   ó$   K  — | ]}|j         V — Œd S r4   )rÏ   )r9   rH   s     r;   r<   z)Query._gen_col_aliases.<locals>.<genexpr>¿  s$   è è € Ð@Ð@ 4�D”JÐ@Ð@Ð@Ð@Ð@Ð@r=   )r-  )r¾  r  s     r;   Ú_gen_col_aliaseszQuery._gen_col_aliases½  s>   è è € à@Ð@¨3¯=ª=¸Ñ+?Ô+?Ð@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@r=   c                 óÈ  — | j                              |¦  «        }|�„|sH|                      |g¦  «        D ]1}t          | j        |         t
          ¦  «        rt          d¦  «        ‚Œ2|r6|| j        vrt          d|z  ¦  «        ‚t          || j        |         ¦  «        S |S | 	                    t          ¦  «        }| j                              |d         ¦  «        }|�%|dd …         D ]}|                      ||¦  «        }Œ|S |                      ||                      ¦   «         |                      ¦   «         |¬¦  «        }	|                      |	j        |	j        |	j        ¦  «        \  }
}}|s"t'          |¦  «        dk    rt          d¦  «        ‚t'          |
¦  «        dk    rt          d¦  «        ‚|	                     |
d         |¦  «        }|�|                     |¦  «         |S )NrR  zCCannot aggregate over the '%s' alias. Use annotate() to promote it.r   rT   )r!  z?Referencing multicolumn fields with F() objects isn't supported)rÁ   r.  rÁ  rE   r»   r&   r   r{   r   r§  r   r<  rü  rß   r*  r\  rm   rn   ro   rÆ   rp   r‚  )r|   r6   rü   rý   rþ   r	  rÏ   Ú
field_listr   r  rm   Úfinal_aliasre  s                r;   Úresolve_refzQuery.resolve_refÁ  s*  € ØÔ%×)Ò)¨$Ñ/Ô/ˆ
ØÐ!Øð Ø!×2Ò2°J°<Ñ@Ô@ð ð �EÝ! $¤.°Ô"7½Ñ>Ô>ð Ý(ØUñô ð ðð ð "ð
 ˜tÔ5Ð5Ð5Ý$ð)Ø+/ñ0ñô ð õ ˜4 Ô!7¸Ô!=Ñ>Ô>Ð>à!Ð!àŸš¥JÑ/Ô/ˆJØÔ)×-Ò-¨j¸¬mÑ<Ô<ˆJØÐ%Ø!+¨A¨B¨B¤ð Kð K�IØ!%×!3Ò!3°JÀ	Ñ!JÔ!J�J�JØ!Ð!Ø×(Ò(Ø˜DŸMšM™OœO¨T×-CÒ-CÑ-EÔ-EÐQVð )ñ ô ˆIð /3¯oªoØÔ! 9¤?°I´Nñ/ô /Ñ+ˆG�[ )ð ð ¥3 y¡>¤>°AÒ#5Ð#5Ý ØMñô ð õ �7‰|Œ|˜aÒÐÝ ØUñô ð ð
 "×4Ò4°W¸Q´ZÀÑMÔMˆIØÐ Ø—’˜YÑ'Ô'Ð'ØÐr=   c                 ót  — |                       | j        ¦  «        }| j        |_        |\  }}t          |t          ¦  «        rt	          |¦  «        }n)t          |t
          ¦  «        rt	          |j        ¦  «        }|                     ||¦  «         |                     d¬¦  «         | 	                    |¦  «        \  }}|j
        d         }	|	j        }
|	j        }||v r¨|
j        j        j        }|                     | ¦  «         |
                     d¦  «        } ||                     |j
        d         j        ¦  «        |                     |¦  «        ¦  «        }|j                             |t(          ¦  «         d|j        |<   nN|
                     d¦  «        } ||	t-          |¦  «        ¦  «        }|j                             |t(          ¦  «         |                      t1          |¦  «        ¦  «        \  }}|r<|                      d|z  dfdd|¬¦  «        \  }}|                     |t2          ¦  «         ||fS )aÄ  
        When doing an exclude against any kind of N-to-many relation, we need
        to use a subquery. This method constructs the nested query, given the
        original exclude filter (filter_expr) and the portion up to the first
        N-to-many relation field.

        For example, if the origin filter is ~Q(child__name='foo'), filter_expr
        is ('child__name', 'foo') and can_reuse is a set of joins usable for
        filters in the original query.

        We will turn this into equivalent of:
            WHERE NOT EXISTS(
                SELECT 1
                FROM child
                WHERE name = 'foo' AND child.parent_id = parent.id
                LIMIT 1
            )
        Tr  r   r9  z
%s__isnull)rO  rN  r!  )r—   r¹   rÃ   rE   r   r   r6   rn  r'  Ú
trim_startrÇ   rÅ   rÏ   rÞ   r)  rz  r=  rø   rÀ   r,  r(   r½   r   ri  r   r)   )r|   r^  r!  r[  râ   rl  rm  Útrimmed_prefixÚcontains_louterrB  Úselect_fieldrÏ   r)  rC  r(  r_  rz  Úor_null_conditionr9  s                      r;   rZ  zQuery.split_excludeó  s.  € ð( —’˜tœzÑ*Ô*ˆØ$(Ô$<ˆÔ!Ø!,Ñˆ
�JÝ�j¥(Ñ+Ô+ð 	3Ý! *Ñ-Ô-ˆJˆJÝ˜
¥AÑ&Ô&ð 	3Ý! *¤/Ñ2Ô2ˆJØ×Ò˜ ZÑ0Ô0Ð0Ø×Ò 4ÐÑ(Ô(Ð(ð +0×*:Ò*:¸?Ñ*KÔ*KÑ'ˆ˜àŒl˜1ŒoˆØ”zˆØ”	ˆØ�IÐÐØÔ#Ô)Ô,ˆBð ×Ò˜dÑ#Ô#Ð#Ø'×2Ò2°7Ñ;Ô;ˆLð "�\ "§*¢*¨U¬\¸!¬_Ô-BÑ"CÔ"CÀRÇZÂZÐPUÑEVÔEVÑWÔWˆFØŒK�OŠO˜F¥CÑ(Ô(Ð(Ø,0ˆEÔ" 5Ñ)Ð)à'×2Ò2°7Ñ;Ô;ˆLØ!�\ #Õ'7¸Ñ'GÔ'GÑHÔHˆFØŒK�OŠO˜F¥CÑ(Ô(Ð(à"&×"3Ò"3µF¸5±M´MÑ"BÔ"BÑˆ	�<àð 	1Ø#'×#4Ò#4Ø Ñ.°Ð5Ø $Ø#Ø#ð	 $5ñ $ô $Ñ Ð˜qð �MŠMÐ+­RÑ0Ô0Ð0ð ˜,Ð&Ð&r=   c                 óš   — | j                              t          ¦   «         t          ¦  «         | j        D ]}|                     ¦   «          Œd S r4   )rÀ   r,  r+   r(   ræ   Ú	set_empty)r|   râ   s     r;   rÍ  zQuery.set_empty8  sK   € ØŒ
�Š•{‘}”}¥cÑ*Ô*Ð*ØÔ*ð 	ð 	ˆEØ�OŠOÑÔÐÐð	ð 	r=   c                 óH   — t          d„ | j        j        D ¦   «         ¦  «        S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r4   )rE   r+   )r9   rg   s     r;   r<   z!Query.is_empty.<locals>.<genexpr>>  s,   è è € ÐKÐK°!•:˜a¥Ñ-Ô-ÐKÐKÐKÐKÐKÐKr=   )r  rÀ   rM   r™   s    r;   Úis_emptyzQuery.is_empty=  s$   € ÝÐKÐK°t´zÔ7JÐKÑKÔKÑKÔKÐKr=   c                 ó>  — |�9| j         �#t          | j         | j        |z   ¦  «        | _         n| j        |z   | _         |�9| j         �#t          | j         | j        |z   ¦  «        | _        n| j        |z   | _        | j        | j         k    r|                      ¦   «          dS dS )a‡  
        Adjust the limits on the rows retrieved. Use low/high to set these,
        as it makes it more Pythonic to read and write. When the SQL query is
        created, convert them to the appropriate offset and limit values.

        Apply any limits passed in here to the existing constraints. Add low
        to the current low value and clamp both to any existing high value.
        N)ry   Úminrx   rÍ  )r|   ÚlowrY  s      r;   r_  zQuery.set_limits@  s    € ð ÐØŒ~Ð)Ý!$ T¤^°T´]ÀTÑ5IÑ!JÔ!J�”�à!%¤°Ñ!5�”Øˆ?ØŒ~Ð)Ý # D¤N°D´MÀCÑ4GÑ HÔ H�”�à $¤°Ñ 3�”àŒ=˜DœNÒ*Ð*Ø�NŠNÑÔÐÐÐð +Ð*r=   c                 ó$   — d\  | _         | _        dS )zClear any existing limits.rs   N©rx   ry   r™   s    r;   r/  zQuery.clear_limitsW  s   € à(/Ñ%ˆŒ�t”~�~�~r=   c                 ó*   — | j         dk    p| j        d uS )Nr   rÕ  r™   s    r;   r!  zQuery.is_sliced[  s   € àŒ} Ò!Ð? T¤^¸4Ð%?Ð?r=   c                 ó:   — | j         d uo| j         | j        z
  dk    S )NrT   )ry   rx   r™   s    r;   Úhas_limit_onezQuery.has_limit_one_  s#   € ØŒ~ TÐ)ÐS¨t¬~ÀÄÑ/MÐRSÒ.SÐSr=   c                 ó   — | j          S )z¥
        Return True if adding filters to this instance is still possible.

        Typically, this means no limits or offsets have been put on the results.
        )r!  r™   s    r;   Ú
can_filterzQuery.can_filterb  s   € ð ”>Ð!Ð!r=   c                 ó„   — d| _         d| _        d| _        |                      d¦  «         |                      d¦  «         dS )z%Remove all fields from SELECT clause.rV   FN)rÇ   r(  rê   rƒ  r  r™   s    r;   r^  zQuery.clear_select_clausej  sG   € àˆŒØ!ˆÔØ#ˆÔØ×Ò˜BÑÔÐØ× Ò  Ñ$Ô$Ð$Ð$Ð$r=   c                 ó"   — d| _         d| _        dS )z°
        Clear the list of fields to select (but not extra_select columns).
        Some queryset types completely replace any existing list of select
        columns.
        rV   N©rÇ   Úvalues_selectr™   s    r;   Úclear_select_fieldszQuery.clear_select_fieldsr  s   € ð ˆŒØˆÔÐÐr=   c                 óJ   — | xj         |fz  c_         | xj        |fz  c_        d S r4   rÝ  )r|   rB  r6   s      r;   Úadd_select_colzQuery.add_select_col{  s0   € ØˆŒ˜�vÑˆŒØÐÔ˜t˜gÑ%ÐÔÐÐr=   c                 ó<   — d| _         t          |¦  «        | _        d S )NF)r(  rN   rÇ   )r|   Úcolss     r;   r�  zQuery.set_select  s   € Ø!ˆÔÝ˜D‘k”kˆŒˆˆr=   c                 ó"   — || _         d| _        dS )zW
        Add and resolve the given fields to the query's "distinct on" clause.
        TN)ry  r"  )r|   r¨  s     r;   Úadd_distinct_fieldszQuery.add_distinct_fieldsƒ  s   € ð  +ˆÔØˆŒˆˆr=   c           	      óÆ  — |                       ¦   «         }|                      ¦   «         }	 g }|D ]‹}|                      |                     t          ¦  «        |||¬¦  «        }|                      |j        |j        |j        ¦  «        \  }}	}
|D ]+}| 	                    | 
                    ||	¦  «        ¦  «         Œ,ŒŒ|r|                      |¦  «         dS dS # t          $ r t          d|z  ¦  «        ‚t          $ rf t          |v r‚ t          g t          |¦  «        ¢| j        ¢| j        ¢| j        ¢¦  «        }t          d|›dd                     |¦  «        ›�¦  «        ‚w xY w)zu
        Add the given (model) fields to the select set. Add the field names in
        the order specified.
        )rW  zInvalid field name: '%s'r‡  z into field. Choices are: r…  N)r*  rß   rü  r§  r   r\  rm   rn   ro   r°  rp   r�  r'   r   r‰  rB   rÂ   r{   rÃ   rj  )r|   r¨  Ú	allow_m2mrÏ   rA   rã  r6   r  rm   rÄ  rn   rÅ   r�  s                r;   r[  zQuery.add_fieldsŠ  sÒ  € ð
 ×&Ò&Ñ(Ô(ˆØ�}Š}‰Œˆð$	ØˆDØ#ð Sð S�ð !×,Ò,Ø—J’J�zÑ*Ô*¨D°%ÀIð -ñ ô �	ð /3¯oªoØÔ%Ø”OØ”Nñ/ô /Ñ+�˜ eð
 &ð Sð S�FØ—K’K 	× <Ò <¸VÀ[Ñ QÔ QÑRÔRÐRÐRðSàð &Ø—’ Ñ%Ô%Ð%Ð%Ð%ð&ð &øåð 	@ð 	@ð 	@ÝÐ7¸$Ñ>Ñ?Ô?Ð?Ýð 	ð 	ð 	Ý˜TÐ!Ð!ð åðÝ2°4Ñ8Ô8ðàœðð Ô/ðð Ô1ð	ñô �õ !�jà)-¨¨¨t¯yªy¸Ñ/?Ô/?Ð/?ðAñô ð ð	øøøs   ªB'C ÃBE c                 ó  — g }|D ]Ï}t          |t          ¦  «        rp|dk    rŒ|                     d¦  «        }|| j        v rŒ=| j        r
|| j        v rŒN|                      |                     t          ¦  «        | j        j	        ¦  «         n%t          |d¦  «        s|                     |¦  «         t          |dd¦  «        rt          d|z  ¦  «        ‚ŒÐ|rt          d|z  ¦  «        ‚|r| xj        |z  c_        dS d| _        dS )	a8  
        Add items from the 'ordering' sequence to the query's "order by"
        clause. These items are either field names (not column names) --
        possibly with a direction prefix ('-' or '?') -- or OrderBy
        expressions.

        If 'ordering' is empty, clear all ordering from the query.
        ú?ú-rL   r  Fz[Using an aggregate in order_by() without also including it in annotate() is not allowed: %szInvalid order_by arguments: %sN)rE   ÚstrÚremoveprefixrÁ   rÂ   r'  r§  r   r¹   rÞ   rF   r°  rÈ   r   r…  Údefault_ordering)r|   ÚorderingÚerrorsÚitems       r;   Úadd_orderingzQuery.add_ordering¸  sG  € ð ˆØð 	ð 	ˆDÝ˜$¥Ñ$Ô$ð $Ø˜3’;�;ØØ×(Ò(¨Ñ-Ô-�Ø˜4Ô+Ð+Ð+ØØ”:ð  $¨$¬*Ð"4Ð"4Øð ×"Ò" 4§:¢:­jÑ#9Ô#9¸4¼:Ô;KÑLÔLÐLÐLÝ˜TÐ#7Ñ8Ô8ð $Ø—’˜dÑ#Ô#Ð#Ý�tÐ1°5Ñ9Ô9ð Ý ð:Ø<@ñAñô ð ðð
 ð 	HÝÐ=ÀÑFÑGÔGÐGØð 	*ØˆMŒM˜XÑ%ˆMŒMˆMˆMà$)ˆDÔ!Ð!Ð!r=   c                 ój   — |s| j         s| j        s| j        rdS d| _        d| _        |r	d| _        dS dS )a  
        Remove any ordering settings if the current query allows it without
        side effects, set 'force' to True to clear the ordering regardless.
        If 'clear_default' is True, there will be no ordering in the resulting
        query (not even the model's default).
        NrV   F)r!  ry  r&  r…  r†  rí  )r|   r  Úclear_defaults      r;   r'  zQuery.clear_orderingÜ  sb   € ð ð 	ØŒNð	Ø"Ô2ð	Ø6:Ô6Lð	ð ˆFØˆŒØ ˆÔØð 	*Ø$)ˆDÔ!Ð!Ð!ð	*ð 	*r=   c                 óž  — |rª| j         r£i }i }t          | j         | j        ¦  «        D ]%\  }}t          |t          ¦  «        r|||<   Œ |||<   Œ&i |¥| j        ¥| _        |                      |¦  «         t          |                     ¦   «         ¦  «        | _        t          |¦  «        | _         t          | j        ¦  «        }| j
                             ¦   «         D ]^\  }}|                     ¦   «         x}sŒ|r+|j        s$|                     t          ||¦  «        ¦  «         ŒI|                     |¦  «         Œ_t          |¦  «        | _        dS )a?  
        Expand the GROUP BY clause required by the query.

        This will usually be the set of all non-aggregate fields in the
        return data. If the database backend supports grouping by the
        primary key, and the query would be equivalent, the optimization
        will be made automatically.
        N)rÞ  r3  rÇ   rE   r   rÁ   r  rN   rË   r�   r{   r©   r+  r  r°  r   r¿  r   )	r|   rS  Úgroup_by_annotationsrÞ  rÏ   rH   r   r	  Úgroup_by_colss	            r;   r]  zQuery.set_group_byì  sm  € ð ð 	6˜TÔ/ð 	6ð $&Ð ØˆMÝ" 4Ô#5°t´{ÑCÔCð 7ð 7‘��tÝ˜d¥CÑ(Ô(ð 7Ø+/�M %Ñ(Ð(à26Ð(¨Ñ/Ð/ØKÐ"6ÐK¸$Ô:JÐKˆDÔØ×'Ò'Ð(<Ñ=Ô=Ð=Ý × 4Ò 4Ñ 6Ô 6Ñ7Ô7ˆDŒKÝ!& }Ñ!5Ô!5ˆDÔÝ˜œÑ$Ô$ˆØ!%Ô!7×!=Ò!=Ñ!?Ô!?ð 	/ð 	/ÑˆE�:Ø%/×%AÒ%AÑ%CÔ%CÐC�Mð ØØð / ZÔ%Bð /Ø—’¥ E¨:Ñ 6Ô 6Ñ7Ô7Ð7Ð7à—’ Ñ.Ô.Ð.Ð.Ý˜h™œˆŒˆˆr=   c                 óÐ   — t          | j        t          ¦  «        ri }n| j        }|D ]7}|}|                     t          ¦  «        D ]}|                     |i ¦  «        }ŒŒ8|| _        dS )z³
        Set up the select_related data structure so that we only select
        certain related models (as opposed to all models, when
        self.select_related=True).
        N)rE   rê   Úboolr§  r   r�  )r|   ÚfieldsÚ
field_dictrÉ   Údr«  s         r;   Úadd_select_relatedzQuery.add_select_related	  s   € õ �dÔ)­4Ñ0Ô0ð 	-ØˆJˆJàÔ,ˆJØð 	+ð 	+ˆEØˆAØŸš¥JÑ/Ô/ð +ð +�Ø—L’L  rÑ*Ô*��ð+à(ˆÔÐÐr=   c                 ó¬  — |rõi }|rt          |¦  «        }nt          g ¦  «        }|                     ¦   «         D ]£\  }	}
|                      |	¦  «         t          |
¦  «        }
g }|
                     d¦  «        }|dk    rV|dk    s|
|dz
           dk    r"|                     t          |¦  «        ¦  «         |
                     d|dz   ¦  «        }|dk    °V|
|f||	<   Œ¤| j                             |¦  «         |s|r.| j	         
                    t          ||¦  «        t          ¦  «         |r| xj        t          |¦  «        z  c_        |r	|| _        dS dS )zm
        Add data to the various extra_* attributes for user-created additions
        to the query.
        z%sró  r   rT   ú%rp  N)r‘   r©   r  rë  Úfindr°  rÊ   rÂ   r‚  rÀ   r,  r*   r(   r„  rN   r†  )r|   rÇ   Úselect_paramsrÀ   rt   Útablesr…  Úselect_pairsÚ
param_iterr6   ÚentryÚentry_paramsr×  s                r;   Ú	add_extrazQuery.add_extra	  s‚  € ð
 ð 	,ð
 ˆLØð &Ý! -Ñ0Ô0�
�
å! "™XœX�
Ø%Ÿ|š|™~œ~ð 	;ð 	;‘��eØ× Ò  Ñ&Ô&Ð&Ý˜E™
œ
�Ø!�Ø—j’j Ñ&Ô&�Ø˜R’i�iØ˜a’x�x 5¨¨q©¤>°SÒ#8Ð#8Ø$×+Ò+­D°Ñ,<Ô,<Ñ=Ô=Ð=ØŸ*š* T¨3°©7Ñ3Ô3�Cð ˜R’i�ið ',¨\Ð%:�˜TÑ"Ð"ØŒJ×Ò˜lÑ+Ô+Ð+Øð 	;�Fð 	;ØŒJ�NŠN�: e¨VÑ4Ô4µcÑ:Ô:Ð:Øð 	/ØÐÔ¥ v¡¤Ñ.ÐÔØð 	+Ø"*ˆDÔÐÐð	+ð 	+r=   c                 ó0   — t          ¦   «         df| _        dS )z0Remove any fields from the deferred loading set.TN)Ú	frozensetr¦  r™   s    r;   Úclear_deferred_loadingzQuery.clear_deferred_loading>	  s   € å!*¡¤¨dÐ 3ˆÔÐÐr=   c                 ó$  — | j         \  }}|r|                     |¦  «        df| _         dS |                     |¦  «        x}r|df| _         dS |                      ¦   «          t	          |¦  «                             |¦  «        x}r|df| _         dS dS )aj  
        Add the given list of model field names to the set of fields to
        exclude from loading from the database when automatic column selection
        is done. Add the new field names to any existing field names that
        are deferred (or removed from any existing field names that are marked
        as the only ones for immediate loading).
        TFN)r¦  rT  Ú
differencer	  r>   )r|   r¨  Úexistingr©  Únew_existingÚnew_onlys         r;   Úadd_deferred_loadingzQuery.add_deferred_loadingB	  s¸   € ð Ô/‰ˆ�%Øð 
	;à$,§N¢N°;Ñ$?Ô$?ÀÐ$EˆDÔ!Ð!Ð!ð  (×2Ò2°;Ñ?Ô?Ð?ˆ|ð ;Ø(4°eÐ(;�Ô%Ð%Ð%à×+Ò+Ñ-Ô-Ð-Ý" ;Ñ/Ô/×:Ò:¸8ÑDÔDÐD�8ð ;Ø,4°d¨N�DÔ)Ð)Ð)ð;ð ;r=   c                 ó8  — | j         \  }}t          |¦  «        }d|v rF|                     d¦  «         |                     |                      ¦   «         j        j        ¦  «         |r|                     |¦  «        df| _         dS t          |¦  «        df| _         dS )a  
        Add the given list of model field names to the set of fields to
        retrieve when the SQL is executed ("immediate loading" fields). The
        field names replace any existing immediate loading field names. If
        there are field names already specified for deferred loading, remove
        those names from the new field_names before storing the new names
        for immediate loading. (That is, immediate loading overrides any
        existing immediate values, but respects existing deferrals.)
        r)  FN)	r¦  r>   Úremover,  rß   r)  r6   r  r  )r|   r¨  r  r©  s       r;   Úadd_immediate_loadingzQuery.add_immediate_loading[	  s¥   € ð Ô/‰ˆ�%Ý˜+Ñ&Ô&ˆØ�;ÐÐØ×Ò˜tÑ$Ô$Ð$Ø�OŠO˜DŸMšM™OœOÔ.Ô3Ñ4Ô4Ð4àð 	Bð %0×$:Ò$:¸8Ñ$DÔ$DÀeÐ$KˆDÔ!Ð!Ð!õ %.¨kÑ$:Ô$:¸EÐ$AˆDÔ!Ð!Ð!r=   c                 ó€   — |€d| _         n,t          t                               |¦  «        ¦  «        | _         d| _        dS )z@Set the mask of annotations that will be returned by the SELECT.N)rå   r�   rœ   r	  rç   ©r|   r�  s     r;   r  zQuery.set_annotation_masks	  s<   € àˆ=Ø*.ˆDÔ'Ð'å*.­t¯}ª}¸UÑ/CÔ/CÑ*DÔ*DˆDÔ'Ø(,ˆÔ%Ð%Ð%r=   c                 óV   — | j         �!|                      g | j         ¢|¢R ¦  «         d S d S r4   )rå   r  r  s     r;   r  zQuery.append_annotation_mask{	  s>   € ØÔ&Ð2Ø×$Ò$Ð%K tÔ'BÐ%KÀUÐ%KÐ%KÑLÔLÐLÐLÐLð 3Ð2r=   c                 óP   — |€d| _         nt          |¦  «        | _         d| _        dS )zž
        Set the mask of extra select items that will be returned by SELECT.
        Don't remove them from the Query since they might be used later.
        N)rè   r>   ré   r  s     r;   rƒ  zQuery.set_extra_mask	  s0   € ð
 ˆ=Ø%)ˆDÔ"Ð"å%(¨¡Z¤ZˆDÔ"Ø#'ˆÔ Ð Ð r=   c                 ó.  — d| _         |                      ¦   «          |                      ¦   «          d| _        |�r8|D ]}|                      |¦  «         Œg }g }g }| j        s| j        st          |¦  «        }nºd| _        |D ]°}|| j	        v r| 
                    |¦  «         Œ!|| j        v r| 
                    |¦  «         Œ@|| j        v rt          d|› d�¦  «        ‚| j        r8|                      |                     t          ¦  «        | j        j        ¦  «         | 
                    |¦  «         Œ±|                      |¦  «         |                      |¦  «         t)          ||z   |z   ¦  «        }n*d„ | j        j        j        D ¦   «         }t)          |¦  «        }| j        du rZ|                      d„ | j        j        j        D ¦   «         d¦  «         |                      d¬¦  «         |                      ¦   «          nl| j        reg }| j        D ]G}	t3          |	t4          ¦  «        r|	j        |vr| j        |	j                 }	| 
                    |	¦  «         ŒHt9          |¦  «        | _        t9          |¦  «        | _        |                      |d¦  «         d S )NFTzCannot select the 'z&' alias. Use annotate() to promote it.c                 ó   — g | ]	}|j         ‘Œ
S rV   rQ  r8   s     r;   r\   z$Query.set_values.<locals>.<listcomp>±	  s   € ÐOÐOÐO¨˜1œ9ÐOÐOÐOr=   c              3   ó$   K  — | ]}|j         V — Œd S r4   rQ  r8   s     r;   r<   z#Query.set_values.<locals>.<genexpr>·	  s$   è è € ÐEÐE˜q�”ÐEÐEÐEÐEÐEÐEr=   rR  )rê   r	  rß  r2  r  rÂ   rÁ   r�   r(  rz   r°  r{   r   r'  r§  r   r¹   rÞ   rƒ  r  r  r\  r   r[  r]  rE   r   ÚrefsrN   rÞ  )
r|   rù  rÉ   r¨  Úextra_namesÚannotation_namesr:   Úselectedr   rH   s
             r;   Ú
set_valueszQuery.set_valuesŠ	  sî  € Ø#ˆÔØ×#Ò#Ñ%Ô%Ð%Ø× Ò Ñ"Ô"Ð"Ø!%ˆÔàñ "	.Øð (ð (�Ø× Ò  Ñ'Ô'Ð'Ð'ØˆKØˆKØ!ÐØ”:ð . dÔ&6ð .õ # 6™lœl��à$)�Ô!Øð .ð .�AØ˜DÔ-Ð-Ð-Ø#×*Ò*¨1Ñ-Ô-Ð-Ð-Ø˜dÔ4Ð4Ð4Ø(×/Ò/°Ñ2Ô2Ð2Ð2Ø˜dÔ.Ð.Ð.Ý(ð*°!ð *ð *ð *ñô ð ð  Ô1ð VØ ×.Ò.¨q¯wªwµzÑ/BÔ/BÀDÄJÔDTÑUÔUÐUØ#×*Ò*¨1Ñ-Ô-Ð-Ð-Ø×Ò Ñ,Ô,Ð,Ø×$Ò$Ð%5Ñ6Ô6Ð6Ý  ¨{Ñ!:Ð=MÑ!MÑNÔNˆHˆHàOÐO¨d¬jÔ.>Ô.NÐOÑOÔOˆKÝ  Ñ-Ô-ˆHð Œ=˜DÐ Ð Ø�OŠOØEÐE D¤JÔ$4Ô$DÐEÑEÔEÀuñô ð ð
 ×Ò¨EÐÑ2Ô2Ð2Ø×$Ò$Ñ&Ô&Ð&Ð&ØŒ]ð 	,ð ˆHØœð &ð &�Ý˜d¥CÑ(Ô(ð 7¨T¬Y¸hÐ-FÐ-FØÔ+¨D¬IÔ6�DØ—’ Ñ%Ô%Ð%Ð%Ý! (™OœOˆDŒMå" ;Ñ/Ô/ˆÔØ�Š˜ TÑ*Ô*Ð*Ð*Ð*r=   c                 óŒ   ‡ — ‰ j         �‰ j         S ‰ j        si S ‰ j        �ˆ fd„‰ j        D ¦   «         ‰ _         ‰ j         S ‰ j        S )z¤
        Return the dictionary of aggregate columns that are not masked and
        should be used in the SELECT clause. Cache this result for performance.
        Nc                 ó>   •— i | ]}|‰j         v ¯|‰j         |         “ŒS rV   )rÁ   )r9   rT  r|   s     €r;   r¦   z+Query.annotation_select.<locals>.<dictcomp>Õ	  s;   ø€ ð -ð -ð -àØ˜Ô(Ð(Ð(ð �4Ô# AÔ&à(Ð(Ð(r=   )rç   rÁ   rå   r™   s   `r;   r{   zQuery.annotation_selectÊ	  sr   ø€ ð Ô(Ð4ØÔ0Ð0ØÔ!ð 
	$ØˆIØÔ(Ð4ð-ð -ð -ð -àÔ4ð-ñ -ô -ˆDÔ)ð
 Ô0Ð0àÔ#Ð#r=   c                 ó°   ‡ — ‰ j         �‰ j         S ‰ j        si S ‰ j        �1ˆ fd„‰ j                             ¦   «         D ¦   «         ‰ _         ‰ j         S ‰ j        S )Nc                 ó.   •— i | ]\  }}|‰j         v ¯||“ŒS rV   )rè   )r9   rT  r3  r|   s      €r;   r¦   z&Query.extra_select.<locals>.<dictcomp>å	  s3   ø€ ð (ð (ð (Ù˜˜A°q¸DÔ<RÐ7RÐ7R��1Ð7RÐ7RÐ7Rr=   )ré   rÂ   rè   r©   r™   s   `r;   rz   zQuery.extra_selectÞ	  sy   ø€ àÔ#Ð/ØÔ+Ð+ØŒzð 	ØˆIØÔ#Ð/ð(ð (ð (ð (Ø!%¤×!1Ò!1Ñ!3Ô!3ð(ñ (ô (ˆDÔ$ð Ô+Ð+à”:Ðr=   c                 ó®  ‡ ‡— g }|D ]\  }}|                      |¦  «         Œd}ˆ fd„‰ j        D ¦   «         }t          |¦  «        D ]Q\  }}|j        r nD‰ j        ||dz                     j        t
          k    rd}||         }	‰                      |	¦  «         ŒR|j        j        }
|}g }|D ]D\  }}|t          |¦  «        z
  dk     r n(| 
                    |¦  «         |t          |¦  «        z  }ŒE| 
                    |
j        d         j        ¦  «         t          j        |¦  «        }‰ j        ||dz                     }|j        t
          k    r€|j        syd„ |
j        D ¦   «         }||dz            Š‰                      ||         ¦  «         |
                     d||dz            ¦  «        }|r ‰ j                             |t(          ¦  «         nd„ |
j        D ¦   «         }||         Š‰ j        D ]C}‰ j        |         dk    r0‰                      ‰ j        |         j        |¦  «        ‰ j        |<    nŒD‰                      ˆfd	„|D ¦   «         ¦  «         ||fS )
aî  
        Trim joins from the start of the join path. The candidates for trim
        are the PathInfos in names_with_path structure that are m2m joins.

        Also set the select column so the start matches the join.

        This method is meant to be used for generating the subquery joins &
        cols in split_exclude().

        Return a lookup usable for doing outerq.filter(lookup=self) and a
        boolean indicating if the joins in the prefix contain a LEFT OUTER join.
        _Fc                 ó<   •— g | ]}|‰j         v s|‰j        k    ¯|‘ŒS rV   )rY  rÐ   )r9   r¯  r|   s     €r;   r\   z$Query.trim_start.<locals>.<listcomp> 
  s9   ø€ ð 
ð 
ð 
Ø¨¨dÔ.@Ð)@Ð)@ÀAÈÌÒDXÐDXˆAÐDXÐDXÐDXr=   rT   Tr   c                 ó   — g | ]
}|d          ‘ŒS r…   rV   ©r9   r²  s     r;   r\   z$Query.trim_start.<locals>.<listcomp>
  ó   € ÐEÐEÐE a˜Q˜qœTÐEÐEÐEr=   Nc                 ó   — g | ]
}|d          ‘ŒS rï  rV   r&  s     r;   r\   z$Query.trim_start.<locals>.<listcomp>*
  r'  r=   c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rV   )rø   )r9   r:   Úselect_aliass     €r;   r\   z$Query.trim_start.<locals>.<listcomp>6
  s%   ø€ ÐHÐHÐH°Q˜Ÿš <Ñ0Ô0ÐHÐHÐHr=   )r¿  r»   rÓ  r�  rs  r!   r~  r  rÉ   rÆ   r°  r·  r6   r   rj  rž  r¹  Úget_extra_restrictionrÀ   r,  r(   rº   rë  r±  r�  )r|   r[  Ú	all_pathsr9  ÚpathsrÉ  Úlookup_tablesÚtrimmed_pathsro   rÏ   r  Úpaths_in_prefixrÈ  r6   Ú
first_joinÚselect_fieldsÚextra_restrictionr  r*  s   `                 @r;   rÇ  zQuery.trim_startì	  sÔ  øø€ ð ˆ	Ø'ð 	$ð 	$‰HˆAˆuØ×Ò˜UÑ#Ô#Ð#Ð#Øˆð
ð 
ð 
ð 
Ø”~ð
ñ 
ô 
ˆõ $-¨YÑ#7Ô#7ð 	$ð 	$ÑˆM˜4ØŒxð Ø�ØŒ~˜m¨M¸AÑ,=Ô>Ô?ÔIÍVÒSÐSØ"&�Ø! -Ô0ˆEØ×Ò˜UÑ#Ô#Ð#Ð#à”_Ô*ˆ
à'ˆØˆØ)ð 	)ð 	)‰JˆD�$Ø¥ T¡¤Ñ*¨QÒ.Ð.Ø�Ø×!Ò! $Ñ'Ô'Ð'Ø�s 4™yœyÑ(ˆOˆOØ×Ò˜jÔ?ÀÔBÔGÑHÔHÐHÝ#œ¨Ñ8Ô8ˆð ”^ M°-À!Ñ2CÔ$DÔEˆ
ØÔ¥6Ò)Ð)°*Ô2NÐ)ØEÐE¨:Ô+DÐEÑEÔEˆMØ(¨¸Ñ):Ô;ˆLØ×Ò˜]¨=Ô9Ñ:Ô:Ð:Ø *× @Ò @Ø�m M°AÑ$5Ô6ñ!ô !Ðð !ð 7Ø”
—’Ð0µ#Ñ6Ô6Ð6øð
 FÐE¨:Ô+DÐEÑEÔEˆMØ(¨Ô7ˆLð ”^ð 	ð 	ˆEØÔ" 5Ô)¨AÒ-Ð-Ø(,×(=Ò(=Ø”N 5Ô)Ô4Øñ)ô )�”˜uÑ%ð �ð .ð 	�ŠÐHÐHÐHÐH¸-ÐHÑHÔHÑIÔIÐIØ˜Ð.Ð.r=   c                 óV   — |j         p"|j        ot          t                   j        j        S )a  
        Check if the given field should be treated as nullable.

        Some backends treat '' as null and Django treats such fields as
        nullable for those backends. In such situations field.null can be
        False even if we should treat the field as nullable.
        )ÚnullÚempty_strings_allowedr   r   rŽ   r?  )r|   rÉ   s     r;   r]  zQuery.is_nullable9
  s.   € ð Œzð 
ØÔ'ð YÝÕ,Ô-Ô6ÔXð	
r=   )T)NNTr4   )FNrï  )F)FFNTTTFT)FFTTTFT)TF)NT)FT)TNF)NN)Šr˜   r­   r®   r¯   r¯  r  r  rã   rÛ   r$   rë  r&   r¦  r(  rí  Ústandard_orderingrð   r%  rÇ   r   r…  rx   ry   r"  ry  r&  Úselect_for_update_nowaitÚselect_for_update_skip_lockedÚselect_for_update_ofÚselect_for_no_key_updaterê   r2  Ú	max_depthrÞ  rå   rç   r#  Úcombinator_allræ   rè   ré   r„  r†  r¦  ri  r}   r°   rÌ   r-   rÐ   rŸ   rÒ   rÙ   rÔ   rß   r€   r   rõ   rù   rH  rL  rN  rW  rc  rm  rŽ  r”  r£  r¬  r³  r¶  r~  rÂ  rÅ  rÊ  ró   rz  r*  rð  rj  r  r  r`  rL   r  r+  rÕ   r  r-  r0  r4  r7  rD  r<  ri  rn  rk  rt  rv  rX  rƒ  r'  rü  r\  Úclassmethodr-  rÁ  rÅ  rZ  rÍ  rÐ  r_  r/  r!  rØ  rÚ  r^  rß  rá  r�  rå  r[  rñ  r'  r]  rü  r  r	  r  r  r  r  rƒ  r  r{   rz   rÇ  r]  rV   r=   r;   r0   r0   Û   s¼  € € € € € ØÐà€LØ!ÐØ�9˜l˜^Ñ,Ô,€Là€Hà ÐØ€Jà€LØÐØÐàÐØ€Hð €Fð €HØ€HØ€HØ€IØ€HØ€OØÐØ$ÐØ$)Ð!ØÐØ$ÐØ€NØÐà€Ið €Mð "ÐØ#Ðð €JØ€NØÐð ÐØÐà€LØ€Nð "˜	™œ TÐ*Ðà€Lð&ð &ð &ð &ð8 ðLð Lñ „XðLð ðð ñ „_ðð	ð 	ð 	ð<ð <ð <ðð ð ð
ð 
ð 
ð 
ð$ð $ð $ð+ð +ð +ðZð ð ð ðð ð ð
,ð ,ð ,ð
q@ð q@ð q@ðfNð Nð Nðð ð ðð ð ð ð,&ð &ð &ð

3ð 
3ð 
3ð 
3ðqHð qHð qHðf,ð ,ð ,ð ,ð\ð ð ð ð.6ð 6ð 6ð,ð ð ð ð6(ð (ð (ð-ð -ð -ð -ð#ð #ð #ðJ1ð 1ð 1ð&2ð 2ð 2ð+
ð +
ð +
ðZ5
ð 5
ð 5
ð 5
ðnð ð ðKð Kð Kð4ð 4ð 4ð 4ðl#ð #ð #ðBð ð ð-ð -ð -ð -ðð ð ð:
ð 
ð 
ðð ð ð ðð ð ðð ð ð ð*0ð 0ð 0ð 0ð.
ð 
ð 
ðAð Að Að.,ð ,ð ,ð,ð ,ð ,ð\ð ð ð2 ØØØØØØØðb?ð b?ð b?ð b?ðH0ð 0ð 0ð*ð *ð *ð&Dð Dð Dð!ð !ð !ð ØØØØØØð'+ð '+ð '+ð '+ðR!Nð !Nð !NðFr<ð r<ð r<ð r<ðr ØðqTð qTð qTð qTðf)ð )ð )ð@ ðð ð ñ „[ðð" ðAð Añ „[ðAð0ð 0ð 0ð 0ðdC'ð C'ð C'ðJð ð ð
Lð Lð Lðð ð ð ð.0ð 0ð 0ð ð@ð @ñ „Xð@ðTð Tð Tð"ð "ð "ð%ð %ð %ð ð  ð  ð&ð &ð &ð"ð "ð "ðð ð ð,ð ,ð ,ð ,ð\"*ð "*ð "*ðH*ð *ð *ð *ð (ð (ð (ð (ðB)ð )ð )ð +ð +ð +ðB4ð 4ð 4ð;ð ;ð ;ð2Bð Bð Bð0-ð -ð -ðMð Mð Mð	(ð 	(ð 	(ð>+ð >+ð >+ð@ ð$ð $ñ „Xð$ð& ðð ñ „XððK/ð K/ð K/ðZ
ð 
ð 
ð 
ð 
r=   ÚASCc                 ól   — t           |         }| d         dk    r| dd…         |d         fS | |d         fS )a  
    Return the field name and direction for an order specification. For
    example, '-foo' is returned as ('foo', 'DESC').

    The 'default' param is used to indicate which way no prefix (or a '+'
    prefix) should sort. The '-' prefix always sorts the opposite way.
    r   rê  rT   N)r"   )rÉ   ÚdefaultÚdirns      r;   Úget_order_dirrC  L
  s@   € õ �WÔ€DØˆQ„x�3‚€Ø�Q�R�RŒy˜$˜qœ'Ð!Ð!Ø�$�q”'ˆ>Ðr=   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )r{  z]
    A class to abstract away join promotion problems for complex filter
    conditions.
    c                 óÆ   — || _         || _        | j        r%|t          k    rt          | _        nt          | _        n| j         | _        || _        t          ¦   «         | _        d S r4   )ri   rj   r(   r)   Úeffective_connectorÚnum_childrenr   Úvotes)r|   ri   rG  rj   s       r;   r}   zJoinPromoter.__init__`
  s^   € Ø"ˆŒØˆŒØŒ<ð 	6Ø�CÒÐÝ+-�Ô(Ð(å+.�Ô(Ð(à'+¤~ˆDÔ$Ø(ˆÔõ ‘Y”YˆŒ
ˆ
ˆ
r=   c                 óP   — | j         j        › d| j        ›d| j        ›d| j        ›d�S )Nz(connector=z, num_children=z
, negated=ú))r—   r®   ri   rG  rj   r™   s    r;   rš   zJoinPromoter.__repr__o
  sT   € àŒ~Ô*ð Mð M°t´~ð Mð MØ Ô-ðMð MØ;?¼<ðMð Mð Mð	
r=   c                 ó:   — | j                              |¦  «         dS )z`
        Add single vote per item to self.votes. Parameter can be any
        iterable.
        N)rH  r‚  )r|   rH  s     r;   r|  zJoinPromoter.add_votesu
  s    € ð
 	Œ
×Ò˜%Ñ Ô Ð Ð Ð r=   c                 ó°  — t          ¦   «         }t          ¦   «         }| j                             ¦   «         D ]u\  }}| j        t          k    r || j        k     r|                     |¦  «         | j        t          k    s| j        t          k    r || j        k    r|                     |¦  «         Œv|                     |¦  «         | 	                    |¦  «         |S )a  
        Change join types so that the generated query is as efficient as
        possible, but still correct. So, change as many joins as possible
        to INNER, but don't make OUTER joins INNER if that could remove
        results from the query.
        )
r>   rH  r©   rF  r)   rG  r,  r(   rÂ  rÅ  )r|   râ   Ú
to_promoteÚ	to_demoter  rH  s         r;   r  zJoinPromoter.update_join_types|
  sÖ   € õ ‘U”Uˆ
Ý‘E”Eˆ	ð !œJ×,Ò,Ñ.Ô.ð 	%ð 	%‰LˆE�5ð Ô'­2Ò-Ð-°%¸$Ô:KÒ2KÐ2KØ—’˜uÑ%Ô%Ð%ð Ô'­3Ò.Ð.ØÔ(­BÒ.Ð.°5¸DÔ<MÒ3MÐ3Mà—’˜eÑ$Ô$Ð$øð  	×Ò˜JÑ'Ô'Ð'Ø×Ò˜9Ñ%Ô%Ð%ØÐr=   N)r˜   r­   r®   r¯   r}   rš   r|  r  rV   r=   r;   r{  r{  Z
  sZ   € € € € € ðð ð
ð ð ð
ð 
ð 
ð!ð !ð !ð7ð 7ð 7ð 7ð 7r=   r{  )r?  )Sr¯   ra   rG  r¢  rå  Úcollectionsr   r   Úcollections.abcr   r   Ú	itertoolsr   r   r	   Ústringr
   Údjango.core.exceptionsr   r   Ú	django.dbr   r   r   Údjango.db.models.aggregatesr   Údjango.db.models.constantsr   Údjango.db.models.expressionsr   r   r   r   r   r   r   r   Údjango.db.models.fieldsr   Ú'django.db.models.fields.related_lookupsr   Údjango.db.models.lookupsr   Údjango.db.models.query_utilsr   r   r   Údjango.db.models.sql.constantsr    r!   r"   r#   Ú#django.db.models.sql.datastructuresr$   r%   r&   r'   Údjango.db.models.sql.wherer(   r)   r*   r+   r,   Údjango.utils.functionalr-   Údjango.utils.regex_helperr.   Údjango.utils.treer/   Ú__all__r  rg  rB   rJ   rG   rX   r^   rk   r1   r±   r0   rC  r{  rV   r=   r;   ú<module>rc     sÊ  ððð ð €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø "Ð "Ð "Ð "Ð "Ð "à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ -Ð -Ð -Ð -Ð -Ð -Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð *Ð )Ð )Ð )Ð )Ð )Ø BÐ BÐ BÐ BÐ BÐ BØ +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð ð ð
 LÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø "Ð "Ð "Ð "Ð "Ð "à�JÐ
€ð +Ð*Ð+FÑGÔGÐ ð +Ð*¨9Ñ5Ô5Ð ðð ð ð6ð 6ð 6ð
8ð 
8ð 
8ð!ð !ð !ðHð ð ð ˆ:ØØMñô €ðF.ð F.ð F.ð F.ð F.ñ F.ô F.ð F.ðR ˆj˜Ð(=Ñ>Ô>€ðn%
ð n%
ð n%
ð n%
ð n%
ˆNñ n%
ô n%
ð n%
ðbKð ð ð ðYð Yð Yð Yð Yñ Yô Yð Yð Yð Yr=   