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 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+asyncmy
    :name: asyncmy
    :dbapi: asyncmy
    :connectstring: mysql+asyncmy://user:password@host:port/dbname[?key=value&key=value...]
    :url: https://github.com/long2ice/asyncmy

Using a special asyncio mediation layer, the asyncmy 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+asyncmy://user:pass@hostname/dbname?charset=utf8mb4"
    )

    )annotations)
ModuleType)Any)NoReturn)Optional)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                   @  s   e Zd ZdZdS )AsyncAdapt_asyncmy_cursor N)__name__
__module____qualname__	__slots__r   r   r   h/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/asyncmy.pyr   <   s    r   c                   @  s   e Zd ZdZd	ddZdS )
AsyncAdapt_asyncmy_ss_cursorr   
connectionr   returnr   c                 C  s   | | jjjjjS N)cursorZ_adapt_connectiondbapiasyncmyZcursorsZSSCursorselfr%   r   r   r#   _make_new_cursorE   s   z-AsyncAdapt_asyncmy_ss_cursor._make_new_cursorN)r%   r   r&   r   )r   r    r!   r"   r-   r   r   r   r#   r$   @   s    r$   c                   @  sr   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!ddZd!ddZdS )%AsyncAdapt_asyncmy_connectionr   error	Exceptionr&   r   c                 C  s   t |tr| jd|)Nz7network operation failed due to asyncmy attribute error)
isinstanceAttributeErrorr)   InternalErrorr,   r/   r   r   r#   _handle_exceptionU   s
   
z/AsyncAdapt_asyncmy_connection._handle_exception	reconnectboolNonec                 C  s   |rJ |  |  S r'   )await__do_ping)r,   r6   r   r   r#   ping]   s   z"AsyncAdapt_asyncmy_connection.pingc              
     s   z+| j 4 I d H  | jdI d H  W d   I d H  W d S 1 I d H s%w   Y  W d S  tyD } z| | W Y d }~d S d }~ww )NF)Z_execute_mutex_connectionr;   r0   r5   r4   r   r   r#   r:   a   s   2z&AsyncAdapt_asyncmy_connection._do_pingOptional[str]c                 C  
   | j  S r'   )r<   character_set_namer,   r   r   r#   r?   h      
z0AsyncAdapt_asyncmy_connection.character_set_namevaluer   c                 C  s   |  | j| d S r'   )r9   r<   
autocommit)r,   rB   r   r   r#   rC   k   s   z(AsyncAdapt_asyncmy_connection.autocommitc                 C  r>   r'   )r<   get_autocommitr@   r   r   r#   rD   n   rA   z,AsyncAdapt_asyncmy_connection.get_autocommitc                 C  s   |  | j  d S r'   )r9   r<   ensure_closedr@   r   r   r#   closeq   s   z#AsyncAdapt_asyncmy_connection.closec                   s   | j  I d H  d S r'   )r<   rE   r@   r   r   r#   _terminate_graceful_closet   s   z7AsyncAdapt_asyncmy_connection._terminate_graceful_closec                 C  s   | j   d S r'   )r<   rF   r@   r   r   r#   _terminate_force_closew   s   z4AsyncAdapt_asyncmy_connection._terminate_force_closeN)r/   r0   r&   r   )r6   r7   r&   r8   r&   r8   )r&   r=   )rB   r   r&   r8   )r&   r7   )r   r    r!   r"   r   Z_cursor_clsr$   Z_ss_cursor_clsr5   r;   r:   r?   rC   rD   rF   rG   rH   r   r   r   r#   r.   M   s    







r.   c                   @  s   e Zd ZdZeeZdS )%AsyncAdaptFallback_asyncmy_connectionr   N)r   r    r!   r"   staticmethodr   r9   r   r   r   r#   rJ   |   s    rJ   c                   @  sd   e Zd ZdddZdddZed	Zed
ZedZ	edZ
edZeeZdddZdS )AsyncAdapt_asyncmy_dbapir*   r   c                 C  s   || _ d| _|   d S )Nformat)r*   Z
paramstyle_init_dbapi_attributes)r,   r*   r   r   r#   __init__   s   z!AsyncAdapt_asyncmy_dbapi.__init__r&   r8   c                 C  s$   dD ]}t | |t| jj| qd S )N)WarningErrorInterfaceErrorZ	DataErrorZDatabaseErrorZOperationalErrorrR   ZIntegrityErrorZProgrammingErrorr3   ZNotSupportedError)setattrgetattrr*   errors)r,   namer   r   r#   rN      s   z/AsyncAdapt_asyncmy_dbapi._init_dbapi_attributesSTRINGNUMBERBINARYDATETIME	TIMESTAMPargr   kwr.   c                 O  sV   | dd}| d| jj}t|rt| t||i |S t| t||i |S )Nasync_fallbackFZasync_creator_fn)	popr*   connectr   asboolrJ   r   r.   r   )r,   r\   r]   r^   Z
creator_fnr   r   r#   r`      s   
z AsyncAdapt_asyncmy_dbapi.connectN)r*   r   rI   )r\   r   r]   r   r&   r.   )r   r    r!   rO   rN   r   symbolrW   rX   rY   rZ   r[   rK   bytesBinaryr`   r   r   r   r#   rL      s    






rL   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& fddZd' fddZd(ddZd)d!d"Z  ZS )*MySQLDialect_asyncmyr*   Tr&   r   c                 C  s   t tdS )Nr*   )rL   
__import__)clsr   r   r#   import_dbapi   s   z!MySQLDialect_asyncmy.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)rg   ri   r^   r   r   r#   get_pool_class   s   
z#MySQLDialect_asyncmy.get_pool_classdbapi_connectionr   r8   c                 C  s   |   d S r'   )	terminate)r,   rn   r   r   r#   do_terminate   s   z!MySQLDialect_asyncmy.do_terminater   c                   s   t  j|tddddS )Nuserdb)usernameZdatabase)Z_translate_args)supercreate_connect_argsdict)r,   ri   	__class__r   r#   ru      s   z(MySQLDialect_asyncmy.create_connect_argseDBAPIModule.Errorr%   7Optional[Union[PoolProxiedConnection, DBAPIConnection]]r(   Optional[DBAPICursor]r7   c                   s0   t  |||r
dS t| }d|v pd|v S )NTznot connectedznetwork operation failed)rt   is_disconnectstrlower)r,   ry   r%   r(   Zstr_erw   r   r#   r}      s
   z"MySQLDialect_asyncmy.is_disconnectintc                 C  s   ddl m} |jS )Nr   )CLIENT)Zasyncmy.constantsr   Z
FOUND_ROWS)r,   r   r   r   r#   _found_rows_client_flag   s   z,MySQLDialect_asyncmy._found_rows_client_flagr   c                 C  s   |j S r'   )r<   r+   r   r   r#   get_driver_connection   s   z*MySQLDialect_asyncmy.get_driver_connection)r&   r   )ri   r   r&   rj   )rn   r   r&   r8   )ri   r   r&   r   )ry   rz   r%   r{   r(   r|   r&   r7   )r&   r   )r%   r   r&   r   )r   r    r!   ZdriverZsupports_statement_cacheZsupports_server_side_cursorsr$   Z	_sscursoris_asyncZhas_terminateclassmethodrh   rm   rp   ru   r}   r   r   __classcell__r   r   rw   r#   re      s     

re   N)*__doc__
__future__r   typesr   typingr   r   r   r   r   Zpymysqlr
    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   r$   r.   rJ   rL   re   dialectr   r   r   r#   <module>   sL   

/-8