§
    ŸjC  ã                   óÚ   — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZmZ d dlmZ ddlmZ  G d„ de¦  «        ZdS )é    N)Ú	lru_cache)Úchain)Úsettings)Ú
FieldError)ÚDatabaseErrorÚNotSupportedErrorÚmodels)ÚBaseDatabaseOperations)Ú
OnConflict)ÚCol)Útimezone)Ú
parse_dateÚparse_datetimeÚ
parse_time)Úcached_propertyé   )ÚDatabasec                   óX  ‡ — e Zd ZdZdddœZdZ eg d¢¦  «        Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd0d„Zd0d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zdddœd„Zd„ Zd„ Zd „ Z ˆ fd!„Z!d"„ Z"d#„ Z#d$„ Z$d%„ Z%d&„ Z&d'„ Z'ˆ fd(„Z(d)„ Z)d*„ Z*d+„ Z+d0ˆ fd,„	Z,d-„ Z-ˆ fd.„Z.d/„ Z/ˆ xZ0S )1ÚDatabaseOperationsÚtextÚTEXT)Ú	DateFieldÚDateTimeFieldzEXPLAIN QUERY PLAN)ÚnullÚfalseÚtruec                 ó  — t          t          j        d„ |D ¦   «         ¦  «        ¦  «        }t          |¦  «        dk    rdS t          |¦  «        dk    r!| j        j        j        t          |¦  «        z  S t          |¦  «        S )zà
        SQLite has a compile-time default (SQLITE_LIMIT_VARIABLE_NUMBER) of
        999 variables per query.

        If there's only a single field to insert, the limit is 500
        (SQLITE_MAX_COMPOUND_SELECT).
        c              3   ó^   K  — | ](}t          |t          j        ¦  «        r|j        n|gV — Œ)d S ©N)Ú
isinstancer	   ÚCompositePrimaryKeyÚfields©Ú.0Úfields     úr/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/django/db/backends/sqlite3/operations.pyú	<genexpr>z5DatabaseOperations.bulk_batch_size.<locals>.<genexpr>(   sU   è è € ð  ð  ð õ " %­Ô)CÑDÔDð!�E”L�Là˜ð	 ð  ð  ð  ð  ð  ó    r   iô  )Úlistr   Úfrom_iterableÚlenÚ
connectionÚfeaturesÚmax_query_params)Úselfr"   Úobjss      r&   Úbulk_batch_sizez"DatabaseOperations.bulk_batch_size   s�   € õ ÝÔð  ð  ð $ð ñ  ô  ñ ô ñ	
ô 	
ˆõ ˆv‰;Œ;˜!ÒÐØ�3Ý�‰[Œ[˜1Š_ˆ_Ø”?Ô+Ô<ÅÀFÁÄÑKÐKå�t‘9”9Ðr(   c                 ó
  — t           j        t           j        t           j        f}t           j        t           j        t           j        t           j        f}t          ||¦  «        rU| 	                    ¦   «         D ]@}	 |j
        }t          ||¦  «        rt          d¦  «        ‚Œ*# t          t          f$ r Y Œ=w xY wt          |t           j        ¦  «        r.|j        r)t!          |j        ¦  «        dk    rt          d¦  «        ‚d S d S d S )Nz{You cannot use Sum, Avg, StdDev, and Variance aggregations on date/time fields in sqlite3 since date/time is saved as text.r   zTSQLite doesn't support DISTINCT on aggregate functions accepting multiple arguments.)r	   r   r   Ú	TimeFieldÚSumÚAvgÚVarianceÚStdDevr    Úget_source_expressionsÚoutput_fieldr   ÚAttributeErrorr   Ú	AggregateÚdistinctr+   Úsource_expressions)r/   Ú
