Ë
    ¦#ij÷:  ã                   ó  — d Z ddlZddlZddlZddlmZ ddl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 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" ddl#m$Z$ ddl%m&Z& ddl'm(Z( d„ Z)d„ Z*d„ Z+d„ Z, ejZ                  ddj\                  «        ejZ                  d e)e«      «        ejZ                  d e)e«      «        ejZ                  d e)e«      «        ejZ                  d e)e«      «        ej^                  ej`                  e1«        ej^                  ejd                  e*«        ej^                  ej                  e+«        G d„ de«      Z3 ed «      Z4 G d!„ d"ejj                  «      Z6y)#z@
SQLite backend for the sqlite3 module in the standard library.
é    N)ÚMapping)ÚchainÚtee)Údbapi2)ÚImproperlyConfigured)ÚIntegrityError)ÚBaseDatabaseWrapper)Úasync_unsafe)Ú
parse_dateÚparse_datetimeÚ
parse_time)Ú_lazy_re_compileé   )Úregister)ÚDatabaseClient)ÚDatabaseCreation)ÚDatabaseFeatures)ÚDatabaseIntrospection)ÚDatabaseOperations)ÚDatabaseSchemaEditorc                 ó   ‡ — ˆ fd„S )zR
    Convert bytestrings from Python's sqlite3 interface to a regular string.
    c                 ó0   •—  ‰| j                  «       «      S ©N)Údecode)ÚsÚ	conv_funcs    €úY/var/www/html/office/venv/lib/python3.12/site-packages/django/db/backends/sqlite3/base.pyú<lambda>zdecoder.<locals>.<lambda>    s   ø€ ‘Y˜qŸx™x›zÓ*€ ó    © )r   s   `r   Údecoderr!      s   ø€ ó +Ð*r   c                 ó"   — | j                  «       S r   ©Ú	isoformat©Úvals    r   Ú
adapt_dater'   #   s   € Ø�=‰=‹?Ðr   c                 ó$   — | j                  d«      S )Nú r#   r%   s    r   Úadapt_datetimer*   '   s   € Ø�=‰=˜ÓÐr   c                 ó   — | d   €yd| z  S )NÚ
max_lengthÚvarcharúvarchar(%(max_length)s)r    )Údatas    r   Ú_get_varchar_columnr0   +   s   € ØˆLÑÐ!ØØ$ tÑ+Ð+r   Úbooló   1ÚdateÚtimeÚdatetimeÚ	timestampc                   ó~  — e Zd ZdZdZi dd“dd“dd“dd	“d
e“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!d"ddd#dd$d%d&œ	¥Zd'd(d'd'd)œZd*d*d*d+œZd,d-d-d-d.d/d0d1d2d3d-d-d-d-d4œZ	d5Z
d6d7d8d9d:d;d<œZ eg d=¢«      ZeZeZeZeZeZeZeZd>„ Zd?„ Zed@„ «       ZdLdB„ZedC„ «       Z dD„ Z!dE„ Z"dF„ Z#dG„ Z$dLdH„Z%dI„ Z&dJ„ Z'dK„ Z(yA)MÚDatabaseWrapperÚsqliteÚSQLiteÚ	AutoFieldÚintegerÚBigAutoFieldÚBinaryFieldÚBLOBÚBooleanFieldr1   Ú	CharFieldÚ	DateFieldr3   ÚDateTimeFieldr5   ÚDecimalFieldÚdecimalÚDurationFieldÚbigintÚ	FileFieldr.   ÚFilePathFieldÚ
FloatFieldÚrealÚIntegerFieldÚBigIntegerFieldÚIPAddressFieldzchar(15)ÚGenericIPAddressFieldzchar(39)Ú	JSONFieldÚtextzbigint unsignedzinteger unsignedzsmallint unsignedÚsmallintr4   zchar(32))	ÚPositiveBigIntegerFieldÚPositiveIntegerFieldÚPositiveSmallIntegerFieldÚ	SlugFieldÚSmallAutoFieldÚSmallIntegerFieldÚ	TextFieldÚ	TimeFieldÚ	UUIDFieldz"%(column)s" >= 0z2(JSON_VALID("%(column)s") OR "%(column)s" IS NULL))rS   rP   rT   rU   ÚAUTOINCREMENT)r;   r=   rW   z= %szLIKE %s ESCAPE '\'z	REGEXP %szREGEXP '(?i)' || %sz> %sz>= %sz< %sz<= %s)ÚexactÚiexactÚcontainsÚ	icontainsÚregexÚiregexÚgtÚgteÚltÚlteÚ
startswithÚendswithÚistartswithÚ	iendswithz@REPLACE(REPLACE(REPLACE({}, '\', '\\'), '%%', '\%%'), '_', '\_')z"LIKE '%%' || {} || '%%' ESCAPE '\'z)LIKE '%%' || UPPER({}) || '%%' ESCAPE '\'zLIKE {} || '%%' ESCAPE '\'z!LIKE UPPER({}) || '%%' ESCAPE '\'zLIKE '%%' || {} ESCAPE '\'z!LIKE '%%' || UPPER({}) ESCAPE '\')r_   r`   rg   ri   rh   rj   )ÚDEFERREDÚ	EXCLUSIVEÚ	IMMEDIATEc           	      ó”  — | j                   }|d   st        d«      ‚|d   t        j                  t        j                  z  dœ|d   ¥}d|v r|d   rt        j                  dt        «       |j                  ddd	œ«       |j                  d
d «      }|�n|j                  «       | j                  vrRdj                  t        | j                  «      D �cg c]  }|›‘Œ c}«      }t        d| j                  ›d|› d|› d�«      ‚|r|j                  «       nd | _        |j                  dd«      }|j!                  d«      | _        |S c c}w )NÚNAMEzJsettings.DATABASES is improperly configured. Please supply the NAME value.)ÚdatabaseÚdetect_typesÚOPTIONSÚcheck_same_threadzÃThe `check_same_thread` option was provided and set to True. It will be overridden with False. Use the `DatabaseWrapper.allow_thread_sharing` property instead for controlling thread shareability.FT)rs   ÚuriÚtransaction_modeú, zsettings.DATABASES[z>]['OPTIONS']['transaction_mode'] is improperly configured to 'z'. Use one of z
, or None.Úinit_commandÚ ú;)Úsettings_dictr   ÚDatabaseÚPARSE_DECLTYPESÚPARSE_COLNAMESÚwarningsÚwarnÚRuntimeWarningÚupdateÚpopÚupperÚtransaction_modesÚjoinÚsortedÚaliasru   ÚsplitÚinit_commands)Úselfrz   Úkwargsru   ÚmodeÚallowed_transaction_modesrw   s          r   Úget_connection_paramsz%DatabaseWrapper.get_connection_paramsš   sm  € Ø×*Ñ*ˆØ˜VÒ$Ü&ð0óð ð
 & fÑ-Ü$×4Ñ4´x×7NÑ7NÑNñ
