§
    ¤”jD] ã                   óÂ  — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZmZmZmZmZ d dlmZ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# d dl$m%Z%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0  G d„ de¦  «        Z1 G d„ d¦  «        Z2 G d„ de2¦  «        Z3 G d„ de2¦  «        Z4 G d„ de2¦  «        Z5 G d„ de2¦  «        Z6d„ Z7dS )é    N)Úpartial)Úchain)ÚEmptyResultSetÚ
FieldErrorÚFullResultSet)ÚDatabaseErrorÚNotSupportedError)Ú
LOOKUP_SEP)ÚFÚOrderByÚRawSQLÚRefÚValue)ÚCastÚRandom)ÚLookup)Úselect_related_descend)ÚCURSORÚGET_ITERATOR_CHUNK_SIZEÚMULTIÚ
NO_RESULTSÚ	ORDER_DIRÚSINGLE)ÚQueryÚget_order_dir)ÚAND)ÚTransactionManagementError)Úcached_property)Úmake_hashable)Ú_lazy_re_compilec                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚPositionRefc                 óZ   •— || _         t          ¦   «                              ||¦  «         d S ©N)ÚordinalÚsuperÚ__init__)Úselfr%   ÚrefsÚsourceÚ	__class__s       €úl/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.pyr'   zPositionRef.__init__   s*   ø€ ØˆŒÝ‰Œ×Ò˜˜vÑ&Ô&Ð&Ð&Ð&ó    c                 ó.   — t          | j        ¦  «        dfS )N© )Ústrr%   )r(   ÚcompilerÚ
connections      r,   Úas_sqlzPositionRef.as_sql#   s   € Ý�4”<Ñ Ô  "Ð$Ð$r-   )Ú__name__Ú
__module__Ú__qualname__r'   r3   Ú__classcell__©r+   s   @r,   r"   r"      sG   ø€ € € € € ð'ð 'ð 'ð 'ð 'ð%ð %ð %ð %ð %ð %ð %r-   r"   c                   ó  — e Zd Z edej        ej        z  ¦  «        Zd$d„Zd„ Z	d%d„Z
d%d„Zd„ Zd	„ Zd%d
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd&d„Z	 d'd„Zd„ Z	 d(d„Zd„ Zd„ Z	 	 	 	 	 d)d„Zd„ Zd„ Zd„ Zddde fd„Z!d „ Z"e#de fd!„Z$d"„ Z%d#„ Z&dS )*ÚSQLCompilerz^(.*)\s(?:ASC|DESC).*Tc                 óˆ   — || _         || _        || _        || _        ddi| _        d | _        d | _        d | _        d | _        d S )NÚ*)	Úqueryr2   ÚusingÚelide_emptyÚquote_cacheÚselectÚannotation_col_mapÚ
klass_infoÚ_meta_ordering)r(   r=   r2   r>   r?   s        r,   r'   zSQLCompiler.__init__.   sS   € ØˆŒ
Ø$ˆŒØˆŒ
ð 'ˆÔØ ˜:ˆÔð
 ˆŒØ"&ˆÔØˆŒØ"ˆÔÐÐr-   c           	      óf   — d| j         j        › d| j        j        j        › d| j        ›d| j        ›d�	S )Nú<z model=z connection=z using=ú>)r+   r6   r=   Úmodelr2   r>   ©r(   s    r,   Ú__repr__zSQLCompiler.__repr__?   s_   € ðD�”Ô+ð Dð DØ”ZÔ%Ô2ðDð Dàœ/ðDð Dà48´JðDð Dð Dð	
r-   Fc                 ó  ‡ — t          ˆ fd„‰ j        j        D ¦   «         ¦  «        r‰ j                             ¦   «          ‰                      |¬¦  «        \  ‰ _        ‰ _        ‰ _        t          ‰ j        ¦  «        ‰ _	        d S )Nc              3   óD   •K  — | ]}‰j         j        |         d k    V — ŒdS ©r   N©r=   Úalias_refcount)Ú.0Úar(   s     €r,   ú	<genexpr>z*SQLCompiler.setup_query.<locals>.<genexpr>G   s2   øè è € ÐOÐO°QˆtŒzÔ(¨Ô+¨qÒ0ÐOÐOÐOÐOÐOÐOr-   ©Úwith_col_aliases)
Úallr=   Ú	alias_mapÚget_initial_aliasÚ
get_selectrA   rC   rB   ÚlenÚ	col_count)r(   rT   s   ` r,   Úsetup_queryzSQLCompiler.setup_queryF   s…   ø€ ÝÐOÐOÐOÐO¸$¼*Ô:NÐOÑOÔOÑOÔOð 	+ØŒJ×(Ò(Ñ*Ô*Ð*Ø@DÇÂØ-ð APñ A
ô A
Ñ=ˆŒ�T”_ dÔ&=õ ˜Tœ[Ñ)Ô)ˆŒˆˆr-   c                 óx  — |                       |¬¦  «         |                      ¦   «         }| j        j                             | j        j        du¬¦  «        \  | _        | _        | _        |                      || j	        ¦  «        }t          |¦  «        | _        |                      | j	        |z   |¦  «        }|||fS )zà
        Do any necessary class setup immediately prior to producing SQL. This
        is for things that can't necessarily be done in __init__ because we
        might not have all the pieces in place at that time.
        rS   N)Úmust_group_by)r[   Úget_order_byr=   ÚwhereÚsplit_having_qualifyÚgroup_byÚhavingÚqualifyÚget_extra_selectrA   ÚboolÚhas_extra_selectÚget_group_by)r(   rT   Úorder_byÚextra_selectra   s        r,   Úpre_sql_setupzSQLCompiler.pre_sql_setupN   s¹   € ð 	×ÒÐ*:ÐÑ;Ô;Ð;Ø×$Ò$Ñ&Ô&ˆØ04´
Ô0@×0UÒ0UØœ*Ô-°TÐ9ð 1Vñ 1
ô 1
Ñ-ˆŒ
�D”K ¤ð ×,Ò,¨X°t´{ÑCÔCˆÝ $ \Ñ 2Ô 2ˆÔØ×$Ò$ T¤[°<Ñ%?ÀÑJÔJˆØ˜X xÐ/Ð/r-   c                 ó  — | j         j        €g S g }t          ¦   «         }| j         j        dur¡| j         j        D ]”}t          |d¦  «        s| j                              |¦  «        }t          |t          ¦  «        r>|j        |vr4|                     |j        ¦  «         | 	                    |j
        ¦  «         Œ| 	                    |¦  «         Œ•i }t          |d¬¦  «        D ]<\  }\  }}}	|	r|||<   |	|v rŒ|                     |                     ¦   «         ¦  «         Œ=| j        s5|D ]2\  }\  }
}}|s'|                     |                     ¦   «         ¦  «         Œ3| j        r| j                             ¦   «         nd}|D ]}| 	                    |¦  «         Œg }t          ¦   «         }|                      ||¦  «        }| j        j        j        }|D ]»}	 |                      |¦  «        \  }
}n# t*          t,          f$ r Y Œ/w xY w|r)|                     |¦  «        x}�t1          |¦  «        d}}
n|                     | |
|¦  «        \  }
}t5          |¦  «        }|
|f|vr.| 	                    |
|f¦  «         |                     |
|f¦  «         Œ¼|S )zí
        Return a list of 2-tuples of form (sql, params).

        The logic of what exactly the GROUP BY clause contains is hard
        to describe in other words than "if it passes the test suite,
        then it is correct".
        NTr3   é   ©Ústartr/   )r=   ra   ÚsetÚhasattrÚresolve_refÚ
isinstancer   r)   ÚaddÚappendr*   Ú	enumerateÚextendÚget_group_by_colsrD   rb   Úcollapse_group_byr2   ÚfeaturesÚallows_group_by_select_indexÚcompiler   r   Úgetr0   Úselect_formatr   )r(   rA   rh   ÚexpressionsÚgroup_by_refsÚexprÚselected_expr_positionsr%   Ú_ÚaliasÚsqlÚparamsÚis_refÚhaving_group_byÚresultÚseenrz   ÚpositionÚparams_hashs                      r,   rg   zSQLCompiler.get_group_by^   s
  € ðL Œ:ÔÐ&ØˆIØˆÝ™œˆØŒ:Ô dÐ*Ð*ð œ
Ô+ð -ð -�Ý˜t XÑ.Ô.ð 8Øœ:×1Ò1°$Ñ7Ô7�DÝ˜d¥CÑ(Ô(ð -Ø”y¨Ð5Ð5Ø%×)Ò)¨$¬)Ñ4Ô4Ð4Ø#×*Ò*¨4¬;Ñ7Ô7Ð7øà×&Ò& tÑ,Ô,Ð,Ð,ð #%ÐÝ)2°6ÀÐ)CÑ)CÔ)Cð 	9ð 	9Ñ%ˆGÑ%�d˜A˜uØð 8Ø07Ð'¨Ñ-ð ˜Ð%Ð%ØØ×Ò˜t×5Ò5Ñ7Ô7Ñ8Ô8Ð8Ð8ØÔ"ð 	AØ/7ð Að AÑ+�Ñ+�s˜F Fð ð AØ×&Ò& t×'=Ò'=Ñ'?Ô'?Ñ@Ô@Ð@øØ=A¼[ÐP˜$œ+×7Ò7Ñ9Ô9Ð9ÈbˆØ#ð 	%ð 	%ˆDØ×Ò˜tÑ$Ô$Ð$Ð$ØˆÝ‰uŒuˆØ×,Ò,¨[¸/ÑJÔJˆð ŒOÔ$ÔAð 	%ð  ð 	-ð 	-ˆDðØ"Ÿlšl¨4Ñ0Ô0‘��V�VøÝ"¥MÐ2ð ð ð Ø�ðøøøð -ðDà!8×!<Ò!<¸TÑ!BÔ!BÐB�XÐOå! (™mœm¨R�V��à"×0Ò0°°s¸FÑCÔC‘��VÝ'¨Ñ/Ô/ˆKØ�[Ð!¨Ð-Ð-Ø—’˜s F˜mÑ,Ô,Ð,Ø—’˜#˜{Ð+Ñ,Ô,Ð,øØˆs   ÇG+Ç+G?Ç>G?c                 ó„   ‡ ‡‡‡— ‰ j         j        j        r*ˆ fd„|D ¦   «         Šd„ ‰D ¦   «         Šˆˆˆfd„|D ¦   «         }|S )Nc                 óž   •— h | ]I}t          |d ¦  «        ¯|j        j        ¯‰j        j                             |j        j        ¦  «        ¯G|’ŒJS )Útarget)rp   rŽ   Úprimary_keyr2   ry   Ú%allows_group_by_selected_pks_on_modelrH   ©rP   r€   r(   s     €r,   ú	<setcomp>z0SQLCompiler.collapse_group_by.<locals>.<setcomp>Ð   so   ø€ ð 
ð 
ð 
àå˜D (Ñ+Ô+ð	
ð
 œÔ/ð
ð œÔ0×VÒVØœÔ)ñô ð
Øð
ð 
ð 
r-   c                 ó   — h | ]	}|j         ’Œ
S r/   )rƒ   )rP   r€   s     r,   r’   z0SQLCompiler.collapse_group_by.<locals>.<setcomp>Û   s   € Ð2Ð2Ð2 d�t”zÐ2Ð2Ð2r-   c                 óJ   •— g | ]}|‰v s|‰v st          |d d¦  «        ‰v¯|‘Œ S )rƒ   N)Úgetattr)rP   r€   Úaliasesrb   Úpkss     €€€r,   ú
<listcomp>z1SQLCompiler.collapse_group_by.<locals>.<listcomp>Ü   sN   ø€ ð ð ð àØ˜3�;�;Ø˜6�>�>Ý˜4 ¨$Ñ/Ô/°wÐ>Ð>ð	 ð ?Ð>Ð>r-   )r2   ry   Úallows_group_by_selected_pks)r(   r~   rb   r–   r—   s   ` `@@r,   rx   zSQLCompiler.collapse_group_byÅ   s�   øøøø€ ð Œ?Ô#Ô@ð 	ð
ð 
ð 
ð 
à'ð
ñ 
ô 
ˆCð 3Ð2¨cÐ2Ñ2Ô2ˆGðð ð ð ð ð à'ðñ ô ˆKð Ðr-   c                 óú  ‡— g }d}i }d}| j         j                             ¦   «         D ]7\  }\  }}|||<   |                     t	          ||¦  «        |f¦  «         |dz  }Œ8| j         j        r| j         j        rJ ‚| j                              ¦   «         }	| j         j        r|                      |	¦  «        }
n| j         j        }
|
rGg }|
D ]3}|                     |¦  «         |                     |df¦  «         |dz  }Œ4| j         j	        |dœ}| j         j
                             ¦   «         D ]&\  }}|||<   |                     ||f¦  «         |dz  }Œ'| j         j        r+|                      ||	¦  «        }||d<   ˆfd„Š ‰|¦  «         g }d}|D ]ë\  }}	 |                      |¦  «        \  }}|                     | ||¦  «        \  }}nŠ# t          $ rM t!          |dt"          ¦  «        }|t"          u rd\  }}n%|                      t%          |¦  «        ¦  «        \  }}Y n4t&          $ r( |                      t%          d	¦  «        ¦  «        \  }}Y nw xY w|€|r
d
|› �}|dz  }|                     |||f|f¦  «         Œì|||fS )a   
        Return three values:
        - a list of 3-tuples of (expression, (sql, params), alias)
        - a klass_info structure,
        - a dictionary of annotations

        The (sql, params) is what the expression will produce, and alias is the
        "AS alias" for the column (possibly None).

        The klass_info structure contains the following information:
        - The base model of the query.
        - Which columns for that model are present in the query (by
          position of the select clause).
        - related_klass_infos: [f, klass_info] to descent into

        The annotations is a dictionary of {'attname': column position} values.
        Nr   rl   )rH   Úselect_fieldsÚrelated_klass_infosc                 ól   •— | d         D ])}|d         r| d         |d         z   |d<    ‰|¦  «         Œ*d S )Nrœ   Úfrom_parentr›   r/   )rC   ÚkiÚget_select_from_parents     €r,   r    z6SQLCompiler.get_select.<locals>.get_select_from_parent  sa   ø€ Ø$Ð%:Ô;ð /ð /�BØ˜-Ô(ð à& Ô7¸"¸_Ô:MÑMð ˜?Ñ+ð +Ð*¨2Ñ.Ô.Ð.Ð.ð/ð /r-   Úempty_result_set_value)Ú0r/   TÚcol)r=   ri   Úitemsrt   r   rA   Údefault_colsÚget_select_maskÚget_default_columnsrH   Úannotation_selectÚselect_relatedÚget_related_selectionsr{   r}   r   r•   ÚNotImplementedr   r   )r(   rT   rA   rC   ÚannotationsÚ
select_idxrƒ   r„   r…   Úselect_maskÚcolsÚselect_listr£   Ú
annotationrœ   ÚretÚcol_idxr¡   r    s                     @r,   rX   zSQLCompiler.get_selectå   s.  ø€ ð$ ˆØˆ
ØˆØˆ
Ø$(¤JÔ$;×$AÒ$AÑ$CÔ$Cð 	ð 	Ñ ˆE‘=�C˜Ø!+ˆK˜ÑØ�MŠM�6 # vÑ.Ô.°Ð6Ñ7Ô7Ð7Ø˜!‰OˆJˆJØ”JÔ%ÐB¨$¬*Ô*AÐBÐBÐBØ”j×0Ò0Ñ2Ô2ˆØŒ:Ô"ð 	%Ø×+Ò+¨KÑ8Ô8ˆDˆDð ”:Ô$ˆDØð 		ØˆKØð  ð  �Ø×"Ò" :Ñ.Ô.Ð.Ø—’˜s D˜kÑ*Ô*Ð*Ø˜a‘�
�
àœÔ)Ø!,ðð ˆJð "&¤Ô!=×!CÒ!CÑ!EÔ!Eð 	ð 	ÑˆE�:Ø!+ˆK˜ÑØ�MŠM˜: uÐ-Ñ.Ô.Ð.Ø˜!‰OˆJˆJàŒ:Ô$ð 	/Ø"&×"=Ò"=¸fÀkÑ"RÔ"RÐØ0CˆJÐ,Ñ-ð/ð /ð /ð /ð /ð #Ð" :Ñ.Ô.Ð.àˆØˆØ ð 	4ð 	4‰JˆC�ðCØ"Ÿlšl¨3Ñ/Ô/‘��Vð "×/Ò/°°c¸6ÑBÔB‘��V�Vøõ "ð Nð Nð NÝ)0ØÐ1µ>ñ*ô *Ð&ð *­^Ð;Ð;à")‘K�C˜˜à"&§,¢,­uÐ5KÑ/LÔ/LÑ"MÔ"M‘K�C˜øøÝ ð 8ð 8ð 8Ø"Ÿlšl­5°©;¬;Ñ7Ô7‘��V�V�Vð8øøøð ˆ}Ð!1ˆ}Ø'˜g˜˜�Ø˜1‘�Ø�JŠJ˜˜c 6˜]¨EÐ2Ñ3Ô3Ð3Ð3Ø�J Ð+Ð+s   ÆGÇAIÈ.IÉIc           
   #   ór	  K  — | j         j        r| j         j        }ne| j         j        s| j         j        }nL| j         j        r| j         j        }n3| j                              ¦   «         x}r|j        r|j        }|| _        ng }| j         j        rt          d         \  }}nt          d         \  }}i }|rA| j	        x}r8t          |d¬¦  «        D ]&\  }\  }}}	t          ||	|¦  «        }
|	r|
||	<   |
||<   Œ'|D �]À}t          |d¦  «        �rbt          |t          ¦  «        rt          ||j        ¦  «        }t          |t"          ¦  «        s|                     ¦   «         }| j         j        s(|                     ¦   «         }|                     ¦   «          |                     |j        ¦  «        }|s;t          |j        t.          ¦  «        r›|                     |j        j        ¦  «        x}rz|j        €|j        �| j        j        j        r|                     ¦   «         }||_        n?| j         j        r3|                     ¦   «         }t?          |j         |j!        ¦  «        |_        ||d ufV — �Œv|dk    r!t#          tE          ¦   «         ¦  «        dfV — �Œ�tG          ||¦  «        \  }}|dk    }|                     |¦  «        x}rt#          ||¬¦  «        d	fV — �Œä|| j         j$        v rv| j         j        r| j	        rt/          |¦  «        }n<| j         j$        |         }t          |t          ¦  «        rt          ||j        ¦  «        }t#          ||¬¦  «        dfV — �Œhd
|v rV| %                    d
d¦  «        \  }}t#          tM          |  '                    |¦  «        ›d
|›�g ¦  «        |¬¦  «        dfV — �ŒÂ| j         j(        r†|| j         j(        v rx|| j         j)        v r<t#          t?          |tM          | j         j(        |         Ž ¦  «        |¬¦  «        d	fV — �Œ&t#          tM          | j         j(        |         Ž |¬¦  «        dfV — �ŒT| j         j        r+| j	        r$t#          t/          |¦  «        |¬¦  «        dfV — �Œ‹|  *                    || j                              ¦   «         |¬¦  «        E d {V —† �ŒÂd S )NÚASCÚDESCrl   rm   Úresolve_expressionú?F©Ú
descendingTú.)Údefault_order)+r=   Úextra_order_byÚdefault_orderingrh   Úget_metaÚorderingrD   Ústandard_orderingr   rA   ru   r"   rp   rr   r   r   Úoutput_fieldr   ÚascÚcopyÚreverse_orderingr|   Ú
expressionr   ÚnameÚnulls_firstÚ
nulls_lastr2   ry   Ú supports_order_by_nulls_modifierÚ
combinatorr   r)   r*   r   r   r¬   Úsplitr   Úquote_name_unless_aliasÚextrari   Úfind_ordering_name)r(   rÀ   Úmetar¼   r‚   Úselected_exprsrA   r%   r€   rƒ   Úpos_exprÚfieldÚ
select_refr£   Úorderrº   Útables                    r,   Ú_order_by_pairszSQLCompiler._order_by_pairs<  s¨  è è € ØŒ:Ô$ð 
	Ø”zÔ0ˆHˆHØ”Ô,ð 	Ø”zÔ*ˆHˆHØŒZÔ ð 	Ø”zÔ*ˆHˆHØ”j×)Ò)Ñ+Ô+Ð+ˆdð 	°´ð 	Ø”}ˆHØ"*ˆDÔÐàˆHØŒ:Ô'ð 	1Ý(¨Ô/ÑˆM˜1˜1å(¨Ô0ÑˆM˜1àˆð ð 	0 4¤;Ð.˜ð 	0Ý-6°vÀQÐ-GÑ-GÔ-Gð 0ð 0Ñ)�Ñ)˜$  5Ý& w°°tÑ<Ô<�Øð 5Ø,4�N 5Ñ)Ø'/�˜tÑ$Ð$àð g	ñ g	ˆEÝ�uÐ2Ñ3Ô3ñ Ý˜e¥UÑ+Ô+ð <å  ¨Ô(:Ñ;Ô;�EÝ! %­Ñ1Ô1ð (Ø!ŸIšI™KœK�EØ”zÔ3ð -Ø!ŸJšJ™LœL�EØ×*Ò*Ñ,Ô,Ð,Ø+×/Ò/°Ô0@ÑAÔA�
Øð SÝ˜uÔ/µÑ3Ô3ðSà'5×'9Ò'9¸%Ô:JÔ:OÑ'PÔ'PÐP˜ðSð Ô)Ð1°eÔ6FÐ6NØœÔ1ÔRð 7Oà %§
¢
¡¤˜Ø+5˜Ô(Ð(ð œÔ.ð SØ %§
¢
¡¤˜Ý+.¨z¬À
Ô@QÑ+RÔ+R˜Ô(Ø˜Z¨tÐ3Ð3Ð3Ð3Ð3ÙØ˜Š|ˆ|Ý�f™hœhÑ'Ô'¨Ð.Ð.Ð.Ð.Ùå& u¨mÑ<Ô<‰JˆC�Ø &šˆJà+×/Ò/°Ñ4Ô4Ð4ˆzð 	õ Ø"Ø#-ðñ ô ð ðð ð ð ñ Ø�d”jÔ,Ð,Ð,ð ”:Ô(ð =¨T¬[ð =õ ˜S™6œ6�D�Dàœ:Ô1°#Ô6�DÝ! $­Ñ.Ô.ð =å# D¨$Ô*;Ñ<Ô<˜Ý˜d¨zÐ:Ñ:Ô:¸EÐAÐAÐAÐAÙà�eˆ|ˆ|ð !ŸYšY s¨AÑ.Ô.‘
��såÝØ'+×'CÒ'CÀEÑ'JÔ'JÐ'JÐ'JÈCÈCÐPÐRTñô ð $.ð	ñ ô ð ðð ð ð ñ àŒzÔð  C¨4¬:Ô+;Ð$;Ð$;Ø˜$œ*Ô1Ð1Ð1åÝ ¥V¨T¬ZÔ-=¸cÔ-BÐ%CÑDÔDØ'1ðñ ô ð ðð ð ð ñ õ  ¥¨¬
Ô(8¸Ô(=Ð >È:ÐVÑVÔVØðð ð ð ñ ð
 ”:Ô(ð ¨T¬[ð õ "¥! C¡&¤&°ZÐ@Ñ@Ô@À%ÐGÐGÐGÐGÑGð  $×6Ò6ØØœ
×+Ò+Ñ-Ô-Ø&3ð  7ñ  ô  ð ð ð ð ð ð ð ñ ðGg	ð g	r-   c                 ó   — g }t          ¦   «         }|                      ¦   «         D �]ç\  }}|                     | j        dd¬¦  «        }|�sA| j        j        �r4| j        �r,|j        }|j        }| j        D ]{\  }}	}
||k    ro| j        j        r/|
| j        j        v r!t          |t          ¦  «        r|
|j        k    sŒG|                     t          |
r|
n|j        j        |¦  «        g¦  «          nœŒ|t!          | j        j        ¦  «        dz   }d|› �}
| j        j        D ].}|j        rt%          d¦  «        ‚|                     ||
¦  «         Œ/| j                             ||
¦  «         |                     t          |
|¦  «        g¦  «         |                      |¦  «        \  }}| j                             |¦  «        d         }t1          |¦  «        }||f|v r�Œ¶|                     ||f¦  «         |                     ||||ff¦  «         �Œé|S )a/  
        Return a list of 2-tuples of the form (expr, (sql, params, is_ref)) for
        the ORDER BY clause.

        The order_by clause can alter the select clause (for example it can add
        aliases to clauses that do not yet have one, or it can add totally new
        select clauses).
        TN)Úallow_joinsÚreuserl   Ú__orderbycolz:ORDER BY term does not match any column in the result set.)ro   r×   r·   r=   rË   rA   rÆ   Úhas_select_fieldsr¨   rr   r   rÇ   Úset_source_expressionsr   rŽ   ÚcolumnrY   Úcombined_queriesr   Úadd_annotationÚadd_select_colr{   Úordering_partsÚsearchr   rs   rt   )r(   rˆ   r‰   r€   r†   ÚresolvedÚsrcÚexpr_srcÚsel_exprr‚   Ú	col_aliasÚorder_by_idxÚqr„   r…   Úwithout_orderingr‹   s                    r,   r^   zSQLCompiler.get_order_byÀ  sj  € ð ˆÝ‰uŒuˆØ ×0Ò0Ñ2Ô2ð /	=ñ /	=‰LˆD�&Ø×.Ò.¨t¬zÀtÐSWÐ.ÑXÔXˆHØñ "K˜dœjÔ3ñ "K¸¼ñ "KØÔ)�Øœ?�Ø.2¬kð Kð KÑ*�H˜a Ø˜h’�ð !œJÔ8ð%à )¨T¬ZÔ-IÐ IÐ Iå *¨8µQÑ 7Ô 7ð !Jà<EÈÌÒ<VÐ<Vð %Ø ×7Ò7Ý ¨iÐ!N  ¸S¼ZÔ=NÐPSÑTÔTÐUñô ð ð ˜ð 'õ$ $' t¤zÔ'8Ñ#9Ô#9¸AÑ#=�LØ =¨|Ð =Ð =�IØ!œZÔ8ð >ð >˜ð Ô.ð Ý"/ð!2ñ#ô #ð ð ×(Ò(¨°9Ñ=Ô=Ð=Ð=Ø”J×-Ò-¨h¸	ÑBÔBÐBØ×3Ò3µS¸ÀCÑ5HÔ5HÐ4IÑJÔJÐJØŸ,š, xÑ0Ô0‰KˆC�ð
  $Ô2×9Ò9¸#Ñ>Ô>¸qÔAÐÝ'¨Ñ/Ô/ˆKØ  +Ð.°$Ð6Ð6ÙØ�HŠHÐ&¨Ð4Ñ5Ô5Ð5Ø�MŠM˜8 c¨6°6Ð%:Ð;Ñ<Ô<Ð<Ñ<Øˆr-   c                 óî   — g }| j         j        rf| j         j        sZd„ |D ¦   «         }|D ]K\  }\  }}}| j                             |¦  «        d         }	|s |	|f|vr|                     ||	|fd f¦  «         ŒL|S )Nc                 ó   — g | ]
}|d          ‘ŒS )rl   r/   )rP   Úts     r,   r˜   z0SQLCompiler.get_extra_select.<locals>.<listcomp>   s   € Ð/Ð/Ð/ 1˜!˜Aœ$Ð/Ð/Ð/r-   rl   )r=   ÚdistinctÚdistinct_fieldsrâ   rã   rt   )
r(   rh   rA   ri   Ú
select_sqlr€   r„   r…   r†   rë   s
             r,   rd   zSQLCompiler.get_extra_selectý  s¯   € ØˆØŒ:Ôð 	R t¤zÔ'Að 	RØ/Ð/¨Ð/Ñ/Ô/ˆJØ/7ð Rð RÑ+�Ñ+�s˜F FØ#'Ô#6×#=Ò#=¸cÑ#BÔ#BÀ1Ô#EÐ Øð RÐ#3°VÐ"<ÀJÐ"NÐ"NØ ×'Ò'¨Ð0@À&Ð/IÈ4Ð(PÑQÔQÐQøØÐr-   c                 óJ  — || j         v r| j         |         S || j        j        v r|| j        j        vs;|| j        j        v s-| j        j                             |¦  «        r|| j        j        vr|| j         |<   |S | j        j         	                    |¦  «        }|| j         |<   |S )zÛ
        A wrapper around connection.ops.quote_name that doesn't quote aliases
        for table names. This avoids problems with some SQL dialects that treat
        quoted strings specially (e.g. PostgreSQL).
        )
r@   r=   rV   Ú	table_mapri   Úexternal_aliasesr|   r2   ÚopsÚ
quote_name)r(   rÇ   Úrs      r,   rÍ   z#SQLCompiler.quote_name_unless_alias  sº   € ð �4Ô#Ð#Ð#ØÔ# DÔ)Ð)à�T”ZÔ)Ð)Ð)¨d¸$¼*Ô:NÐ.NÐ.NØ�t”zÔ.Ð.Ð.à”
Ô+×/Ò/°Ñ5Ô5ð /ð  ¤
Ô 4Ð4Ð4ð &*ˆDÔ˜TÑ"ØˆKØŒOÔ×*Ò*¨4Ñ0Ô0ˆØ!"ˆÔ˜ÑØˆr-   c                 ó°   — t          |d| j        j        z   d ¦  «        }|r || | j        ¦  «        \  }}n|                     | | j        ¦  «        \  }}||fS )NÚas_)r•   r2   Úvendorr3   )r(   ÚnodeÚvendor_implr„   r…   s        r,   r{   zSQLCompiler.compile  sa   € Ý˜d E¨D¬OÔ,BÑ$BÀDÑIÔIˆØð 	=Ø%˜+ d¨D¬OÑ<Ô<‰KˆC��àŸ+š+ d¨D¬OÑ<Ô<‰KˆC�Ø�Fˆ{Ðr-   c                 óÞ  ‡ ‡— ‰ j         j        }ˆ fd„‰ j        j        D ¦   «         }|j        sD|D ]@}|j        j        rt          d¦  «        ‚|                     ¦   «         rt          d¦  «        ‚ŒAn‰ j        j        r|dk    r|D ]	}d|_        Œ
d}|D �]4}	 |j        j	        si‰ j        j	        r]|j         
                    ¦   «         |_        |j                             g ‰ j        j        ¢‰ j        j	        ¢‰ j        j        ¢R ¦  «         |                     d¬¦  «        \  }}|j        j        rF|j        sd	                     |¦  «        }nQ‰ j        j        s|j        sd
                     |¦  «        }n(‰ j        j        r|j        rd
                     |¦  «        }|||ffz  }�Œ# t&          $ r |dk    s|dk    r|rY �Œ1‚ w xY w|st&          ‚‰ j         j        j        |         }	|r|dk    r|	dz  }	dŠ‰ j        j        s	|j        rd
Št-          ˆfd„|D ¦   «         Ž \  }
}d                     |	¦  «                             |
¦  «        g}g }|D ]}|                     |¦  «         Œ||fS )Nc                 ó\   •— g | ](}|                      ‰j        ‰j        ‰j        ¦  «        ‘Œ)S r/   )Úget_compilerr>   r2   r?   )rP   r=   r(   s     €r,   r˜   z2SQLCompiler.get_combinator_sql.<locals>.<listcomp>'  sB   ø€ ð 
ð 
ð 
àð ×Ò˜tœz¨4¬?¸DÔ<LÑMÔMð
ð 
ð 
r-   z>LIMIT/OFFSET not allowed in subqueries of compound statements.z:ORDER BY not allowed in subqueries of compound statements.ÚunionFr/   TrS   zSELECT * FROM ({})z({})Ú
differencez ALLz{}c              3   óL   •K  — | ]\  }}‰                      |¦  «        |fV — Œd S r$   )Úformat)rP   r„   ÚargsÚbracess      €r,   rR   z1SQLCompiler.get_combinator_sql.<locals>.<genexpr>m  s8   øè è € Ð@Ð@©Y¨S°$ˆv�}Š}˜SÑ!Ô! 4Ð(Ð@Ð@Ð@Ð@Ð@Ð@r-   z {} )r2   ry   r=   rß   Ú%supports_slicing_ordering_in_compoundÚ	is_slicedr   r^   r?   Úvalues_selectÚcloneÚ
set_valuesri   r¨   r3   rË   Ú supports_parentheses_in_compoundr  Úsubqueryr   rõ   Úset_operatorsÚzipÚjoinrv   )r(   rË   rU   ry   Ú	compilersr1   ÚpartsÚpart_sqlÚ	part_argsÚcombinator_sqlÚ	sql_partsÚ
args_partsrˆ   r…   Úpartr  s   `              @r,   Úget_combinator_sqlzSQLCompiler.get_combinator_sql%  sJ  øø€ Ø”?Ô+ˆð
ð 
ð 
ð 
àœÔ4ð
ñ 
ô 
ˆ	ð Ô=ð 	-Ø%ð ð �Ø”>Ô+ð Ý'ØXñô ð ð ×(Ò(Ñ*Ô*ð Ý'ØTñô ð ððð ŒZÔ!ð 	- j°GÒ&;Ð&;Ø%ð -ð -�ð
 (-�Ô$Ð$ØˆØ!ð &	ñ &	ˆHð%ð  ”~Ô3ð ¸¼
Ô8Pð Ø%-¤^×%9Ò%9Ñ%;Ô%;�H”NØ”N×-Ò-ðØ!œZÔ4ðà!œZÔ5ðð "œZÔ9ðð ñô ð ð '/§o¢oÀt oÑ&LÔ&LÑ#�˜)Ø”>Ô,ð 7ð $ÔDð ;Ø#7×#>Ò#>¸xÑ#HÔ#H˜˜ð œ
Ô+ð;à'ÔMð;ð $*§=¢=°Ñ#:Ô#:˜øà”JÔ'ð7à ÔFð7ð  &Ÿ}š}¨XÑ6Ô6�HØ˜8 YÐ/Ð1Ñ1�‘øÝ!ð ð ð ð  Ò(Ð(¨Z¸<Ò-GÐ-GÈEÐ-GØ‘HØðøøøð ð 	!Ý Ð ØœÔ,Ô:¸:ÔFˆØð 	%�: Ò(Ð(Ø˜fÑ$ˆNØˆØŒzÔ"ð 	 xÔ'Uð 	ØˆFÝ #Ø@Ð@Ð@Ð@¸%Ð@Ñ@Ô@ð!
Ñˆ	�:ð —-’- Ñ/Ô/×4Ò4°YÑ?Ô?Ð@ˆØˆØð 	 ð 	 ˆDØ�MŠM˜$ÑÔÐÐØ�vˆ~Ðs   ÂDF*Æ*GÇGc                 óv  ‡ ‡‡‡‡‡— g }‰ j         r|                     ‰ j         ¦  «         ‰ j        r|                     ‰ j        ¦  «         ‰ j                             ¦   «         Šd‰_        ‰j                              |¦  «        ‰_         d„ ‰                      d¬¦  «        d         D ¦   «         Št          ‰ 	                    ¦   «         ¦  «        Št          ¦   «         Ši Šˆˆˆˆˆfd„} |t          ‰ j                             ¦   «         ¦  «        ¦  «         ‰ j                             d„ ‰                     ¦   «         D ¦   «         ¦  «        ‰ _        g }‰                      ¦   «         D ]e^}} ||                     ¦   «         ¦  «         |                     |                     d„ ‰                     ¦   «         D ¦   «         ¦  «        ¦  «         Œf‰                     ‰ j        ‰ j        ‰ j        ¬¦  «        }|                     d	d¬
¦  «        \  }}‰                      ‰ j        ¦  «        \  }	}
d|d‰ j        j                             d¦  «        d|	g}‰r[ˆ fd„‰ 	                    ¦   «         D ¦   «         }dd                     |¦  «        dg|¢d‘‰ j        j                             d¦  «        ‘}t          |¦  «        |
z   }|rsg }|D ]D}‰                      |¦  «        \  }}|                     |¦  «         |                     |¦  «         ŒE|                     dd                     |¦  «        g¦  «         ||fS )NTc                 ó   — i | ]	\  }}}||“Œ
S r/   r/   )rP   r€   r‚   rƒ   s       r,   ú
<dictcomp>z/SQLCompiler.get_qualify_sql.<locals>.<dictcomp>‚  s-   € ð 
ð 
ð 
Ù*˜D ! UˆD�%ð
ð 
ð 
r-   rS   r   c                 ó  •— | �r|                       ¦   «         }|‰v rŒ‰                     |¦  «        x}r|‰|<   nÇt          |t          ¦  «        r(|                      |                     ¦   «         ¦  «         nŠt          |t          ¦  «        r1|j        ‰vr'|                      |                     ¦   «         ¦  «         nDt          ‰¦  «        }d|› �}‰ 	                    |¦  «         ‰ 
                    ||¦  «         |‰|<   | °ÿd S d S )NÚqual)Úpopr|   rr   r   rv   Úget_source_expressionsr   r)   rY   rs   rà   )	r~   r€   Úselect_aliasÚnum_qual_aliasÚinner_queryÚqual_aliasesÚreplacementsrA   Úselect_aliasess	       €€€€€r,   Úcollect_replacementsz9SQLCompiler.get_qualify_sql.<locals>.collect_replacements‰  s/  ø€ Øñ 6Ø"—’Ñ(Ô(�Ø˜<Ð'Ð'ØØ%+§Z¢Z°Ñ%5Ô%5Ð5�\ð 6Ø)5�L Ñ&Ð&Ý ¥fÑ-Ô-ð 