expressionÚ
bad_fieldsÚbad_aggregatesÚexprr9   s         r&   Úcheck_expression_supportz+DatabaseOperations.check_expression_support8   s.  € ÝÔ&­Ô(<½fÔ>NÐOˆ
Ý œ*¥f¤jµ&´/Å6Ä=ÐQˆÝ�j .Ñ1Ô1ð 	Ø"×9Ò9Ñ;Ô;ð ð �ðØ#'Ô#4�Lõ " ,°
Ñ;Ô;ð Ý/ð@ñô ð ðøõ '­
Ð3ð ð ð ð �Dðøøøõ �z¥6Ô#3Ñ4Ô4ð	àÔ#ð	õ �JÔ1Ñ2Ô2°QÒ6Ð6å#ð0ñô ð ð	ð 	ð 	ð 	ð 7Ð6s   Á9B Â B4Â3B4c                 ó>   — d|› d�|                      ¦   «         g|¢R fS )zè
        Support EXTRACT with a user-defined function django_date_extract()
        that's registered in connect(). Use single quotes because this is a
        string and could otherwise cause a collision with a field name.
        zdjango_date_extract(%s, ú)©Úlower©r/   Úlookup_typeÚsqlÚparamss       r&   Údate_extract_sqlz#DatabaseOperations.date_extract_sqlT   s1   € ð 1¨#Ð0Ð0Ð0°;×3DÒ3DÑ3FÔ3FÐ2PÈÐ2PÐ2PÐPÐPr(   c                 ó*   — |                      ¦   «         S )z—
        Given a cursor object that has just performed an INSERT...RETURNING
        statement into a table, return the list of returned data.
        )Úfetchall)r/   Úcursors     r&   Úfetch_returned_insert_rowsz-DatabaseOperations.fetch_returned_insert_rows\   s   € ð
 �ŠÑ Ô Ð r(   c                 ó   — |S )z>Do nothing since formatting is handled in the custom function.© )r/   rI   s     r&   Úformat_for_duration_arithmeticz1DatabaseOperations.format_for_duration_arithmeticc   s   € àˆ
r(   Nc                 óh   — d|› d�|                      ¦   «         g|¢|                      |¦  «        ¢R fS )Nzdjango_date_trunc(%s, ú	, %s, %s)©rF   Ú_convert_tznames_to_sql©r/   rH   rI   rJ   Útznames        r&   Údate_trunc_sqlz!DatabaseOperations.date_trunc_sqlg   óS   € Ø6¨Ð6Ð6Ð6Ø×ÒÑÔð9
àð9
ð ×)Ò)¨&Ñ1Ô1ð9
ð 9
ð 
ð 	
r(   c                 óh   — d|› d�|                      ¦   «         g|¢|                      |¦  «        ¢R fS )Nzdjango_time_trunc(%s, rT   rU   rW   s        r&   Útime_trunc_sqlz!DatabaseOperations.time_trunc_sqln   rZ   r(   c                 ó>   — |rt           j        r|| j        j        fS dS )N)NN)r   ÚUSE_TZr,   Útimezone_name)r/   rX   s     r&   rV   z*DatabaseOperations._convert_tznames_to_sqlu   s(   € Øð 	9•h”oð 	9Ø˜4œ?Ô8Ð8Ð8Øˆzr(   c                 óB   — d|› d�g |¢|                       |¦  «        ¢R fS )Nzdjango_datetime_cast_date(rT   ©rV   ©r/   rI   rJ   rX   s       r&   Údatetime_cast_date_sqlz)DatabaseOperations.datetime_cast_date_sqlz   óB   € Ø:¨CÐ:Ð:Ð:ð =
Øð=
à×)Ò)¨&Ñ1Ô1ð=
ð =
ð 
ð 	
r(   c                 óB   — d|› d�g |¢|                       |¦  «        ¢R fS )Nzdjango_datetime_cast_time(rT   ra   rb   s       r&   Údatetime_cast_time_sqlz)DatabaseOperations.datetime_cast_time_sql€   rd   r(   c                 óh   — d|› d�|                      ¦   «         g|¢|                      |¦  «        ¢R fS )Nzdjango_datetime_extract(%s, rT   rU   rW   s        r&   Údatetime_extract_sqlz'DatabaseOperations.datetime_extract_sql†   sS   € Ø<¨cÐ<Ð<Ð<Ø×ÒÑÔð?
àð?
ð ×)Ò)¨&Ñ1Ô1ð?
ð ?
ð 
ð 	
r(   c                 óh   — d|› d�|                      ¦   «         g|¢|                      |¦  «        ¢R fS )Nzdjango_datetime_trunc(%s, rT   rU   rW   s        r&   Údatetime_trunc_sqlz%DatabaseOperations.datetime_trunc_sql�   sS   € Ø:¨CÐ:Ð:Ð:Ø×ÒÑÔð=
àð=
ð ×)Ò)¨&Ñ1Ô1ð=
ð =
ð 
ð 	
r(   c                 ó>   — d|› d�|                      ¦   «         g|¢R fS )Nzdjango_time_extract(%s, rD   rE   rG   s       r&   Útime_extract_sqlz#DatabaseOperations.time_extract_sql”   s/   € Ø0¨#Ð0Ð0Ð0°;×3DÒ3DÑ3FÔ3FÐ2PÈÐ2PÐ2PÐPÐPr(   c                 ó   — dS )NÚNULLrQ   ©r/   s    r&   Úpk_default_valuez#DatabaseOperations.pk_default_value—   s   € Øˆvr(   c                 óú  — d}t          |¦  «        |k    rJd}t          dt          |¦  «        |¦  «        D ]'}||||z   …         }||                      |¦  «        z  }Œ(|S dd                     dgt          |¦  «        z  ¦  «        z   }| j        j                             ¦   «         }	 |                     ||¦  «                             ¦   «         |                     ¦   «          S # |                     ¦   «          w xY w)zV
        Only for last_executed_query! Don't use this to execute SQL queries!
        iç  rQ   r   zSELECT ú, zQUOTE(?))	r+   ÚrangeÚ%_quote_params_for_last_executed_queryÚjoinr,   rN   ÚexecuteÚfetchoneÚclose)r/   rJ   Ú
