Ë
    ¹ûàgðA  ã                   óÒ   — 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y)é    N)Ú	lru_cache)Úchain)Úsettings)Ú
FieldError)ÚDatabaseErrorÚNotSupportedErrorÚmodels)ÚBaseDatabaseOperations)Ú
OnConflict)ÚCol)Útimezone)Ú
parse_dateÚparse_datetimeÚ
parse_time)Úcached_propertyé   )ÚDatabasec                   ó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'ˆ fd'„Z(d(„ Z)d)„ Z*d*„ Z+d/ˆ fd+„	Z,d,„ Z-ˆ fd-„Z.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).
        r   iô  )ÚlenÚ
connectionÚfeaturesÚmax_query_params)ÚselfÚfieldsÚobjss      úc/var/www/skyplay_api_hub/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Úexprr0   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_sqlJ   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_rowsR   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_arithmeticY   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@   rA   Ú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, rK   rL   rN   s        r%   Útime_trunc_sqlz!DatabaseOperations.time_trunc_sqld   rQ   r'   c                 óX   — |r(t         j                  r|| j                  j                  fS y)N)NN)r   ÚUSE_TZr   Útimezone_name)r"   rO   s     r%   rM   z*DatabaseOperations._convert_tznames_to_sqlk   s#   € Ù”h—o’oØ˜4Ÿ?™?×8Ñ8Ð8Ð8Ør'   c                 ó:   — d|› d�g |¢| j                  |«      ¢­fS )Nzdjango_datetime_cast_date(rK   ©rM   ©r"   r@   rA   rO   s       r%   Údatetime_cast_date_sqlz)DatabaseOperations.datetime_cast_date_sqlp   ó8   € Ø+¨C¨5°	Ð:ð =
Øð=
à×)Ñ)¨&Ó1ñ=
ð 
ð 	
r'   c                 ó:   — d|› d�g |¢| j                  |«      ¢­fS )Nzdjango_datetime_cast_time(rK   rX   rY   s       r%   Údatetime_cast_time_sqlz)DatabaseOperations.datetime_cast_time_sqlv   r[   r'   c                 óX   — d|› d�|j                  «       g|¢| j                  |«      ¢­fS )Nzdjango_datetime_extract(%s, rK   rL   rN   s        r%   Údatetime_extract_sqlz'DatabaseOperations.datetime_extract_sql|   sF   € Ø-¨c¨U°)Ð<Ø×ÑÓð?
àð?
ð ×)Ñ)¨&Ó1ñ?
ð 
ð 	
r'   c                 óX   — d|› d�|j                  «       g|¢| j                  |«      ¢­fS )Nzdjango_datetime_trunc(%s, rK   rL   rN   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ÚNULLrH   ©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ç  rH   r   zSELECT ú, zQUOTE(?))	r   ÚrangeÚ%_quote_params_for_last_executed_queryÚjoinr   rE   ÚexecuteÚfetchoneÚclose)r"   rA   Ú
BATCH_SIZEÚresultsÚindexÚchunkr@   rE   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"   rE   r@   rA   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éÿÿÿÿrH   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   rE   rm   rD   )r"   Ú
table_nameÚqueryrA   rE   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        j                  |«      rPt        j                  r5t        j                  || j
                  j                   «      }t        |«      S t        d«      ‚t        |«      S )NzNSQLite backend does not support timezone-aware datetimes when USE_TZ is False.)r   Úis_awarer   rU   Ú
make_naiver   Ú
ValueErrorÚstr©r"   Úvalues     r%   Úadapt_datetimefield_valuez,DatabaseOperations.adapt_datetimefield_value  si   € Øˆ=Øô ×Ñ˜UÔ#Ü�ŠÜ ×+Ñ+¨E°4·?±?×3KÑ3KÓL�ô �5‹zÐô !ð'óð ô
 �5‹zÐr'   c                 ó^   — |€y 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  s0   € Øˆ=Øô ×Ñ˜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_convertersr0   Úget_internal_typeÚappendÚconvert_datetimefield_valueÚconvert_datefield_valueÚconvert_timefield_valueÚget_decimalfield_converterÚconvert_uuidfield_valueÚconvert_booleanfield_value)r"   r5   Ú
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³   r5   r   s       r%   r¿   z.DatabaseOperations.convert_datetimefield_value1  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_value9  ó%   € ØÐÜ˜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_value?  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)Úquantizer0   rÕ   )r³   r5   r   Úcreate_decimalÚquantize_values      €€r%   Ú	converterz@DatabaseOperations.get_decimalfield_converter.<locals>.converterN  s<   ø€ ØÐ$Ù)¨%Ó0×9Ñ9Ø&°
×0GÑ0G×0OÑ0Oð :ó ð ð %r'   c                 ó   •— | � ‰| «      S y ru   rH   )r³   r5   r   r×   s      €r%   rÙ   z@DatabaseOperations.get_decimalfield_converter.<locals>.converterV  s   ø€ ØÐ$Ù)¨%Ó0Ð0ð %r'   )	ÚdecimalÚContextÚcreate_decimal_from_floatr.   r   ÚDecimalÚscalebr0   Údecimal_places)r"   r5   rÙ   r×   rØ   s      @@r%   rÂ   z-DatabaseOperations.get_decimalfield_converterE  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_value\  s   € ØÐÜ—I‘I˜eÓ$ˆEØˆr'   c                 ó$   — |dv rt        |«      S |S )N)r   r   )ÚboolrË   s       r%   rÄ   z-DatabaseOperations.convert_booleanfield_valuea  s   € Ø# v™oŒt�E‹{Ð8°5Ð8r'   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_expressiond  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_expressionm  sZ   € ØÐ0Ñ0ÜÐ FÈÑ RÓSÐSØ˜iÑ'Ð(¨?Ñ:ˆ	Üˆy‹>˜AÒÜÐHÓIÐIØ*¨T¯Y©Y°yÓ-AÑAÐAr'   c                 ó   — |dv ryy)N)ÚPositiveBigIntegerFieldÚPositiveIntegerFieldÚPositiveSmallIntegerField)r   ì   ÿÿÿÿ )lûÿÿÿ         rù   rH   )r"   rÆ   s     r%   Úinteger_field_rangez&DatabaseOperations.integer_field_rangeu  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(rH   )	r"   rÆ   ÚlhsÚrhsÚlhs_sqlÚ
lhs_paramsÚrhs_sqlÚ
rhs_paramsrA   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)Ú rH   ú.zRETURNING %sri   rH   )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(c                 ó2   — t         j                  dk  rdgS g S )N)rò   é'   zGROUP BY TRUE)r   Úsqlite_version_inforf   s    r%   Úforce_group_byz!DatabaseOperations.force_group_by°  s   € Ü$,×$@Ñ$@À7Ò$J�Ð ÐRÐPRÐRr'   ru   )1Ú__name__Ú
__module__Ú__qualname__Ú"cast_char_field_without_max_lengthÚcast_data_typesÚexplain_prefixÚ	frozensetÚjsonfield_datatype_valuesr&   r9   rB   rF   rI   rP   rS   rM   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ô
ö*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   rH   r'   r%   ú<module>r0     sI   ðÛ Û Û Ý Ý å  Ý -ß >Ñ >Ý EÝ 1Ý ,Ý !ß IÑ IÝ 3å ô]SÐ/õ ]Sr'   