6Ø×&Ò& t×'BÒ'BÑ'DÔ'DÑEÔEÐEÐEÝ ¥cÑ*Ô*ð 6Ø”y¨Ð6Ð6Ø#×*Ò*¨4×+FÒ+FÑ+HÔ+HÑIÔIÐIøå%(¨Ñ%6Ô%6�NØ#:¨.Ð#:Ð#:�LØ ×$Ò$ \Ñ2Ô2Ð2Ø×.Ò.¨t°\ÑBÔBÐBØ)5�L Ñ&ð! ð 6ð 6ð 6ð 6ð 6r-   c                 ó6   — i | ]\  }}|t          ||¦  «        “ŒS r/   ©r   ©rP   r€   rƒ   s      r,   r  z/SQLCompiler.get_qualify_sql.<locals>.<dictcomp>ž  s(   € ÐLÐLÐL©¨¨eˆT•3�u˜dÑ#Ô#ÐLÐLÐLr-   c                 ó6   — i | ]\  }}|t          ||¦  «        “ŒS r/   r(  r)  s      r,   r  z/SQLCompiler.get_qualify_sql.<locals>.<dictcomp>¥  s(   € ÐTÐTÐT±°°e�T�3˜u dÑ+Ô+ÐTÐTÐTr-   )r2   r?   F)Úwith_limitsrT   úSELECT * FROM (ú)rc   ÚWHEREc                 óN   •— g | ]!}‰j         j                             |¦  «        ‘Œ"S r/   )r2   rõ   rö   )rP   rƒ   r(   s     €r,   r˜   z/SQLCompiler.get_qualify_sql.<locals>.<listcomp>¿  s,   ø€ ÐWÐWÐW¸e�D”OÔ'×2Ò2°5Ñ9Ô9ÐWÐWÐWr-   ÚSELECTú, zFROM (Úqualify_maskzORDER BY)r_   rt   rb   r=   r	  r  r+   rX   ro   ÚvaluesÚlistrc   ÚleavesÚreplace_expressionsr¤   r^   r  rÿ   r>   r2   r?   r3   r{   rõ   rö   r  rv   )r(   Úwhere_partsr&  rh   Úorder_by_exprr‚   Úinner_query_compilerÚ	inner_sqlÚinner_paramsÚqualify_sqlÚqualify_paramsrˆ   r¯   r…   Úordering_sqlsrÀ   Úordering_sqlÚordering_paramsr"  r#  r$  rA   r%  s   `                 @@@@@r,   Úget_qualify_sqlzSQLCompiler.get_qualify_sqlu  s§  øøøøøø€ ØˆØŒ:ð 	+Ø×Ò˜tœzÑ*Ô*Ð*ØŒ;ð 	,Ø×Ò˜tœ{Ñ+Ô+Ð+Ø”j×&Ò&Ñ(Ô(ˆØ#ˆÔØ'Ô-×7Ò7¸ÑDÔDˆÔð