BATCH_SIZEÚresultsÚindexÚchunkrI   rN   s           r&   rt   z8DatabaseOperations._quote_params_for_last_executed_queryš   só   € ð ˆ
Ýˆv‰;Œ;˜Ò#Ð#ØˆGÝ˜q¥# f¡+¤+¨zÑ:Ô:ð Mð M�Ø˜u u¨zÑ'9Ð9Ô:�Ø˜4×EÒEÀeÑLÔLÑL��ØˆNà˜$Ÿ)š) Z Lµ3°v±;´;Ñ$>Ñ?Ô?Ñ?ˆð ”Ô+×2Ò2Ñ4Ô4ˆð	Ø—>’> # vÑ.Ô.×7Ò7Ñ9Ô9à�LŠL‰NŒNˆNˆNøˆF�LŠL‰NŒNˆNˆNøøøs   Â('C$ Ã$C:c                 ó  — |rŠt          |t          t          f¦  «        r|                      |¦  «        }nSt          |                     ¦   «         ¦  «        }|                      |¦  «        }t          t          ||¦  «        ¦  «        }||z  S |S r   )r    r)   Útuplert   ÚvaluesÚdictÚzip)r/   rN   rI   rJ   r   s        r&   Úlast_executed_queryz&DatabaseOperations.last_executed_queryµ   s‡   € ð
 ð 	Ý˜&¥4­ -Ñ0Ô0ð 3Ø×CÒCÀFÑKÔK��å˜vŸ}š}™œÑ/Ô/�Ø×CÒCÀFÑKÔK�Ý�c &¨&Ñ1Ô1Ñ2Ô2�Ø˜‘<Ðð ˆJr(   c                 ód   — |                      d¦  «        r|                     d¦  «        r|S d|z  S )Nú"z"%s")Ú
startswithÚendswith)r/   Únames     r&   Ú
quote_namezDatabaseOperations.quote_nameÇ   s8   € Ø�?Š?˜3ÑÔð 	 D§M¢M°#Ñ$6Ô$6ð 	ØˆKØ˜‰}Ðr(   c                 ó   — dS )NéÿÿÿÿrQ   ro   s    r&   Úno_limit_valuez!DatabaseOperations.no_limit_valueÌ   s   € Øˆrr(   c                 óÞ   — d}|ddf}| j                              ¦   «         5 }|                     ||¦  «        }d„ |                     ¦   «         D ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S )Nz÷
        WITH tables AS (
            SELECT %s name
            UNION
            SELECT sqlite_master.name
            FROM sqlite_master
            JOIN tables ON (sql REGEXP %s || tables.name || %s)
        ) SELECT name FROM tables;
        z(?i)\s+references\s+("|\')?z("|\')?\s*\(c                 ó   — g | ]
}|d          ‘ŒS )r   rQ   )r$   Úrows     r&   ú
<listcomp>z9DatabaseOperations.__references_graph.<locals>.<listcomp>à   s   € Ð9Ð9Ð9˜s�C˜”FÐ9Ð9Ð9r(   )r,   rN   rv   rM   )r/   Ú
table_nameÚqueryrJ   rN   rz   s         r&   Ú__references_graphz%DatabaseOperations.__references_graphÏ   sÂ   € ðˆð Ø*Øð
ˆð
 Œ_×#Ò#Ñ%Ô%ð 	:¨Ø—n’n U¨FÑ3Ô3ˆGØ9Ð9 g×&6Ò&6Ñ&8Ô&8Ð9Ñ9Ô9ð	:ð 	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:ð 	:ð 	:s   ¡4A"Á"A&Á)A&c                 ó>   —  t          d¬¦  «        | j        ¦  «        S )Ni   )Úmaxsize)r   Ú%_DatabaseOperations__references_graphro   s    r&   Ú_references_graphz$DatabaseOperations._references_graphâ   s"   € ð &�y Ð%Ñ%Ô% dÔ&=Ñ>Ô>Ð>r(   F)Úreset_sequencesÚallow_cascadec                óø   ‡ ‡— |r/|r-t          t          j        ˆ fd„|D ¦   «         ¦  «        ¦  «        }ˆ ˆfd„|D ¦   «         }|r5d„ |D ¦   «         }|                     ‰                      ‰|¦  «        ¦  «         |S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r   )r–   )r$   Útabler/   s     €r&   r'   z/DatabaseOperations.sql_flush.<locals>.<genexpr>í   s1   øè è € Ð#VÐ#VÀe D×$:Ò$:¸5Ñ$AÔ$AÐ#VÐ#VÐ#VÐ#VÐ#VÐ#Vr(   c                 ó¾   •— g | ]Y}‰                      d ¦  «        ›d‰                      d¦  «        ›d‰                     ‰                     |¦  «        ¦  «        ›d�‘ŒZS )ÚDELETEú ÚFROMú;)ÚSQL_KEYWORDÚ	SQL_FIELDrˆ   )r$   r›   r/   Ústyles     €€r&   r�   z0DatabaseOperations.sql_flush.<locals>.<listcomp>ï   s|   ø€ ð 
ð 
ð 
ð ð	 ×!Ò! (Ñ+Ô+Ð+Ð+Ø×!Ò! &Ñ)Ô)Ð)Ð)Ø—’ §¢°Ñ 6Ô 6Ñ7Ô7Ð7Ð7ð	ð
ð 
ð 
r(   c                 ó   — g | ]}d |i‘ŒS )r›   rQ   )r$   r›   s     r&   r�   z0DatabaseOperations.sql_flush.<locals>.<listcomp>ù   s   € Ð>Ð>Ð>¨e˜' 5Ð)Ð>Ð>Ð>r(   )Úsetr   r*   ÚextendÚsequence_reset_by_name_sql)r/   r£   Útablesr—   r˜   rI   Ú	sequencess   ``     r&   Ú	sql_flushzDatabaseOperations.sql_flushè   s»   øø€ Øð 	�mð 	õ ÝÔ#Ð#VÐ#VÐ#VÐ#VÈvÐ#VÑ#VÔ#VÑVÔVñô ˆFð
ð 
ð 
ð 
ð 
ð  ð
ñ 
ô 
ˆð ð 	JØ>Ð>°vÐ>Ñ>Ô>ˆIØ�JŠJ�t×6Ò6°u¸iÑHÔHÑIÔIÐIØˆ
r(   c                 óö  — |sg S |                      d¦  «        ›d|                     |                      d¦  «        ¦  «        ›d|                      d¦  «        ›d|                     |                      d¦  «        ¦  «        ›d|                      d¦  «        ›d|                     |                      d¦  «        ¦  «        ›d|                      d	¦  «        ›d
d                     d„ |D ¦   «         ¦  «        ›d�gS )NÚUPDATErž   Úsqlite_sequenceÚSETÚseqz = 0 ÚWHEREr‡   ÚINz (rr   c                 ó$   — g | ]}d |d         z  ‘ŒS )ú'%s'r›   rQ   )r$   Úsequence_infos     r&   r�   zADatabaseOperations.sequence_reset_by_name_sql.<locals>.<listcomp>  s"   € ÐTÐTÐT¸�V˜m¨GÔ4Ñ4ÐTÐTÐTr(   z);)r¡   Ú	SQL_TABLErˆ   r¢   ru   )r/   r£   r©   s      r&   r§   z-DatabaseOperations.sequence_reset_by_name_sqlý   s  € Øð 	ØˆIð ×!Ò! (Ñ+Ô+Ð+Ð+Ø—’ §¢Ð0AÑ BÔ BÑCÔCÐCÐCØ×!Ò! %Ñ(Ô(Ð(Ð(Ø—’ §¢°Ñ 6Ô 6Ñ7Ô7Ð7Ð7Ø×!Ò! 'Ñ*Ô*Ð*Ð*Ø—’ §¢°Ñ 7Ô 7Ñ8Ô8Ð8Ð8Ø×!Ò! $Ñ'Ô'Ð'Ð'Ø—	’	ØTÐTÈ)ÐTÑTÔTñô ð ð ðð
ð 	
r(   c                 óÆ   — |€d S t          j        |¦  «        r;t          j        r t          j        || j        j         ¦  «        }nt          d¦  «        ‚t          |¦  «        S )NzNSQLite backend does not support timezone-aware datetimes when USE_TZ is False.)r   Úis_awarer   r^   Ú
make_naiver,   Ú
ValueErrorÚstr©r/   Úvalues     r&   Úadapt_datetimefield_valuez,DatabaseOperations.adapt_datetimefield_value  si   € Øˆ=Ø�4õ Ô˜UÑ#Ô#ð 	ÝŒð Ý Ô+¨E°4´?Ô3KÑLÔL��å ð'ñô ð õ
 �5‰zŒzÐr(   c                 ón   — |€d S t          j        |¦  «        rt          d¦  «        ‚t          |¦  «        S )Nz5SQLite backend does not support timezone-aware times.)r   r·   r¹   rº   r»   s     r&   Úadapt_timefield_valuez(DatabaseOperations.adapt_timefield_value   s=   € Øˆ=Ø�4õ Ô˜UÑ#Ô#ð 	VÝÐTÑUÔUÐUå�5‰zŒzÐr(   c                 ó"  •— t          ¦   «                              |¦  «        }|j                             ¦   «         }|dk    r|                     | j        ¦  «         n²|dk    r|                     | j        ¦  «         n‘|dk    r|                     | j        ¦  «         np|dk    r)|                     |                      |¦  «        ¦  «         nA|dk    r|                     | j	        ¦  «         n |dk    r|                     | j
        ¦  «         |S )Nr   r   r3   ÚDecimalFieldÚ	UUIDFieldÚBooleanField)ÚsuperÚget_db_convertersr9   Úget_internal_typeÚappendÚconvert_datetimefield_valueÚconvert_datefield_valueÚconvert_timefield_valueÚget_decimalfield_converterÚconvert_uuidfield_valueÚconvert_booleanfield_value)r/   r>   Ú
