Ë
    q^ëiAB  ã                   óÆ   — 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y)é    N)Ú	lru_cache)Úchain)Úsettings)Ú
FieldError)ÚDatabaseErrorÚNotSupportedErrorÚmodels)ÚBaseDatabaseOperations)Ú
OnConflict)ÚCol)Útimezone)Ú
parse_dateÚparse_datetimeÚ
parse_time)Úcached_propertyc                   óL  ‡ — 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d/d„Zd/d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       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,d/ˆ fd,„	Z-d-„ Z.ˆ fd.„Z/ˆ xZ0S )0ÚDatabaseOperationsÚtextÚTEXT)Ú	DateFieldÚDateTimeFieldzEXPLAIN QUERY PLAN)ÚnullÚfalseÚtruec                 óª   — t        |«      dk(  ryt        |«      dkD  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      úV/var/www/eb/venv/lib/python3.12/site-packages/django/db/backends/sqlite3/operations.pyÚbulk_batch_sizez"DatabaseOperations.bulk_batch_size   sG   € ô ˆv‹;˜!ÒØÜ�‹[˜1Š_Ø—?‘?×+Ñ+×<Ñ<ÄÀFÃÑKÐKä�t“9Ðó    c                 ó(  — t         j                  t         j                  t         j                  f}t         j                  t         j
                  t         j                  t         j                  f}t        ||«      r9|j                  «       D ]&  }	 |j                  }t        ||«      sŒt        d«      ‚ t        |t         j                  «      r1|j                  r$t!        |j"                  «      dkD  rt        d«      ‚y y y # t        t        f$ r Y Œ†w xY w)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Ñ>NÐOˆ
