
    fki"@                        S r SSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr   SS	KrSSKJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&  \RN                  r(\(S:  a  \" S\RR                  -  5      e0 \E\RT                  \RV                  0Er,\" S5      r- " S S5      r. " S S\	5      r/g	! \ a  r\" S
5      \eS	rCff = f)za
MySQL database backend for Django.

Requires mysqlclient: https://pypi.org/project/mysqlclient/
    )ImproperlyConfigured)IntegrityError)utils)BaseDatabaseWrapper)async_unsafe)cached_property)_lazy_re_compileNz:Error loading MySQLdb module.
Did you install mysqlclient?)CLIENT
FIELD_TYPE)conversions   )DatabaseClient)DatabaseCreation)DatabaseFeatures)DatabaseIntrospection)DatabaseOperations)DatabaseSchemaEditor)DatabaseValidation)   r   r   z4mysqlclient 2.2.1 or newer is required; you have %s.z(\d{1,2})\.(\d{1,2})\.(\d{1,2})c                   >    \ rS rSrSrSrS rSS jrS rS r	S	 r
S
rg)CursorWrapper7   a"  
A thin wrapper around MySQLdb's normal cursor class that catches particular
exception instances and reraises them with the correct types.

Implemented as a wrapper, rather than a subclass, so that it isn't stuck
to the particular underlying representation returned by
Connection.cursor().
)i  i  i  i  c                     Xl         g Ncursorselfr   s     b/var/www/events.demo-site.click/venv/lib/python3.13/site-packages/django/db/backends/mysql/base.py__init__CursorWrapper.__init__H   s        Nc                      U R                   R                  X5      $ ! [        R                   a>  nUR                  S   U R
                  ;   a  [        [        UR                  5      6 ee S nAff = fNr   )r   executeDatabaseOperationalErrorargscodes_for_integrityerrorr   tupler   queryr(   es       r   r%   CursorWrapper.executeK   s`    	;;&&u33(( 	 vvayD999$eAFFm44	    A/9A**A/c                      U R                   R                  X5      $ ! [        R                   a>  nUR                  S   U R
                  ;   a  [        [        UR                  5      6 ee S nAff = fr$   )r   executemanyr&   r'   r(   r)   r   r*   r+   s       r   r1   CursorWrapper.executemanyV   s`    	;;**577(( 	 vvayD999$eAFFm44	r/   c                 .    [        U R                  U5      $ r   )getattrr   )r   attrs     r   __getattr__CursorWrapper.__getattr__`   s    t{{D))r"   c                 ,    [        U R                  5      $ r   )iterr   r   s    r   __iter__CursorWrapper.__iter__c   s    DKK  r"   r   r   )__name__
__module____qualname____firstlineno____doc__r)   r    r%   r1   r6   r;   __static_attributes__ r"   r   r   r   7   s(     	*!r"   r   c                     ^  \ rS rSrSr0 SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#S$SS%S&S'S(S)S*.	Er\S+ 5       rS,rS-S.S/S.S0S1S2S3S/S/S.S.S4.r	S5r
S6S7S8S9S:S;S<.r1 S=kr\r\r\r\r\r\r\r\rS> rS? r\S@ 5       rU 4SA jr \SQSB j5       r!SC r"SD r#SE r$SF r%SQSG jr&SH r'\SI 5       r(\SJ 5       r)\SK 5       r*\SL 5       r+\SM 5       r,\SN 5       r-\SO 5       r.SPr/U =r0$ )RDatabaseWrapperg   mysql	AutoFieldzinteger AUTO_INCREMENTBigAutoFieldzbigint AUTO_INCREMENTBinaryFieldlongblobBooleanFieldbool	CharFieldzvarchar(%(max_length)s)	DateFielddateDateTimeFieldzdatetime(6)DecimalFieldz+numeric(%(max_digits)s, %(decimal_places)s)DurationFieldbigint	FileFieldFilePathField
FloatFieldzdouble precisionIntegerFieldintegerBigIntegerFieldIPAddressFieldzchar(15)GenericIPAddressFieldzchar(39)	JSONFieldjsonzbigint UNSIGNEDzinteger UNSIGNEDzsmallint UNSIGNEDzsmallint AUTO_INCREMENTsmallintlongtextztime(6)zchar(32))	PositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerField	SlugFieldSmallAutoFieldSmallIntegerField	TextField	TimeField	UUIDFieldc                 z    U R                   R                  5       nU R                  R                  (       a  SUS'   U$ )Nuuidri   )_data_typescopyfeatureshas_native_uuid_field)r   rl   s     r   
data_typesDatabaseWrapper.data_types   s3    &&++-==..'-K$r"   )	tinyblobblob
mediumblobrK   tinytexttext
mediumtextr`   r^   z= %szLIKE %szLIKE BINARY %sz> %sz>= %sz< %sz<= %s)exactiexactcontains	icontainsgtgteltlte
startswithendswithistartswith	iendswithzCREPLACE(REPLACE(REPLACE({}, '\\', '\\\\'), '%%', '\%%'), '_', '\_')z"LIKE BINARY CONCAT('%%', {}, '%%')zLIKE CONCAT('%%', {}, '%%')zLIKE BINARY CONCAT({}, '%%')zLIKE CONCAT({}, '%%')zLIKE BINARY CONCAT('%%', {})zLIKE CONCAT('%%', {}))rz   r{   r   r   r   r   >   serializableread committedrepeatable readread uncommittedc                     U R                   $ r   )mysql_versionr:   s    r   get_database_version$DatabaseWrapper.get_database_version   s    !!!r"   c                    [         SS.nU R                  nUS   (       a  US   US'   US   (       a  US   US'   US   (       a  US   US'   US	   R                  S
5      (       a	  US	   US'   OUS	   (       a  US	   US'   US   (       a  [        US   5      US'   [        R
                  US'   US   R                  5       nUR                  SS5      nU(       a\  UR                  5       nX@R                  ;  a=  [        SU< SSR                  S [        U R                  5       5       5      < S35      eX@l        UR                  U5        U$ )Nutf8mb4)convcharsetUSERuserNAMEdatabasePASSWORDpasswordHOST/unix_sockethostPORTportclient_flagOPTIONSisolation_levelr   z%Invalid transaction isolation level 'z' specified.
Use one of z, c              3   ,   #    U  H
  nS U-  v   M     g7f)z'%s'NrC   ).0ss     r   	<genexpr>8DatabaseWrapper.get_connection_params.<locals>.<genexpr>   s     !T6S&1*6Ss   z
, or None.)django_conversionssettings_dictr   intr
   
FOUND_ROWSrm   poplowerisolation_levelsr   joinsortedr   update)r   kwargsr   optionsr   s        r   get_connection_params%DatabaseWrapper.get_connection_params   sW   & 
 ** *62F6N !.v!6F:$!.z!:F: ++C00$1&$9F=!6"*62F6N  v!67F6N !' 1 1}	*//1!++&79IJ-335O&;&;;* (		!TfT=R=R6S!TT	   /gr"   c                 2    [         R                  " S0 UD6nU$ )NrC   )r&   connect)r   conn_params
connections      r   get_new_connection"DatabaseWrapper.get_new_connection   s    %%44
r"   c                   > [         TU ]  5         / nU R                  R                  (       a  UR	                  S5        U R
                  (       a,  UR	                  SU R
                  R                  5       -  5        U(       a:  U R                  5        nUR                  SR                  U5      5        S S S 5        g g ! , (       d  f       g = f)NzSET SQL_AUTO_IS_NULL = 0z*SET SESSION TRANSACTION ISOLATION LEVEL %sz; )
superinit_connection_statern   is_sql_auto_is_null_enabledappendr   upperr   r%   r   )r   assignmentsr   	__class__s      r   r   %DatabaseWrapper.init_connection_state  s    %'==44
 9:<&&,,./
 &tyy56  s   !B==
Cc                 L    U R                   R                  5       n[        U5      $ r   )r   r   r   )r   namer   s      r   create_cursorDatabaseWrapper.create_cursor  s    '')V$$r"   c                 f     [         R                  " U 5        g ! [        R                   a     g f = fr   )r   	_rollbackr&   NotSupportedErrorr:   s    r   r   DatabaseWrapper._rollback  s-    	))$/)) 		s    00c                     U R                      U R                  R                  U5        S S S 5        g ! , (       d  f       g = fr   )wrap_database_errorsr   
autocommit)r   r   s     r   _set_autocommitDatabaseWrapper._set_autocommit$  s)    &&OO&&z2 '&&s	   2
A c                 z    U R                  5        nUR                  S5        SSS5        g! , (       d  f       g= f)z
Disable foreign key checks, primarily for use in adding rows with
forward references. Always return True to indicate constraint checks
need to be re-enabled.
zSET foreign_key_checks=0NT)r   r%   r   s     r   disable_constraint_checking+DatabaseWrapper.disable_constraint_checking(  s/     [[]fNN56  ]s   ,
:c                     SU R                   sU l         n U R                  5        nUR                  S5        SSS5        Xl         g! , (       d  f       N= f! Xl         f = f)z=
Re-enable foreign key checks after they have been disabled.
FzSET foreign_key_checks=1N)needs_rollbackr   r%   )r   r   r   s      r   enable_constraint_checking*DatabaseWrapper.enable_constraint_checking2  sT     /4T5H5H+^	1&9:  #1  #1s!   A AA 
AA A c                 H   U R                  5        nUc  U R                  R                  U5      nU H  nU R                  R                  X#5      nU(       d  M'  U R                  R	                  X#5      nUR                  5        H~  u  nu  nnUR                  SU< SU< SU< SU< SU< SU< SU< S	U< S
35        UR                  5        H/  n	[        SU< SU	S   < SU< SU< SU	S   < SU< SU< S35      e   M     M     SSS5        g! , (       d  f       g= f)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+
                        SELECT REFERRING.`z`, REFERRING.`z` FROM `z2` as REFERRING
                        LEFT JOIN `z5` as REFERRED
                        ON (REFERRING.`z` = REFERRED.`z,`)
                        WHERE REFERRING.`z` IS NOT NULL AND REFERRED.`z"` IS NULL
                        zThe row in table 'z' with primary key 'r   z' has an invalid foreign key: .z contains a value 'r   z.' that does not have a corresponding value in )	r   introspectiontable_namesget_primary_key_columnget_relationsitemsr%   fetchallr   )