ð 
Ø.2¯oªoÈt¨oÑ.TÔ.TÐUVÔ.Wð
ñ 
ô 
ˆõ ˜VŸ]š]™_œ_Ñ-Ô-ˆÝ‘u”uˆØˆð	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð& 	Ð�T $¤,×"5Ò"5Ñ"7Ô"7Ñ8Ô8Ñ9Ô9Ð9Ø”|×7Ò7ØLÐL°|×7IÒ7IÑ7KÔ7KÐLÑLÔLñ
ô 
ˆŒð ˆØ!%×!2Ò!2Ñ!4Ô!4ð 	ð 	ÐˆM˜AØ Ð  ×!EÒ!EÑ!GÔ!GÑHÔHÐHØ�OŠOØ×1Ò1ØTÐT¸|×?QÒ?QÑ?SÔ?SÐTÑTÔTñô ñô ð ð ð
  +×7Ò7ØŒJ 4¤?ÀÔ@Pð  8ñ  
ô  
Ðð #7×"=Ò"=ð ð "ð #>ñ #
ô #
Ñˆ	�<ð '+§l¢l°4´<Ñ&@Ô&@Ñ#ˆ�^àØØØŒOÔ×*Ò*¨9Ñ5Ô5ØØð
ˆð ð 	ð XÐWÐWÐWÀvÇ}Â}ÁÄÐWÑWÔWˆDàØ—	’	˜$‘”Øðð ð	ð
 ðð ”Ô#×.Ò.¨~Ñ>Ô>ðˆFõ �lÑ#Ô# nÑ4ˆð ð 	BØˆMØ$ð /ð /�Ø04·²¸XÑ0FÔ0FÑ-�˜oØ×$Ò$ \Ñ2Ô2Ð2Ø—’˜oÑ.Ô.Ð.Ð.Ø�MŠM˜: t§y¢y°Ñ'?Ô'?Ð@ÑAÔAÐAØ�vˆ~Ðr-   c                 óÊ  — | j         j                             ¦   «         }	 | j         j        }|                      |pt          |¦  «        ¬¦  «        \  }}}d}|o| j         j        }	| j         j        }| j        j        }
|rjt          |
d 
                    |¦  «        ¦  «        s"t          d 
                    |¦  «        ¦  «        ‚|                      || j         j        ¦  «        \  }}�n| j        r|                      ¦   «         \  }}d}�nü|                      ¦   «         \  }}|                      ¦   «         \  }}	 | j        �|                      | j        ¦  «        ndg f\  }}n+# t(          $ r | j        r‚ dg }}Y nt,          $ r dg }}Y nw xY w	 | j        �|                      | j        ¦  «        ndg f\  }}n# t,          $ r dg }}Y nw xY wdg}g }| j         j        r-| j        j                             ||¦  «        \  }}||z  }||z  }g }| j        |z   D ]Y\  }\  }}}|r$|›d| j        j                             |¦  «        ›�}|                     |¦  «         |                     |¦  «         ŒZ|d	                     |¦  «        gz  }|r	|d
g|¢z  }n&| j        j        j         r|| j        j        j         gz  }|                     |¦  «         | j         j!        �r|
j"        �r| j         #                    ¦   «         r|
j$        rtK          d¦  «        ‚|	r|
j&        st          d¦  «        ‚| j         j'        }| j         j(        }| j         j)        }| j         j*        }|r|
j+        st          d¦  «        ‚|r|
j,        st          d¦  «        ‚|r|
j-        st          d¦  «        ‚|r|
j.        st          d¦  «        ‚| j        j         /                    |||  0                    ¦   «         |¬¦  «        }|r|
j1        r|                     |¦  «         |r-|                     d|z  ¦  «         |                     |¦  «         g }|D ]/\  } }!|                     | ¦  «         |                     |!¦  «         Œ0|re|rte          d¦  «        ‚|p| j        j         3                    ¦   «         }|                     dd	                     |¦  «        z  ¦  «         | j4        rd}|r-|                     d|z  ¦  «         |                     |¦  «         | j         j5        rJ| 6                    d | j        j        j7        | j         j5        j
        fi | j         j5        j8        ¤Ž¦  «         |rxg }"|D ]3\  }\  }#}$}|"                     |#¦  «         |                     |$¦  «         Œ4dd	                     |"¦  «        z  }%|r|
j9        r
dg|¢d‘|%‘}n|                     |%¦  «         |	rG|                     | j        j         :                    | j         j;        | j         j<        ¦  «        ¦  «         |r|
j1        s|                     |¦  «         | j         j=        �r=|�r:g }&g }'t}          | j        d¬¦  «        D ]Ä\  }(\  })}}|rU|&                     | j        j                             d¦  «        ›d| j        j                             |¦  «        ›�¦  «         Œ`|) ?                    |)j@        di¦  «        }*|* A                    | | j        ¦  «        \  }+},|&                     |+¦  «         |'                     |,¦  «         ŒÅdd	                     |&¦  «        ›dd                      |¦  «        ›d!�t…          |'|z   ¦  «        f| j          C                    |¦  «         S d                      |¦  «        t…          |¦  «        f| j          C                    |¦  «         S # | j          C                    |¦  «         w xY w)"zÍ
        Create the SQL for this query. Return the SQL string and list of
        parameters.

        If 'with_limits' is False, any limit/offset information is not included
        in the query.
        rS   Nzsupports_select_{}z-{} is not supported on this database backend.Ú z0 = 1r0  z AS r1  ÚFROMz:select_for_update cannot be used outside of a transaction.zNLIMIT/OFFSET is not supported with select_for_update on this database backend.z1NOWAIT is not supported on this database backend.z6SKIP LOCKED is not supported on this database backend.z8FOR UPDATE OF is not supported on this database backend.z<FOR NO KEY UPDATE is not supported on this database backend.)ÚnowaitÚskip_lockedÚofÚno_keyúWHERE %sz1annotate() + distinct(fields) is not implemented.zGROUP BY %sz	HAVING %sr   zORDER BY %sr,  r-  rl   rm   r  r»   úSELECT ú FROM (ú ú
) subquery)Dr=   rO   rÄ   rË   rj   re   r  r2   ry   r•   r  r	   r  Úcombinator_allrc   rA  Úget_distinctÚget_from_clauser_   r{   r   r?   r   rb   rï   rõ   Údistinct_sqlrA   rö   rv   rt   r  Úbare_select_suffixÚselect_for_updateÚhas_select_for_updateÚget_autocommitÚsupports_transactionsr   Ú%supports_select_for_update_with_limitÚselect_for_update_nowaitÚselect_for_update_skip_lockedÚselect_for_update_ofÚselect_for_no_key_updateÚhas_select_for_update_nowaitÚ!has_select_for_update_skip_lockedÚhas_select_for_update_ofÚhas_select_for_no_key_updateÚfor_update_sqlÚ"get_select_for_update_of_argumentsÚfor_update_after_fromÚNotImplementedErrorÚforce_no_orderingrD   Úexplain_infoÚinsertÚexplain_query_prefixÚoptionsÚ#requires_compound_order_by_subqueryÚlimit_offset_sqlÚlow_markÚ	high_markr  ru   Úrelabeled_clonerƒ   r3   ÚtupleÚreset_refcounts)-r(   r+  rT   Úrefcounts_beforerË   ri   rh   ra   Úfor_update_partÚwith_limit_offsetry   rˆ   r…   rð   Údistinct_paramsÚfrom_Úf_paramsr_   Úw_paramsrb   Úh_paramsÚdistinct_resultÚout_colsr‚   Ús_sqlÚs_paramsrƒ   rE  rF  rG  rH  ÚgroupingÚg_sqlÚg_paramsrÀ   Úo_sqlÚo_paramsÚorder_by_sqlÚsub_selectsÚ
sub_paramsÚindexrA   Úselect_cloneÚ	subselectÚ	subparamss-                                                r,   r3   zSQLCompiler.as_sqlÕ  s�	  € ð  œ:Ô4×9Ò9Ñ;Ô;ÐðV	9ØœÔ.ˆJØ/3×/AÒ/AØ!1Ð!EµT¸*Ñ5EÔ5Eð 0Bñ 0ô 0Ñ,ˆL˜( Hð #ˆOà +Ð D°´
Ô0DÐØœÔ.ˆJØ”Ô/ˆHØð I,Ý˜xÐ)=×)DÒ)DÀZÑ)PÔ)PÑQÔQð Ý+ØG×NÒNØ&ñô ñô ð ð
 "&×!8Ò!8Ø ¤