Ü Ÿ*™*¤f§j¡j´&·/±/Ä6Ç=Á=ÐQˆÜ�j .Ô1Ø"×9Ñ9Ó;ò �ðØ#'×#4Ñ#4�Lô " ,°
Õ;Ü/ð@óð ðô �z¤6×#3Ñ#3Ô4Ø×#Ò#Ü�J×1Ñ1Ó2°QÒ6ä#ð0óð ð 7ð $ð 5øô '¬
Ð3ò ñ ðús   ÂC?Ã?DÄDc                 ó6   — d|› d�|j                  «       g|¢­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   s)   € ð *¨#¨¨aÐ0°;×3DÑ3DÓ3FÐ2PÈÑ2PÐPÐPr&   c                 ó"   — |j                  «       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&   c                 óX   — d|› d�|j                  «       g|¢| j                  |«      ¢­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[   óF   € Ø'¨ u¨IÐ6Ø×ÑÓð9
àð9
ð ×)Ñ)¨&Ó1ñ9
ð 
ð 	
r&   c                 óX   — d|› d�|j                  «       g|¢| j                  |«      ¢­fS )Nzdjango_time_trunc(%s, rJ   rK   rM   s        r$   Útime_trunc_sqlz!DatabaseOperations.time_trunc_sqlb   rP   r&   c                 óX   — |r(t         j                  r|| j                  j                  fS y©N)NN)r   ÚUSE_TZr   Útimezone_name)r!   rN   s     r$   rL   z*DatabaseOperations._convert_tznames_to_sqli   s#   € Ù”h—o’oØ˜4Ÿ?™?×8Ñ8Ð8Ð8Ør&   c                 ó:   — d|› d�g |¢| j                  |«      ¢­fS )Nzdjango_datetime_cast_date(rJ   ©rL   ©r!   r?   r@   rN   s       r$   Údatetime_cast_date_sqlz)DatabaseOperations.datetime_cast_date_sqln   ó8   € Ø+¨C¨5°	Ð:ð =
Øð=
à×)Ñ)¨&Ó1ñ=
ð 
ð 	
r&   c                 ó:   — d|› d�g |¢| j                  |«      ¢­fS )Nzdjango_datetime_cast_time(rJ   rX   rY   s       r$   Údatetime_cast_time_sqlz)DatabaseOperations.datetime_cast_time_sqlt   r[   r&   c                 óX   — d|› d�|j                  «       g|¢| j                  |«      ¢­fS )Nzdjango_datetime_extract(%s, rJ   rK   rM   s        r$   Údatetime_extract_sqlz'DatabaseOperations.datetime_extract_sqlz   sF   € Ø-¨c¨U°)Ð<Ø×ÑÓð?
àð?
ð ×)Ñ)¨&Ó1ñ?
ð 
ð 	
r&   c                 óX   — d|› d�|j                  «       g|¢| j                  |«      ¢­fS )Nzdjango_datetime_trunc(%s, rJ   rK   rM   s        r$   Údatetime_trunc_sqlz%DatabaseOperations.datetime_trunc_sql�   sF   € Ø+¨C¨5°	Ð:Ø×ÑÓð=
àð=
ð ×)Ñ)¨&Ó1ñ=
ð 
ð 	
r&   c                 ó6   — d|› d�|j                  «       g|¢­fS )Nzdjango_time_extract(%s, r:   r;   r=   s       r$   Útime_extract_sqlz#DatabaseOperations.time_extract_sqlˆ   s'   € Ø)¨#¨¨aÐ0°;×3DÑ3DÓ3FÐ2PÈÑ2PÐPÐPr&   c                  ó   — y)NÚNULLrG   ©r!   s    r$   Úpk_default_valuez#DatabaseOperations.pk_default_value‹   s   € Ør&   c                 ó®  — d}t        |«      |kD  r;d}t        dt        |«      |«      D ]  }||||z    }|| j                  |«      z  }Œ  |S ddj                  dgt        |«      z  «      z   }| j                  j                  j                  «       }	 |j                  ||«      j                  «       |j                  «        S # |j                  «        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�Ø˜u u¨zÑ'9Ð:�Ø˜4×EÑEÀeÓLÑL‘ðMð ˆNà˜$Ÿ)™) Z L´3°v³;Ñ$>Ó?Ñ?ˆð —‘×+Ñ+×2Ñ2Ó4ˆð	Ø—>‘> # vÓ.×7Ñ7Ó9à�L‰L�NøˆF�L‰L�Nús   ÂC ÃCc                 óê   — |rpt        |t        t        f«      r| j                  |«      }||z  S t        |j	                  «       «      }| j                  |«      }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©   su   € ñ
 Ü˜&¤4¬ -Ô0Ø×CÑCÀFÓK�ð
 ˜‘<Ðô ˜vŸ}™}›Ó/�Ø×CÑCÀFÓK�Üœc &¨&Ó1Ó2�Ø˜‘<Ðð ˆJr&   c                 óT   — |j                  d«      r|j                  d«      r|S d|z  S )Nú"z"%s")Ú