convertersÚinternal_typeÚ	__class__s       €r&   rÅ   z$DatabaseOperations.get_db_converters*  s  ø€ Ý‘W”W×.Ò.¨zÑ:Ô:ˆ
Ø"Ô/×AÒAÑCÔCˆØ˜OÒ+Ð+Ø×Ò˜dÔ>Ñ?Ô?Ð?Ð?Ø˜kÒ)Ð)Ø×Ò˜dÔ:Ñ;Ô;Ð;Ð;Ø˜kÒ)Ð)Ø×Ò˜dÔ:Ñ;Ô;Ð;Ð;Ø˜nÒ,Ð,Ø×Ò˜d×=Ò=¸jÑIÔIÑJÔJÐJÐJØ˜kÒ)Ð)Ø×Ò˜dÔ:Ñ;Ô;Ð;Ð;Ø˜nÒ,Ð,Ø×Ò˜dÔ=Ñ>Ô>Ð>ØÐr(   c                 óÚ   — |�ht          |t          j        ¦  «        st          |¦  «        }t          j        r3t          j        |¦  «        st          j        || j        j        ¦  «        }|S r   )	r    Údatetimer   r   r^   r   r·   Ú
make_awarer,   ©r/   r¼   r>   r,   s       r&   rÈ   z.DatabaseOperations.convert_datetimefield_value;  sd   € ØÐÝ˜e¥XÔ%6Ñ7Ô7ð .Ý& uÑ-Ô-�ÝŒð M¥xÔ'8¸Ñ'?Ô'?ð MÝ Ô+¨E°4´?Ô3KÑLÔL�Øˆr(   c                 ó\   — |�)t          |t          j        ¦  «        st          |¦  «        }|S r   )r    rÒ   Údater   rÔ   s       r&   rÉ   z*DatabaseOperations.convert_datefield_valueC  ó.   € ØÐÝ˜e¥X¤]Ñ3Ô3ð *Ý" 5Ñ)Ô)�Øˆr(   c                 ó\   — |�)t          |t          j        ¦  «        st          |¦  «        }|S r   )r    rÒ   Útimer   rÔ   s       r&   rÊ   z*DatabaseOperations.convert_timefield_valueI  r×   r(   c                 óä   ‡‡— t          j        d¬¦  «        j        Št          |t          ¦  «        r9t          j        d¦  «                             |j        j         ¦  «        Šˆˆfd„}nˆfd„}|S )Né   )Úprecr   c                 ó`   •— | �* ‰| ¦  «                              ‰|j        j        ¬¦  «        S d S )N)Úcontext)Úquantizer9   rÞ   )r¼   r>   r,   Úcreate_decimalÚquantize_values      €€r&   Ú	converterz@DatabaseOperations.get_decimalfield_converter.<locals>.converterX  sC   ø€ ØÐ$Ø)˜>¨%Ñ0Ô0×9Ò9Ø&°
Ô0GÔ0Oð :ñ ô ð ð %Ð$r(   c                 ó"   •— | � ‰| ¦  «        S d S r   rQ   )r¼   r>   r,   rà   s      €r&   râ   z@DatabaseOperations.get_decimalfield_converter.<locals>.converter`  s!   ø€ ØÐ$Ø)˜>¨%Ñ0Ô0Ð0ð %Ð$r(   )	ÚdecimalÚContextÚcreate_decimal_from_floatr    r   ÚDecimalÚscalebr9   Údecimal_places)r/   r>   râ   rà   rá   s      @@r&   rË   z-DatabaseOperations.get_decimalfield_converterO  sœ   øø€ õ !œ¨bÐ1Ñ1Ô1ÔKˆÝ�j¥#Ñ&Ô&ð 	1Ý$œ_¨QÑ/Ô/×6Ò6ØÔ(Ô7Ð7ñô ˆNðð ð ð ð ð ð ð1ð 1ð 1ð 1ð 1ð Ðr(   c                 ó2   — |�t          j        |¦  «        }|S r   )ÚuuidÚUUIDrÔ   s       r&   rÌ   z*DatabaseOperations.convert_uuidfield_valuef  s   € ØÐÝ”I˜eÑ$Ô$ˆEØˆr(   c                 ó,   — |dv rt          |¦  «        n|S )N)r   r   )ÚboolrÔ   s       r&   rÍ   z-DatabaseOperations.convert_booleanfield_valuek  s   € Ø# v˜o˜o�t�E‰{Œ{ˆ{°5Ð8r(   c                 óÀ   •— |dk    rdd                      |¦  «        z  S |dk    rdd                      |¦  «        z  S t          ¦   «                              ||¦  «        S )Nú^z	POWER(%s)ú,ú#z
BITXOR(%s))ru   rÄ   Úcombine_expression)r/   Ú	connectorÚsub_expressionsrÐ   s      €r&   ró   z%DatabaseOperations.combine_expressionn  sc   ø€ ð ˜ÒÐØ §¢¨/Ñ!:Ô!:Ñ:Ð:Ø˜#ÒÐØ #§(¢(¨?Ñ";Ô";Ñ;Ð;Ý‰wŒw×)Ò)¨)°_ÑEÔEÐEr(   c                 ó´   — |dvrt          d|z  ¦  «        ‚d|z  g|z   }t          |¦  «        dk    rt          d¦  «        ‚dd                     |¦  «        z  S )N)ú+ú-Ú*ú/z$Invalid connector for timedelta: %s.r³   é   z)Too many params for timedelta operations.zdjango_format_dtdelta(%s)rr   )r   r+   r¹   ru   )r/   rô   rõ   Ú	fn_paramss       r&   Úcombine_duration_expressionz.DatabaseOperations.combine_duration_expressionw  sk   € ØÐ0Ð0Ð0ÝÐ FÈÑ RÑSÔSÐSØ˜iÑ'Ð(¨?Ñ:ˆ	Ýˆy‰>Œ>˜AÒÐÝÐHÑIÔIÐIØ*¨T¯YªY°yÑ-AÔ-AÑAÐAr(   c                 ó   — |dv rdS dS )N)ÚPositiveBigIntegerFieldÚPositiveIntegerFieldÚPositiveSmallIntegerField)r   ì   ÿÿÿÿ )lûÿÿÿ         r  rQ   )r/   rÏ   s     r&   Úinteger_field_rangez&DatabaseOperations.integer_field_range  s$   € ð ð 
ð 
ð 
ð
 ,Ð+Ø:Ð:r(   c                 ó\   — |\  }}|\  }}g |¢|¢R }|dk    rd|›d|›d�|fS d|›d|›d�|fS )Nr3   zdjango_time_diff(rr   rD   zdjango_timestamp_diff(rQ   )	r/   rÏ   ÚlhsÚrhsÚlhs_sqlÚ
lhs_paramsÚrhs_sqlÚ
rhs_paramsrJ   s	            r&   Úsubtract_temporalsz%DatabaseOperations.subtract_temporalsŠ  sk   € Ø!Ñˆ�Ø!Ñˆ�Ø+�:Ð+ 
Ð+Ð+ˆØ˜KÒ'Ð'Ð'Ø18°°¸'¸'¸'ÐBÀFÐJÐJð (à29°'°'¸7¸7¸7ÐCÀVÐKÐKr(   c                 ól   •— |t           j        k    rdS t          ¦   «                              |¬¦  «        S )NzINSERT OR IGNORE INTO)Úon_conflict)r   ÚIGNORErÄ   Úinsert_statement)r/   r  rÐ   s     €r&   r  z#DatabaseOperations.insert_statement’  s2   ø€ Ø�*Ô+Ò+Ð+Ø*Ð*Ý‰wŒw×'Ò'°KÐ'Ñ@Ô@Ð@r(   c                 ó\   ‡ — |sdS ˆ fd„|D ¦   «         }dd                      |¦  «        z  dfS )N)Ú rQ   c                 ó’   •— g | ]C}‰                      |j        j        j        ¦  «        ›d ‰                      |j        ¦  «        ›�‘ŒDS )ú.)rˆ   ÚmodelÚ_metaÚdb_tableÚcolumn)r$   r%   r/   s     €r&   r�   z<DatabaseOperations.return_insert_columns.<locals>.<listcomp>›  s^   ø€ ð 
ð 
ð 
ð ð —’ ¤Ô 1Ô :Ñ;Ô;Ð;Ð;Ø—’ ¤Ñ-Ô-Ð-ðð
ð 
ð 
r(   zRETURNING %srr   rQ   )ru   )r/   r"   Úcolumnss   `  r&   Úreturn_insert_columnsz(DatabaseOperations.return_insert_columns—  sX   ø€ àð 	Ø�6ð
ð 
ð 
ð 
ð  ð
ñ 
ô 
ˆð  §	¢	¨'Ñ 2Ô 2Ñ2°BÐ6Ð6r(   c           
      óJ  •— |t           j        k    ro| j        j        j        r^dd                     t          | j        |¦  «        ¦  «        ›dd                     d„ t          | j        |¦  «        D ¦   «         ¦  «        ›�S t          ¦   «          	                    ||||¦  «        S )NzON CONFLICT(rr   z) DO UPDATE SET c                 ó   — g | ]	}|› d |› �‘Œ