r   r   r   
table_nameprimary_key_column_name	relationscolumn_namereferenced_column_namereferenced_table_namebad_rows
             r   check_constraints!DatabaseWrapper.check_constraints?  s	    [[]f""00<<VD)
*.*<*<*S*S+' / ..<<VP	 __&K "*)NN 4'&1'2'2$ $*??#4,
 !+ '
 * + '
 5 6  $5' ' * ]]s   C9D
D!c                 n     U R                   R                  5         g! [        R                   a     gf = f)NTF)r   pingr&   Errorr:   s    r   	is_usableDatabaseWrapper.is_usablew  s4    	OO  "  ~~ 		s    44c                 ,    U R                   (       a  S$ S$ )NMariaDBMySQL)mysql_is_mariadbr:   s    r   display_nameDatabaseWrapper.display_name  s     11y>w>r"   c                 L    U R                   R                  (       a  SSSS.nU$ 0 $ )Nz`%(column)s` >= 0)ra   rb   rc   )rn   !supports_column_check_constraints)r   r   s     r   data_type_check_constraints+DatabaseWrapper.data_type_check_constraints  s-    ==::+>(;-@!
 %$	r"   c           	         U R                  5        nUR                  S5        UR                  5       nS S S 5        WS   US   US   [        US   5      [        US   5      [        US   5      S.$ ! , (       d  f       ND= f)	Na2  
                SELECT VERSION(),
                       @@sql_mode,
                       @@default_storage_engine,
                       @@sql_auto_is_null,
                       @@lower_case_table_names,
                       CONVERT_TZ('2001-01-01 01:00:00', 'UTC', 'UTC') IS NOT NULL
            r   r   r            )versionsql_modedefault_storage_enginesql_auto_is_nulllower_case_table_nameshas_zoneinfo_database)temporary_connectionr%   fetchonerM   )r   r   rows      r   mysql_server_data!DatabaseWrapper.mysql_server_data  s    &&(F NN   //#C ) 1vA&)!f $SV&*3q6l%)#a&\
 	
 )(s   "A11
A?c                      U R                   S   $ )Nr   )r  r:   s    r   mysql_server_info!DatabaseWrapper.mysql_server_info  s    %%i00r"   c                     [         R                  U R                  5      nU(       d  [        SU R                  -  5      e[	        S UR                  5        5       5      $ )Nz8Unable to determine MySQL version from version string %rc              3   8   #    U  H  n[        U5      v   M     g 7fr   )r   )r   xs     r   r   0DatabaseWrapper.mysql_version.<locals>.<genexpr>  s     4^SVV^s   )server_version_rematchr  	Exceptionr*   groups)r   r  s     r   r   DatabaseWrapper.mysql_version  sR    !''(>(>?J(()  4U\\^444r"   c                 <    SU R                   R                  5       ;   $ )Nmariadb)r  r   r:   s    r   r    DatabaseWrapper.mysql_is_mariadb  s    D2288:::r"   c                 n    U R                   S   n[        U(       a  UR                  S5      5      $ S5      $ )Nr   ,rC   )r  setsplit)r   r   s     r   r   DatabaseWrapper.sql_mode  s0    ))*5(8>>#&;;;;r"   )r   r   r   )1r=   r>   r?   r@   vendorrl   r   rp   _limited_data_types	operatorspattern_escpattern_opsr   r&   r   SchemaEditorClassr   client_classr   creation_classr   features_classr   introspection_classr   	ops_classr   validation_classr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   rB   __classcell__)r   s   @r   rE   rE   g   s   F-/ 	z 		
 	. 	V 	 	E 	 	. 	2 	( 		 	8 	*  	 !" 	V#$ $5 2%8.3'5K:  
 $&$ I. YK824.2,K H,!L%N%N/"I)"%N  7( % %316p ? ?   
 
. 1 1 5 5 ; ; < <r"   rE   )0rA   django.core.exceptionsr   	django.dbr   django.db.backendsr   backend_utilsdjango.db.backends.base.baser   django.utils.asyncior   django.utils.functionalr   django.utils.regex_helperr	   MySQLdbr&   ImportErrorerrMySQLdb.constantsr
   r   MySQLdb.convertersr   clientr   creationr   rn   r   r   r   
operationsr   schemar   
validationr   version_infor   __version__TIMEtypecast_timer   r  r   rE   rC   r"   r   <module>r;     s    8 $ 5 < - 3 6 1 * # & & 0 * ( *



Y
>AUAUU 334  %%GH -! -!`T<) T<m  
Es   C C	CC