startswithÚendswith)r!   Únames     r$   Ú
quote_namezDatabaseOperations.quote_name»   s(   € Ø�?‰?˜3Ô D§M¡M°#Ô$6ØˆKØ˜‰}Ðr&   c                  ó   — y)NéÿÿÿÿrG   rf   s    r$   Úno_limit_valuez!DatabaseOperations.no_limit_valueÀ   s   € Ør&   c                 óà   — d}|ddf}| j                   j                  «       5 }|j                  ||«      }|j                  «       D �cg c]  }|d   ‘Œ	 c}cd d d «       S c c}w # 1 sw Y   y xY w)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*\(r   )r   rD   rm   rC   )r!   Ú
table_nameÚqueryr@   rD   rq   Úrows          r$   Ú__references_graphz%DatabaseOperations.__references_graphÃ   sw   € ðˆð Ø*Øð
ˆð
 �_‰_×#Ñ#Ó%ð 	:¨Ø—n‘n U¨FÓ3ˆGØ&-×&6Ñ&6Ó&8Ö9˜s�C˜“FÒ9÷	:ñ 	:ùâ9÷	:ð 	:ús   ¢%A$ÁAÁA$Á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 «       «      «      }|D �cg c]I  }|j                  d«      ›d|j                  d«      ›d|j	                  ‰ j                  |«      «      ›d�‘ŒK }}|r2|D �cg c]  }d|i‘Œ }}|j                  ‰ j                  ||«      «       |S c c}w c c}w )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wru   )r�   )Ú.0Útabler!   s     €r$   ú	<genexpr>z/DatabaseOperations.sql_flush.<locals>.<genexpr>á   s   øè ø€ Ò#VÀe D×$:Ñ$:¸5×$AÑ#Vùs   ƒÚDELETEú ÚFROMú;r“   )Úsetr   Úfrom_iterableÚSQL_KEYWORDÚ	SQL_FIELDr�   ÚextendÚsequence_reset_by_name_sql)r!   ÚstyleÚtablesrŽ   r�   r“   r?   Ú	sequencess   `       r$   Ú	sql_flushzDatabaseOperations.sql_flushÜ   sÁ   ø€ Ù‘mô Ü×#Ñ#Ó#VÈvÔ#VÓVóˆFð  ö
ð ð	 ×!Ñ! (Õ+Ø×!Ñ! &Õ)Ø—‘ §¡°Ó 6Õ7ò	ð
ˆð 
ñ Ø7=Ö>¨e˜' 5Ò)Ð>ˆIÐ>Ø�J‰J�t×6Ñ6°u¸iÓHÔIØˆ
ùò
ùò ?s   ±AB7ÂB<c                 ó¼  — |sg S |j                  d«      ›d|j                  | j                  d«      «      ›d|j                  d«      ›d|j                  | j                  d«      «      ›d|j                  d«      ›d|j                  | j                  d«      «      ›d|j                  d	«      ›d
dj	                  |D �cg c]
  }d|d   z  ‘Œ c}«      ›d�gS c c}w )NÚUPDATEr–   Úsqlite_sequenceÚSETÚseqz = 0 ÚWHEREr€   ÚINz (ri   ú'%s'r“   z);)r›   Ú	SQL_TABLEr�   rœ   rl   )r!   rŸ   r¡   Úsequence_infos       r$   rž   z-DatabaseOperations.sequence_reset_by_name_sqlñ   s½   € ÙØˆIð ×!Ñ! (Õ+Ø—‘ §¡Ð0AÓ BÕCØ×!Ñ! %Õ(Ø—‘ §¡°Ó 6Õ7Ø×!Ñ! 'Õ*Ø—‘ §¡°Ó 7Õ8Ø×!Ñ! $Õ'Ø—	‘	ØJSÖT¸�V˜m¨GÑ4Ó4ÒTõðð
ð 	
ùò Us   Â?C$c                 ó  — |€y t        |d«      r|S t        j                  |«      rPt        j                  r5t        j
                  || j                  j                  «      }t        |«      S 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{   € Øˆ=Øô �5Ð.Ô/ØˆLô ×Ñ˜UÔ#Ü�ŠÜ ×+Ñ+¨E°4·?±?×3KÑ3KÓL�ô �5‹zÐô !ð'óð ô
 �5‹zÐr&   c                 óz   — |€y 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  sB   € Øˆ=Øô �5Ð.Ô/ØˆLô ×Ñ˜UÔ#ÜÐTÓUÐUä�5‹zÐr&   c                 óø  •— t         ‰| �  |«      }|j                  j                  «       }|dk(  r|j	                  | j
                  «       |S |dk(  r|j	                  | j                  «       |S |dk(  r|j	                  | j                  «       |S |dk(  r"|j	                  | j                  |«      «       |S |dk(  r|j	                  | j                  «       |S |dk(  r|j	                  | 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Ñ.¨zÓ:ˆ
Ø"×/Ñ/×AÑAÓCˆØ˜OÒ+Ø×Ñ˜d×>Ñ>Ô?ð Ðð ˜kÒ)Ø×Ñ˜d×:Ñ:Ô;ð Ðð ˜kÒ)Ø×Ñ˜d×:Ñ:Ô;ð Ðð ˜nÒ,Ø×Ñ˜d×=Ñ=¸jÓIÔJð
 Ðð	 ˜kÒ)Ø×Ñ˜d×:Ñ:Ô;ð Ðð ˜nÒ,Ø×Ñ˜d×=Ñ=Ô>ØÐr&   c                 óò   — |�tt        |t        j                  «      st        |«      }t        j                  r?t        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  sW   € ØÐÜ˜e¤X×%6Ñ%6Ô7Ü& uÓ-�Ü�Š¤x×'8Ñ'8¸Ô'?Ü ×+Ñ+¨E°4·?±?×3KÑ3KÓL�Øˆr&   c                 óT   — |�%t        |t        j                  «      st        |«      }|S ru   )r-   rË   Údater   rÍ   s       r$   rÂ   z*DatabaseOperations.convert_datefield_value?  ó%   € ØÐÜ˜e¤X§]¡]Ô3Ü" 5Ó)�Øˆr&   c                 óT   — |�%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        «      rAt        j
                  d«      j                  |j                  j                   «      Šˆˆfd„}|S ˆfd„}|S )Né   )Úprecr   c                 ód   •— | �- ‰| «      j                  ‰|j                  j                  ¬«      S y )N)Úcontext)Úquantizer/   r×   )rµ   r4   r   Úcreate_decimalÚquantize_values      €€r$   Ú	converterz@DatabaseOperations.get_decimalfield_converter.<locals>.converterT  s<   ø€ ØÐ$Ù)¨%Ó0×9Ñ9Ø&°
×0GÑ0G×0OÑ0Oð :ó ð ð %r&   c                 ó   •— | � ‰| «      S y ru   rG   )rµ   r4   r   rÙ   s      €r$   rÛ   z@DatabaseOperations.get_decimalfield_converter.<locals>.converter\  s   ø€ ØÐ$Ù)¨%Ó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  sh   ù€ ô !Ÿ™¨bÔ1×KÑKˆÜ�j¤#Ô&Ü$Ÿ_™_¨QÓ/×6Ñ6Ø×(Ñ(×7Ñ7Ð7óˆNõð Ðô	1ð Ðr&   c                 ó4   — |�t        j                  |«      }|S ru   )ÚuuidÚUUIDrÍ   s       r$   rÅ   z*DatabaseOperations.convert_uuidfield_valueb  s   € ØÐÜ—I‘I˜eÓ$ˆEØˆr&   c                 ó$   — |dv rt        |«      S |S )N)r   r   )ÚboolrÍ   s       r$   rÆ   z-DatabaseOperations.convert_booleanfield_valueg  s   € Ø# v™oŒt�E‹{Ð8°5Ð8r&   c                 óN   — d„ |D «       }dj                  d„ |D «       «      }d|› �S )Nc              3   ó>   K  — | ]  }d j                  |«      –— Œ y­w)ri   N©rl   )r’   rˆ   s     r$   r”   z5DatabaseOperations.bulk_insert_sql.<locals>.<genexpr>k  s   è ø€ ÒK°3 §	¡	¨#§ÑKùs   ‚ri   c              3   ó(   K  — | ]
  }d |› d�–— Œ y­w)ú(r:   NrG   )r’   r?   s     r$   r”   z5DatabaseOperations.bulk_insert_sql.<locals>.<genexpr>l  s   è ø€ ÒJ¨c  3 % qœzÑJùs   ‚zVALUES rê   )r!   r"   Úplaceholder_rowsÚplaceholder_rows_sqlÚ