S )z = EXCLUDED.rQ   r#   s     r&   r�   z=DatabaseOperations.on_conflict_suffix_sql.<locals>.<listcomp>­  s6   € ð ð ð à!ð !Ð5Ð5¨eÐ5Ð5ðð ð r(   )
r   r¬   r,   r-   Ú%supports_update_conflicts_with_targetru   Úmaprˆ   rÄ   Úon_conflict_suffix_sql)r/   r"   r  Úupdate_fieldsÚunique_fieldsrÐ   s        €r&   r  z)DatabaseOperations.on_conflict_suffix_sql¥  s¹   ø€ à�:Ô,Ò,Ð,Ø”Ô(ÔNð -Ð,ð —	’	�#˜dœo¨}Ñ=Ô=Ñ>Ô>Ð>Ð>Ø—	’	ðð å%(¨¬¸-Ñ%HÔ%Hðñ ô ñô ð ðð õ ‰wŒw×-Ò-ØØØØñ	
ô 
ð 	
r(   c                 ó,   — t           j        dk     rdgng S )N)rû   é'   zGROUP BY TRUE)r   Úsqlite_version_inforo   s    r&   Úforce_group_byz!DatabaseOperations.force_group_byº  s   € Ý$,Ô$@À7Ò$JÐ$J�Ð Ð ÐPRÐRr(   r   )1Ú__name__Ú
__module__Ú__qualname__Ú"cast_char_field_without_max_lengthÚcast_data_typesÚexplain_prefixÚ	frozensetÚjsonfield_datatype_valuesr1   rB   rK   rO   rR   rY   r\   rV   rc   rf   rh   rj   rl   rp   rt   r‚   rˆ   r‹   r•   r   r–   rª   r§   r½   r¿   rÅ   rÈ   rÉ   rÊ   rË   rÌ   rÍ   ró   rý   r  r  r  r  r  r$  Ú__classcell__)rÐ   s   @r&   r   r      s  ø€ € € € € Ø)/Ð&àØðð €Oð *€Nð !* 	Ð*CÐ*CÐ*CÑ DÔ DÐðð ð ð2ð ð ð8Qð Qð Qð!ð !ð !ðð ð ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ðð ð ð

ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ðQð Qð Qðð ð ðð ð ð6ð ð ð$ð ð ð
ð ð ð:ð :ð :ð& ð?ð ?ñ „_ð?ð
 ;@Èuð ð ð ð ð ð*
