
    [h'                        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  G d d          Z G d de          Z G d de	          Z G d de          Z G d d          Z G 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"
    )

    )deque   )MySQLDialect_pymysql   )pool)util)AdaptedConnection)asyncio)await_fallback)
await_onlyc                       e Zd ZdZdZd Zed             Zed             Zed             Z	e	j
        d             Z	ed             Zd	 ZddZd Zd Zd Zd Zd Zd ZddZd Zd
S )AsyncAdapt_aiomysql_cursorF)_adapt_connection_connectionawait__cursor_rowsc                 
   || _         |j        | _        |j        | _        | j                            |j        j                  }|                     |                                          | _        t                      | _	        d S N)
r   r   r   cursordbapiCursor
__aenter__r   r   r   selfadapt_connectionr   s      q/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/dialects/mysql/aiomysql.py__init__z#AsyncAdapt_aiomysql_cursor.__init__7   sl    !1+7&-!(()9)?)FGG {{6#4#4#6#677WW


    c                     | j         j        S r   )r   descriptionr   s    r   r!   z&AsyncAdapt_aiomysql_cursor.descriptionB   s    |''r   c                     | j         j        S r   )r   rowcountr"   s    r   r$   z#AsyncAdapt_aiomysql_cursor.rowcountF   s    |$$r   c                     | j         j        S r   r   	arraysizer"   s    r   r'   z$AsyncAdapt_aiomysql_cursor.arraysizeJ       |%%r   c                     || j         _        d S r   r&   r   values     r   r'   z$AsyncAdapt_aiomysql_cursor.arraysizeN   s    !&r   c                     | j         j        S r   )r   	lastrowidr"   s    r   r-   z$AsyncAdapt_aiomysql_cursor.lastrowidR   r(   r   c                 8    | j                                          d S r   )r   clearr"   s    r   closez AsyncAdapt_aiomysql_cursor.closeV   s     	