Ô 9ñ"ô "‘�˜™ð ”ð ,Ø!%×!5Ò!5Ñ!7Ô!7‘�˜Ø�‘à37×3DÒ3DÑ3FÔ3FÑ0� ð #'×"6Ò"6Ñ"8Ô"8‘��xð
-à48´JÐ4J˜Ÿš T¤ZÑ0Ô0Ð0ÐQSÐUWÐPXñ $�E˜8˜8øõ &ð 2ð 2ð 2ØÔ'ð Øà&-¨r˜8�E�E�EÝ$ð -ð -ð -Ø&(¨"˜8�E�E�Eð-øøøð.ð  œ;Ð2ð Ÿš T¤[Ñ1Ô1Ð1à  "˜Xñ %�F˜H˜Høõ
 %ð .ð .ð .Ø')¨2˜H�F�F�Fð.øøøà"˜�Ø�à”:Ô&ð .Ø7;´Ô7J×7WÒ7WØ'Ø'ñ8ô 8Ñ4�O _ð ˜oÑ-�FØ˜oÑ-�Fà�Ø37´;ÀÑ3Mð +ð +Ñ/�AÑ(˜˜x¨%Øð à!˜E˜EØ œOÔ/×:Ò:¸5ÑAÔAÐAð!˜ð —M’M (Ñ+Ô+Ð+Ø—O’O EÑ*Ô*Ð*Ð*à˜4Ÿ9š9 XÑ.Ô.Ð/Ñ/�Øð LØ˜vÐ.¨Ð.Ñ.�F�FØ”_Ô-Ô@ð LØ˜tœÔ7ÔJÐKÑK�FØ—’˜hÑ'Ô'Ð'à”:Ô/ñ 0°HÔ4Rñ 0àœ×6Ò6Ñ8Ô8ðð %Ô:ð	õ 9ØXñô ð ð
 *ðà (Ô Nðõ 0ðJñô ð ð "œZÔ@�FØ"&¤*Ô"J�KØœÔ8�BØ!œZÔ@�Fð ð  hÔ&Kð Ý/ØOñô ð ð %ð ¨XÔ-Wð Ý/ØTñô ð ð ð  HÔ$Eð Ý/ØVñô ð ð  ð ¨Ô(Mð Ý/ð0ñô ð ð '+¤oÔ&9×&HÒ&HØ%Ø$/Ø×BÒBÑDÔDØ%ð	 'Iñ 'ô '�Oð #ð 3 xÔ'Eð 3Ø—M’M /Ñ2Ô2Ð2àð ,Ø—M’M *¨uÑ"4Ñ5Ô5Ð5Ø—M’M (Ñ+Ô+Ð+à�Ø'/ð ,ð ,‘O�E˜8Ø—O’O EÑ*Ô*Ð*Ø—M’M (Ñ+Ô+Ð+Ð+Øð (Ø&ð Ý1ØOñô ð ð  (ÐR¨4¬?Ô+>×+PÒ+PÑ+RÔ+R�HØ—M’M -°$·)²)¸HÑ2EÔ2EÑ"EÑFÔFÐFØÔ*ð (Ø#'˜Øð ,Ø—M’M +°Ñ"6Ñ7Ô7Ð7Ø—M’M (Ñ+Ô+Ð+àŒzÔ&ð Ø—’ØØ<�D”OÔ'Ô<Øœ
Ô/Ô6ðð àœ*Ô1Ô9ðð ñô ð ð ð 	0Ø�Ø/7ð ,ð ,Ñ+�AÑ+˜˜x¨Ø—O’O EÑ*Ô*Ð*Ø—M’M (Ñ+Ô+Ð+Ð+Ø,¨t¯yªy¸Ñ/BÔ/BÑB�Øð 0 (Ô"Nð 0Ø/ÐL°&ÐL¸#ÐL¸|ÐL�F�Fà—M’M ,Ñ/Ô/Ð/à ð Ø—’Ø”OÔ'×8Ò8Øœ
Ô+¨T¬ZÔ-Añô ñô ð ð ð / xÔ'Eð /Ø—’˜oÑ.Ô.Ð.àŒzÔ"ñ . |ñ .ð !�Ø�
Ý1:¸4¼;ÈaÐ1PÑ1PÔ1Pð 5ð 5Ñ-�EÑ-˜F A uØð 5Ø#×*Ò*ð !%¤Ô 3× >Ò >¸zÑ JÔ JÐ JÐ JØ $¤Ô 3× >Ò >¸uÑ EÔ EÐ Eðñô ð ð ð (.×'=Ò'=Ø#œ\¨:Ð6ñ(ô (˜ð 0<×/BÒ/BØ  $¤/ñ0ô 0Ñ,˜	 9ð $×*Ò*¨9Ñ5Ô5Ð5Ø"×)Ò)¨)Ñ4Ô4Ð4Ð4ð#5ð& —I’I˜kÑ*Ô*Ð*Ð*Ø—H’H˜VÑ$Ô$Ð$Ð$ðõ ˜ fÑ,Ñ-Ô-ð.ð ŒJ×&Ò&Ð'7Ñ8Ô8Ð8Ð8ð —8’8˜FÑ#Ô#¥U¨6¡]¤]Ð2ð ŒJ×&Ò&Ð'7Ñ8Ô8Ð8Ð8øˆDŒJ×&Ò&Ð'7Ñ8Ô8Ð8Ð8øøøsg    D_ Ä:(E# Å"_ Å#FÅ9_ Å;FÆ_ Æ
FÆ_ Æ(F8 Æ7_ Æ8G	Ç_ ÇG	Ç	V$_ Þ#_ ß_"Nc                 óÄ  — g }|€| j                              ¦   «         x}€|S |p| j                              ¦   «         }d|i}|j        D ]—}|j        j        j        }||j        k    rd}|r'|�%t          |j        j        |j        j        ¦  «        rŒI|r||vrŒP| j                              ||||¦  «        }	| 	                    |	¦  «        }
| 
                    |
¦  «         Œ˜|S )aT  
        Compute the default columns for selecting every field in the base
        model. Will sometimes be called to pull in related models (e.g. via
        select_related), in which case "opts" and "start_alias" will be given
        to provide a starting point for the traversal.

        Return a list of strings, quoted appropriately for use in SQL
        directly, as well as a set of aliases used in the select statement (if
        'as_pairs' is True, return a list of (alias, col_name) pairs instead
        of strings as the first component and None as the second component).
        N)r=   r¿   rW   Úconcrete_fieldsrH   Ú_metaÚconcrete_modelÚ
issubclassÚjoin_parent_modelÚget_colrt   )r(   r®   Ústart_aliasÚoptsrž   rˆ   Úseen_modelsrÓ   rH   rƒ   rÞ   s              r,   r§   zSQLCompiler.get_default_columns¶  s  € ð ˆØˆ<Øœ
×+Ò+Ñ-Ô-Ð-�Ð6Ø�Ø!ÐC T¤Z×%AÒ%AÑ%CÔ%Cˆð ˜[Ð)ˆàÔ)ð 	"ð 	"ˆEØ”KÔ%Ô4ˆEð ˜œ
Ò"Ð"Ø�àðàÐ%ÝØÔ%Ô4°e´kÔ6Pñô ð &ð Øð ˜u¨KÐ7Ð7ØØ”J×0Ò0°°u¸kÈ;ÑWÔWˆEØ—]’] 5Ñ)Ô)ˆFØ�MŠM˜&Ñ!Ô!Ð!Ð!Øˆr-   c                 ó8  — g }g }| j                              ¦   «         }| j         j        D ]í}|                     t          ¦  «        }|                      ||d¦  «        \  }}}}	}
}}| j                              ||	|
¦  «        \  }}}|D ]�}|| j         j        v r3|                     | j	        j
                             |¦  «        ¦  «         ŒC|                       |||¦  «        ¦  «        \  }}|                     |¦  «         |                     |¦  «         Œ�Œî||fS )zÎ
        Return a quoted list of fields to use in DISTINCT ON part of the query.

        This method can alter the tables in the query, and thus it must be
        called before get_from_clause().
        N)r=   r¿   rð   rÌ   r
   Ú_setup_joinsÚ
trim_joinsr¨   rt   r2   rõ   rö   r{   )r(   rˆ   r…   r�  rÇ   r  r‚   Útargetsrƒ   ÚjoinsÚpathÚtransform_functionrŽ   r÷   Úps                  r,   rO  zSQLCompiler.get_distinctè  s8  € ð ˆØˆØŒz×"Ò"Ñ$Ô$ˆà”JÔ.ð 	%ð 	%ˆDØ—J’J�zÑ*Ô*ˆEØDH×DUÒDUØ�t˜TñEô EÑAˆAˆw˜˜u d¨AÐ/Að !%¤
× 5Ò 5°g¸uÀdÑ KÔ KÑˆG�U˜AØ!ð %ð %�Ø˜4œ:Ô7Ð7Ð7Ø—M’M $¤/Ô"5×"@Ò"@ÀÑ"FÔ"FÑGÔGÐGÐGàŸ<š<Ð(:Ð(:¸6À5Ñ(IÔ(IÑJÔJ‘D�A�qØ—M’M !Ñ$Ô$Ð$Ø—M’M !Ñ$Ô$Ð$Ð$ð%ð �vˆ~Ðr-   rµ   c                 óü  ‡ ‡‡‡‡— t          ‰|¦  «        \  Š}|dk    Š‰                     t          ¦  «        }‰                      ||‰¦  «        \  }}	Š}
}}Š|j        �rn|j        �rft          |dd¦  «        |d         k    �rJ‰dk    �rCt          ‰dd¦  «        �s1|pt          ¦   «         }t          ˆ fd„|
D ¦   «         ¦  «        }||v rt          d	¦  «        ‚| 
                    |¦  «         g }|j        D ]Ò}t          |d
¦  «        r?t          |t          ¦  «        s*‰r|                     ¦   «         n|                     ¦   «         }t          |t          ¦  «        r4|                     |                     ‰› t          › �¦  «        df¦  «         Œš|                     ˆfd„‰                      ||‰||¦  «        D ¦   «         ¦  «         ŒÓ|S ‰ j                             |	|
|¦  «        \  }	Š}ˆˆˆfd„|	D ¦   «         S )zâ
        Return the table alias (the name might be ambiguous, the alias will
        not be) and column name for ordering by the given 'name' parameter.
        The 'name' is of the form 'field1__field2__...__fieldN'.
        r¶   ÚattnameNéÿÿÿÿÚpkÚhas_transformsFc              3   óZ   •K  — | ]%}t          ‰j        j        |         d d¦  «        V — Œ&dS )Ú	join_colsN)r•   r=   rV   )rP   Újr(   s     €r,   rR   z1SQLCompiler.find_ordering_name.<locals>.<genexpr>$  sJ   øè è € ð ð ØHI•˜œ
Ô,¨QÔ/°¸dÑCÔCðð ð ð ð ð r-   z!Infinite loop caused by ordering.r·   c              3   ó^   •K  — | ]'\  }}|                      ‰› t          › �¦  «        |fV — Œ(d S r$   )Úprefix_referencesr
   )rP   r€   r†   rÇ   s      €r,   rR   z1SQLCompiler.find_ordering_name.<locals>.<genexpr>6  sY   øè è € ð ð á$˜˜fð ×+Ò+¨tÐ,AµZÐ,AÐ,AÑBÔBÀFÐKðð ð ð ð ð r-   c                 óJ   •— g | ]}t           ‰|‰¦  «        ‰¬ ¦  «        df‘Œ S )r¹   F)r   )rP   rî   rƒ   rº   r˜  s     €€€r,   r˜   z2SQLCompiler.find_ordering_name.<locals>.<listcomp>>  sI   ø€ ð 
ð 
ð 
àõ Ð'Ð'¨¨5Ñ1Ô1¸jÐIÑIÔIÈ5ÐQð
ð 
ð 
r-   )r   rÌ   r
   r“  Úis_relationrÀ   r•   ro   rn  r   rs   rp   rr   r   ÚdescrÃ   rt   r£  rv   rÏ   r=   r”  )r(   rÇ   r�  rƒ   r¼   Úalready_seenrÕ   ÚpiecesrÓ   r•  r–  r—  Ú
join_tupleÚresultsÚitemr‚   rº   r˜  s   `` `            @@r,   rÏ   zSQLCompiler.find_ordering_name  s˜  øøøøø€ õ $ D¨-Ñ8Ô8‰ˆˆeØ˜f’_ˆ
Ø—’�JÑ'Ô'ˆð ×Ò˜f d¨EÑ2Ô2ñ	
ØØØØØØØð Ôñ!	à”ñ!	õ ˜˜y¨$Ñ/Ô/°6¸"´:Ò=Ñ=Ø˜’‘ÝÐ.Ð0@À%ÑHÔHñ ð (Ð0­3©5¬5ˆLÝð ð ð ð ØMRðñ ô ñ ô ˆJð ˜\Ð)Ð)Ý Ð!DÑEÔEÐEØ×Ò˜ZÑ(Ô(Ð(àˆGØœð ð �Ý˜4Ð!5Ñ6Ô6ð E½zØ�'ñ@ô @ð Eð +5ÐD˜4Ÿ9š9™;œ;˜;¸$¿(º(¹*¼*�DÝ˜d¥GÑ,Ô,ð Ø—N’NØ×/Ò/°4Ð0E½Ð0EÐ0EÑFÔFÈÐNñô ð ð Ø—’ð ð ð ð à(,×(?Ò(?Ø˜d E¨5°,ñ)ô )ðñ ô ñ ô ð ð ð ˆNØ œJ×1Ò1°'¸5À$ÑGÔGÑˆ�˜ð
ð 
ð 
ð 
ð 
ð 
àð
ñ 
ô 
ð 	
r-   c                 ó    — |p| j                              ¦   «         }| j                              |||¦  «        \  }}}}}}|d         }|||||||fS )a$  
        Helper method for get_order_by() and get_distinct().

        get_ordering() and get_distinct() must produce same target columns on
        same input, as the prefixes of get_ordering() and get_distinct() must
        match. Executing SQL where this is not true is an error.
        rœ  )r=   rW   Úsetup_joins)	r(   r¨  r�  rƒ   rÓ   r•  r–  r—  r˜  s	            r,   r“  zSQLCompiler._setup_joinsC  sk   € ð Ð7˜œ×5Ò5Ñ7Ô7ˆØ@DÄ
×@VÒ@VØ�D˜%ñA
ô A
Ñ=ˆˆw˜˜e TÐ+=ð �b”	ˆØ�g˜u e¨T°4Ð9KÐKÐKr-   c                 ó2  — g }g }t          | j        j        ¦  «        D ]{}| j        j        |         sŒ	 | j        j        |         }n# t          $ r Y Œ5w xY w|                      |¦  «        \  }}|                     |¦  «         |                     |¦  «         Œ|| j        j        D ]n}| j         	                    |¦  «        \  }}|| j        j        vs| j        j        |         dk    r+|                     d|  
                    |¦  «        z  ¦  «         Œo||fS )aÛ  
        Return a list of strings that are joined together to go after the
        "FROM" part of the query, as well as a list any extra parameters that
        need to be included. Subclasses, can override this to create a
        from-clause via a "select".

        This should only be called after any SQL construction methods that
        might change the tables that are needed. This means the select columns,
        ordering, and distinct must be done first.
        rl   z, %s)rn  r=   rV   rO   ÚKeyErrorr{   rt   rv   Úextra_tablesÚtable_aliasrÍ   )	r(   rˆ   r…   rƒ   Úfrom_clauseÚ
clause_sqlÚclause_paramsrî   r‚   s	            r,   rP  zSQLCompiler.get_from_clauseR  s<  € ð ˆØˆÝ˜4œ:Ô/Ñ0Ô0ð 	)ð 	)ˆEØ”:Ô,¨UÔ3ð ØðØ"œjÔ2°5Ô9��øÝð ð ð ð �ðøøøð )-¯ª°[Ñ(AÔ(AÑ%ˆJ˜Ø�MŠM˜*Ñ%Ô%Ð%Ø�MŠM˜-Ñ(Ô(Ð(Ð(Ø”Ô(ð 		Lð 		LˆAØ”z×-Ò-¨aÑ0Ô0‰HˆE�1ð
 ˜TœZÔ1Ð1Ð1Ø”:Ô,¨UÔ3°qÒ8Ð8à—’˜f t×'CÒ'CÀEÑ'JÔ'JÑJÑKÔKÐKøØ�vˆ~Ðs   ´AÁ
AÁArl   c           
      ód  ‡ ‡— ˆˆ fd„}g }	|s|‰ j         j        k    r|	S ‰s2‰ j                              ¦   «         Š‰ j                              ¦   «         }t	          ¦   «         }
|€-t          ‰ j         j        t          ¦  «        }|r‰ j         j        }d„ }‰j        D �]Ç}|
 	                    |j
        ¦  «         |re|                     |j
        i ¦  «        }|j        sB|s	|j
        |v r7t          d|j
        ›dd                      |¦   «         ¦  «        pd›�¦  «        ‚nd}t          ||||¦  «        sŒ™|                     |¦  «        pi }|j        j        |d|j        |j        r|j        j        nd	„ dd
œ}|	                     |¦  «         g }‰ j                              |j
        g‰|¦  «        \  }}}}}}|d         }‰                      |||j        j        j        ¬¦  «        }|D ];}|                     t1          |¦  «        ¦  «         |                     |df¦  «         Œ<||d<   ‰                      |||j        j        j        ||dz   ||¦  «        } |||¦  «         �ŒÉ|�rÊd„ ‰j        D ¦   «         }|D �]�\  }}|                     |¦  «        pi }t          ||||d¬¦  «        sŒ2|                     ¦   «         }|
 	                    |¦  «         ‰ j                              |g‰|¦  «        }|j        d         }t;          |‰j        ¦  «        o|‰j        u}||d|j        j        |j        |d
œ}|	                     |¦  «         g }‰                      |||j        ‰j        ¬¦  «        }|D ];}|                     t1          |¦  «        ¦  «         |                     |df¦  «         Œ<||d<   |                     |                     ¦   «         i ¦  «        }‰                      |||j        ||dz   ||¦  «        } |||¦  «         �Œ‘d„ }d„ }d„ }t=          |¦  «        D �]—} |dk    r �n�| ‰ j         j        v �r||
 	                    | ¦  «         ‰ j                              | g‰|¦  «        \  }!}}"}}}|"j        }|d         }t;          |‰j        ¦  «        o|‰j        u}||!dt1          |¦  «        dk    rtA          ||!¦  «        n|tA          || ¦  «        |d
œ}|	                     |¦  «         g }|                     | |!f¦  «        pi }#‰                      |#||j        ‰j        ¬¦  «        }|D ];}|                     t1          |¦  «        ¦  «         |                     |df¦  «         Œ<||d<   |                     | i ¦  «        }$‰                      ||#|j        ||dz   |$|¬¦  «        } |||¦  «         �Œ™t	          |¦  «         !                    |
¦  «        }%|%rQd„ |%D ¦   «         }&t          dd                     |&¦  «        ›dd                      |¦   «         ¦  «        pd›�¦  «        ‚|	S )a  
        Fill in the information needed for a select_related query. The current
        depth is measured as the number of connections away from the root model
        (for example, cur_depth=1 means we are looking at models with direct
        connections to the root model).
        c                  ó~   •— d„ ‰j         D ¦   «         } d„ ‰j        D ¦   «         }t          | |‰j        j        ¦  «        S )Nc              3   ó2   K  — | ]}|j         ¯	|j        V — Œd S r$   )r¥  rÇ   ©rP   Úfs     r,   rR   zQSQLCompiler.get_related_selections.<locals>._get_field_choices.<locals>.<genexpr>‰  s+   è è € ÐKÐK¨¸Q¼]ÐK˜aœfÐKÐKÐKÐKÐKÐKr-   c              3   ó`   K  — | ])}|j         j        ¯|j                              ¦   «         V — Œ*d S r$   )rÓ   ÚuniqueÚrelated_query_namer¸  s     r,   rR   zQSQLCompiler.get_related_selections.<locals>._get_field_choices.<locals>.<genexpr>Š  sN   è è € ð ð àØ”7”>ðØ”×*Ò*Ñ,Ô,ðð ð ð ð ð r-   )ÚfieldsÚrelated_objectsr   r=   Ú_filtered_relations)Údirect_choicesÚreverse_choicesr�  r(   s     €€r,   Ú_get_field_choicesz>SQLCompiler.get_related_selections.<locals>._get_field_choicesˆ  sY   ø€ ØKÐK¨d¬kÐKÑKÔKˆNðð àÔ-ðñ ô ˆOõ
 Ø °´Ô1Oñô ð r-   Nc                 ó   — || d<   d S )Nrœ   r/   )rC   rœ   s     r,   Úget_related_klass_infoszCSQLCompiler.get_related_selections.<locals>.get_related_klass_infos¤  s   € Ø0CˆJÐ,Ñ-Ð-Ð-r-   z/Non-relational field given in select_related: 'z'. Choices are: r1  z(none)Fc                 ó   — d S r$   r/   )ÚxÚys     r,   ú<lambda>z4SQLCompiler.get_related_selections.<locals>.<lambda>Ä  s   € ÐRV€ r-   )rH   rÓ   ÚreverseÚlocal_setterÚremote_setterrž   rœ  )r�  r�  r›   rl   c                 óP   — g | ]#}|j         j        ¯|j        °|j         |j        f‘Œ$S r/   )rÓ   r»  Úmany_to_manyÚrelated_model)rP   Úos     r,   r˜   z6SQLCompiler.get_related_selections.<locals>.<listcomp>ß  sG   € ð ð ð àØ”7”>ðð +,¬.ðØ”˜!œ/Ð*ðð ð r-   T)rÉ  )r�  r�  rž   c                 óD   — |r| j                              ||¦  «         d S d S r$   )Úremote_fieldÚset_cached_value)Úfinal_fieldÚobjÚfrom_objs      r,   rÊ  z8SQLCompiler.get_related_selections.<locals>.local_setter  s6   € àð MØÔ,×=Ò=¸hÈÑLÔLÐLÐLÐLðMð Mr-   c                 ó   — d S r$   r/   )rÔ  rÕ  s     r,   Úlocal_setter_noopz=SQLCompiler.get_related_selections.<locals>.local_setter_noop  s   € Ø�r-   c                 ó(   — t          || |¦  «         d S r$   )Úsetattr)rÇ   rÔ  rÕ  s      r,   rË  z9SQLCompiler.get_related_selections.<locals>.remote_setter  s   € Ý˜ $¨Ñ,Ô,Ð,Ð,Ð,r-   é   )r�  Ú