ð ˜IÑ&ð
ˆð  &Ñ(¨VÐ4GÒ-HÜ�M‰Mð7ô ôð 	�‰¨E¸$Ñ?Ô@Ø!Ÿ:™:Ð&8¸$Ó?ÐàÐ(Ø ×&Ñ&Ó(°×0FÑ0FÑFà(,¯	©	Ü)/°×0FÑ0FÓ)GÖH �D�8‘ÒHó)Ð%ô 'Ø% d§j¡j ^ð 40Ø0@Ð/AÀØ,Ð-¨Zð9óð ñ
 =MÐ 0× 6Ñ 6Ô 8ÐRVˆÔà—z‘z .°"Ó5ˆØ)×/Ñ/°Ó4ˆÔØˆùò Is   Ã
Ec                 ó.   — | j                   j                  S r   )r{   Úsqlite_version_info©rŠ   s    r   Úget_database_versionz$DatabaseWrapper.get_database_versionÈ   s   € Ø�}‰}×0Ñ0Ð0r   c                 óô   — t        j                  di |¤Ž}t        |«       |j                  d«       |j                  d«       | j                  D ]&  }|j                  «       x}sŒ|j                  |«       Œ( |S )NúPRAGMA foreign_keys = ONzPRAGMA legacy_alter_table = OFFr    )r{   ÚconnectÚregister_functionsÚexecuter‰   Ústrip)rŠ   Úconn_paramsÚconnrw   s       r   Úget_new_connectionz"DatabaseWrapper.get_new_connectionË   su   € ä×ÑÑ. +Ñ.ˆÜ˜4Ô à�‰Ð/Ô0ð 	�‰Ð6Ô7Ø ×.Ñ.ò 	+ˆLØ+×1Ñ1Ó3Ð3ˆ|Ñ3Ø—‘˜\Õ*ð	+ð ˆr   Nc                 óB   — | j                   j                  t        ¬«      S )N)Úfactory)Ú
connectionÚcursorÚSQLiteCursorWrapper)rŠ   Únames     r   Úcreate_cursorzDatabaseWrapper.create_cursorÙ   s   € Ø�‰×%Ñ%Ô.AÐ%ÓBÐBr   c                 óp   — | j                  «        | j                  «       st        j                  | «       y y r   )Úvalidate_thread_sharingÚis_in_memory_dbr	   Úcloser‘   s    r   r¦   zDatabaseWrapper.closeÜ   s/   € à×$Ñ$Ô&ð ×#Ñ#Ô%Ü×%Ñ% dÕ+ð &r   c                 ó   — | j                   S r   )Úin_atomic_blockr‘   s    r   Ú_savepoint_allowedz"DatabaseWrapper._savepoint_allowedå   s   € ð ×#Ñ#Ð#r   c                 óv   — |rd }nd}| j                   5  || j                  _        d d d «       y # 1 sw Y   y xY w)Nrx   )Úwrap_database_errorsrž   Úisolation_level)rŠ   Ú
autocommitÚlevels      r   Ú_set_autocommitzDatabaseWrapper._set_autocommití   s=   € ÙØ‰Eð ˆEð ×&Ñ&ñ 	4Ø.3ˆD�O‰OÔ+÷	4÷ 	4ñ 	4ús   ”/¯8c                 óÊ   — | j                  «       5 }|j                  d«       |j                  d«      j                  «       d   }d d d «       t        «       S # 1 sw Y   ŒxY w)NzPRAGMA foreign_keys = OFFzPRAGMA foreign_keysr   )rŸ   r—   Úfetchoner1   )rŠ   rŸ   Úenableds      r   Údisable_constraint_checkingz+DatabaseWrapper.disable_constraint_checkingù   sa   € Ø�[‰[‹]ð 	J˜fØ�N‰NÐ6Ô7ð —n‘nÐ%:Ó;×DÑDÓFÀqÑIˆG÷	Jô ˜“=Ð Ð ÷	Jð 	Jús   ‘4AÁA"c                 óp   — | j                  «       5 }|j                  d«       d d d «       y # 1 sw Y   y xY w)Nr”   )rŸ   r—   )rŠ   rŸ   s     r   Úenable_constraint_checkingz*DatabaseWrapper.enable_constraint_checking  s/   € Ø�[‰[‹]ð 	7˜fØ�N‰NÐ5Ô6÷	7÷ 	7ñ 	7ús   ‘,¬5c                 óæ  ‡ ‡— ‰ j                  «       5 Š|€ ‰j                  d«      j                  «       }nt        j                  ˆˆ fd„|D «       «      }|D �]  \  }}}}‰j                  d‰ j
                  j                  |«      z  «      j                  «       |   }|dd \  }}	‰ j                  j                  ‰|«      }
