§
    ¤”jaC  ã                   óÎ   — 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  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_propertyc                   ó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'd(„ Z(ˆ fd)„Z)d*„ Z*d+„ Z+d,„ Z,d0ˆ fd-„	Z-d.„ Z.ˆ fd/„Z/ˆ xZ0S )1ÚDatabaseOperationsÚtextÚTEXT)Ú	DateFieldÚDateTimeFieldzEXPLAIN QUERY PLAN)ÚnullÚfalseÚtruec                 ó²   — 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).
        é   iô  )ÚlenÚ
connectionÚfeaturesÚmax_query_params)ÚselfÚfieldsÚobjss      út/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/db/backends/sqlite3/operations.pyÚbulk_batch_sizez"DatabaseOperations.bulk_batch_size   sN   € õ ˆv‰;Œ;˜!ÒÐØ�3Ý�‰[Œ[˜1Š_ˆ_Ø”?Ô+Ô<ÅÀFÁÄÑKÐKå�t‘9”9Ðó    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ÚStdDevÚ
isinstanceÚget_source_expressionsÚoutput_fieldr   ÚAttributeErrorr   Ú	AggregateÚdistinctr   Úsource_expressions)r!   Ú
expressionÚ
bad_fieldsÚbad_aggregatesÚexprr/   s         r$   Úcheck_expression_supportz+DatabaseOperations.check_expression_support,   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_sqlH   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_rowsP   s   € ð
 �ŠÑ Ô Ð r&   c                 ó   — |S )z>Do nothing since formatting is handled in the custom function.© )r!   r?   s     r$   Úformat_for_duration_arithmeticz1DatabaseOperations.format_for_duration_arithmeticW   s   € àˆ
