§
    Ï“ÙhAB  ã                   óÎ   — 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      úd/var/www/surfInsights/venv3-11/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   rX   rY   s       r$   Údatetime_cast_time_sqlz)DatabaseOperations.datetime_cast_time_sqlt   r[   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$   rk   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Útuplerk   ÚvaluesÚdictÚzip)r!   rD   r?   r@   rx   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   rf   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   rm   rC   )r!   Ú
table_nameÚqueryr@   rD   rq   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_graphrf   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 ru   )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 (ri   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ž   rl   )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   rU   Ú
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 ru   )	r-   Údatetimer   r   rU   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 ru   )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 ru   )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 ru   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 ru   )Ú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 )ri   N©rl   r‡   s     r$   r—   z5DatabaseOperations.bulk_insert_sql.<locals>.<genexpr>k  s,   è è € ÐKÐK°3 §	¢	¨#¡¤ÐKÐKÐKÐKÐKÐKr&   ri   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))rl   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)ri   )r   r   r¸   rl   )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S rT   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(ri   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 %sri   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(ri   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_targetrl   Ú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&   ru   )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   rZ   r]   r_   ra   rc   rg   rk   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Ððð ð ðð ð ð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ð`
ð `
ð `
ð `
ð `
Ð/ñ `
ô `
ð `
ð `
ð `
r&   