o
    fqi                     @  s  d 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 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# G dd deZ$G d d! d!ee$Z%G d"d# d#ee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+aiomysql
    :name: aiomysql
    :dbapi: aiomysql
    :connectstring: mysql+aiomysql://user:password@host:port/dbname[?key=value&key=value...]
    :url: https://github.com/aio-libs/aiomysql

The aiomysql dialect is SQLAlchemy's second Python asyncio dialect.

Using a special asyncio mediation layer, the aiomysql dialect is usable
as the backend for the :ref:`SQLAlchemy asyncio <asyncio_toplevel>`
extension package.

This dialect should normally be used only with the
:func:`_asyncio.create_async_engine` engine creation function::

    from sqlalchemy.ext.asyncio import create_async_engine

    engine = create_async_engine(
        "mysql+aiomysql://user:pass@hostname/dbname?charset=utf8mb4"
    )

    )annotations)
ModuleType)Any)Dict)Optional)Tuple)TYPE_CHECKING)Union   )MySQLDialect_pymysql   )pool)util)AsyncAdapt_dbapi_connection)AsyncAdapt_dbapi_cursor)AsyncAdapt_dbapi_module)AsyncAdapt_dbapi_ss_cursor)AsyncAdapt_terminate)await_fallback)
await_only)AsyncIODBAPIConnection)AsyncIODBAPICursor)ConnectArgsType)DBAPIConnection)DBAPICursor)DBAPIModule)PoolProxiedConnection)URLc                   @     e Zd ZdZd	ddZdS )
AsyncAdapt_aiomysql_cursor 
connectionr   returnr   c                 C  s   | | jjjS N)cursor_adapt_connectiondbapiCursorselfr!   r    r    i/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/aiomysql.py_make_new_cursorC   s   z+AsyncAdapt_aiomysql_cursor._make_new_cursorNr!   r   r"   r   __name__
__module____qualname__	__slots__r+   r    r    r    r*   r   @   s    r   c                   @  r   )
AsyncAdapt_aiomysql_ss_cursorr    r!   r   r"   r   c                 C  s   | | jjjjjS r#   )r$   r%   r&   aiomysqlZcursorsSSCursorr(   r    r    r*   r+   N   s   z.AsyncAdapt_aiomysql_ss_cursor._make_new_cursorNr,   r-   r    r    r    r*   r2   I   s    r2   c                   @  s^   e Zd ZdZeZeZdddZdd	d
Z	dddZ
dddZdddZdddZdddZdS )AsyncAdapt_aiomysql_connectionr    	reconnectboolr"   Nonec                 C  s   |rJ |  | j| d S r#   )await__connectionping)r)   r6   r    r    r*   r;   ^   s   z#AsyncAdapt_aiomysql_connection.pingOptional[str]c                 C  
   | j  S r#   )r:   character_set_namer)   r    r    r*   r>   b      
z1AsyncAdapt_aiomysql_connection.character_set_namevaluer   c                 C  s   |  | j| d S r#   )r9   r:   
autocommit)r)   rA   r    r    r*   rB   e   s   z)AsyncAdapt_aiomysql_connection.autocommitc                 C  r=   r#   )r:   get_autocommitr?   r    r    r*   rC   h   r@   z-AsyncAdapt_aiomysql_connection.get_autocommitc                 C  s   |  | j  d S r#   )r9   r:   ensure_closedr?   r    r    r*   closek   s   z$AsyncAdapt_aiomysql_connection.closec                   s   | j  I d H  d S r#   )r:   rD   r?   r    r    r*   _terminate_graceful_closen   s   z8AsyncAdapt_aiomysql_connection._terminate_graceful_closec                 C  s   | j   d S r#   )r:   rE   r?   r    r    r*   _terminate_force_closeq   s   z5AsyncAdapt_aiomysql_connection._terminate_force_closeN)r6   r7   r"   r8   )r"   r<   )rA   r   r"   r8   )r"   r7   r"   r8   )r.   r/   r0   r1   r   Z_cursor_clsr2   Z_ss_cursor_clsr;   r>   rB   rC   rE   rF   rG   r    r    r    r*   r5   V   s    





