
    h(                       d Z ddlm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	 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 e	rBd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dl m!Z! ddl"m#Z# ddl$m%Z% dZ& G d d ej                  ejN                           Z( G d! d"e      Z) G d# d$e      Z* G d% d&e      Z+e+Z,y)'a  

.. dialect:: mysql+mariadbconnector
    :name: MariaDB Connector/Python
    :dbapi: mariadb
    :connectstring: mariadb+mariadbconnector://<user>:<password>@<host>[:<port>]/<dbname>
    :url: https://pypi.org/project/mariadb/

Driver Status
-------------

MariaDB Connector/Python enables Python programs to access MariaDB and MySQL
databases using an API which is compliant with the Python DB API 2.0 (PEP-249).
It is written in C and uses MariaDB Connector/C client library for client server
communication.

Note that the default driver for a ``mariadb://`` connection URI continues to
be ``mysqldb``. ``mariadb+mariadbconnector://`` is required to use this driver.

.. mariadb: https://github.com/mariadb-corporation/mariadb-connector-python

    )annotationsN)Any)Optional)Sequence)Tuple)TYPE_CHECKING)Union)UUID   )MySQLCompiler)MySQLDialect)MySQLExecutionContext   )sql)util)sqltypes)
Connection)ConnectArgsType)DBAPIConnection)DBAPICursor)DBAPIModule)Dialect)IsolationLevel)PoolProxiedConnection)URL)SQLCompiler)_ResultProcessorType)r   r   r   c                       e Zd Z	 	 	 	 	 	 ddZy)_MariaDBUUIDc                2    | j                   rdd}|S dd}|S )Nc                Z    | (t        | d      r| j                  d      } t        |       } | S Ndecodeascii)hasattrr#   _python_UUIDvalues    h/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/mariadbconnector.pyprocessz._MariaDBUUID.result_processor.<locals>.processJ   s/    $uh/ %W 5(/E    c                l    | 1t        | d      r| j                  d      } t        t        |             } | S r"   )r%   r#   strr&   r'   s    r)   r*   z._MariaDBUUID.result_processor.<locals>.processT   s4    $uh/ %W 5U 34Er+   )r(   r   returnr   )as_uuid)selfdialectcoltyper*   s       r)   result_processorz_MariaDBUUID.result_processorE   s#     << N Nr+   N)r1   r   r2   objectr.   z#Optional[_ResultProcessorType[Any]])__name__
__module____qualname__r3    r+   r)   r   r   A   s    )/	,r+   r   c                  H     e Zd ZU dZded<   ddZddZd	 fdZd
dZ xZ	S )&MySQLExecutionContext_mariadbconnectorNzOptional[int]
_lastrowidc                :    | j                   j                  d      S )NFbuffered_dbapi_connectioncursorr0   s    r)   create_server_side_cursorz@MySQLExecutionContext_mariadbconnector.create_server_side_cursora   s    %%,,e,<<r+   c                :    | j                   j                  d      S )NTr=   r?   rB   s    r)   create_default_cursorz<MySQLExecutionContext_mariadbconnector.create_default_cursord   s    %%,,d,;;r+   c                   t         |           | j                  j                  | _        t
        rt        | j                  t              sJ | j                  r3| j                  j                  r| j                  j                  | _        y y y N)super	post_execrA   rowcount	_rowcountr   
