
    g:                        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+ ejX                  ddjZ                          ejX                  d e)e              ejX                  d e)e              ejX                  d e)e              ejX                  d e)e              ej\                  ej^                  e0        ej\                  ejb                  e*        ej\                  ej                  e+        G d de      Z2 ed      Z3 G d  d!ejh                        Z5y)"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    w/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/backends/sqlite3/base.py<lambda>zdecoder.<locals>.<lambda>    s    Yqxxz*     )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   bool   1datetimedatetime	timestampc                      e Zd ZdZdZi 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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BooleanFieldr+   	CharFieldzvarchar(%(max_length)s)	DateFieldr-   DateTimeFieldr/   DecimalFielddecimalDurationFieldbigint	FileFieldFilePathField
FloatFieldrealIntegerFieldBigIntegerFieldIPAddressFieldzchar(15)GenericIPAddressFieldzchar(39)	JSONFieldtextzbigint unsignedzinteger unsignedzsmallint unsignedsmallintr.   zchar(32))
OneToOneFieldPositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerField	SlugFieldSmallAutoFieldSmallIntegerField	TextField	TimeField	UUIDFieldz"%(column)s" >= 0z2(JSON_VALID("%(column)s") OR "%(column)s" IS NULL))rN   rJ   rO   rP   AUTOINCREMENT)r5   r7   rR   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 '\')rZ   r[   rb   rd   rc   re   )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_threadzThe `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)rn   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aliasrp   splitinit_commands)selfru   kwargsrp   modeallowed_transaction_modesrr   s          r   get_connection_paramsz%DatabaseWrapper.get_connection_params   ss   **V$&0 
 &f-$44x7N7NN
 I&
 &(V4G-HMM7  	E$?@!::&8$?( &&(0F0FF(,		)/0F0F)GH)GD8)GH)% '%djj^ 400@/A,-Z9 
 =M 0 6 6 8RVzz."5)//4 Is   
Ec                 .    | j                   j                  S r   )rv   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    )rv   connectregister_functionsexecuter   strip)r   conn_paramsconnrr   s       r   get_new_connectionz"DatabaseWrapper.get_new_connection   sp    .+.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)Nrs   )wrap_database_errorsr   isolation_level)r   
autocommitlevels      r   _set_autocommitzDatabaseWrapper._set_autocommit   s4    E E &&.3DOO+ '&&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   fetchoner+   )r   r   enableds      r   disable_constraint_checkingz+DatabaseWrapper.disable_constraint_checking   sU    [[]fNN67 nn%:;DDFqIG  =   ]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$    [[]fNN56 ]]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>  sI      1 '2
 NN69L9LZ9XXhj! '2s   AAzPRAGMA foreign_key_list(%s)      zSELECT rq   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  sh    [[]f"#^^,FGPPR
"00 1 '2	1 
 %!$nn1DHH4G4G
4SS(*.0 7B!A6F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_usable9  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 )rp   r   r   r   s    r   #_start_transaction_under_autocommitz3DatabaseWrapper._start_transaction_under_autocommit<  sF       (KKM!!'*KKM!!F4+@+@*A"BCr   c                 R    | j                   j                  | j                  d         S )Nrj   )creationr   ru   r   s    r   r   zDatabaseWrapper.is_in_memory_dbH  s"    }},,T-?-?-GHHr   r   )(__name__
__module____qualname__vendordisplay_name
data_typesdata_type_check_constraintsdata_types_suffix	operatorspattern_escpattern_ops	frozensetr   rv   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   r2   r2   6   s   FLY	 	v 		
 	. 	V 	 		 	 	. 	2 	f 		 	8 	*  	 !" 	V#$ ##4 2%8.#'7J< $7I 3%8	# %') ')*'+),*I2 VK9A3;19K ""HIH,!L%N%N/"I,\1  C , ,$
4!76p
DIr   r2   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.execute\  sQ    >7?5))&0&Ad6lt""5k"Bwuf--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.executemanyd  si      #4
#34*8T**F*
670Kv,KK""5k"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_queryo  sR    %))#u5==dCHH EDAdV*,EEEEs   A r   )r   r   r   __doc__r   r   r   __classcell__)r   s   @r   r   r   O  s#    
.	6 37 F Fr   r   )6r   r/   r?   ry   collections.abcr   	itertoolsr   r   sqlite3r   rv   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*   register_converter__eq__register_adapterDecimalstrr-   r2   r   Cursorr   r    r   r   <module>r     s@      #   & 7 $ < - I I 6 6 " & & 0 * (+   FDKK 0   FGJ$7 8   FGJ$7 8   J(? @   K)@ A   '//3 /   (-- 4   (++^ <SI) SIl &k2 &F(// &Fr   