root_aliasÚ	cur_depthÚ	requestedÚ
restrictedc              3   ó    K  — | ]	}d |z  V — Œ
dS )z'%s'Nr/   ©rP   Úss     r,   rR   z5SQLCompiler.get_related_selections.<locals>.<genexpr>V  s&   è è € Ð!GÐ!G° &¨1¡*Ð!GÐ!GÐ!GÐ!GÐ!GÐ!Gr-   z/Invalid field name(s) given in select_related: z. Choices are: )"r=   Ú	max_depthr¿   rW   ro   rr   r©   Údictr½  rs   rÇ   r|   r¥  r   r  r   rÑ  rH   rÒ  r»  rt   r­  r§   rŠ  rY   rª   r¾  r¼  r–  rŒ  r4  r¿  r   r  )'r(   rA   r®   r�  rÛ  rÜ  rÝ  rÞ  rÂ  rœ   Úfields_foundrÄ  r¹  ÚnextÚrelated_select_maskrC   r›   r‚   r–  rƒ   Úcolumnsr£   Únext_klass_infosÚrelated_fieldsÚrelated_fieldrH   Úrelated_field_nameÚ	join_inforž   rÊ  r×  rË  rÇ   rÓ  Ú	join_optsÚfield_select_maskÚnext_requestedÚfields_not_foundÚinvalid_fieldss'   `  `                                   r,   rª   z"SQLCompiler.get_related_selectionsw  sÔ  øø€ ð"		ð 		ð 		ð 		ð 		ð 		ð !ÐØð 	'˜i¨$¬*Ô*>Ò>Ð>à&Ð&àð 	8Ø”:×&Ò&Ñ(Ô(ˆDØœ×5Ò5Ñ7Ô7ˆJõ ‘u”uˆØÐÝ# D¤JÔ$=½tÑDÔDˆJØð 6Ø œJÔ5�	ð	Dð 	Dð 	Dð ”ð 5	Bñ 5	BˆAØ×Ò˜QœVÑ$Ô$Ð$àð Ø —}’} Q¤V¨RÑ0Ô0�Ø”}ð ð ð ˜qœv¨Ð2Ð2Ý(˜jð !"¤  Ø $§	¢	Ð*<Ð*<Ñ*>Ô*>Ñ ?Ô ?Ð KÀ8Ð Kð	ñô ð øð �å)¨!¨Z¸ÀKÑPÔPð ØØ"-§/¢/°!Ñ"4Ô"4Ð":¸ÐàœÔ-ØØ Ø !Ô 2à78´xÐV�A”NÔ3Ð3ÐEVÐEVà$ð	ð 	ˆJð  ×&Ò& zÑ2Ô2Ð2ØˆMØ#'¤:×#9Ò#9¸1¼6¸(ÀDÈ*Ñ#UÔ#UÑ ˆAˆq�!�U˜A˜qØ˜"”IˆEØ×.Ò.Ø#°¸Q¼^Ô=QÔ=Wð /ñ ô ˆGð ð +ð +�Ø×$Ò$¥S¨¡[¤[Ñ1Ô1Ð1Ø—’˜s D˜kÑ*Ô*Ð*Ð*Ø*7ˆJ�Ñ'Ø#×:Ò:ØØ#Ø”Ô$Ô*ØØ˜A‘ØØñ ô  Ðð $Ð# JÐ0@ÑAÔAÐAÑAàñ @	ðð àÔ-ðñ ô ˆNð
 )7ð 1Fñ 1FÑ$�˜uØ&1§o¢o°mÑ&DÔ&DÐ&JÈÐ#Ý-Ø!ØØØ'Ø ðñ ô ð ð à%2×%EÒ%EÑ%GÔ%GÐ"Ø× Ò Ð!3Ñ4Ô4Ð4à œJ×2Ò2Ø'Ð(¨$°
ñô �	ð "œ¨Ô+�Ý(¨°´
Ñ;Ô;ÐWÀÈTÌZÐ@W�à"Ø*Ø#Ø$1Ô$>Ô$OØ%2Ô%CØ#.ðð �
ð $×*Ò*¨:Ñ6Ô6Ð6Ø "�Ø×2Ò2Ø'Ø %ØœØ $¤
ð	 3ñ ô �ð #ð /ð /�CØ!×(Ò(­¨V©¬Ñ5Ô5Ð5Ø—M’M 3¨ +Ñ.Ô.Ð.Ð.Ø.;�
˜?Ñ+Ø —}’} ]×%EÒ%EÑ%GÔ%GÈÑLÔL�Ø#'×#>Ò#>ØØ'Ø”KØØ ‘MØØñ$ô $Ð ð (Ð'¨
Ð4DÑEÔEÐEÑEðMð Mð Mð
ð ð ð-ð -ð -õ ˜Y™œð 1Jñ 1J�à˜q’=�=Ø‘EØ˜4œ:Ô9Ð9Ñ9Ø ×$Ò$ TÑ*Ô*Ð*Ø=A¼Z×=SÒ=SØ˜  jñ>ô >Ñ:�K  I¨u°a¸ð &œO�EØ! "œI�Eå" 5¨$¬*Ñ5Ô5ÐQ¸%ÀtÄzÐ:Qð  ð "'Ø!,Ø#'õ  # 5™zœz¨Qš˜õ $ L°+Ñ>Ô>Ð>à!2å)0°ÀÑ)EÔ)EØ'2ð"ð "�Jð (×.Ò.¨zÑ:Ô:Ð:Ø$&�MØ(3¯ª¸¸{Ð8KÑ(LÔ(LÐ(RÐPRÐ%Ø"×6Ò6Ø)Ø$)Ø"œ[Ø$(¤Jð	 7ñ ô �Gð  'ð 3ð 3˜Ø%×,Ò,­S°©[¬[Ñ9Ô9Ð9ØŸš s¨D kÑ2Ô2Ð2Ð2Ø2?�J˜Ñ/Ø%.§]¢]°4¸Ñ%<Ô%<�NØ'+×'BÒ'BØØ)Ø"œ[Ø#(Ø"+¨a¡-Ø"0Ø#-ð (Cñ (ô (Ð$ð ,Ð+¨JÐ8HÑIÔIÐIùÝ" 9™~œ~×8Ò8¸ÑFÔFÐØð 	Ø!GÐ!GÐ6FÐ!GÑ!GÔ!G�Ý �jð Ÿ	š	 .Ñ1Ô1Ð1Ð1ØŸ	š	Ð"4Ð"4Ñ"6Ô"6Ñ7Ô7ÐC¸8ÐCð	ñô ð ð #Ð"r-   c           	      ó(  ‡ ‡— ˆ fd„Šˆ fd„}ˆˆ fd„}‰ j         sg S g }g }‰ j        j        D �]}‰ j         }|dk    r ||¦  «        }n“|                     t          ¦  «        D ]U}g |                     dg ¦  «        ¢ ‰|¦  «        ¢R }	|	D ](}
|
d         }|
d         r|j        }|j        |k    r|
} nŒ)d} nŒV|€|                     |¦  «         Œ¤ ||¦  «        }|�m‰ j	        j
        j        r/|                     ‰                      |¦  «        d	         ¦  «         Œñ|                     ‰                      |j        ¦  «        ¦  «         �Œ |rDt          d
d                     |¦  «        ›dd                      |¦   «         ¦  «        ›d�¦  «        ‚|S )zk
        Return a quoted list of arguments for the SELECT FOR UPDATE OF part of
        the query.
        c              3   óè   •‡‡K  — | d         j         j        }|j         j                             ¦   «         D ];\  Š}‰j                              ¦   «         Š‰|dˆˆˆfd„| d         D ¦   «         dœV — Œ<d S )NrH   Fc                 ó”   •— g | ]D}‰j         |         d          j        j        ‰k    s‰j         |         d          j        j        ‰v ¯B|‘ŒES ©r   )rA   rŽ   rH   )rP   Úselect_indexÚparent_listÚparent_modelr(   s     €€€r,   r˜   zbSQLCompiler.get_select_for_update_of_arguments.<locals>._get_parent_klass_info.<locals>.<listcomp>o  sb   ø€ ð &ð &ð &à(ð !œK¨Ô5°aÔ8Ô?ÔEÈÒUÐUØ#œ{¨<Ô8¸Ô;ÔBÔHÈKÐWÐWð %ð
  XÐWÐWr-   r›   )rH   rÓ   rÉ  r›   )rŠ  r‹  Úparentsr¤   Úget_parent_list)rC   r‹  Úparent_linkr÷  rø  r(   s      @@€r,   Ú_get_parent_klass_infozNSQLCompiler.get_select_for_update_of_arguments.<locals>._get_parent_klass_infog  s¹   øøøè è € Ø'¨Ô0Ô6ÔEˆNØ-;Ô-AÔ-I×-OÒ-OÑ-QÔ-Qð ð Ñ)�˜kØ*Ô0×@Ò@ÑBÔB�à)Ø(Ø$ð&ð &ð &ð &ð &ð &à,6°Ô,Gð&ñ &ô &ð	ð ð ð ð ð ðð r-   c                 ó®   •— | d         j         j        }| d         D ]8}‰j        |         d         j        j        |k    r‰j        |         d         c S Œ9dS )zì
            Find the first selected column from a model. If it doesn't exist,
            don't lock a model.

            select_fields is filled recursively, so it also contains fields
            from the parent models.
            rH   r›   r   N)rŠ  r‹  rA   rŽ   rH   )rC   r‹  rö  r(   s      €r,   Ú"_get_first_selected_col_from_modelzZSQLCompiler.get_select_for_update_of_arguments.<locals>._get_first_selected_col_from_modelz  sn   ø€ ð (¨Ô0Ô6ÔEˆNØ *¨?Ô ;ð 8ð 8�Ø”;˜|Ô,¨QÔ/Ô6Ô<ÀÒNÐNØœ; |Ô4°QÔ7Ð7Ð7Ð7ð Oð8ð 8r-   c               3   óÀ  •‡K  — t          j        d‰j        fg¦  «        } | r»|                      ¦   «         \  }}|€g ŠdV — n8|d         }|d         r|j        }||j        gz   Št          j        ‰¦  «        V — |                      ˆfd„ ‰|¦  «        D ¦   «         ¦  «         |                      ˆfd„| 	                    dg ¦  «        D ¦   «         ¦  «         | °¹dS dS )z<Yield all allowed field paths in breadth-first search order.Nr(   rÓ   rÉ  c              3   ó    •K  — | ]}‰|fV — Œ	d S r$   r/   ©rP   rC   r—  s     €r,   rR   z]SQLCompiler.get_select_for_update_of_arguments.<locals>._get_field_choices.<locals>.<genexpr>•  ó<   øè è € ð ð à"ð ˜:Ð&ðð ð ð ð ð r-   c              3   ó    •K  — | ]}‰|fV — Œ	d S r$   r/   r  s     €r,   rR   z]SQLCompiler.get_select_for_update_of_arguments.<locals>._get_field_choices.<locals>.<genexpr>™  r  r-   rœ   )