isinstancecompiledr   isinsertpostfetch_lastrowid	lastrowidr;   )r0   	__class__s    r)   rI   z0MySQLExecutionContext_mariadbconnector.post_execg   sa    --dmm[999==T]]>>"kk33DO ?=r+   c                B    t         r| j                  J | j                  S rG   )r   r;   rB   s    r)   get_lastrowidz4MySQLExecutionContext_mariadbconnector.get_lastrowidq   s    ??...r+   )r.   r   )r.   None)r.   int)
r5   r6   r7   r;   __annotations__rC   rE   rI   rS   __classcell__rQ   s   @r)   r:   r:   ^   s!     $J$=<4r+   r:   c                      e Zd Zy)MySQLCompiler_mariadbconnectorN)r5   r6   r7   r8   r+   r)   rZ   rZ   w   s    r+   rZ   c                      e Zd ZdZdZdZdZdZdZdZ	dZ
dZeZeZdZ ej$                  ej(                  ej,                  ei      Zej0                  dd       Zd fdZedd       Z	 	 	 	 	 	 	 	 d fdZdd	Zdd
ZddZ 	 	 	 	 ddZ!ddZ"	 	 	 	 	 	 d fdZ#ddZ$ddZ%	 	 d	 	 	 	 	 	 	 	 	 ddZ&	 	 d	 	 	 	 	 	 	 	 	 ddZ' xZ(S ) MySQLDialect_mariadbconnectormariadbconnectorTutf8mb4qmarkc                    | j                   r`t        | j                   d      rJt        t        j                  d| j                   j
                        D cg c]  }t        |       c}      S yc c}w )N__version__z(\d+)(?:[-\.]?|$))c   rb   rb   )dbapir%   tuplerefindallra   rU   )r0   xs     r)   _dbapi_versionz,MySQLDialect_mariadbconnector._dbapi_version   sa    ::'$**m<  ZZ,djj.D.D F   s   A.c                    t        |   di | d| _        | j                  <| j                  t
        k  r(t        ddj                  d t
        D              z        y y )Nr_   z?The minimum required version for MariaDB Connector/Python is %s.c              3  2   K   | ]  }t        |        y wrG   )r-   ).0rg   s     r)   	<genexpr>z9MySQLDialect_mariadbconnector.__init__.<locals>.<genexpr>   s     K!s1vKs   r8   )rH   __init__
paramstylerc   rh   mariadb_cpy_minimum_versionNotImplementedErrorjoin)r0   kwargsrQ   s     r)   rn   z&MySQLDialect_mariadbconnector.__init__   si    "6"!::!""%@@)-hhK/JKKL  A "r+   c                    t        d      S )Nmariadb)
__import__)clss    r)   import_dbapiz*MySQLDialect_mariadbconnector.import_dbapi   s    )$$r+   c                    t         |   |||      ryt        || j                  j                        r#t        |      j                         }d|v xs d|v S y)NTznot connectedzisn't validF)rH   is_disconnectrL   loaded_dbapiErrorr-   lower)r0   e
connectionrA   str_erQ   s        r)   rz   z+MySQLDialect_mariadbconnector.is_disconnect   sV     7 J74,,223FLLNE"e+E}/EEr+   c                   |j                         }|j                  |j                         g d}g d}|D ]  }t        j                  ||t
                |D ]  }t        j                  ||t                |j                  dd      }| j                  K	 t        | j                  j                  dz         j                  j                  }||j                  z  }||d<   g |fS # t        t        f$ r
 d| _        Y !w xY w)N)connect_timeoutread_timeoutwrite_timeoutclient_flagport	pool_size)local_infilessl_verify_certsslpool_reset_connectioncompressr   r   z.constants.CLIENTF)translate_connect_argsupdatequeryr   coerce_kw_typerU   boolgetrc   rv   r5   	constantsCLIENT
FOUND_ROWSAttributeErrorImportErrorsupports_sane_rowcount)r0   urlopts
int_paramsbool_paramskeyr   CLIENT_FLAGSs           r)   create_connect_argsz1MySQLDialect_mariadbconnector.create_connect_args   s   ))+CII


  	0Cc3/	0 	1Cc40	1
 hh}a0::!4)JJ''*== )FF  |666 #.D4x #K0 4.3+4s   AC% %C>=C>c                4    	 |j                   }|S #  d}Y |S xY w)N)errno)r0   	exceptionrcs      r)   _extract_error_codez1MySQLDialect_mariadbconnector._extract_error_code   s(    	ooB 		B	s    c                     y)Nr^   r8   )r0   r   s     r)   _detect_charsetz-MySQLDialect_mariadbconnector._detect_charset   s    r+   c                     y)N)SERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READ