r&   Nc                 óh   — d|› d�|                      ¦   «         g|¢|                      |¦  «        ¢R fS )Nzdjango_date_trunc(%s, ú	, %s, %s)©r<   Ú_convert_tznames_to_sql©r!   r>   r?   r@   Útznames        r$   Údate_trunc_sqlz!DatabaseOperations.date_trunc_sql[   ó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, rJ   rK   rM   s        r$   Útime_trunc_sqlz!DatabaseOperations.time_trunc_sqlb   rP   r&   c                 ó>   — |rt           j        r|| j        j        fS dS )N)NN)r   ÚUSE_TZr   Útimezone_name)r!   rN   s     r$   rL   z*DatabaseOperations._convert_tznames_to_sqli   s(   € Øð 	9•h”oð 	9Ø˜4œ?Ô8Ð8Ð8Øˆzr&   c                 óB   — d|› d�g |¢|                       |¦  «        ¢R fS )Nzdjango_datetime_cast_date(rJ   ©rL   ©r!   r?   r@   rN   s       r$   Údatetime_cast_date_sqlz)DatabaseOperations.datetime_cast_date_sqln   óB   € Ø:¨CÐ:Ð:Ð:ð =
Øð=
à×)Ò)¨&Ñ1Ô1ð=
ð =
ð 
ð 	
r&   c                 óB   — d|› d�g |¢|                       |¦  «        ¢R fS )Nzdjango_datetime_cast_time(rJ   rW   rX   s       r$   Údatetime_cast_time_sqlz)DatabaseOperations.datetime_cast_time_sqlt   rZ   r&   c                 óh   — d|› d�|                      ¦   «         g|¢|                      |¦  «        ¢R fS )Nzdjango_datetime_extract(%s, rJ   rK   rM   s        r$   Údatetime_extract_sqlz'DatabaseOperations.datetime_extract_sqlz   sS   € Ø<¨cÐ<Ð<Ð<Ø×ÒÑÔð?
àð?
ð ×)Ò)¨&Ñ1Ô1ð?
ð ?
ð 
ð 	
r&   c                 óh   — d|› d�|                      ¦   «         g|¢|                      |¦  «        ¢R fS )Nzdjango_datetime_trunc(%s, rJ   rK   rM   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, r:   r;   r=   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ÚNULLrG   ©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ç  rG   r   zSELECT ú, zQUOTE(?))	r   ÚrangeÚ%_quote_params_for_last_executed_queryÚjoinr   rD   ÚexecuteÚfetchoneÚclose)r!   r@   Ú
BATCH_SIZEÚresultsÚindexÚchunkr?   rD   s           r$   rj   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 ©N)r-   ÚlistÚtuplerj   ÚvaluesÚdictÚzip)r!   rD   r?   r@   rw   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éÿÿÿÿrG   re   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   rG   ©Ú.0Úrows     r$   ú
<listcomp>z9DatabaseOperations.__references_graph.<locals>.<listcomp>Ô   s   € Ð9Ð9Ð9˜s�C˜”FÐ9Ð9Ð9r&   )r   rD   rl   rC   )r!   Ú
table_nameÚqueryr@   rD   rp   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_graphre   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 rt   )r�   )r‡   Útabler!   s     €r$   ú	<genexpr>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•   rG   )r‡   r•   s     r$   r‰   z0DatabaseOperations.sql_flush.<locals>.<listcomp>í   s   € Ð>Ð>Ð>¨e˜' 5Ð)Ð>Ð>Ð>r&   )Úsetr   Úfrom_iterableÚextendÚsequence_reset_by_name_sql)r!   rž   Útablesr‘   r’   r?   Ú	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 (rh   c                 ó$   — g | ]}d |d         z  ‘ŒS )ú'%s'r•   rG   )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�   rk   )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          |d¦  «        r|S t          j        |¦  «        r;t          j        r t          j        || j        j        ¦  «        }nt          d¦  «        ‚t          |¦  «        S )NÚresolve_expressionzNSQLite backend does not support timezone-aware datetimes when USE_TZ is False.)	Úhasattrr   Úis_awarer   rT   Ú
make_naiver   Ú
ValueErrorÚstr©r!   Úvalues     r$   Úadapt_datetimefield_valuez,DatabaseOperations.adapt_datetimefield_value  sƒ   € Øˆ=Ø�4õ �5Ð.Ñ/Ô/ð 	ØˆLõ Ô˜UÑ#Ô#ð 	ÝŒð Ý Ô+¨E°4´?Ô3KÑLÔL��å ð'ñô ð õ
 �5‰zŒzÐr&   c                 ó’   — |€d S t          |d¦  «        r|S t          j        |¦  «        rt          d¦  «        ‚t	          |¦  «        S )Nr³   z5SQLite backend does not support timezone-aware times.)r´   r   rµ   r·   r¸   r¹   s     r$   Úadapt_timefield_valuez(DatabaseOperations.adapt_timefield_value  sW   € Øˆ=Ø�4õ �5Ð.Ñ/Ô/ð 	ØˆLõ Ô˜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   r(   ÚDecimalFieldÚ	UUIDFieldÚBooleanField)ÚsuperÚget_db_convertersr/   Úget_internal_typeÚappendÚconvert_datetimefield_valueÚconvert_datefield_valueÚconvert_timefield_valueÚget_decimalfield_converterÚconvert_uuidfield_valueÚconvert_booleanfield_value)r!   r4   Ú
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 rt   )	r-   Údatetimer   r   rT   r   rµ   Ú
make_awarer   ©r!   rº   r4   r   s       r$   rÆ   z.DatabaseOperations.convert_datetimefield_value7  sd   € ØÐÝ˜e¥XÔ%6Ñ7Ô7ð .Ý& uÑ-Ô-�ÝŒð M¥xÔ'8¸Ñ'?Ô'?ð MÝ Ô+¨E°4´?Ô3KÑLÔL�Øˆr&   c                 ó\   — |�)t          |t          j        ¦  «        st          |¦  «        }|S rt   )r-   rÐ   Údater   rÒ   s       r$   rÇ   z*DatabaseOperations.convert_datefield_value?  ó.   € ØÐÝ˜e¥X¤]Ñ3Ô3ð *Ý" 5Ñ)Ô)�Øˆr&   c                 ó\   — |�)t          |t          j        ¦  «        st          |¦  «        }|S rt   )r-   rÐ   Útimer   rÒ   s       r$   rÈ   z*DatabaseOperations.convert_timefield_valueE  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)Úquantizer/   rÜ   )rº   r4   r   Úcreate_decimalÚquantize_values      €€r$   Ú	converterz@DatabaseOperations.get_decimalfield_converter.<locals>.converterT  sC   ø€ ØÐ$Ø)˜>¨%Ñ0Ô0×9Ò9Ø&°
Ô0GÔ0Oð :ñ ô ð ð %Ð$r&   c                 ó"   •— | � ‰| ¦  «        S d S rt   rG   )rº   r4   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Úscalebr/   Údecimal_places)r!   r4   rà   rÞ   rß   s      @@r$   rÉ   z-DatabaseOperations.get_decimalfield_converterK  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 rt   )ÚuuidÚUUIDrÒ   s       r$   rÊ   z*DatabaseOperations.convert_uuidfield_valueb  s   € ØÐÝ”I˜eÑ$Ô$ˆEØˆr&   c                 ó,   — |dv rt          |¦  «        n|S )N)r   r   )ÚboolrÒ   s       r$   rË   z-DatabaseOperations.convert_booleanfield_valueg  s   € Ø# v˜o˜o�t�E‰{Œ{ˆ{°5Ð8r&   c                 ób   — d„ |D ¦   «         }d                      d„ |D ¦   «         ¦  «        }d|› �S )Nc              3   ó@   K  — | ]}d                       |¦  «        V — ŒdS )rh   N©rk   r†   s     r$   r–   z5DatabaseOperations.bulk_insert_sql.<locals>.<genexpr>k  s,   è è € ÐKÐK°3 §	¢	¨#¡¤ÐKÐKÐKÐKÐKÐKr&   rh   c              3   ó"   K  — | ]
}d |› d�V — ŒdS )ú(r:   NrG   )r‡   r?   s     r$   r–   z5DatabaseOperations.bulk_insert_sql.<locals>.<genexpr>l  s*   è è € ÐJÐJ¨c˜z 3˜z˜z˜zÐJÐJÐJÐJÐJÐJr&   zVALUES rï   )r!   r"   Úplaceholder_rowsÚplaceholder_rows_sqlÚ
values_sqls        r$   Úbulk_insert_sqlz"DatabaseOperations.bulk_insert_sqlj  sF   € ØKÐKÐ:JÐKÑKÔKÐØ—Y’YÐJÐJÐ5IÐJÑJÔJÑJÔJˆ
Ø%˜Ð%Ð%Ð%r&   c                 óÀ   •— |dk    rdd                      |¦  «        z  S |dk    rdd                      |¦  «        z  S t          ¦   «                              ||¦  «        S )Nú^z	POWER(%s)ú,ú#z
BITXOR(%s))rk   rÂ   Úcombine_expression)r!   Ú	connectorÚsub_expressionsrÎ   s      €r$   rú   z%DatabaseOperations.combine_expressiono  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)rh   )r   r   r·   rk   )r!   rû   rü   Ú	fn_paramss       r$   Úcombine_duration_expressionz.DatabaseOperations.combine_duration_expressionx  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	  rG   )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 )Nr(   zdjango_time_diff(rh   r:   zdjango_timestamp_diff(rG   )	r!   rÍ   ÚlhsÚrhsÚlhs_sqlÚ
lhs_paramsÚrhs_sqlÚ
rhs_paramsr@   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)Ú rG   c                 ó’   •— g | ]C}‰                      |j        j        j        ¦  «        ›d ‰                      |j        ¦  «        ›�‘ŒDS )ú.)r€   ÚmodelÚ_metaÚdb_tableÚcolumn)r‡   Úfieldr!   s     €r$   r‰   z<DatabaseOperations.return_insert_columns.<locals>.<listcomp>œ  s^   ø€ ð 
ð 
ð 
ð ð —’ ¤Ô 1Ô :Ñ;Ô;Ð;Ð;Ø—’ ¤Ñ-Ô-Ð-ðð
ð 
ð 
r&   zRETURNING %srh   rG   rï   )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(rh   z) DO UPDATE SET c                 ó   — g | ]	}|› d |› �‘Œ
S )z = EXCLUDED.rG   )r‡   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_targetrk   Ú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&   rt   )1Ú__name__Ú
__module__Ú__qualname__Ú"cast_char_field_without_max_lengthÚcast_data_typesÚexplain_prefixÚ	frozensetÚjsonfield_datatype_valuesr%   r8   rA   rE   rH   rO   rR   rL   rY   r\   r^   r`   rb   rf   rj   rz   r€   rƒ   r�   r   r�   r¦   r£   r»   r½   rÃ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rõ   rú   r  r
  r  r  r!  r&  Ú__classcell__)rÎ   s   @r$   r   r      s  ø€ € € € € Ø)/Ð&àØðð €Oð *€Nð !* 	Ð*CÐ*CÐ*CÑ DÔ DÐðð ð ðð ð ð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ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
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   r   rG   r&   r$   ú<module>r=     s=  ðØ €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø -Ð -Ð -Ð -Ð -Ð -Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø 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
ð g
ð g
ð g
ð g
Ð/ñ g
ô g
ð g
ð g
ð g
r&   