r5   c                   @  s   e Zd ZdZeeZdS )&AsyncAdaptFallback_aiomysql_connectionr    N)r.   r/   r0   r1   staticmethodr   r9   r    r    r    r*   rI   v   s    rI   c                   @  s4   e Zd ZdddZddd	ZdddZdddZdS )AsyncAdapt_aiomysql_dbapir3   r   pymysqlc                 C  s.   || _ || _d| _|   |  \| _| _d S )Nformat)r3   rL   Z
paramstyle_init_dbapi_attributes_init_cursors_subclassesr'   r4   )r)   r3   rL   r    r    r*   __init__}   s
   z"AsyncAdapt_aiomysql_dbapi.__init__r"   r8   c                 C  s@   dD ]}t | |t| j| qdD ]}t | |t| j| qd S )N)WarningErrorInterfaceErrorZ	DataErrorZDatabaseErrorZOperationalErrorrS   ZIntegrityErrorZProgrammingErrorZInternalErrorZNotSupportedError)NUMBERSTRINGZDATETIMEBINARY	TIMESTAMPBinary)setattrgetattrr3   rL   )r)   namer    r    r*   rN      s
   z0AsyncAdapt_aiomysql_dbapi._init_dbapi_attributesargr   kwr5   c                 O  sV   | dd}| d| jj}t|rt| t||i |S t| t||i |S )Nasync_fallbackFZasync_creator_fn)	popr3   connectr   asboolrI   r   r5   r   )r)   r\   r]   r^   Z
creator_fnr    r    r*   r`      s   
z!AsyncAdapt_aiomysql_dbapi.connect-Tuple[AsyncIODBAPICursor, AsyncIODBAPICursor]c                 C  s0   G dd d| j j}G dd d| j j}||fS )Nc                   @     e Zd ZdddZdS )	zBAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursorconnr   r"   r8   c                      d S r#   r    r)   rd   r    r    r*   _show_warnings      zQAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursor._show_warningsNrd   r   r"   r8   r.   r/   r0   rg   r    r    r    r*   r'          r'   c                   @  rc   )	zDAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursorrd   r   r"   r8   c                   re   r#   r    rf   r    r    r*   rg      rh   zSAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursor._show_warningsNri   rj   r    r    r    r*   r4      rk   r4   )r3   r'   r4   )r)   r'   r4   r    r    r*   rO      s   z2AsyncAdapt_aiomysql_dbapi._init_cursors_subclassesN)r3   r   rL   r   rH   )r\   r   r]   r   r"   r5   )r"   rb   )r.   r/   r0   rP   rN   r`   rO   r    r    r    r*   rK   |   s
    


rK   c                      s   e Zd ZdZdZdZeZdZdZ	e
d&ddZe
d'd
dZd(ddZ	d)d* fddZd+ fddZd,d!d"Zd-d$d%Z  ZS ).MySQLDialect_aiomysqlr3   Tr"   rK   c                 C  s   t tdtdS )Nr3   rL   )rK   
__import__)clsr    r    r*   import_dbapi   s   z"MySQLDialect_aiomysql.import_dbapiurlr   typec                 C  s$   |j dd}t|rtjS tjS )Nr^   F)querygetr   ra   r   ZFallbackAsyncAdaptedQueuePoolZAsyncAdaptedQueuePool)rn   rp   r^   r    r    r*   get_pool_class   s   
z$MySQLDialect_aiomysql.get_pool_classdbapi_connectionr   r8   c                 C  s   |   d S r#   )	terminate)r)   ru   r    r    r*   do_terminate   s   z"MySQLDialect_aiomysql.do_terminateN_translate_argsOptional[Dict[str, Any]]r   c                   s   t  j|tddddS )Nuserdb)usernameZdatabase)rx   )supercreate_connect_argsdict)r)   rp   rx   	__class__r    r*   r~      s   z)MySQLDialect_aiomysql.create_connect_argseDBAPIModule.Errorr!   7Optional[Union[PoolProxiedConnection, DBAPIConnection]]r$   Optional[DBAPICursor]r7   c                   s(   t  |||r
dS t| }d|v S )NTznot connected)r}   is_disconnectstrlower)r)   r   r!   r$   Zstr_er   r    r*   r      s   z#MySQLDialect_aiomysql.is_disconnectintc                 C  s   ddl m} |jS )Nr   )CLIENT)Zpymysql.constantsr   Z
FOUND_ROWS)r)   r   r    r    r*   _found_rows_client_flag   s   z-MySQLDialect_aiomysql._found_rows_client_flagr   c                 C  s   |j S r#   )r:   r(   r    r    r*   get_driver_connection   s   z+MySQLDialect_aiomysql.get_driver_connection)r"   rK   )rp   r   r"   rq   )ru   r   r"   r8   r#   )rp   r   rx   ry   r"   r   )r   r   r!   r   r$   r   r"   r7   )r"   r   )r!   r   r"   r   )r.   r/   r0   ZdriverZsupports_statement_cacheZsupports_server_side_cursorsr2   Z	_sscursoris_asyncZhas_terminateclassmethodro   rt   rw   r~   r   r   r   __classcell__r    r    r   r*   rl      s"    

rl   N)+__doc__
__future__r   typesr   typingr   r   r   r   r   r	   rL   r    r   r   Zconnectors.asyncior   r   r   r   r   Zutil.concurrencyr   r   r   r   Zengine.interfacesr   r   r   r   r   Z
engine.urlr   r   r2   r5   rI   rK   rl   dialectr    r    r    r*   <module>   sN   
	
 D: