o
    =a#                     @   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	 G d	d
 d
Z
G dd de
ZG dd dZG dd deZG dd d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")

Unicode
-------

Please see :ref:`mysql_unicode` for current recommendations on unicode
handling.


   )MySQLDialect_pymysql   )pool)util)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   selfadapt_connectionr    r   X/var/www/html/gps/gps/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/aiomysql.py__init__5   s   

z#AsyncAdapt_aiomysql_cursor.__init__c                 C      | j jS r   )r   descriptionr   r   r   r   r   @      z&AsyncAdapt_aiomysql_cursor.descriptionc                 C   r   r   )r   rowcountr   r   r   r   r   D   r   z#AsyncAdapt_aiomysql_cursor.rowcountc                 C   r   r   r   	arraysizer   r   r   r   r   H   r   z$AsyncAdapt_aiomysql_cursor.arraysizec                 C   s   || j _d S r   r   r   valuer   r   r   r   L   s   c                 C   r   r   )r   	lastrowidr   r   r   r   r!   P   r   z$AsyncAdapt_aiomysql_cursor.lastrowidc                 C   s   g | j d d < d S r   r   r   r   r   r   closeT   s   z AsyncAdapt_aiomysql_cursor.closeNc                 C      |  | ||S r   )r   _execute_async)r   	operation
parametersr   r   r   execute^      z"AsyncAdapt_aiomysql_cursor.executec                 C   r$   r   )r   _executemany_asyncr   r&   seq_of_parametersr   r   r   executemanya   s   
z&AsyncAdapt_aiomysql_cursor.executemanyc              	      s   | j j4 I d H 3 |d u r| j|I d H }n
| j||I d H }| js0t| j I d H | _|W  d   I d H  S 1 I d H sBw   Y  d S r   )r
   _execute_mutexr   r(   server_sidelistfetchallr   )r   r&   r'   resultr   r   r   r%   f   s   0z)AsyncAdapt_aiomysql_cursor._execute_asyncc              	      sV   | j j4 I d H  | j||I d H W  d   I d H  S 1 I d H s$w   Y  d S r   )r
   r.   r   r-   r+   r   r   r   r*   u   s   0z-AsyncAdapt_aiomysql_cursor._executemany_asyncc                 G   s   d S r   r   )r   
inputsizesr   r   r   setinputsizesy   s   z(AsyncAdapt_aiomysql_cursor.setinputsizesc                 c   s$    | j r| j dV  | j sd S 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 r5   r7   r   r   r   r   fetchone   s   z#AsyncAdapt_aiomysql_cursor.fetchonec                 C   s8   |d u r| j }| jd| }| j|d  | jd d < |S r5   )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   r<   r   r   r   r1      s   z#AsyncAdapt_aiomysql_cursor.fetchallr   )__name__
__module____qualname__r/   	__slots__r   propertyr   r   r   setterr!   r#   r(   r-   r%   r*   r4   r9   r:   r=   r1   r   r   r   r   r	   +   s0    







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aiomysqlSSCursorr   r   r   r   r   r   r      s   z&AsyncAdapt_aiomysql_ss_cursor.__init__c                 C   s(   | j d ur| | j   d | _ d S d S r   )r   r   r#   r   r   r   r   r#      s   

z#AsyncAdapt_aiomysql_ss_cursor.closec                 C      |  | j S r   )r   r   r:   r   r   r   r   r:         z&AsyncAdapt_aiomysql_ss_cursor.fetchoneNc                 C   s   |  | jj|dS )N)r;   )r   r   r=   )r   r;   r   r   r   r=         z'AsyncAdapt_aiomysql_ss_cursor.fetchmanyc                 C   rH   r   )r   r   r1   r   r   r   r   r1      rI   z&AsyncAdapt_aiomysql_ss_cursor.fetchallr   )
r>   r?   r@   rA   r/   r   r#   r:   r=   r1   r   r   r   r   rD      s    
rD   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)rE   r   r.   c                 C   s   || _ || _t | _d S r   )rE   r   r   Lockr.   )r   rE   
connectionr   r   r   r      s   z'AsyncAdapt_aiomysql_connection.__init__c                 C   s   |  | j|S r   )r   r   ping)r   	reconnectr   r   r   rN      r)   z#AsyncAdapt_aiomysql_connection.pingc                 C   s
   | j  S r   )r   character_set_namer   r   r   r   rP      s   
z1AsyncAdapt_aiomysql_connection.character_set_namec                 C   s   |  | j| d S r   )r   r   
autocommitr   r   r   r   rQ      s   z)AsyncAdapt_aiomysql_connection.autocommitFc                 C   s   |rt | S t| S r   )rD   r	   )r   r/   r   r   r   r      s   z%AsyncAdapt_aiomysql_connection.cursorc                 C      |  | j  d S r   )r   r   rollbackr   r   r   r   rS      rJ   z'AsyncAdapt_aiomysql_connection.rollbackc                 C   rR   r   )r   r   commitr   r   r   r   rT      rJ   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)r>   r?   r@   staticmethodr   r   rA   r   rN   rP   rQ   r   rS   rT   r#   r   r   r   r   rK      s    
rK   c                   @   s   e Zd ZdZeeZdS )&AsyncAdaptFallback_aiomysql_connectionr   N)r>   r?   r@   rA   rU   r   r   r   r   r   r   rV      s    rV   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)rF   pymysql
paramstyle_init_dbapi_attributes)r   rF   rY   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InterfaceError	DataErrorDatabaseErrorOperationalErrorr^   IntegrityErrorProgrammingErrorInternalErrorNotSupportedError)NUMBERSTRINGDATETIMEBINARY	TIMESTAMPBinary)setattrgetattrrF   rY   )r   namer   r   r   r[      s
   z0AsyncAdapt_aiomysql_dbapi._init_dbapi_attributesc                 O   sN   | dd}t|rt| t| jj|i |S t| t| jj|i |S Nasync_fallbackF)	r8   r   asboolrV   r   rF   connectrK   r   )r   argkwrp   r   r   r   rr      s   
z!AsyncAdapt_aiomysql_dbapi.connectN)r>   r?   r@   r   r[   rr   r   r   r   r   rW      s    rW   c                       s\   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  ZS )MySQLDialect_aiomysqlrF   Tc                 C   s   t tdtdS )NrF   rY   )rW   
__import__)clsr   r   r   rE     s   zMySQLDialect_aiomysql.dbapic                 C   s$   |j dd}t|rtjS tjS ro   )querygetr   rq   r   FallbackAsyncAdaptedQueuePoolAsyncAdaptedQueuePool)rw   urlrp   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)usernamedatabase)_translate_args)superru   create_connect_argsdict)r   r|   	__class__r   r   r   $  s   
z)MySQLDialect_aiomysql.create_connect_argsc                    s,   t t| |||rdS t| }d|v S )NTznot connected)r   ru   is_disconnectstrlower)r   erM   r   str_er   r   r   r   )  s   
z#MySQLDialect_aiomysql.is_disconnectc                 C   s   ddl m} |jS )Nr6   )CLIENT)pymysql.constantsr   
FOUND_ROWS)r   r   r   r   r   _found_rows_client_flag2  s   z-MySQLDialect_aiomysql._found_rows_client_flag)r>   r?   r@   driversupports_statement_cachesupports_server_side_cursorsrD   	_sscursoris_asyncclassmethodrE   r}   r   r   r   __classcell__r   r   r   r   ru     s    

		ru   N)__doc__rY   r    r   r   util.concurrencyr   r   r   r	   rD   rK   rV   rW   ru   dialectr   r   r   r   <module>   s   i#0-