ð 
ð 
ð&ð ð ð ð ð ðð ð ð ð ð"ð ð ðð ð ðð ð ðð ð ð.ð ð ð
9ð 9ð 9ðFð Fð Fð Fð FðBð Bð Bð	;ð 	;ð 	;ðLð Lð LðAð Að Að Að Að Að
7ð 7ð 7ð
ð 
ð 
ð 
ð 
ð*Sð Sð Sð Sð Sð Sð Sr(   r   ) rÒ   rä   rë   Ú	functoolsr   Ú	itertoolsr   Údjango.confr   Údjango.core.exceptionsr   Ú	django.dbr   r   r	   Ú"django.db.backends.base.operationsr
   Údjango.db.models.constantsr   Údjango.db.models.expressionsr   Údjango.utilsr   Údjango.utils.dateparser   r   r   Údjango.utils.functionalr   Úbaser   r   rQ   r(   r&   ú<module>r:     sY  ðØ €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø -Ð -Ð -Ð -Ð -Ð -Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø EÐ EÐ EÐ EÐ EÐ EØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø !Ð !Ð !Ð !Ð !Ð !Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 3Ð 3Ð 3Ð 3Ð 3Ð 3à Ð Ð Ð Ð Ð ðgSð gSð gSð gSð gSÐ/ñ gSô gSð gSð gSð gSr(   