ÚcollectionsÚdequerC   ÚpopleftrÑ  rÇ   r
   r  rv   r|   )ÚqueueÚparent_pathrC   rÓ   r—  rü  r(   s       @€€r,   rÂ  zJSQLCompiler.get_select_for_update_of_arguments.<locals>._get_field_choices‡  sG  øøè è € åÔ%¨¨d¬oÐ'>Ð&?Ñ@Ô@ˆEØð Ø*/¯-ª-©/¬/Ñ'�˜ZØÐ&Ø�DØ �L�L�L�Là& wÔ/�EØ! )Ô,ð 3Ø %Ô 2˜Ø&¨%¬*¨Ñ5�DÝ$œ/¨$Ñ/Ô/Ð/Ð/Ð/Ø—’ð ð ð ð à&<Ð&<¸ZÑ&HÔ&Hðñ ô ñ ô ð ð —’ð ð ð ð à&0§n¢nÐ5JÈBÑ&OÔ&Oðñ ô ñ ô ð ð ð ð ð ð ð r-   r(   rœ   rÓ   rÉ  Nr   z<Invalid field name(s) given in select_for_update(of=(...)): r1  zI. Only relational fields followed in the query are allowed. Choices are: r»   )rC   r=   rZ  rÌ   r
   r|   rÑ  rÇ   rt   r2   ry   Úselect_for_update_of_columnr{   rÍ   rƒ   r   r  )r(   rþ  rÂ  rˆ   Úinvalid_namesrÇ   rC   r£   r  Úklass_infosÚrelated_klass_inforÓ   rü  s   `           @r,   ra  z.SQLCompiler.get_select_for_update_of_argumentsa  sB  øø€ ð	ð 	ð 	ð 	ð 	ð&	8ð 	8ð 	8ð 	8ð 	8ð	ð 	ð 	ð 	ð 	ð 	ð. Œð 	ØˆIØˆØˆØ”JÔ3ð 	Kñ 	KˆDØœˆJØ�vŠ~ˆ~Ø8Ð8¸ÑDÔD��à ŸJšJ¥zÑ2Ô2ð ð �Dð#Ø#ŸšÐ(=¸rÑBÔBð#à/Ð/°
Ñ;Ô;ð#ð #�Kð /:ð 	ð 	Ð*Ø 2°7Ô ;˜Ø-¨iÔ8ð 7Ø$)Ô$6˜EØ œ:¨Ò-Ð-Ø);˜JØ!˜Eð .ð &*˜
Ø˜ð "ð Ð%Ø!×(Ò(¨Ñ.Ô.Ð.ØØ8Ð8¸ÑDÔD�ØˆØ”?Ô+ÔGð KØ—M’M $§,¢,¨sÑ"3Ô"3°AÔ"6Ñ7Ô7Ð7Ð7à—M’M $×">Ò">¸s¼yÑ"IÔ"IÑJÔJÐJùØð 		Ý�*ð
 —I’I˜mÑ,Ô,Ð,Ð,Ø—I’IÐ0Ð0Ñ2Ô2Ñ3Ô3Ð3Ð3ðñô ð ð ˆr-   c                 óÆ   — i }t          |¦  «        D ]N\  }}|rG| j        j                             |¦  «        }|                     | j        ¦  «        }|s|r
||z   |f||<   ŒO|S r$   )ru   r2   rõ   Úget_db_converters)r(   r~   Ú
convertersÚirÆ   Úbackend_convertersÚfield_converterss          r,   Úget_converterszSQLCompiler.get_convertersË  s‰   € Øˆ
Ý& {Ñ3Ô3ð 	Xð 	X‰MˆAˆzØð XØ%)¤_Ô%8×%JÒ%JÈ:Ñ%VÔ%VÐ"Ø#-×#?Ò#?ÀÄÑ#PÔ#PÐ Ø%ð XÐ)9ð XØ%7Ð:JÑ%JÈJÐ$W�J˜q‘MøØÐr-   c              #   óæ   K  — | j         }t          |                     ¦   «         ¦  «        }t          t          |¦  «        D ]0}|D ]'\  }\  }}||         }|D ]}	 |	|||¦  «        }Œ|||<   Œ(|V — Œ1d S r$   )r2   r4  r¤   Úmap)
r(   Úrowsr  r2   ÚrowÚposÚconvsrÆ   ÚvalueÚ	converters
             r,   Úapply_converterszSQLCompiler.apply_convertersÕ  s¥   è è € Ø”_ˆ
Ý˜*×*Ò*Ñ,Ô,Ñ-Ô-ˆ
Ý•t˜T‘?”?ð 	ð 	ˆCØ,6ð !ð !Ñ(�Ñ(�e˜ZØ˜Cœ�Ø!&ð Eð E�IØ%˜I e¨Z¸ÑDÔD�E�EØ ��C‘�ØˆIˆIˆIˆIð	ð 	r-   c                 ó0  — |€|                       t          ||¬¦  «        }d„ | j        d| j        …         D ¦   «         }|                      |¦  «        }t          j        |¦  «        }|r-|                      ||¦  «        }|rt          t          |¦  «        }|S )z>Return an iterator over the results from executing this query.N)Úchunked_fetchÚ
chunk_sizec                 ó   — g | ]
}|d          ‘ŒS rõ  r/   rà  s     r,   r˜   z,SQLCompiler.results_iter.<locals>.<listcomp>ì  s   € Ð@Ð@Ð@˜1�!�A”$Ð@Ð@Ð@r-   r   )
Úexecute_sqlr   rA   rZ   r  r   Úfrom_iterabler  r  rn  )r(   rª  Útuple_expectedr  r  r½  r  r  s           r,   Úresults_iterzSQLCompiler.results_iterà  sª   € ð ˆ?Ø×&Ò&Ý ]¸zð 'ñ ô ˆGð AÐ@ ¤¨A°´Ð,>Ô ?Ð@Ñ@Ô@ˆØ×(Ò(¨Ñ0Ô0ˆ
ÝÔ" 7Ñ+Ô+ˆØð 	(Ø×(Ò(¨¨zÑ:Ô:ˆDØð (Ý�5 $Ñ'Ô'�Øˆr-   c                 óP   — t          |                      t          ¦  «        ¦  «        S )z€
        Backends (e.g. NoSQL) can override this in order to use optimized
        versions of "query has any results."
        )re   r!  r   rI   s    r,   Úhas_resultszSQLCompiler.has_resultsõ  s    € õ
 �D×$Ò$¥VÑ,Ô,Ñ-Ô-Ð-r-   c                 ó|  — |pt           }	 |                      ¦   «         \  }}|st          ‚n-# t          $ r  |t          k    rt	          g ¦  «        cY S Y dS w xY w|r| j                             ¦   «         }n| j                             ¦   «         }	 |                     ||¦  «         n## t          $ r | 
                    ¦   «          ‚ w xY w|t          k    r|S |t          k    ri	 |                     ¦   «         }|r#|d| j        …         | 
                    ¦   «          S || 
                    ¦   «          S # | 
                    ¦   «          w xY w|t           k    r| 
                    ¦   «          dS t          || j        j        j        | j        r| j        nd|¦  «        }|r| j        j        j        st)          |¦  «        S |S )a�  
        Run the query against the database and return the result(s). The
        return value is a single data item if result_type is SINGLE, or an
        iterator over the results if the result_type is MULTI.

        result_type is either MULTI (use fetchmany() to retrieve all rows),
        SINGLE (only retrieve a single row), or None. In this last case, the
        cursor is returned if any query is executed, since it's used by
        subclasses such as InsertQuery). It's possible, however, that no query
        is needed, as the filters describe an empty set. In that case, None is
        returned, to avoid any unnecessary database interaction.
        Nr   )r   r3   r   r   Úiterr2   Úchunked_cursorÚcursorÚexecuteÚ	ExceptionÚcloser   r   ÚfetchonerZ   Úcursor_iterry   Úempty_fetchmany_valuerf   Úcan_use_chunked_readsr4  )	r(   Úresult_typer  r  r„   r…   r*  Úvalrˆ   s	            r,   r!  zSQLCompiler.execute_sqlü  sç  € ð "Ð/¥Zˆð	ØŸ+š+™-œ-‰KˆC�Øð %Ý$Ð$ð%øåð 	ð 	ð 	Ø�eÒ#Ð#Ý˜B‘x”x���à��ð		øøøð
 ð 	.Ø”_×3Ò3Ñ5Ô5ˆFˆFà”_×+Ò+Ñ-Ô-ˆFð	Ø�NŠN˜3 Ñ'Ô'Ð'Ð'øÝð 	ð 	ð 	à�LŠL‰NŒNˆNØð	øøøð
 �&Ò Ð àˆMØ�&Ò Ð ðØ—o’oÑ'Ô'�Øð 3Ø˜q 4¤>Ð1Ô2ð —’‘”��ð ð —’‘”��ø�—’‘”��øøøØ�*Ò$Ð$Ø�LŠL‰NŒNˆNØˆFåØØŒOÔ$Ô:Ø"Ô3Ð=ˆDŒNˆN¸Øñ	
ô 
ˆð ð 	  D¤OÔ$<Ô$Rð 	 õ
 ˜‘<”<ÐØˆs-   ‹ , ¬$AÁAÂB& Â& CÃ"$D1 ÄD1 Ä1Ec                 óŠ  — |j         }| j        j        j        }t	          | j        j        ¦  «        D ]t\  }}|                      |¦  «        \  }}	 ||¦  «        ›d |||         ¦  «        ›�}
| j        j         	                    t          |›d|
›�|	¦  «        t          ¦  «         Œu|                      ¦   «         \  }}d|z  |fS )Nr»   ú = zEXISTS (%s))rÍ   r2   rõ   rö   ru   r=   rA   r{   r_   rs   r   r   r3   )r(   rƒ   rç  r1   ÚqnÚqn2r„  Ú
select_colÚlhs_sqlÚ
lhs_paramsÚrhsr„   r…   s                r,   Úas_subquery_conditionz!SQLCompiler.as_subquery_condition>  sÌ   € ØÔ-ˆØŒoÔ!Ô,ˆå!*¨4¬:Ô+<Ñ!=Ô!=ð 	Vð 	VÑˆE�:Ø"&§,¢,¨zÑ":Ô":ÑˆG�ZØ˜R ™YœY˜Y˜Y¨¨¨G°E¬NÑ(;Ô(;Ð(;Ð<ˆCØŒJÔ× Ò ¥°W°W°W¸c¸cÐ(BÀJÑ!OÔ!OÕQTÑUÔUÐUÐUà—k’k‘m”m‰ˆˆVØ˜sÑ" FÐ*Ð*r-   c              #   óZ  ‡K  — t          |                      ¦   «         ¦  «        }| j        j        j        }|r$|                     ¦   «         dk    rt          j        nt          Š|d         D ]?}t          |t          ¦  «        s$d 
                    ˆfd„|D ¦   «         ¦  «        V — Œ;|V — Œ@d S )NÚjsonr   rL  c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r$   r/   )rP   ÚcÚoutput_formatters     €r,   rR   z,SQLCompiler.explain_query.<locals>.<genexpr>R  s/   øè è € Ð@Ð@°qÐ/Ð/°Ñ2Ô2Ð@Ð@Ð@Ð@Ð@Ð@r-   )r4  r!  r=   re  r  Úlowerr>  Údumpsr0   rr   r  )r(   rˆ   Úformat_r  rA  s       @r,   Úexplain_queryzSQLCompiler.explain_queryJ  s½   øè è € Ý�d×&Ò&Ñ(Ô(Ñ)Ô)ˆð ”*Ô)Ô0ˆØ)0ÐW°W·]²]±_´_ÈÒ5NÐ5N�4œ:˜:ÕTWÐØ˜!”9ð 	ð 	ˆCÝ˜c¥3Ñ'Ô'ð Ø—h’hÐ@Ð@Ð@Ð@¸CÐ@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@à�	�	�	�	ð		ð 	r-   )T)F)TF)NNN)Nrµ   N)NNrl   NN)'r4   r5   r6   r    ÚreÚ	MULTILINEÚDOTALLrâ   r'   rJ   r[   rj   rg   rx   rX   r×   r^   rd   rÍ   r{   r  rA  r3   r§   rO  rÏ   r“  rP  rª   ra  r  r  r   r$  r&  r   r!  r<  rE  r/   r-   r,   r:   r:   '   s�  € € € € € à%Ð%Ø Ø
Œ�r”yÑ ñô €Nð
#ð #ð #ð #ð"
ð 
ð 
ð*ð *ð *ð *ð0ð 0ð 0ð 0ð eð eð eðNð ð ð@U,ð U,ð U,ð U,ðnBð Bð BðH;ð ;ð ;ðzð ð ðð ð ð,ð ð ðNð Nð Nð`^ð ^ð ^ð@_9ð _9ð _9ð _9ðD EIð0ð 0ð 0ð 0ðdð ð ð6 IMð?
ð ?
ð ?
ð ?
ðBLð Lð Lð#ð #ð #ðR ØØØØðh#ð h#ð h#ð h#ðThð hð hðTð ð ð	ð 	ð 	ð ØØØ*ðð ð ð ð*.ð .ð .ð  ¨uÐAXð@ð @ð @ð @ðD
+ð 
+ð 
+ð
ð 
ð 
ð 
ð 
r-   r:   c                   ó<   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d	d„Z
dS )
ÚSQLInsertCompilerNr/   c                 ó  — |€|g }}n^t          |d¦  «        r|                      |¦  «        \  }}n5t          |d¦  «        r |                     || | j        ¦  «        |g}}nd|g}}| j        j                             ||¦  «        }||fS )at  
        Take a field and a value intended to be saved on that field, and
        return placeholder SQL and accompanying params. Check for raw values,
        expressions, and fields with get_placeholder() defined in that order.

        When field is None, consider the value raw and use it as the
        placeholder, with no corresponding parameters returned.
        Nr3   Úget_placeholderú%s)rp   r{   rL  r2   rõ   Úmodify_insert_params)r(   rÓ   r3  r„   r…   s        r,   Úfield_as_sqlzSQLInsertCompiler.field_as_sql[  s¦   € ð ˆ=à˜r�ˆCˆCÝ�S˜(Ñ#Ô#ð 		&àŸ,š, sÑ+Ô+‰KˆC��Ý�UÐ-Ñ.Ô.ð 	&ð  ×/Ò/°°T¸4¼?ÑKÔKÈcÈU�ˆCˆCð   �ˆCð ”Ô$×9Ò9¸#¸vÑFÔFˆà�Fˆ{Ðr-   c                 óV  — t          |d¦  «        r~|                     | j        dd¬¦  «        }|j        rt	          d|›d|›d�¦  «        ‚|j        rt          d|j        ›d	|›d
�¦  «        ‚|j        rt          d|j        ›d	|›d
�¦  «        ‚| 	                    || j
        ¬¦  «        S )zœ
        Prepare a value to be used in a query by resolving it if it is an
        expression and otherwise calling the field's get_db_prep_save().
        r·   FT©rÙ   Úfor_savezFailed to insert expression "z" on z<. F() expressions can only be used to update, not to insert.ú3Aggregate functions are not allowed in this query (ú=ú).ú2Window expressions are not allowed in this query (©r2   )rp   r·   r=   Úcontains_column_referencesÚ
ValueErrorÚcontains_aggregater   rÇ   Úcontains_over_clauseÚget_db_prep_saver2   )r(   rÓ   r  s      r,   Úprepare_valuezSQLInsertCompiler.prepare_value{  sõ   € õ
 �5Ð.Ñ/Ô/ð 	Ø×,Ò,Ø”
¨¸ð -ñ ô ˆEð Ô/ð Ý �jàDIÀEÀEÈ5È5È5ðRñô ð ð Ô'ð Ý �jà"'¤* * *¨e¨e¨eð5ñô ð ð Ô)ð Ý �jà”z�z�z 5 5 5ð*ñô ð ð ×%Ò% e¸¼Ð%ÑHÔHÐHr-   c                 ór   — | j         j        rt          ||j        ¦  «        S |                     |d¬¦  «        S )z¦
        Get the given field's value off the given obj. pre_save() is used for
        things like auto_now on DateTimeField. Skip it if this is a raw query.
        T)rs   )r=   Úrawr•   r›  Úpre_save)r(   rÓ   rÔ  s      r,   Úpre_save_valzSQLInsertCompiler.pre_save_val˜  s8   € ð
 Œ:Œ>ð 	/Ý˜3 ¤Ñ.Ô.Ð.Ø�~Š~˜c tˆ~Ñ,Ô,Ð,r-   c                 ó€   ‡ ‡— |sg g fS ˆˆ fd„|D ¦   «         }d„ |D ¦   «         }t          |Ž \  }}d„ |D ¦   «         }||fS )a+  
        Take a sequence of N fields and a sequence of M rows of values, and
        generate placeholder SQL and parameters for each field and value.
        Return a pair containing:
         * a sequence of M rows of N SQL placeholder strings, and
         * a sequence of M rows of corresponding parameter values.

        Each placeholder string may contain any number of '%s' interpolation
        strings, and each parameter row will contain exactly as many params
        as the total number of '%s's in the corresponding placeholder row.
        c              3   óP   •K  — | ] }ˆfd „t          ‰|¦  «        D ¦   «         V — Œ!dS )c              3   óJ   •K  — | ]\  }}‰                      ||¦  «        V — Œd S r$   )rO  )rP   rÓ   Úvr(   s      €r,   rR   z>SQLInsertCompiler.assemble_as_sql.<locals>.<genexpr>.<genexpr>³  s7   øè è € ÐJÐJ©X¨U°AˆT×Ò˜u aÑ(Ô(ÐJÐJÐJÐJÐJÐJr-   N©r  )rP   r  r½  r(   s     €€r,   rR   z4SQLInsertCompiler.assemble_as_sql.<locals>.<genexpr>²  sV   øè è € ð !
ð !
àð KÐJÐJÐJ½¸VÀSÑ9IÔ9IÐJÑJÔJð!
ð !
ð !
ð !
ð !
ð !
r-   c              3   ó(   K  — | ]}t          |Ž V — Œd S r$   rf  ©rP   r  s     r,   rR   z4SQLInsertCompiler.assemble_as_sql.<locals>.<genexpr>¹  s&   è è € Ð"NÐ"N°¥3¨ 9Ð"NÐ"NÐ"NÐ"NÐ"NÐ"Nr-   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó   — g | ]	}|D ]}|‘ŒŒ
S r/   r/   ©rP   Úpsr™  s      r,   r˜   z@SQLInsertCompiler.assemble_as_sql.<locals>.<listcomp>.<listcomp>À  s%   € Ð3Ð3Ð3˜R°Ð3Ð3¨1�qÐ3Ð3Ð3Ð3r-   r/   rh  s     r,   r˜   z5SQLInsertCompiler.assemble_as_sql.<locals>.<listcomp>À  s'   € ÐJÐJÐJ¸Ð3Ð3 3Ð3Ñ3Ô3ÐJÐJÐJr-   rf  )r(   r½  Ú
value_rowsÚrows_of_fields_as_sqlÚsql_and_param_pair_rowsÚplaceholder_rowsÚ
param_rowss   ``     r,   Úassemble_as_sqlz!SQLInsertCompiler.assemble_as_sql¡  s‘   øø€ ð ð 	Ø�r�6ˆMð!
ð !
ð !
ð !
ð !
à!ð!
ñ !
ô !
Ðð #OÐ"NÐ8MÐ"NÑ"NÔ"NÐõ (+Ð,CÐ'DÑ$Ð˜*ð KÐJ¸zÐJÑJÔJˆ
à Ð+Ð+r-   c                 óÌ  ‡ ‡
‡‡— ‰ j         j        j        Š‰ j                             ¦   «         }‰ j         j                             ‰ j        j        ¬¦  «        }|›d ‰|j        ¦  «        ›�gŠ‰ j        j        p|j	        gŠ
‰ 
                    dd                     ˆfd„‰
D ¦   «         ¦  «        z  ¦  «         ‰ j        j        rˆ
ˆ fd„‰ j        j        D ¦   «         }nˆ fd„‰ j        j        D ¦   «         }d gŠ
‰ j         o‰ j         j        j        }‰                      ‰
|¦  «        \  }}‰ j         j                             ‰
‰ j        j        d„ ‰ j        j        D ¦   «         d	„ ‰ j        j        D ¦   «         ¦  «        }‰ j        �r/‰ j         j        j        �r‰ j         j        j        r6‰ 
                    ‰ j         j                             ‰
|¦  «        ¦  «         |}n:‰ 
                    d
d                     |d         ¦  «        z  ¦  «         |d         g}|r‰ 
                    |¦  «         ‰ j         j                             ‰ j        ¦  «        \  }	‰ _        |	r ‰ 
                    |	¦  «         |‰ j        gz  }d                     ‰¦  «        t3          t5          j        |¦  «        ¦  «        fgS |ry‰ 
                    ‰ j         j                             ‰
|¦  «        ¦  «         |r‰ 
                    |¦  «         d                     ‰¦  «        t3          d„ |D ¦   «         ¦  «        fgS |r‰ 
                    |¦  «         ˆfd„t9          ||¦  «        D ¦   «         S )N)Úon_conflictrL  z(%s)r1  c              3   ó8   •K  — | ]} ‰|j         ¦  «        V — Œd S r$   ©rÞ   )rP   r¹  r6  s     €r,   rR   z+SQLInsertCompiler.as_sql.<locals>.<genexpr>Î  s-   øè è € Ð(FÐ(F¸!¨¨¨A¬H©¬Ð(FÐ(FÐ(FÐ(FÐ(FÐ(Fr-   c                 ó0   •‡— g | ]Šˆˆfd „‰D ¦   «         ‘ŒS )c           	      ód   •— g | ],}‰                      |‰                     |‰¦  «        ¦  «        ‘Œ-S r/   )r]  ra  )rP   rÓ   rÔ  r(   s     €€r,   r˜   z7SQLInsertCompiler.as_sql.<locals>.<listcomp>.<listcomp>Ò  sI   ø€ ð ð ð àð ×&Ò& u¨d×.?Ò.?ÀÀsÑ.KÔ.KÑLÔLðð ð r-   r/   )rP   rÔ  r½  r(   s    @€€r,   r˜   z,SQLInsertCompiler.as_sql.<locals>.<listcomp>Ñ  sR   øø€ ð ð ð ð
 ð	ð ð ð ð à!'ðñ ô ðð ð r-   c                 óN   •— g | ]!}‰j         j                             ¦   «         g‘Œ"S r/   )r2   rõ   Úpk_default_value)rP   r‚   r(   s     €r,   r˜   z,SQLInsertCompiler.as_sql.<locals>.<listcomp>Ú  s:   ø€ ð ð ð Ø=>�”Ô$×5Ò5Ñ7Ô7Ð8ðð ð r-   c              3   ó$   K  — | ]}|j         V — Œd S r$   rv  r¸  s     r,   rR   z+SQLInsertCompiler.as_sql.<locals>.<genexpr>ì  ó$   è è € Ð8Ð8˜!ˆQŒXÐ8Ð8Ð8Ð8Ð8Ð8r-   c              3   ó$   K  — | ]}|j         V — Œd S r$   rv  r¸  s     r,   rR   z+SQLInsertCompiler.as_sql.<locals>.<genexpr>í  r|  r-   úVALUES (%s)r   c              3   ó$   K  — | ]}|D ]}|V — ŒŒd S r$   r/   rk  s      r,   rR   z+SQLInsertCompiler.as_sql.<locals>.<genexpr>  s/   è è € Ð,PÐ,P°2ÈRÐ,PÐ,PÈ¨QÐ,PÐ,PÐ,PÐ,PÐ,PÐ,PÐ,Pr-   c           	      óx   •— g | ]6\  }}d                       ‰dd                      |¦  «        z  gz   ¦  «        |f‘Œ7S )rL  r~  r1  )r  )rP   r™  Úvalsrˆ   s      €r,   r˜   z,SQLInsertCompiler.as_sql.<locals>.<listcomp>  sU   ø€ ð ð ð á�A�tð —’˜& M°D·I²I¸a±L´LÑ$@Ð#AÑAÑBÔBÀDÐIðð ð r-   )r2   rõ   rö   r=   r¿   Úinsert_statementrt  Údb_tabler½  r�  rt   r  ÚobjsÚreturning_fieldsry   Úhas_bulk_insertrr  Úon_conflict_suffix_sqlÚupdate_fieldsÚunique_fieldsÚcan_return_columns_from_insertÚ can_return_rows_from_bulk_insertÚbulk_insert_sqlÚreturn_insert_columnsÚreturning_paramsrn  r   r"  r  )r(   r�  r‚  rm  Úcan_bulkrp  rq  r‡  r…   Úr_sqlr½  r6  rˆ   s   `         @@@r,   r3   zSQLInsertCompiler.as_sqlÄ  sË  øøøø€ ð Œ_Ô Ô+ˆØŒz×"Ò"Ñ$Ô$ˆØœ?Ô.×?Ò?Øœ
Ô.ð @ñ 
ô 
Ðð .Ð-Ð-¨r¨r°$´-Ñ/@Ô/@Ð/@ÐAÐBˆØ”Ô"Ð/ t¤w iˆØ�Š�f˜tŸyšyÐ(FÐ(FÐ(FÐ(F¸vÐ(FÑ(FÔ(FÑFÔFÑFÑGÔGÐGàŒ:Ôð 	ðð ð ð ð ð
  œ:œ?ðñ ô ˆJˆJðð ð ð ØBFÄ*Ä/ðñ ô ˆJð �VˆFð Ô%Ð%ÐR¨$¬/Ô*BÔ*Rð 	ð (,×';Ò';¸FÀJÑ'OÔ'OÑ$Ð˜*à!%¤Ô!4×!KÒ!KØØŒJÔ"Ø8Ð8˜tœzÔ7Ð8Ñ8Ô8Ø8Ð8˜tœzÔ7Ð8Ñ8Ô8ñ	"
ô "
Ðð Ô!ñ	Là”Ô(ÔGñ	Lð ŒÔ'ÔHð )Ø—’Ø”OÔ'×7Ò7¸Ð@PÑQÔQñô ð ð $��à—’˜m¨d¯iªiÐ8HÈÔ8KÑ.LÔ.LÑLÑMÔMÐMØ$ Qœ-˜�Ø%ð 6Ø—’Ð4Ñ5Ô5Ð5ð ,0¬?Ô+>×+TÒ+TØÔ%ñ,ô ,Ñ(ˆE�4Ô(ð ð 2Ø—’˜eÑ$Ô$Ð$Ø˜4Ô0Ð1Ñ1�Ø—X’X˜fÑ%Ô%¥u­UÔ-@ÀÑ-HÔ-HÑ'IÔ'IÐJÐKÐKàð 	Ø�MŠM˜$œ/Ô-×=Ò=¸fÐFVÑWÔWÑXÔXÐXØ%ð 6Ø—’Ð4Ñ5Ô5Ð5Ø—X’X˜fÑ%Ô%¥uÐ,PÐ,P¸Ð,PÑ,PÔ,PÑ'PÔ'PÐQÐRÐRà%ð 6Ø—’Ð4Ñ5Ô5Ð5ðð ð ð å"Ð#3°ZÑ@Ô@ðñ ô ð r-   c                 óJ  ‡— |r0t          | j        j        ¦  «        dk    r| j        j        j        sJ ‚| j                             ¦   «         Š|| _        g }| j                             ¦   «         5 }|  	                    ¦   «         D ]\  }}| 
                    ||¦  «         Œ| j        sg cd d d ¦  «         S | j        j        j        rPt          | j        j        ¦  «        dk    r3| j        j                             |¦  «        }ˆfd„| j        D ¦   «         }n¼| j        j        j        rYt          | j        j        ¦  «        dk    sJ ‚| j        j                             || j        ¦  «        g}ˆfd„| j        D ¦   «         }nR‰j                             ‰j        ¦  «        g}| j        j                             |‰j        ‰j        j        ¦  «        fg}d d d ¦  «         n# 1 swxY w Y   |                      |¦  «        }|r#t-          |                      ||¦  «        ¦  «        }|S )Nrl   c                 óD   •— g | ]}|                      ‰j        ¦  «        ‘ŒS r/   ©rŽ  rƒ  ©rP   rÓ   r�  s     €r,   r˜   z1SQLInsertCompiler.execute_sql.<locals>.<listcomp>'  ó'   ø€ ÐXÐXÐX¸˜Ÿš d¤mÑ4Ô4ÐXÐXÐXr-   c                 óD   •— g | ]}|                      ‰j        ¦  «        ‘ŒS r/   r“  r”  s     €r,   r˜   z1SQLInsertCompiler.execute_sql.<locals>.<listcomp>0  r•  r-   )rY   r=   r„  r2   ry   r‹  r¿   r…  r*  r3   r+  rõ   Úfetch_returned_insert_rowsrŠ  Úfetch_returned_insert_columnsrŽ  r�  rŽ  rƒ  Úlast_insert_idrÞ   r  r4  r  )	r(   r…  r¯   r*  r„   r…   r  r  r�  s	           @r,   r!  zSQLInsertCompiler.execute_sql  sŠ  ø€ àð	
