o
     h(                     @  s  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	rd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  d ejej' Z(G d!d" d"eZ)G d#d$ d$eZ*G d%d& d&eZ+e+Z,dS )'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                   @  s   e Zd Zd
ddZd	S )_MariaDBUUIDdialectr   coltypeobjectreturn#Optional[_ResultProcessorType[Any]]c                 C  s"   | j r
ddd}|S ddd}|S )Nvaluer   r!   c                 S  s(   | d urt | dr| d} t| } | S Ndecodeascii)hasattrr%   _python_UUIDr#    r*   ]/var/www/html/venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/mariadbconnector.pyprocessJ   s
   

z._MariaDBUUID.result_processor.<locals>.processc                 S  s,   | d urt | dr| d} tt| } | S r$   )r'   r%   strr(   r)   r*   r*   r+   r,   T   s
   

)r#   r   r!   r   )as_uuid)selfr   r   r,   r*   r*   r+   result_processorE   s
   

z_MariaDBUUID.result_processorN)r   r   r   r    r!   r"   )__name__
__module____qualname__r0   r*   r*   r*   r+   r   A   s    r   c                      sJ   e Zd ZU dZded< dddZddd	Zd fddZdddZ  Z	S )&MySQLExecutionContext_mariadbconnectorNzOptional[int]
_lastrowidr!   r   c                 C     | j jddS )NFbuffered_dbapi_connectioncursorr/   r*   r*   r+   create_server_side_cursora      z@MySQLExecutionContext_mariadbconnector.create_server_side_cursorc                 C  r6   )NTr7   r9   r<   r*   r*   r+   create_default_cursord   r>   z<MySQLExecutionContext_mariadbconnector.create_default_cursorNonec                   sL   t    | jj| _trt| jtsJ | j	r"| jj
r$| jj| _d S d S d S N)super	post_execr;   rowcount	_rowcountr   
isinstancecompiledr   isinsertpostfetch_lastrowid	lastrowidr5   r<   	__class__r*   r+   rC   g   s   

z0MySQLExecutionContext_mariadbconnector.post_execintc                 C  s   t r	| jd us	J | jS rA   )r   r5   r<   r*   r*   r+   get_lastrowidq   s   z4MySQLExecutionContext_mariadbconnector.get_lastrowid)r!   r   )r!   r@   )r!   rM   )
r1   r2   r3   r5   __annotations__r=   r?   rC   rN   __classcell__r*   r*   rK   r+   r4   ^   s   
 


r4   c                   @  s   e Zd ZdS )MySQLCompiler_mariadbconnectorN)r1   r2   r3   r*   r*   r*   r+   rQ   w   s    rQ   c                      s   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ejejeiZejd=ddZd> fddZed?ddZd@ fddZdAddZdBd!d"ZdCd%d&Z dDd*d+Z!dE fd/d0Z"dFd2d3Z#dFd4d5Z$		6dGdHd9d:Z%		6dGdHd;d<Z&  Z'S )IMySQLDialect_mariadbconnectormariadbconnectorTutf8mb4qmarkr!   Tuple[int, ...]c                 C  s4   | j rt| j drtdd td| j jD S dS )N__version__c                 S  s   g | ]}t |qS r*   )rM   .0xr*   r*   r+   
<listcomp>   s    z@MySQLDialect_mariadbconnector._dbapi_version.<locals>.<listcomp>z(\d+)(?:[-\.]?|$))c   r\   r\   )dbapir'   tuplerefindallrW   r<   r*   r*   r+   _dbapi_version   s   	z,MySQLDialect_mariadbconnector._dbapi_versionkwargsr   r@   c                   sP   t  jdi | d| _| jd ur$| jtk r&tdddd tD  d S d S )NrU   z?The minimum required version for MariaDB Connector/Python is %s.c                 s  s    | ]}t |V  qd S rA   )r-   rX   r*   r*   r+   	<genexpr>   s    z9MySQLDialect_mariadbconnector.__init__.<locals>.<genexpr>r*   )rB   __init__
paramstyler]   ra   mariadb_cpy_minimum_versionNotImplementedErrorjoin)r/   rb   rK   r*   r+   re      s   