r   Nc                 T    |                      |                     ||                    S r   )r   _execute_async)r   	operation
parameterss      r   executez"AsyncAdapt_aiomysql_cursor.execute`   s$    {{4..y*EEFFFr   c                 T    |                      |                     ||                    S r   )r   _executemany_asyncr   r3   seq_of_parameterss      r   executemanyz&AsyncAdapt_aiomysql_cursor.executemanyc   s,    {{##I/@AA
 
 	
r   c                 ,  K   | j         j        4 d {V  | j                            ||           d {V }| j        s1t          | j                                         d {V           | _        |cd d d           d {V  S # 1 d {V swxY w Y   d S r   )r   _execute_mutexr   r5   server_sider   fetchallr   )r   r3   r4   results       r   r2   z)AsyncAdapt_aiomysql_cursor._execute_asynch   s9     )8 		 		 		 		 		 		 		 		<//	:FFFFFFFFF# B
 #)>)>)@)@#@#@#@#@#@#@AA
		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   AB
BBc                    K   | j         j        4 d {V  | j                            ||           d {V cd d d           d {V  S # 1 d {V swxY w Y   d S r   )r   r<   r   r:   r8   s      r   r7   z-AsyncAdapt_aiomysql_cursor._executemany_asynct   s     )8 	P 	P 	P 	P 	P 	P 	P 	P11)=NOOOOOOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   !A		
AAc                     d S r    )r   
inputsizess     r   setinputsizesz(AsyncAdapt_aiomysql_cursor.setinputsizesx   s    r   c              #   `   K   | j         r$| j                                         V  | j         "d S d S r   r   popleftr"   s    r   __iter__z#AsyncAdapt_aiomysql_cursor.__iter__{   sJ      j 	'*$$&&&&& j 	' 	' 	' 	' 	'r   c                 F    | j         r| j                                         S d S r   rF   r"   s    r   fetchonez#AsyncAdapt_aiomysql_cursor.fetchone   s%    : 	:%%'''4r   c           	          || j         }| j        fdt          t          |t	                                        D             S )Nc                 8    g | ]}                                 S rB   )rG   ).0_rrs     r   
<listcomp>z8AsyncAdapt_aiomysql_cursor.fetchmany.<locals>.<listcomp>   s!    @@@

@@@r   )r'   r   rangeminlen)r   sizerO   s     @r   	fetchmanyz$AsyncAdapt_aiomysql_cursor.fetchmany   sH    <>DZ@@@@eCc"gg,>,>&?&?@@@@r   c                 `    t          | j                  }| j                                         |S r   )listr   r/   )r   retvals     r   r>   z#AsyncAdapt_aiomysql_cursor.fetchall   s*    dj!!
r   r   )__name__
__module____qualname__r=   	__slots__r   propertyr!   r$   r'   setterr-   r0   r5   r:   r2   r7   rD   rH   rJ   rU   r>   rB   r   r   r   r   +   sg        KI	 	 	 ( ( X( % % X% & & X& ' ' ' & & X&  G G G G
 
 


 
 
P P P  ' ' '  A A A A    r   r   c                   6    e Zd ZdZdZd Zd Zd Zd	dZd Z	dS )
AsyncAdapt_aiomysql_ss_cursorrB   Tc                     || _         |j        | _        |j        | _        | j                            |j        j                  }|                     |                                          | _        d S r   )r   r   r   r   r   SSCursorr   r   r   s      r   r   z&AsyncAdapt_aiomysql_ss_cursor.__init__   s_    !1+7&-!(()9)?)HII{{6#4#4#6#677r   c                 ~    | j         5|                     | j                                                    d | _         d S d S r   )r   r   r0   r"   s    r   r0   z#AsyncAdapt_aiomysql_ss_cursor.close   s=    <#KK**,,---DLLL $#r   c                 Z    |                      | j                                                  S r   )r   r   rJ   r"   s    r   rJ   z&AsyncAdapt_aiomysql_ss_cursor.fetchone   "    {{4<0022333r   Nc                 ^    |                      | j                            |                    S )N)rT   )r   r   rU   )r   rT   s     r   rU   z'AsyncAdapt_aiomysql_ss_cursor.fetchmany   s'    {{4<11t1<<===r   c                 Z    |                      | j                                                  S r   )r   r   r>   r"   s    r   r>   z&AsyncAdapt_aiomysql_ss_cursor.fetchall   re   r   r   )
rY   rZ   r[   r\   r=   r   r0   rJ   rU   r>   rB   r   r   r`   r`      sp         IK8 8 8     
4 4 4> > > >4 4 4 4 4r   r`   c                   b    e Zd Z ee          ZdZd Zd Zd Z	d Z
ddZd Zd	 Zd
 ZddZdS )AsyncAdapt_aiomysql_connection)r   r<   c                 R    || _         || _        t          j                    | _        d S r   )r   r   r
   Lockr<   )r   r   
connections      r   r   z'AsyncAdapt_aiomysql_connection.__init__   s%    
%%lnnr   c                 \    |                      | j                            |                    S r   )r   r   ping)r   	reconnects     r   rn   z#AsyncAdapt_aiomysql_connection.ping   s%    {{4+00;;<<<r   c                 4    | j                                         S r   )r   character_set_namer"   s    r   rq   z1AsyncAdapt_aiomysql_connection.character_set_name   s    22444r   c                 `    |                      | j                            |                     d S r   )r   r   
autocommitr*   s     r   rs   z)AsyncAdapt_aiomysql_connection.autocommit   s+    D$//6677777r   Fc                 B    |rt          |           S t          |           S r   )r`   r   )r   r=   s     r   r   z%AsyncAdapt_aiomysql_connection.cursor   s&     	40666-d333r   c                 ^    |                      | j                                                   d S r   )r   r   rollbackr"   s    r   rv   z'AsyncAdapt_aiomysql_connection.rollback   s)    D$--//00000r   c                 ^    |                      | j                                                   d S r   )r   r   commitr"   s    r   rx   z%AsyncAdapt_aiomysql_connection.commit   s)    D$++--.....r   c                 8    | j                                          d S r   )r   r0   r"   s    r   	terminatez(AsyncAdapt_aiomysql_connection.terminate   s         r   returnNc                 ^    |                      | j                                                   d S r   )r   r   ensure_closedr"   s    r   r0   z$AsyncAdapt_aiomysql_connection.close   s)    D$224455555r   )Fr{   N)rY   rZ   r[   staticmethodr   r   r\   r   rn   rq   rs   r   rv   rx   rz   r0   rB   r   r   ri   ri      s         \*%%F+I- - -
= = =5 5 58 8 84 4 4 41 1 1/ / /! ! !6 6 6 6 6 6r   ri   c                   (    e Zd ZdZ ee          ZdS )&AsyncAdaptFallback_aiomysql_connectionrB   N)rY   rZ   r[   r\   r   r   r   rB   r   r   r   r      s$         I\.))FFFr   r   c                   &    e Zd Zd Zd Zd Zd ZdS )AsyncAdapt_aiomysql_dbapic                     || _         || _        d| _        |                                  |                                 \  | _        | _        d S )Nformat)aiomysqlpymysql
paramstyle_init_dbapi_attributes_init_cursors_subclassesr   rb   )r   r   r   s      r   r   z"AsyncAdapt_aiomysql_dbapi.__init__   sG     "##%%%%)%B%B%D%D"T]]]r   c           	          dD ]&}t          | |t          | j        |                     'dD ]&}t          | |t          | j        |                     'd S )N)WarningErrorInterfaceError	DataErrorDatabaseErrorOperationalErrorr   IntegrityErrorProgrammingErrorInternalErrorNotSupportedError)NUMBERSTRINGDATETIMEBINARY	TIMESTAMPBinary)setattrgetattrr   r   )r   names     r   r   z0AsyncAdapt_aiomysql_dbapi._init_dbapi_attributes   st    
 	> 	>D D$t < <====
 	= 	=D D$d ; ;<<<<	= 	=r   c           
      "   |                     dd          }|                     d| j        j                  }t          j        |          r#t          | t           ||i |                    S t          | t           ||i |                    S )Nasync_fallbackFasync_creator_fn)	popr   connectr   asboolr   r   ri   r   )r   argkwr   