AUTOCOMMITr8   r0   
dbapi_conns     r)   get_isolation_level_valuesz8MySQLDialect_mariadbconnector.get_isolation_level_values   s    
r+   c                ,    t        |j                        S rG   )r   
autocommitr   s     r)   detect_autocommit_settingz7MySQLDialect_mariadbconnector.detect_autocommit_setting   s    J))**r+   c                N    |dk(  rd|_         y d|_         t        | 	  ||       y )Nr   TF)r   rH   set_isolation_level)r0   dbapi_connectionlevelrQ   s      r)   r   z1MySQLDialect_mariadbconnector.set_isolation_level  s/     L *.'*/'G'(8%@r+   c           	         |j                  t        j                  d      j                  t        j                  d|d                   y )NzXA BEGIN :xidxidTliteral_executeexecuter   text
bindparams	bindparamr0   r   r   s      r)   do_begin_twophasez/MySQLDialect_mariadbconnector.do_begin_twophase  s7    HH_%00eS$?	
r+   c           	     (   |j                  t        j                  d      j                  t        j                  d|d                   |j                  t        j                  d      j                  t        j                  d|d                   y )NXA END :xidr   Tr   zXA PREPARE :xidr   r   s      r)   do_prepare_twophasez1MySQLDialect_mariadbconnector.do_prepare_twophase  so    HH]#..eS$?	

 	HH&'22eS$?	
r+   c           	     ,   |sI|j                  t        j                  d      j                  t        j                  d|d                   |j                  t        j                  d      j                  t        j                  d|d                   y )Nr   r   Tr   zXA ROLLBACK :xidr   r0   r   r   is_preparedrecovers        r)   do_rollback_twophasez2MySQLDialect_mariadbconnector.do_rollback_twophase  st     '22MM%dC
 	HH'(33eS$?	
r+   c           	         |s| j                  ||       |j                  t        j                  d      j	                  t        j
                  d|d                   y )NzXA COMMIT :xidr   Tr   )r   r   r   r   r   r   r   s        r)   do_commit_twophasez0MySQLDialect_mariadbconnector.do_commit_twophase2  sM     $$Z5HH%&11eS$?	
r+   )r.   zTuple[int, ...])rs   r   r.   rT   )r.   r   )r~   DBAPIModule.Errorr   z7Optional[Union[PoolProxiedConnection, DBAPIConnection]]rA   zOptional[DBAPICursor]r.   r   )r   r   r.   r   )r   r   r.   rU   )r   r   r.   r-   )r   r   r.   zSequence[IsolationLevel])r   r   r.   r   )r   r   r   r   r.   rT   )r   r   r   r   r.   rT   )TF)
r   r   r   r   r   r   r   r   r.   rT   ))r5   r6   r7   driversupports_statement_cachesupports_unicode_statementsencodingconvert_unicoder   supports_sane_multi_rowcountsupports_native_decimaldefault_paramstyler:   execution_ctx_clsrZ   statement_compilersupports_server_side_cursorsr   update_copyr   colspecsr   Uuidr   memoized_propertyrh   rn   classmethodrx   rz   r   r   r   r   r   r   r   r   r   r   rW   rX   s   @r)   r\   r\   {   s   F# #'HO!#' " >7#' t|<H 
   	 % % L &	
 
%N	
)	
	!	
+A /A8FA	A


  !

 
 	

 
 

. !

 
 	

 
 

r+   r\   )-__doc__
__future__r   re   typingr   r   r   r   r   r	   uuidr
   r&   baser   r   r    r   r   r   engine.baser   engine.interfacesr   r   r   r   r   r   r   
engine.urlr   sql.compilerr   sql.type_apir   rp   _UUID_RETURNr   r:   rZ   r\   r1   r8   r+   r)   <module>r      s   , # 	        %   '   )4400,3:!+4 ( 8==!6!67 :-B 2	] 	D
L D
N (r+   