U
    ÌZj‰%  ã                   @   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 G d
d„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZG dd„ deƒZeZdS )uV  
.. 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

.. warning:: The aiomysql dialect is not currently tested as part of
   SQLAlchemyâ€™s continuous integration. As of September, 2021 the driver
   appears to be unmaintained and no longer functions for Python version 3.10,
   and additionally depends on a significantly outdated version of PyMySQL.
   Please refer to the :ref:`asyncmy` dialect for current MySQL/MariaDB asyncio
   functionality.

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")


é   )ÚMySQLDialect_pymysqlé   )Úpool)Úutil)ÚAdaptedConnection)Úasyncio)Úawait_fallback)Ú
await_onlyc                   @   s®   e Zd ZdZdZdd„ Zedd„ ƒZedd„ ƒZed	d
„ ƒZ	e	j
dd
„ ƒZ	edd„ ƒZdd„ Zd#dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd$dd „Zd!d"„ ZdS )%ÚAsyncAdapt_aiomysql_cursorF)Ú_adapt_connectionÚ_connectionÚawait_Ú_cursorÚ_rowsc                 C   s:   || _ |j| _|j| _| j ¡ }|  | ¡ ¡| _g | _d S ©N)r   r   r   ÚcursorÚ
__aenter__r   r   ©ÚselfZadapt_connectionr   © r   úe/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/aiomysql.pyÚ__init__7   s    
z#AsyncAdapt_aiomysql_cursor.__init__c                 C   s   | j jS r   )r   Údescription©r   r   r   r   r   B   s    z&AsyncAdapt_aiomysql_cursor.descriptionc                 C   s   | j jS r   )r   Úrowcountr   r   r   r   r   F   s    z#AsyncAdapt_aiomysql_cursor.rowcountc                 C   s   | j jS r   ©r   Ú	arraysizer   r   r   r   r   J   s    z$AsyncAdapt_aiomysql_cursor.arraysizec                 C   s   || j _d S r   r   ©r   Úvaluer   r   r   r   N   s    c                 C   s   | j jS r   )r   Ú	lastrowidr   r   r   r   r   R   s    z$AsyncAdapt_aiomysql_cursor.lastrowidc                 C   s   g | j d d …< d S r   ©r   r   r   r   r   ÚcloseV   s    z AsyncAdapt_aiomysql_cursor.closeNc                 C   s   |   |  ||¡¡S r   )r   Ú_execute_async)r   Ú	operationÚ
parametersr   r   r   Úexecute`   s    z"AsyncAdapt_aiomysql_cursor.executec                 C   s   |   |  ||¡¡S r   )r   Ú_executemany_async©r   r#   Zseq_of_parametersr   r   r   Úexecutemanyc   s    
ÿz&AsyncAdapt_aiomysql_cursor.executemanyc                 Ã   s„   | j j4 I d H šd |d kr.| j |¡I d H }n| j ||¡I d H }| js^t| j ¡ I d H ƒ| _|W  5 Q I d H R £ S Q I d H R X d S r   )r   Ú_execute_mutexr   r%   Úserver_sideÚlistÚfetchallr   )r   r#   r$   Úresultr   r   r   r"   h   s    z)AsyncAdapt_aiomysql_cursor._execute_asyncc                 Ã   sH   | j j4 I d H š( | j ||¡I d H W  5 Q I d H R £ S Q I d H R X d S r   )r   r)   r   r(   r'   r   r   r   r&   w   s    z-AsyncAdapt_aiomysql_cursor._executemany_asyncc                 G   s   d S r   r   )r   Z
inputsizesr   r   r   Úsetinputsizes{   s    z(AsyncAdapt_aiomysql_cursor.setinputsizesc                 c   s   | j r| j  d¡V  q d S ©Né    ©r   Úpopr   r   r   r   Ú__iter__~   s    z#AsyncAdapt_aiomysql_cursor.__iter__c                 C   s   | j r| j  d¡S d S d S r/   r1   r   r   r   r   Úfetchone‚   s    z#AsyncAdapt_aiomysql_cursor.fetchonec                 C   s8   |d kr| j }| jd|… }| j|d … | jd d …< |S r/   )r   r   )r   ÚsizeÚretvalr   r   r   Ú	fetchmanyˆ   s
    z$AsyncAdapt_aiomysql_cursor.fetchmanyc                 C   s    | j d d … }g | j d d …< |S r   r    )r   r6   r   r   r   r,   �   s    z#AsyncAdapt_aiomysql_cursor.fetchall)N)N)Ú__name__Ú
__module__Ú__qualname__r*   Ú	__slots__r   Úpropertyr   r   r   Úsetterr   r!   r%   r(   r"   r&   r.   r3   r4   r7   r,   r   r   r   r   r
   -   s.   







r
   c                   @   s>   e Zd ZdZdZdd„ Zdd„ Zdd„ Zdd
d„Zdd„ Z	d	S )ÚAsyncAdapt_aiomysql_ss_cursorr   Tc                 C   s<   || _ |j| _|j| _| j |jjj¡}|  | ¡ ¡| _d S r   )	r   r   r   r   ÚdbapiÚaiomysqlZSSCursorr   r   r   r   r   r   r   š   s    ÿz&AsyncAdapt_aiomysql_ss_cursor.__init__c                 C   s$   | j d k	r |  | j  ¡ ¡ d | _ d S r   )r   r   r!   r   r   r   r   r!   ¥   s    
z#AsyncAdapt_aiomysql_ss_cursor.closec                 C   s   |   | j ¡ ¡S r   )r   r   r4   r   r   r   r   r4   ª   s    z&AsyncAdapt_aiomysql_ss_cursor.fetchoneNc                 C   s   |   | jj|d�¡S )N)r5   )r   r   r7   )r   r5   r   r   r   r7   ­   s    z'AsyncAdapt_aiomysql_ss_cursor.fetchmanyc                 C   s   |   | j ¡ ¡S r   )r   r   r,   r   r   r   r   r,   °   s    z&AsyncAdapt_aiomysql_ss_cursor.fetchall)N)
r8   r9   r:   r;   r*   r   r!   r4   r7   r,   r   r   r   r   r>   –   s   
r>   c                   @   sZ   e Zd ZeeƒZdZdd„ Zdd„ Zdd„ Z	dd	„ Z
ddd„Zdd„ Zdd„ Zdd„ ZdS )ÚAsyncAdapt_aiomysql_connection)r?   r   r)   c                 C   s   || _ || _t ¡ | _d S r   )r?   r   r   ÚLockr)   )r   r?   Ú
connectionr   r   r   r   ¸   s    z'AsyncAdapt_aiomysql_connection.__init__c                 C   s   |   | j |¡¡S r   )r   r   Úping)r   Z	reconnectr   r   r   rD   ½   s    z#AsyncAdapt_aiomysql_connection.pingc                 C   s
   | j  ¡ S r   )r   Úcharacter_set_namer   r   r   r   rE   À   s    z1AsyncAdapt_aiomysql_connection.character_set_namec                 C   s   |   | j |¡¡ d S r   )r   r   Ú
autocommitr   r   r   r   rF   Ã   s    z)AsyncAdapt_aiomysql_connection.autocommitFc                 C   s   |rt | ƒS t| ƒS d S r   )r>   r
   )r   r*   r   r   r   r   Æ   s    z%AsyncAdapt_aiomysql_connection.cursorc                 C   s   |   | j ¡ ¡ d S r   )r   r   Úrollbackr   r   r   r   rG   Ì   s    z'AsyncAdapt_aiomysql_connection.rollbackc                 C   s   |   | j ¡ ¡ d S r   )r   r   Úcommitr   r   r   r   rH   Ï   s    z%AsyncAdapt_aiomysql_connection.commitc                 C   s   | j  ¡  d S r   )r   r!   r   r   r   r   r!   Ò   s    z$AsyncAdapt_aiomysql_connection.closeN)F)r8   r9   r:   Ústaticmethodr	   r   r;   r   rD   rE   rF   r   rG   rH   r!   r   r   r   r   rA   ´   s   
rA   c                   @   s   e Zd ZdZeeƒZdS )Ú&AsyncAdaptFallback_aiomysql_connectionr   N)r8   r9   r:   r;   rI   r   r   r   r   r   r   rJ   ×   s   rJ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAsyncAdapt_aiomysql_dbapic                 C   s   || _ || _d| _|  ¡  d S )NÚformat)r@   ÚpymysqlZ
paramstyleÚ_init_dbapi_attributes)r   r@   rM   r   r   r   r   Þ   s    z"AsyncAdapt_aiomysql_dbapi.__init__c                 C   s@   dD ]}t | |t| j|ƒƒ qdD ]}t | |t| j|ƒƒ q"d S )N)ÚWarningÚErrorÚInterfaceErrorZ	DataErrorZDatabaseErrorZOperationalErrorrQ   ZIntegrityErrorZProgrammingErrorZInternalErrorZNotSupportedError)ÚNUMBERÚSTRINGZDATETIMEZBINARYÚ	TIMESTAMPÚBinary)ÚsetattrÚgetattrr@   rM   )r   Únamer   r   r   rN   ä   s    z0AsyncAdapt_aiomysql_dbapi._init_dbapi_attributesc                 O   sJ   |  dd¡}t |¡r.t| t| jj||ŽƒƒS t| t| jj||ŽƒƒS d S ©NÚasync_fallbackF)	r2   r   ÚasboolrJ   r   r@   ÚconnectrA   r	   )r   ÚargÚkwrZ   r   r   r   r\   þ   s    
þþz!AsyncAdapt_aiomysql_dbapi.connectN)r8   r9   r:   r   rN   r\   r   r   r   r   rK   Ý   s   rK   c                       sd   e Zd ZdZdZdZeZdZe	dd„ ƒZ
e	dd„ ƒZ‡ fdd„Z‡ fd	d
„Zdd„ Zdd„ Z‡  ZS )ÚMySQLDialect_aiomysqlr@   Tc                 C   s   t tdƒtdƒƒS )Nr@   rM   )rK   Ú
__import__)Úclsr   r   r   r?     s     ÿzMySQLDialect_aiomysql.dbapic                 C   s(   |j  dd¡}t |¡rtjS tjS d S rY   )ÚqueryÚgetr   r[   r   ZFallbackAsyncAdaptedQueuePoolZAsyncAdaptedQueuePool)ra   ÚurlrZ   r   r   r   Úget_pool_class  s    
z$MySQLDialect_aiomysql.get_pool_classc                    s   t t| ƒj|tddd�d�S )NÚuserÚdb)ÚusernameZdatabase)Z_translate_args)Úsuperr_   Úcreate_connect_argsÚdict)r   rd   ©Ú	__class__r   r   rj   &  s    
 
ÿz)MySQLDialect_aiomysql.create_connect_argsc                    s0   t t| ƒ |||¡rdS t|ƒ ¡ }d|kS d S )NTznot connected)ri   r_   Úis_disconnectÚstrÚlower)r   ÚerC   r   Zstr_erl   r   r   rn   +  s    
  ÿz#MySQLDialect_aiomysql.is_disconnectc                 C   s   ddl m} |jS )Nr0   )ÚCLIENT)Zpymysql.constantsrr   Z
FOUND_ROWS)r   rr   r   r   r   Ú_found_rows_client_flag4  s    z-MySQLDialect_aiomysql._found_rows_client_flagc                 C   s   |j S r   )r   )r   rC   r   r   r   Úget_driver_connection9  s    z+MySQLDialect_aiomysql.get_driver_connection)r8   r9   r:   ZdriverZsupports_statement_cacheZsupports_server_side_cursorsr>   Z	_sscursorZis_asyncÚclassmethodr?   re   rj   rn   rs   rt   Ú__classcell__r   r   rl   r   r_     s   

		r_   N)Ú__doc__rM   r   Ú r   r   Zenginer   Zutil.concurrencyr   r   r	   r
   r>   rA   rJ   rK   r_   Údialectr   r   r   r   Ú<module>   s   i#00