values_sqls        r$   Úbulk_insert_sqlz"DatabaseOperations.bulk_insert_sqlj  s0   € ÙKÐ:JÔKÐØ—Y‘YÑJÐ5IÔJÓJˆ
Ø˜˜Ð%Ð%r&   c                 óˆ   •— |dk(  rddj                  |«      z  S |dk(  rddj                  |«      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  sO   ø€ ð ˜ÒØ §¡¨/Ó!:Ñ:Ð:Ø˜#ÒØ #§(¡(¨?Ó";Ñ;Ð;Ü‰wÑ)¨)°_ÓEÐEr&   c                 ó’   — |dvrt        d|z  «      ‚d|z  g|z   }t        |«      dkD  rt        d«      ‚ddj                  |«      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  sZ   € ØÐ0Ñ0ÜÐ FÈÑ RÓSÐSØ˜iÑ'Ð(¨?Ñ:ˆ	Üˆy‹>˜AÒÜÐHÓIÐIØ*¨T¯Y©Y°yÓ-AÑAÐAr&   c                  ó   — yrT   rG   )r!   rÈ   s     r$   Úinteger_field_rangez&DatabaseOperations.integer_field_range€  s   € àr&   c                 óZ   — |\  }}|\  }}g |¢|¢­}|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„  sR   € Ø!Ñˆ�Ø!Ñˆ�Ø+�:Ð+ 
Ñ+ˆØ˜KÓ'Ú18º'ÐBÀFÐJÐJð (â29º7ÐCÀVÐKÐKr&   c                 óL   •— |t         j                  k(  ryt        ‰| �  |¬«      S )NzINSERT OR IGNORE INTO)Úon_conflict)r   ÚIGNOREr½   Úinsert_statement)r!   r  rÉ   s     €r$   r  z#DatabaseOperations.insert_statementŒ  s'   ø€ Øœ*×+Ñ+Ò+Ø*Ü‰wÑ'°KÐ'Ó@Ð@r&   c                 óò   — |sy|D �cg c]O  }| j                  |j                  j                  j                  «      ›d| j                  |j                  «      ›�‘ŒQ }}ddj                  |«      z  dfS c c}w )N)Ú rG   ú.zRETURNING %sri   rG   )r�   ÚmodelÚ_metaÚdb_tableÚcolumnrl   )r!   r"   ÚfieldÚcolumnss       r$   Úreturn_insert_columnsz(DatabaseOperations.return_insert_columns‘  sw   € áØð  ö
ð ð —‘ §¡× 1Ñ 1× :Ñ :Õ;Ø—‘ §¡Ô-òð
ˆð 
ð  §	¡	¨'Ó 2Ñ2°BÐ6Ð6ùò
s   ˆAA4c                 óZ  •— |t         j                  k(  r�| j                  j                  j                  raddj                  t        | j                  |«      «      ›ddj                  t        | j                  |«      D �cg c]	  }|› d|› �‘Œ c}«      ›�S t        ‰| �%  ||||«      S c c}w )NzON CONFLICT(ri   z) DO UPDATE SET z = EXCLUDED.)
r   r¤   r   r   Ú%supports_update_conflicts_with_targetrl   Úmapr�   r½   Úon_conflict_suffix_sql)r!   r"   r  Úupdate_fieldsÚunique_fieldsr  rÉ   s         €r$   r  z)DatabaseOperations.on_conflict_suffix_sqlŸ  s¦   ø€ àœ:×,Ñ,Ò,Ø—‘×(Ñ(×NÓNð —	‘	œ#˜dŸo™o¨}Ó=Õ>Ø—	‘	ô &)¨¯©¸-Ó%Höà!ð !˜' ¨e¨WÒ5òôðð ô ‰wÑ-ØØØØó	
ð 	
ùòs   Á?B(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Ó DÐòòò8Qò!òó
ó
òò

ò
ò
ò
òQòòò6ò$ò
ò:ð& ñ?ó ð?ð
 ;@Èuô ò*
ò&ò(ôò"òòòò.ò
9ò&ô
FòBòòLõAò
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>r2     sD   ðÛ Û Û Ý Ý å  Ý -ß >Ñ >Ý EÝ 1Ý ,Ý !ß IÑ IÝ 3ô`
Ð/õ `
r&   