creator_fns        r   r   z!AsyncAdapt_aiomysql_dbapi.connect  s     0%88VV.0EFF
;~&& 		9zz35"5566  
 2::s1b1122  r   c                 j     G d d| j         j                  } G d d| j         j                  }||fS )Nc                       e Zd Zd ZdS )BAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursorc                 
   K   d S r   rB   r   conns     r   _show_warningszQAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursor._show_warnings        r   NrY   rZ   r[   r   rB   r   r   r   r     #            r   r   c                       e Zd Zd ZdS )DAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursorc                 
   K   d S r   rB   r   s     r   r   zSAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursor._show_warnings  r   r   Nr   rB   r   r   rb   r     r   r   rb   )r   r   rb   )r   r   rb   s      r   r   z2AsyncAdapt_aiomysql_dbapi._init_cursors_subclasses  sm    	 	 	 	 	T]) 	 	 		 	 	 	 	t}- 	 	 	 xr   N)rY   rZ   r[   r   r   r   r   rB   r   r   r   r      sS        E E E= = =4  
  
  
  
  
 r   r   c                        e Zd ZdZdZdZeZdZdZ	e
d             Ze
d             ZddZ fdZ fd	Zd
 Zd Z xZS )MySQLDialect_aiomysqlr   Tc                 V    t          t          d          t          d                    S )Nr   r   )r   
__import__)clss    r   import_dbapiz"MySQLDialect_aiomysql.import_dbapi(  s)    (z""Jy$9$9
 
 	
r   c                     |j                             dd          }t          j        |          rt          j        S t          j        S )Nr   F)querygetr   r   r   FallbackAsyncAdaptedQueuePoolAsyncAdaptedQueuePool)r   urlr   s      r   get_pool_classz$MySQLDialect_aiomysql.get_pool_class.  s<    '7??;~&& 	.55--r   r{   Nc                 .    |                                  d S r   )rz   )r   dbapi_connections     r   do_terminatez"MySQLDialect_aiomysql.do_terminate7  s    ""$$$$$r   c                 h    t                                          |t          dd                    S )Nuserdb)usernamedatabase)_translate_args)supercreate_connect_argsdict)r   r   	__class__s     r   r   z)MySQLDialect_aiomysql.create_connect_args:  s6    ww**v!E!E!E + 
 
 	
r   c                     t                                          |||          rdS t          |                                          }d|v S )NTznot connected)r   is_disconnectstrlower)r   erl   r   str_er   s        r   r   z#MySQLDialect_aiomysql.is_disconnect?  sD    77  J77 	,4FFLLNNE"e++r   c                     ddl m} |j        S )Nr   )CLIENT)pymysql.constantsr   
FOUND_ROWS)r   r   s     r   _found_rows_client_flagz-MySQLDialect_aiomysql._found_rows_client_flagF  s    ,,,,,,  r   c                     |j         S r   )r   )r   rl   s     r   get_driver_connectionz+MySQLDialect_aiomysql.get_driver_connectionK  s    %%r   r~   )rY   rZ   r[   driversupports_statement_cachesupports_server_side_cursorsr`   	_sscursoris_asynchas_terminateclassmethodr   r   r   r   r   r   r   __classcell__)r   s   @r   r   r     s        F##' -IHM
 
 [

 . . [.% % % %
 
 
 
 

, , , , ,! ! !
& & & & & & &r   r   N)__doc__collectionsr   r   r    r   r   enginer	   util.concurrencyr
   r   r   r   r`   ri   r   r   r   dialectrB   r   r   <module>r      s   .       ) ) ) ) ) )             ' ' ' ' ' ' ' ' ' ' ' ' . . . . . . * * * * * *d d d d d d d dN4 4 4 4 4$> 4 4 4<%6 %6 %6 %6 %6%6 %6 %6 %6P* * * * *-K * * *;  ;  ;  ;  ;  ;  ;  ; |.& .& .& .& .&0 .& .& .&b  r   