z&MySQLDialect_mariadbconnector.__init__r   c                 C  s   t dS )Nmariadb)
__import__)clsr*   r*   r+   import_dbapi   s   z*MySQLDialect_mariadbconnector.import_dbapieDBAPIModule.Error
connection7Optional[Union[PoolProxiedConnection, DBAPIConnection]]r;   Optional[DBAPICursor]boolc                   sB   t  |||r
dS t|| jjrt| }d|v pd|v S dS )NTznot connectedzisn't validF)rB   is_disconnectrF   loaded_dbapiErrorr-   lower)r/   rn   rp   r;   str_erK   r*   r+   rt      s   z+MySQLDialect_mariadbconnector.is_disconnecturlr   r   c              	   C  s   |  }||j g d}g d}|D ]	}t||t q|D ]	}t||t q |dd}| jd urYzt	| jj
d jj}||jO }W n ttfyT   d| _Y nw ||d< g |fS )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_typerM   rs   getr]   rk   r1   	constantsCLIENT
FOUND_ROWSAttributeErrorImportErrorsupports_sane_rowcount)r/   ry   opts
int_paramsbool_paramskeyr}   CLIENT_FLAGSr*   r*   r+   create_connect_args   s,   


z1MySQLDialect_mariadbconnector.create_connect_args	exceptionrM   c                 C  s   z|j }W |S    d}Y |S )N)errno)r/   r   rcr*   r*   r+   _extract_error_code   s   z1MySQLDialect_mariadbconnector._extract_error_coder   r-   c                 C     dS )NrT   r*   )r/   rp   r*   r*   r+   _detect_charset   s   z-MySQLDialect_mariadbconnector._detect_charset
dbapi_connr   Sequence[IsolationLevel]c                 C  r   )N)SERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READ
AUTOCOMMITr*   )r/   r   r*   r*   r+   get_isolation_level_values   s   z8MySQLDialect_mariadbconnector.get_isolation_level_valuesdbapi_connectionlevelr   c                   s*   |dkr	d|_ d S d|_ t || d S )Nr   TF)
autocommitrB   set_isolation_level)r/   r   r   rK   r*   r+   r      s   
z1MySQLDialect_mariadbconnector.set_isolation_levelxidc              	   C  s&   | tdtjd|dd d S )NzXA BEGIN :xidr   Tliteral_executeexecuter   text
bindparams	bindparamr/   rp   r   r*   r*   r+   do_begin_twophase	  s
   
z/MySQLDialect_mariadbconnector.do_begin_twophasec              	   C  sH   | tdtjd|dd | tdtjd|dd d S )NXA END :xidr   Tr   zXA PREPARE :xidr   r   r*   r*   r+   do_prepare_twophase  s   

z1MySQLDialect_mariadbconnector.do_prepare_twophaseFis_preparedrecoverc              	   C  sL   |s| tdtjd|dd | tdtjd|dd d S )Nr   r   Tr   zXA ROLLBACK :xidr   r/   rp   r   r   r   r*   r*   r+   do_rollback_twophase  s   

z2MySQLDialect_mariadbconnector.do_rollback_twophasec              	   C  s6   |s|  || |tdtjd|dd d S )NzXA COMMIT :xidr   Tr   )r   r   r   r   r   r   r   r*   r*   r+   do_commit_twophase/  s   
z0MySQLDialect_mariadbconnector.do_commit_twophase)r!   rV   )rb   r   r!   r@   )r!   r   )rn   ro   rp   rq   r;   rr   r!   rs   )ry   r   r!   r   )r   ro   r!   rM   )rp   r   r!   r-   )r   r   r!   r   )r   r   r   r   r!   r@   )rp   r   r   r   r!   r@   )TF)
rp   r   r   r   r   rs   r   rs   r!   r@   )(r1   r2   r3   driversupports_statement_cachesupports_unicode_statementsencodingconvert_unicoder   supports_sane_multi_rowcountsupports_native_decimaldefault_paramstyler4   execution_ctx_clsrQ   statement_compilersupports_server_side_cursorsr   update_copyr   colspecsr   Uuidr   memoized_propertyra   re   classmethodrm   rt   r   r   r   r   r   r   r   r   r   rP   r*   r*   rK   r+   rR   {   sF    

'


	
rR   )-__doc__
__future__r   r_   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   rg   _UUID_RETURNr   r4   rQ   rR   r   r*   r*   r*   r+   <module>   sF    E