å�D”J”OÑ$Ô$¨Ò)Ð)Ø”OÔ,ÔMð *Ð)Ð)ð Œz×"Ò"Ñ$Ô$ˆØ 0ˆÔØˆØŒ_×#Ò#Ñ%Ô%ð 	¨Ø#Ÿ{š{™}œ}ð ,ð ,‘��VØ—’˜s FÑ+Ô+Ð+Ð+ØÔ(ð Øð		ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð ”Ô(ÔIðå˜œ
œÑ(Ô(¨1Ò,Ð,à”Ô*×EÒEÀfÑMÔM�ØXÐXÐXÐXÀ$ÔBWÐXÑXÔX��Ø”Ô)ÔHð Ý˜4œ:œ?Ñ+Ô+¨qÒ0Ð0Ð0Ð0à”OÔ'×EÒEØØÔ-ñô ð�ð YÐXÐXÐXÀ$ÔBWÐXÑXÔX��àœŸš¨¬Ñ6Ô6Ð7�ð œÔ+×:Ò:Ø"Ø œMØ œGœNñô ðð�ð-	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð> ×(Ò(¨Ñ.Ô.ˆ
Øð 	AÝ˜×-Ò-¨d°JÑ?Ô?Ñ@Ô@ˆDØˆs   Á/9GÂ5DGÇG"Ç%G"r$   )r4   r5   r6   r…  rŽ  rO  r]  ra  rr  r3   r!  r/   r-   r,   rJ  rJ  W  sˆ   € € € € € ØÐØÐðð ð ð@Ið Ið Ið:-ð -ð -ð!,ð !,ð !,ðFNð Nð Nð`+ð +ð +ð +ð +ð +r-   rJ  c                   ó\   — e Zd Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Z	dS )ÚSQLDeleteCompilerc                 óˆ   ‡ — ‰ j                              ¦   «          t          ˆ fd„‰ j         j        D ¦   «         ¦  «        dk    S )Nc              3   óD   •K  — | ]}‰j         j        |         d k    V — ŒdS rM   rN   )rP   rî   r(   s     €r,   rR   z1SQLDeleteCompiler.single_alias.<locals>.<genexpr>G  s2   øè è € ÐRÐR¸�4”:Ô,¨QÔ/°!Ò3ÐRÐRÐRÐRÐRÐRr-   rl   )r=   rW   ÚsumrV   rI   s   `r,   Úsingle_aliaszSQLDeleteCompiler.single_aliasC  sG   ø€ ð 	Œ
×$Ò$Ñ&Ô&Ð&ÝÐRÐRÐRÐR¸T¼ZÔ=QÐRÑRÔRÑRÔRÐVWÒWÐWr-   c                 óÆ   ‡ ‡— t          |t          ¦  «        r|j        ‰k    S t          |d¦  «        sdS t	          ˆˆ fd„|                     ¦   «         D ¦   «         ¦  «        S )Nr  Fc              3   óD   •K  — | ]}‰                      |‰¦  «        V — Œd S r$   )Ú_expr_refs_base_model)rP   Úsource_exprÚ
base_modelÚclss     €€r,   rR   z:SQLDeleteCompiler._expr_refs_base_model.<locals>.<genexpr>O  sG   øè è € ð 
ð 
àð ×%Ò% k°:Ñ>Ô>ð
ð 
ð 
ð 
ð 
ð 
r-   )rr   r   rH   rp   Úanyr  )r¥  r€   r¤  s   ` `r,   r¢  z'SQLDeleteCompiler._expr_refs_base_modelI  s„   øø€ å�d�EÑ"Ô"ð 	,Ø”: Ò+Ð+Ý�tÐ5Ñ6Ô6ð 	Ø�5Ýð 
ð 
ð 
ð 
ð 
à#×:Ò:Ñ<Ô<ð
ñ 
ô 
ñ 
ô 
ð 	
r-   c                 ó¬   ‡ — t          ˆ fd„t          ‰ j        j                             ¦   «         ‰ j        j        j        ¦  «        D ¦   «         ¦  «        S )Nc              3   óX   •K  — | ]$}‰                      |‰j        j        ¦  «        V — Œ%d S r$   )r¢  r=   rH   r‘   s     €r,   rR   zESQLDeleteCompiler.contains_self_reference_subquery.<locals>.<genexpr>V  sL   øè è € ð 
ð 
àð ×&Ò& t¨T¬ZÔ-=Ñ>Ô>ð
ð 
ð 
ð 
ð 
ð 
r-   )r¦  r   r=   r¬   r3  r_   ÚchildrenrI   s   `r,   Ú contains_self_reference_subqueryz2SQLDeleteCompiler.contains_self_reference_subqueryT  sc   ø€ åð 
ð 
ð 
ð 
åØ”
Ô&×-Ò-Ñ/Ô/°´Ô1AÔ1Jñô ð
ñ 
ô 
ñ 
ô 
ð 	
r-   c                 óÎ   — d|                       |j        ¦  «        z  }	 |                      |j        ¦  «        \  }}n# t          $ r |dfcY S w xY w|› d|› �t          |¦  «        fS )NzDELETE FROM %sr/   z WHERE )rÍ   Ú
base_tabler{   r_   r   rn  )r(   r=   Údeleter_   r…   s        r,   Ú_as_sqlzSQLDeleteCompiler._as_sql]  s…   € Ø! D×$@Ò$@ÀÔAQÑ$RÔ$RÑRˆð	Ø ŸLšL¨¬Ñ5Ô5‰MˆE�6�6øÝð 	ð 	ð 	Ø˜2�:ÐÐÐð	øøøàÐ(Ð( Ð(Ð(­%°©-¬-Ð7Ð7s   Ÿ= ½AÁAc                 ó¦  — | j         r2| j        j        j        s| j        s|                      | j        ¦  «        S | j                             ¦   «         }t          |_	        | 
                    ¦   «          | j        j        j        j        }|                     | j                             ¦   «         ¦  «        g|_        t          | j        j        ¦  «        }| j        j        j        sC|                     | j        ¬¦  «                             ¦   «         \  }}t)          d|z  |¦  «        }|                     d|¦  «         |                      |¦  «        S )úf
        Create the SQL for this query. Return the SQL string and list of
        parameters.
        rW  zSELECT * FROM (%s) subqueryÚpk__in)rŸ  r2   ry   Ú"delete_can_self_reference_subqueryrª  r®  r=   r	  r   r+   Úclear_select_clauserH   rŠ  r�  rŽ  rW   rA   Úupdate_can_self_selectrÿ   r3   r   Ú
add_filter)r(   Úinnerqr�  Úouterqr„   r…   s         r,   r3   zSQLDeleteCompiler.as_sqle  s+  € ð
 Ôð 	,ØŒOÔ$ÔGð	,àÔ8ð	,ð —<’< ¤
Ñ+Ô+Ð+Ø”×!Ò!Ñ#Ô#ˆÝ ˆÔØ×"Ò"Ñ$Ô$Ð$ØŒZÔÔ#Ô&ˆØŸš D¤J×$@Ò$@Ñ$BÔ$BÑCÔCÐDˆŒÝ�t”zÔ'Ñ(Ô(ˆØŒÔ'Ô>ð 	Ið !×-Ò-¸¼Ð-ÑIÔI×PÒPÑRÔR‰KˆC�ÝÐ9¸CÑ?ÀÑHÔHˆFØ×Ò˜( FÑ+Ô+Ð+Ø�|Š|˜FÑ#Ô#Ð#r-   N)
r4   r5   r6   r   rŸ  Úclassmethodr¢  rª  r®  r3   r/   r-   r,   r›  r›  B  s„   € € € € € ØðXð Xñ „_ðXð
 ð
ð 
ñ „[ð
ð ð
ð 
ñ „_ð
ð8ð 8ð 8ð$ð $ð $ð $ð $r-   r›  c                   ó.   ‡ — e Zd Zd„ Zˆ fd„Zˆ fd„Zˆ xZS )ÚSQLUpdateCompilerc           
      óz  — |                       ¦   «          | j        j        sdS | j        }g g }}| j        j        D �]Ý\  }}}t	          |d¦  «        rb|                     | j        dd¬¦  «        }|j        rt          d|j        ›d|›d�¦  «        ‚|j	        rt          d	|j        ›d|›d�¦  «        ‚nPt	          |d
¦  «        r@|j
        r|                     |¦  «        }n#t          d|›d|›d|j        j        ›d�¦  «        ‚|                     || j        ¬¦  «        }t	          |d¦  «        r|                     || | j        ¦  «        }nd}|j        }t	          |d¦  «        rU|                      |¦  «        \  }	}
|                      ||¦  «        ›d||	z  ›�¦  «         |                     |
¦  «         �Œ€|�:|                      ||¦  «        ›d|›�¦  «         |                     |¦  «         �Œ¼|                     d ||¦  «        z  ¦  «         �Œß| j        j        }d ||¦  «        z  d                     |¦  «        g}	 |                      | j        j        ¦  «        \  }}
|                     d|z  ¦  «         n# t2          $ r g }
Y nw xY wd                     |¦  «        t5          ||
z   ¦  «        fS )r°  )rC  r/   r·   FTrQ  rS  rT  rU  rV  Úprepare_database_savezTried to update field z with a model instance, z. Use a value compatible with r»   rW  rL  rM  r3   r5  Nz	%s = NULLzUPDATE %s SETr1  rI  rL  )rj   r=   r3  rÍ   rp   r·   rZ  r   rÇ   r[  rÑ  r¼  Ú	TypeErrorr+   r4   r\  r2   rL  rÞ   r{   rt   rv   r¬  r  r_   r   rn  )r(   r6  r3  Úupdate_paramsrÓ   rH   r3  ÚplaceholderrÇ   r„   r…   rÖ   rˆ   r_   s                 r,   r3   zSQLUpdateCompiler.as_sql  s?  € ð
 	×ÒÑÔÐØŒzÔ ð 	Ø�6ØÔ)ˆØ " B�ˆØ!%¤Ô!2ð (	6ñ (	6ÑˆE�5˜#Ý�sÐ0Ñ1Ô1ð Ø×,Ò,Ø”J¨E¸Dð -ñ ô �ð Ô)ð Ý$˜*à&+¤j j j°#°#°#ð7ñô ð ð Ô+ð Ý$˜*à&+¤j j j°#°#°#ð7ñô ð ðõ
 ˜Ð5Ñ6Ô6ð ØÔ%ð Ø×3Ò3°EÑ:Ô:�C�Cå#˜)ð !˜5˜5 # # # u¤Ô'?Ð'?Ð'?ðAñô ð ð
 ×(Ò(¨¸¼Ð(ÑIÔIˆCõ �uÐ/Ñ0Ô0ð #Ø#×3Ò3°C¸¸t¼ÑOÔO��à"�Ø”<ˆDÝ�s˜HÑ%Ô%ð 6Ø"Ÿlšl¨3Ñ/Ô/‘��VØ—’¨2¨2¨d©8¬8¨8¨8°[À3Ñ5FÐ5FÐGÑHÔHÐHØ×$Ò$ VÑ,Ô,Ð,Ñ,Ø�Ø—’¨2¨2¨d©8¬8¨8¨8°[°[ÐAÑBÔBÐBØ×$Ò$ SÑ)Ô)Ð)Ñ)à—’˜k¨B¨B¨t©H¬HÑ4Ñ5Ô5Ð5Ñ5Ø”
Ô%ˆà˜b˜b ™iœiÑ'Ø�IŠI�fÑÔð
ˆð	.Ø ŸLšL¨¬Ô)9Ñ:Ô:‰MˆE�6ð �MŠM˜* uÑ,Ñ-Ô-Ð-Ð-øõ ð 	ð 	ð 	ØˆFˆFˆFð	øøøð �xŠx˜ÑÔ¥ }°vÑ'=Ñ!>Ô!>Ð>Ð>s   É	"J ÊJÊJc                 ór  •— t          ¦   «                              |¦  «        }	 |r|j        nd}|du }|r|                     ¦   «          n# |r|                     ¦   «          w w xY w| j                             ¦   «         D ]7}|                     | j        ¦  «                             |¦  «        }|r|r|}d}Œ8|S )a  
        Execute the specified update. Return the number of rows affected by
        the primary update query. The "primary update query" is the first
        non-empty query that is executed. Row counts for any subsequent,
        related queries are not available.
        r   NF)r&   r!  Úrowcountr-  r=   Úget_related_updatesrÿ   r>   )r(   r2  r*  r  Úis_emptyr=   Úaux_rowsr+   s          €r,   r!  zSQLUpdateCompiler.execute_sql¿  sÑ   ø€ õ ‘”×$Ò$ [Ñ1Ô1ˆð	Ø&,Ð3�6”?�?°!ˆDØ �~ˆHàð Ø—’‘”�øøð ð Ø—’‘”��ðøøøà”Z×3Ò3Ñ5Ô5ð 	!ð 	!ˆEØ×)Ò)¨$¬*Ñ5Ô5×AÒAÀ+ÑNÔNˆHØð !˜Hð !Ø�Ø �øØˆs   ¤A
 Á
A#c                 óÂ  •‡— | j         j                             ¦   «         }| j                              ¦   «          | j                              ¦   «         }| j         j        s|dk    rdS | j                              t          ¬¦  «        }d|_        | 	                    d¬¦  «         i |_
        g |_        |                     ¦   «         }|j        j        g}g }| j         j        D ]Ž}t          d„ |                     |¦  «        D ¦   «         ¦  «        r|                     |df¦  «         ŒF|                     |t%          |¦  «        f¦  «         |                     |j        j        j        ¦  «         Œ�|                     |¦  «         t+          ¦   «                              ¦   «          |dk    o| j        j        j         }| j                              ¦   «          | j         j        s|rÆg }	t7          j        t:          ¦  «        }
|                     | j        ¦  «                              tB          ¦  «        D ]P}|	 "                    d	„ |D ¦   «         ¦  «         |D ],\  }Š|
|          "                    ˆfd
„|D ¦   «         ¦  «         Œ-ŒQ| j          #                    d|	¦  «         |
| j         _$        n| j          #                    d|¦  «         | j          %                    |¦  «         dS )aO  
        If the update depends on results from other tables, munge the "where"
        conditions to match the format required for (portable) SQL updates.

        If multiple updates are required, pull out the id values to update at
        this point so that they don't change as a result of the progressive
        updates.
        rl   N)ÚklassFT)Úforcec              3   ó.   K  — | ]}|j         j        V — Œd S r$   )Ú
join_fieldr�   )rP   r—  s     r,   rR   z2SQLUpdateCompiler.pre_sql_setup.<locals>.<genexpr>ì  s8   è è € ð ð Ø04�”Ô+ðð ð ð ð ð r-   r   c              3   ó&   K  — | ]}|d          V — ŒdS rM   r/   )rP   r÷   s     r,   rR   z2SQLUpdateCompiler.pre_sql_setup.<locals>.<genexpr>	  s&   è è € Ð1Ð1 q˜a œdÐ1Ð1Ð1Ð1Ð1Ð1r-   c              3   ó(   •K  — | ]}|‰         V — Œd S r$   r/   )rP   r÷   r„  s     €r,   rR   z2SQLUpdateCompiler.pre_sql_setup.<locals>.<genexpr>  s'   øè è € Ð.FÐ.F¸A¨q°¬xÐ.FÐ.FÐ.FÐ.FÐ.FÐ.Fr-   r±  )&r=   rO   rÄ   rW   Úcount_active_tablesÚrelated_updatesr   r   r©   Úclear_orderingrÎ   rA   r¿   r�  rÇ   rU   Úget_path_to_parentrt   rY   rŠ  Ú
add_fieldsr&   rj   r2   ry   r´  Úclear_wherer  Údefaultdictr4  rÿ   r>   r!  r   rv   rµ  Úrelated_idsro  )r(   rp  Úcountr=   rÐ   r½  Úrelated_ids_indexÚrelatedÚmust_pre_selectÚidentsrÓ  r  Úparentr„  r+   s                @€r,   rj   zSQLUpdateCompiler.pre_sql_setupÔ  sð  øø€ ð  œ:Ô4×9Ò9Ñ;Ô;ÐàŒ
×$Ò$Ñ&Ô&Ð&Ø”
×.Ò.Ñ0Ô0ˆØŒzÔ)ð 	¨e°qªj¨jØˆFØ”
× Ò ¥uÐ Ñ-Ô-ˆØ$ˆÔØ×Ò 4ÐÑ(Ô(Ð(ØˆŒØˆŒØ�~Š~ÑÔˆØ”'”,�ˆØÐØ”zÔ1ð 	5ð 	5ˆGÝð ð Ø8<×8OÒ8OÐPWÑ8XÔ8Xðñ ô ñ ô ð 5ð
 "×(Ò(¨'°1¨Ñ6Ô6Ð6Ð6ð
 "×(Ò(¨'µ3°v±;´;Ð)?Ñ@Ô@Ð@Ø—’˜gœmÔ.Ô3Ñ4Ô4Ð4Ð4Ø×Ò˜Ñ Ô Ð Ý‰Œ×ÒÑÔÐð �AŠIÐM˜dœoÔ6ÔMÐMð 	ð 	Œ
×ÒÑ Ô Ð ØŒ:Ô%ð 	3¨ð 	3ð ˆFÝ%Ô1µ$Ñ7Ô7ˆKØ×*Ò*¨4¬:Ñ6Ô6×BÒBÅ5ÑIÔIð Gð G�Ø—’Ð1Ð1¨DÐ1Ñ1Ô1Ñ1Ô1Ð1Ø%6ð Gð G‘M�F˜EØ Ô'×.Ò.Ð.FÐ.FÐ.FÐ.FÀÐ.FÑ.FÔ.FÑFÔFÐFÐFðGàŒJ×!Ò! (¨FÑ3Ô3Ð3Ø%0ˆDŒJÔ"Ð"ð ŒJ×!Ò! (¨EÑ2Ô2Ð2ØŒ
×"Ò"Ð#3Ñ4Ô4Ð4Ð4Ð4r-   )r4   r5   r6   r3   r!  rj   r7   r8   s   @r,   rº  rº  ~  sa   ø€ € € € € ð>?ð >?ð >?ð@ð ð ð ð ð*=5ð =5ð =5ð =5ð =5ð =5ð =5ð =5ð =5r-   rº  c                   ó   — e Zd Zd„ ZdS )ÚSQLAggregateCompilerc                 ó0  — g g }}| j         j                             ¦   «         D ]^}|                      |¦  «        \  }}|                     | ||¦  «        \  }}|                     |¦  «         |                     |¦  «         Œ_t          | j         j        ¦  «        | _        d 	                    |¦  «        }t          |¦  «        }| j         j                             | j        | j        ¬¦  «                             d¬¦  «        \  }}d|›d|›d�}||z  }||fS )r°  r1  )r?   TrS   rJ  rK  rM  )r=   r¨   r3  r{   r}   rt   rv   rY   rZ   r  rn  r"  rÿ   r>   r?   r3   )r(   r„   r…   r±   Úann_sqlÚ
ann_paramsÚinner_query_sqlÚinner_query_paramss           r,   r3   zSQLAggregateCompiler.as_sql  s$  € ð
 ˜"ˆVˆØœ*Ô6×=Ò=Ñ?Ô?ð 	&ð 	&ˆJØ"&§,¢,¨zÑ":Ô":ÑˆG�ZØ",×":Ò":¸4ÀÈ*Ñ"UÔ"UÑˆG�ZØ�JŠJ�wÑÔÐØ�MŠM˜*Ñ%Ô%Ð%Ð%Ý˜TœZÔ9Ñ:Ô:ˆŒØ�iŠi˜‰nŒnˆÝ�v‘”ˆà.2¬jÔ.D×.QÒ.QØŒJØÔ(ð /Rñ /
ô /
÷ Š& $ˆ&Ñ
'Ô
'ñ 	,ˆÐ+Ð+ð 14°°°_°_°_ÐEˆØÐ$Ñ$ˆØ�Fˆ{Ðr-   N)r4   r5   r6   r3   r/   r-   r,   rÛ  rÛ    s#   € € € € € ðð ð ð ð r-   rÛ  c              #   óÄ   ‡ ‡‡K  — 	 t          ˆ ˆfd„|¦  «        D ]}‰€|nˆfd„|D ¦   «         V — Œ	 ‰                      ¦   «          dS # ‰                      ¦   «          w xY w)z[
    Yield blocks of rows from a cursor and ensure the cursor is closed when
    done.
    c                  ó.   •— ‰                       ‰¦  «        S r$   )Ú	fetchmany)r*  Úitersizes   €€r,   rÈ  zcursor_iter.<locals>.<lambda>3  s   ø€  &×"2Ò"2°8Ñ"<Ô"<€ r-   Nc                 ó$   •— g | ]}|d ‰…         ‘ŒS r$   r/   )rP   r÷   rZ   s     €r,   r˜   zcursor_iter.<locals>.<listcomp>4  s!   ø€ Ð1NÐ1NÐ1NÀA°!°J°Y°J´-Ð1NÐ1NÐ1Nr-   )r(  r-  )r*  ÚsentinelrZ   rä  r  s   ` `` r,   r/  r/  -  sŽ   øøøè è € ð
ÝÐ<Ð<Ð<Ð<Ð<¸xÑHÔHð 	Oð 	OˆDØ#Ð+�$�$Ð1NÐ1NÐ1NÐ1NÈÐ1NÑ1NÔ1NÐNÐNÐNÐNð	Oð 	�Š‰Œˆˆˆøˆ�Š‰Œˆˆøøøs   ‡+A	 Á	A)8r  r>  rF  Ú	functoolsr   Ú	itertoolsr   Údjango.core.exceptionsr   r   r   Ú	django.dbr   r	   Údjango.db.models.constantsr
   Údjango.db.models.expressionsr   r   r   r   r   Údjango.db.models.functionsr   r   Údjango.db.models.lookupsr   Údjango.db.models.query_utilsr   Údjango.db.models.sql.constantsr   r   r   r   r   r   Údjango.db.models.sql.queryr   r   Údjango.db.models.sql.wherer   Údjango.db.transactionr   Údjango.utils.functionalr   Údjango.utils.hashabler   Údjango.utils.regex_helperr    r"   r:   rJ  r›  rº  rÛ  r/  r/   r-   r,   ú<module>r÷     sè  ðØ Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø +Ð +Ð +Ð +Ð +Ð +Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø *Ð *Ð *Ð *Ð *Ð *Ø <Ð <Ð <Ð <Ð <Ð <Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø /Ð /Ð /Ð /Ð /Ð /Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ð%ð %ð %ð %ð %�#ñ %ô %ð %ðmð mð mð mð mñ mô mð mð`1hð hð hð hð h˜ñ hô hð hðV9$ð 9$ð 9$ð 9$ð 9$˜ñ 9$ô 9$ð 9$ðxS5ð S5ð S5ð S5ð S5˜ñ S5ô S5ð S5ðlð ð ð ð ˜;ñ ô ð ð2	ð 	ð 	ð 	ð 	r-   