o
    fqi(                     @  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*   q/home/app/PaddleOCR-VL/.venv_paddleocr/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   )Zas_uuid)selfr   r   r,   r*   r*   r+   result_processorE   s
   

z_MariaDBUUID.result_processorN)r   r   r   r    r!   r"   )__name__
__module____qualname__r/   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Z_dbapi_connectioncursorr.   r*   r*   r+   create_server_side_cursora      z@MySQLExecutionContext_mariadbconnector.create_server_side_cursorc                 C  r5   )NTr6   r8   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_execr9   ZrowcountZ	_rowcountr   
isinstancecompiledr   ZisinsertZpostfetch_lastrowidZ	lastrowidr4   r:   	__class__r*   r+   rA   g   s   

z0MySQLExecutionContext_mariadbconnector.post_execintc                 C  s   t r	| jd us	J | jS r?   )r   r4   r:   r*   r*   r+   get_lastrowidq   s   z4MySQLExecutionContext_mariadbconnector.get_lastrowid)r!   r   )r!   r>   )r!   rF   )
r0   r1   r2   r4   __annotations__r;   r=   rA   rG   __classcell__r*   r*   rD   r+   r3   ^   s   
 


r3   c                   @  s   e Zd ZdS )MySQLCompiler_mariadbconnectorN)r0   r1   r2   r*   r*   r*   r+   rJ   w   s    rJ   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dAddZdB fddZdCddZdDd!d"ZdEd%d&Z dFd*d+Z!dGd,d-Z"dH fd1d2Z#dId4d5Z$dId6d7Z%		8dJdKd;d<Z&		8dJdKd=d>Z'  Z(S )LMySQLDialect_mariadbconnectorZ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*   )rF   .0xr*   r*   r+   
<listcomp>   s    z@MySQLDialect_mariadbconnector._dbapi_version.<locals>.<listcomp>z(\d+)(?:[-\.]?|$))c   rT   rT   )dbapir'   tuplerefindallrO   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 )NrM   z?The minimum required version for MariaDB Connector/Python is %s.c                 s  s    | ]}t |V  qd S r?   )r-   rP   r*   r*   r+   	<genexpr>   s    z9MySQLDialect_mariadbconnector.__init__.<locals>.<genexpr>r*   )r@   __init__Z
paramstylerU   rY   mariadb_cpy_minimum_versionNotImplementedErrorjoin)r.   rZ   rD   r*   r+   r]      s   

z&MySQLDialect_mariadbconnector.__init__r   c                 C  s   t dS )NZmariadb)
__import__)clsr*   r*   r+   import_dbapi   s   z*MySQLDialect_mariadbconnector.import_dbapieDBAPIModule.Error
connection7Optional[Union[PoolProxiedConnection, DBAPIConnection]]r9   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)r@   is_disconnectrB   Zloaded_dbapiErrorr-   lower)r.   rd   rf   r9   Zstr_erD   r*   r+   rj      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_timeoutZwrite_timeoutclient_flagportZ	pool_size)Zlocal_infileZssl_verify_certsslZpool_reset_connectioncompressrp   r   z.constants.CLIENTF)Ztranslate_connect_argsupdatequeryr   Zcoerce_kw_typerF   ri   getrU   ra   r0   	constantsZCLIENTZ
FOUND_ROWSAttributeErrorImportErrorsupports_sane_rowcount)r.   rm   optsZ
int_paramsZbool_paramskeyrp   ZCLIENT_FLAGSr*   r*   r+   create_connect_args   s,   


z1MySQLDialect_mariadbconnector.create_connect_args	exceptionrF   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 )NrL   r*   )r.   rf   r*   r*   r+   _detect_charset   s   z-MySQLDialect_mariadbconnector._detect_charset
dbapi_connr   Sequence[IsolationLevel]c                 C  r   )N)ZSERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READ
AUTOCOMMITr*   r.   r   r*   r*   r+   get_isolation_level_values   s   z8MySQLDialect_mariadbconnector.get_isolation_level_valuesc                 C  s
   t |jS r?   )ri   
autocommitr   r*   r*   r+   detect_autocommit_setting   s   
z7MySQLDialect_mariadbconnector.detect_autocommit_settingdbapi_connectionlevelr   c                   s*   |dkr	d|_ d S d|_ t || d S )Nr   TF)r   r@   set_isolation_level)r.   r   r   rD   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Zliteral_executeexecuter   text
bindparams	bindparamr.   rf   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.   rf   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_twophase2  s   
z0MySQLDialect_mariadbconnector.do_commit_twophase)r!   rN   )rZ   r   r!   r>   )r!   r   )rd   re   rf   rg   r9   rh   r!   ri   )rm   r   r!   r   )r~   re   r!   rF   )rf   r   r!   r-   )r   r   r!   r   )r   r   r!   ri   )r   r   r   r   r!   r>   )rf   r   r   r   r!   r>   )TF)
rf   r   r   r   r   ri   r   ri   r!   r>   ))r0   r1   r2   ZdriverZsupports_statement_cacheZsupports_unicode_statementsencodingZconvert_unicoderz   Zsupports_sane_multi_rowcountZsupports_native_decimalZdefault_paramstyler3   Zexecution_ctx_clsrJ   Zstatement_compilerZsupports_server_side_cursorsr   Zupdate_copyr   Zcolspecsr   ZUuidr   Zmemoized_propertyrY   r]   classmethodrc   rj   r}   r   r   r   r   r   r   r   r   r   rI   r*   r*   rD   r+   rK   {   sH    

'



	
rK   )-__doc__
__future__r   rW   typingr   r   r   r   r   r   uuidr	   r(   baser   r   r    r   r   r   Zengine.baser   Zengine.interfacesr   r   r   r   r   r   r   Z
engine.urlr   Zsql.compilerr   Zsql.type_apir   r^   Z_UUID_RETURNr   r3   rJ   rK   r   r*   r*   r*   r+   <module>   sF    H