
    hZ'f&                         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      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y)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")


   )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y
)AsyncAdapt_aiomysql_cursorF)_adapt_connection_connectionawait__cursor_rowsc                 
   || _         |j                  | _        |j                  | _        | j                  j                  |j                  j
                        }| j                  |j                               | _        g | _        y N)	r   r   r   cursordbapiCursor
__aenter__r   r   selfadapt_connectionr   s      q/var/www/html/tulostaulu.pesapallolive.fi/venv/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/aiomysql.py__init__z#AsyncAdapt_aiomysql_cursor.__init__3   sj    !1+77&--!!(()9)?)?)F)FG {{6#4#4#67
    c                 .    | j                   j                  S r   )r   descriptionr   s    r   r   z&AsyncAdapt_aiomysql_cursor.description>   s    ||'''r   c                 .    | j                   j                  S r   )r   rowcountr    s    r   r"   z#AsyncAdapt_aiomysql_cursor.rowcountB   s    ||$$$r   c                 .    | j                   j                  S r   r   	arraysizer    s    r   r%   z$AsyncAdapt_aiomysql_cursor.arraysizeF       ||%%%r   c                 &    || j                   _        y r   r$   r   values     r   r%   z$AsyncAdapt_aiomysql_cursor.arraysizeJ   s    !&r   c                 .    | j                   j                  S r   )r   	lastrowidr    s    r   r+   z$AsyncAdapt_aiomysql_cursor.lastrowidN   r&   r   c                 "    g | j                   d d  y r   r   r    s    r   closez AsyncAdapt_aiomysql_cursor.closeR   s     

1r   Nc                 D    | j                  | j                  ||            S r   )r   _execute_async)r   	operation
parameterss      r   executez"AsyncAdapt_aiomysql_cursor.execute\   s    {{4..y*EFFr   c                 D    | j                  | j                  ||            S r   )r   _executemany_asyncr   r1   seq_of_parameterss      r   executemanyz&AsyncAdapt_aiomysql_cursor.executemany_   s$    {{##I/@A
 	
r   c                 h  K   | j                   j                  4 d {    | j                  j                  ||       d {   }| j                  s0t        | j                  j                          d {         | _        |cd d d       d {    S 7 w7 U7 $7 # 1 d {  7  sw Y   y xY wwr   )r   _execute_mutexr   r3   server_sidelistfetchallr   )r   r1   r2   results       r   r0   z)AsyncAdapt_aiomysql_cursor._execute_asyncd   s     ))88 		 		<<//	:FFF##
 "(=(=(?"?@
		 		 		F #@		 		 		 		sh   B2BB2 BB2B4B
5BB2BB2BBB2B/#B&$B/+B2c                    K   | j                   j                  4 d {    | j                  j                  ||       d {   cd d d       d {    S 7 97 7 	# 1 d {  7  sw Y   y xY wwr   )r   r:   r   r8   r6   s      r   r5   z-AsyncAdapt_aiomysql_cursor._executemany_asyncp   si     ))88 	P 	P11)=NOO	P 	P 	PO	P 	P 	P 	PsV   A2AA2 AAAA2AA2AA2A/#A&$A/+A2c                      y r    )r   
inputsizess     r   setinputsizesz(AsyncAdapt_aiomysql_cursor.setinputsizest   s    r   c              #   z   K   | j                   r+| j                   j                  d       | j                   r*y y wN    r   popr    s    r   __iter__z#AsyncAdapt_aiomysql_cursor.__iter__w   s)     jj**..## jjs   6;;c                 R    | j                   r| j                   j                  d      S y rE   rG   r    s    r   fetchonez#AsyncAdapt_aiomysql_cursor.fetchone{   s    ::::>>!$$r   c                 x    || j                   }| j                  d| }| j                  |d  | j                  d d  |S rE   )r%   r   )r   sizeretvals      r   	fetchmanyz$AsyncAdapt_aiomysql_cursor.fetchmany   s=    <>>DAd#

45)

1r   c                 B    | j                   d d  }g | j                   d d  |S r   r-   )r   rN   s     r   r=   z#AsyncAdapt_aiomysql_cursor.fetchall   s!    A

1r   r   )__name__
__module____qualname__r;   	__slots__r   propertyr   r"   r%   setterr+   r.   r3   r8   r0   r5   rC   rI   rK   rO   r=   rA   r   r   r   r   '   s     KI	 ( ( % % & & ' ' & &G


P$r   r   c                   4    e Zd ZdZdZd Zd Zd Zd	dZd Z	y)
AsyncAdapt_aiomysql_ss_cursorrA   Tc                     || _         |j                  | _        |j                  | _        | j                  j                  |j                  j
                        }| j                  |j                               | _        y r   )r   r   r   r   r   SSCursorr   r   r   s      r   r   z&AsyncAdapt_aiomysql_ss_cursor.__init__   sa    !1+77&--!!(()9)?)?)H)HI{{6#4#4#67r   c                 ~    | j                   1| j                  | j                   j                                d | _         y y r   )r   r   r.   r    s    r   r.   z#AsyncAdapt_aiomysql_ss_cursor.close   s1    <<#KK**,-DL $r   c                 T    | j                  | j                  j                               S r   )r   r   rK   r    s    r   rK   z&AsyncAdapt_aiomysql_ss_cursor.fetchone       {{4<<00233r   Nc                 X    | j                  | j                  j                  |            S )N)rM   )r   r   rO   )r   rM   s     r   rO   z'AsyncAdapt_aiomysql_ss_cursor.fetchmany   s#    {{4<<11t1<==r   c                 T    | j                  | j                  j                               S r   )r   r   r=   r    s    r   r=   z&AsyncAdapt_aiomysql_ss_cursor.fetchall   r]   r   r   )
rQ   rR   rS   rT   r;   r   r.   rK   rO   r=   rA   r   r   rX   rX      s'     IK8 
4>4r   rX   c                   Z    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y
)AsyncAdapt_aiomysql_connection)r   r:   c                 R    || _         || _        t        j                         | _        y r   )r   r   r   Lockr:   )r   r   
connections      r   r   z'AsyncAdapt_aiomysql_connection.__init__   s    
%%llnr   c                 V    | j                  | j                  j                  |            S r   )r   r   ping)r   	reconnects     r   rf   z#AsyncAdapt_aiomysql_connection.ping   s"    {{4++00;<<r   c                 6    | j                   j                         S r   )r   character_set_namer    s    r   ri   z1AsyncAdapt_aiomysql_connection.character_set_name   s    2244r   c                 X    | j                  | j                  j                  |             y r   )r   r   
autocommitr(   s     r   rk   z)AsyncAdapt_aiomysql_connection.autocommit   s    D$$//67r   c                 2    |rt        |       S t        |       S r   )rX   r   )r   r;   s     r   r   z%AsyncAdapt_aiomysql_connection.cursor   s    066-d33r   c                 V    | j                  | j                  j                                y r   )r   r   rollbackr    s    r   rn   z'AsyncAdapt_aiomysql_connection.rollback   s    D$$--/0r   c                 V    | j                  | j                  j                                y r   )r   r   commitr    s    r   rp   z%AsyncAdapt_aiomysql_connection.commit   s    D$$++-.r   c                 8    | j                   j                          y r   )r   r.   r    s    r   	terminatez(AsyncAdapt_aiomysql_connection.terminate   s     r   Nc                 V    | j                  | j                  j                                y r   )r   r   ensure_closedr    s    r   r.   z$AsyncAdapt_aiomysql_connection.close   s    D$$2245r   )FreturnN)rQ   rR   rS   staticmethodr
   r   rT   r   rf   ri   rk   r   rn   rp   rr   r.   rA   r   r   ra   ra      s@     *%F+I-
=5841/!6r   ra   c                        e Zd ZdZ ee      Zy)&AsyncAdaptFallback_aiomysql_connectionrA   N)rQ   rR   rS   rT   rw   r	   r   rA   r   r   ry   ry      s     I.)Fr   ry   c                   $    e Zd Zd Zd Zd Zd Zy)AsyncAdapt_aiomysql_dbapic                     || _         || _        d| _        | j                          | j	                         \  | _        | _        y )Nformat)aiomysqlpymysql
paramstyle_init_dbapi_attributes_init_cursors_subclassesr   rZ   )r   r~   r   s      r   r   z"AsyncAdapt_aiomysql_dbapi.__init__   s:     "##%%)%B%B%D"T]r   c           	          dD ]#  }t        | |t        | j                  |             % dD ]#  }t        | |t        | j                  |             % y )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   sV    
 	>D D$t <=	>
 	=D D$d ;<	=r   c           
         |j                  dd      }|j                  d| j                  j                        }t        j                  |      rt        | t         ||i |            S t        | t         ||i |            S )Nasync_fallbackFasync_creator_fn)	rH   r~   connectr   asboolry   r	   ra   r
   )r   argkwr   
creator_fns        r   r   z!AsyncAdapt_aiomysql_dbapi.connect   s     0%8VV.0E0EF
;;~&9z35"56 
 2:s1b12 r   c                      G d d| j                   j                        } G d d| j                   j                        }||fS )Nc                       e Zd Zd Zy)BAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursorc                    K   y wr   rA   r   conns     r   _show_warningszQAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.Cursor._show_warnings  	        NrQ   rR   rS   r   rA   r   r   r   r         r   r   c                       e Zd Zd Zy)DAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursorc                    K   y wr   rA   r   s     r   r   zSAsyncAdapt_aiomysql_dbapi._init_cursors_subclasses.<locals>.SSCursor._show_warnings  r   r   Nr   rA   r   r   rZ   r     r   r   rZ   )r~   r   rZ   )r   r   rZ   s      r   r   z2AsyncAdapt_aiomysql_dbapi._init_cursors_subclasses  s;    	T]])) 		t}}-- 	 xr   N)rQ   rR   rS   r   r   r   r   rA   r   r   r{   r{      s    E=4
 r   r{   c                   t     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                 >    t        t        d      t        d            S )Nr~   r   )r{   
__import__)clss    r   import_dbapiz"MySQLDialect_aiomysql.import_dbapi%  s    (z"Jy$9
 	
r   c                     |j                   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5---r   c                 $    |j                          y r   )rr   )r   dbapi_connections     r   do_terminatez"MySQLDialect_aiomysql.do_terminate4  s    ""$r   c                 <    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_args7  s&    w*v!E + 
 	
r   c                 b    t         |   |||      ryt        |      j                         }d|v S )NTznot connected)r   is_disconnectstrlower)r   erd   r   str_er   s        r   r   z#MySQLDialect_aiomysql.is_disconnect<  s1    7 J7FLLNE"e++r   c                 &    ddl m} |j                  S )NrF   )CLIENT)pymysql.constantsr   
FOUND_ROWS)r   r   s     r   _found_rows_client_flagz-MySQLDialect_aiomysql._found_rows_client_flagC  s    ,   r   c                     |j                   S r   )r   )r   rd   s     r   get_driver_connectionz+MySQLDialect_aiomysql.get_driver_connectionH  s    %%%r   ru   )rQ   rR   rS   driversupports_statement_cachesupports_server_side_cursorsrX   	_sscursoris_asynchas_terminateclassmethodr   r   r   r   r   r   r   __classcell__)r   s   @r   r   r     sb    F##' -IHM
 

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

,!
&r   r   N)__doc__r   r    r   r   enginer   util.concurrencyr   r	   r
   r   rX   ra   ry   r{   r   dialectrA   r   r   <module>r      sv   * *   ' ' . *e eP4$> 4<%6%6 %6P*-K *;  ; |.&0 .&b  r   