‰j                  d‰ j
                  j                  |
«      ›d‰ j
                  j                  |«      ›d	‰ j
                  j                  |«      ›d
�|f«      j                  «       \  }}t        d|›d|›d|›d|›d|›d|›d|	›d�«      ‚ 	 ddd«       y# 1 sw Y   yxY w)a]  
        Check each table name in `table_names` for rows with invalid foreign
        key references. This method is intended to be used in conjunction with
        `disable_constraint_checking()` and `enable_constraint_checking()`, to
        determine if rows with invalid references were entered while constraint
        checks were off.
        NzPRAGMA foreign_key_checkc              3   ó”   •K  — | ]?  }‰j                  d ‰j                  j                  |«      z  «      j                  «       –— ŒA y­w)zPRAGMA foreign_key_check(%s)N)r—   ÚopsÚ
quote_nameÚfetchall)Ú.0Ú
table_namerŸ   rŠ   s     €€r   ú	<genexpr>z4DatabaseWrapper.check_constraints.<locals>.<genexpr>  sG   øè ø€ ò 1ð #ð —N‘NØ6¸¿¹×9LÑ9LÈZÓ9XÑXóç‘h“jó!ñ1ùs   ƒAAzPRAGMA foreign_key_list(%s)é   é   zSELECT rv   z FROM z WHERE rowid = %szThe row in table 'z' with primary key 'z' has an invalid foreign key: ú.z contains a value 'z.' that does not have a corresponding value in )rŸ   r—   rº   r   Úfrom_iterabler¸   r¹   ÚintrospectionÚget_primary_key_columnr±   r   )rŠ   Útable_namesÚ
violationsr¼   ÚrowidÚreferenced_table_nameÚforeign_key_indexÚforeign_keyÚcolumn_nameÚreferenced_column_nameÚprimary_key_column_nameÚprimary_key_valueÚ	bad_valuerŸ   s   `            @r   Úcheck_constraintsz!DatabaseWrapper.check_constraints  sx  ù€ ð �[‰[‹]ð .	˜fØÐ"Ø#Ÿ^™^Ð,FÓG×PÑPÓR‘
ä"×0Ñ0ô 1ð '2ô	1ó �
ð ó#ñ ØØØ%Ø!à$Ÿn™nØ1°D·H±H×4GÑ4GÈ
Ó4SÑSóç‘(“*Ð.ñ0�ð 7BÀ!ÀAÐ6FÑ3�Ð3Ø*.×*<Ñ*<×*SÑ*SØ˜Jó+Ð'ð 06¯~ª~ð Ÿ™×+Ñ+Ð,CÕDØŸ™×+Ñ+¨KÕ8ØŸ™×+Ñ+¨JÕ7ð	ð �Hó0÷ ‘(“*ñ -Ð! 9õ %ò
 #Ú)Ú"Ú#Ú!Ú-Ú.ðóð ñ-#÷.	÷ .	ñ .	ús   “E
E'Å'E0c                  ó   — y)NTr    r‘   s    r   Ú	is_usablezDatabaseWrapper.is_usable>  s   € Ør   c                 ó´   — | j                   € | j                  «       j                  d«       y| j                  «       j                  d| j                   › �«       y)zÂ
        Start a transaction explicitly in autocommit mode.

        Staying in autocommit mode works around a bug of sqlite3 that breaks
        savepoints when autocommit is disabled.
        NÚBEGINzBEGIN )ru   rŸ   r—   r‘   s    r   Ú#_start_transaction_under_autocommitz3DatabaseWrapper._start_transaction_under_autocommitA  sF   € ð × Ñ Ð(Ø�K‰K‹M×!Ñ! 'Õ*à�K‰K‹M×!Ñ! F¨4×+@Ñ+@Ð*AÐ"BÕCr   c                 óR   — | j                   j                  | j                  d   «      S )Nro   )Úcreationr¥   rz   r‘   s    r   r¥   zDatabaseWrapper.is_in_memory_dbM  s"   € Ø�}‰}×,Ñ,¨T×-?Ñ-?ÀÑ-GÓHÐHr   r   ))Ú__name__Ú
__module__Ú__qualname__ÚvendorÚdisplay_namer0   Ú
data_typesÚdata_type_check_constraintsÚdata_types_suffixÚ	operatorsÚpattern_escÚpattern_opsÚ	frozensetr„   r{   r   ÚSchemaEditorClassr   Úclient_classr   Úcreation_classr   Úfeatures_classr   Úintrospection_classr   Ú	ops_classrŽ   r’   r
   r›   r¢   r¦   r©   r¯   r³   rµ   rÏ   rÑ   rÔ   r¥   r    r   r   r8   r8   <   s  „ Ø€FØ€LðØ�Yðà˜	ðð 	�vðð 	˜ð	ð
 	Ð(ðð 	�Vðð 	˜ðð 	˜	ðð 	˜ðð 	Ð.ðð 	Ð2ðð 	�fðð 	˜	ðð 	˜8ðð 	˜*ðð  	  ð!ð" 	�Vð#ð$ $5Ø 2Ø%8Ø.Ø#Ø'ØØØò5€Jð: $7ØIØ 3Ø%8ñ	#Ðð %Ø'Ø)ñÐð Ø'Ø)Ø*ØØ'ØØØØØ+Ø)Ø,Ø*ñ€Ið2 V€Kà9ØAØ3Ø;Ø1Ø9ñ€Kñ "Ò"HÓIÐà€HØ,Ðà!€LØ%€NØ%€NØ/ÐØ"€Iò,ò\1ð ñó ðóCð ñ,ó ð,ò$ò
4ò!ò7ó6òpò
DóIr   r8   z(?<!%)%sc                   ó:   ‡ — e Zd ZdZdˆ fd„	Zˆ fd„Zddœd„Zˆ xZS )r    aQ  
    Django uses the "format" and "pyformat" styles, but Python's sqlite3 module
    supports neither of these styles.

    This wrapper performs the following conversions:

    - "format" style to "qmark" style
    - "pyformat" style to "named" style

    In both cases, if you want to use a literal "%s", you'll need to use "%%s".
    Nc                 ó¦   •— |€t         ‰| �  |«      S t        |t        «      rt	        |«      nd }| j                  ||¬«      }t         ‰| �  ||«      S ©N©Úparam_names)Úsuperr—   Ú
isinstancer   ÚlistÚconvert_query)rŠ   ÚqueryÚparamsrí   Ú	__class__s       €r   r—   zSQLiteCursorWrapper.executea  sQ   ø€ Øˆ>Ü‘7‘? 5Ó)Ð)ä&0°¼Ô&A”d˜6”lÀtˆØ×"Ñ" 5°kÐ"ÓBˆÜ‰w‰˜u fÓ-Ð-r   c                 óÐ   •— t        t        |«      «      \  }}t        |d «      x}rt        |t        «      rt        |«      }nd }| j                  ||¬«      }t        ‰| �!  ||«      S rë   )	r   ÚiterÚnextrï   r   rð   rñ   rî   Úexecutemany)rŠ   rò   Ú
param_listÚpeekableró   rí   rô   s         €r   rø   zSQLiteCursorWrapper.executemanyi  si   ø€ ô  #¤4¨
Ó#3Ó4Ñˆ�*Ü˜8 TÓ*Ð*ˆFÐ*´
¸6Ä7Ô0KÜ˜v›,‰KàˆKØ×"Ñ" 5°kÐ"ÓBˆÜ‰wÑ" 5¨*Ó5Ð5r   rì   c                óŠ   — |€&t         j                  d|«      j                  dd«      S ||D �ci c]  }|d|› �“Œ
 c}z  S c c}w )Nú?z%%ú%ú:)ÚFORMAT_QMARK_REGEXÚsubÚreplace)rŠ   rò   rí   r¡   s       r   rñ   z!SQLiteCursorWrapper.convert_queryt  sN   € ØÐä%×)Ñ)¨#¨uÓ5×=Ñ=¸dÀCÓHÐHð ¸ÖE°˜D A d V *Ñ,ÒEÑEÐEùÒEs   ®A r   )r×   rØ   rÙ   Ú__doc__r—   rø   rñ   Ú__classcell__)rô   s   @r   r    r    T  s#   ø„ ñ
õ.ô	6ð 37÷ Fð Fr   r    )7r  r5   rE   r~   Úcollections.abcr   Ú	itertoolsr   r   Úsqlite3r   r{   Údjango.core.exceptionsr   Ú	django.dbr   Údjango.db.backends.base.baser	   Údjango.utils.asyncior
   Údjango.utils.dateparser   r   r   Údjango.utils.regex_helperr   Ú
_functionsr   r–   Úclientr   rÖ   r   Úfeaturesr   rÂ   r   Ú
operationsr   Úschemar   r!   r'   r*   r0   Úregister_converterÚ__eq__Úregister_adapterÚDecimalÚstrr3   r8   rÿ   ÚCursorr    r    r   r   ú<module>r     sE  ðñó Û Û Ý #ß  Ý &å 7Ý $Ý <Ý -ß IÑ IÝ 6å 6Ý "Ý &Ý &Ý 0Ý *Ý (ò+òòò,ð €× Ñ ˜F D§K¡KÔ 0Ø €× Ñ ˜F¡G¨JÓ$7Ô 8Ø €× Ñ ˜F¡G¨JÓ$7Ô 8Ø €× Ñ ˜J©°Ó(?Ô @Ø €× Ñ ˜K©°Ó)@Ô Aà €× Ñ ˜'Ÿ/™/¨3Ô /Ø €× Ñ ˜(Ÿ-™-¨Ô 4Ø €× Ñ ˜(×+Ñ+¨^Ô <ôRIÐ)ô RIñj & kÓ2Ð ô&F˜(Ÿ/™/õ &Fr   