
    +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  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)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                       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	                               | _        g | _        y N)r   r   r   cursor
__aenter__r   r   selfadapt_connectionr   s      U/var/www/html/venv/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/aiomysql.py__init__z#AsyncAdapt_aiomysql_cursor.__init__7   s[    !1+77&--!!((* {{6#4#4#67
    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                   _        y 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                 "    g | j                   d d  y r   r   r   s    r   closez AsyncAdapt_aiomysql_cursor.closeV   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   r/   seq_of_parameterss      r   executemanyz&AsyncAdapt_aiomysql_cursor.executemanyc   s$    {{##I/@A
 	
r   c                   K   | j                   j                  4 d {    |$| j                  j                  |       d {   }n$| j                  j                  ||       d {   }| j                  s0t        | j                  j                          d {         | _        |cd d d       d {    S 7 7 z7 W7 &7 # 1 d {  7  sw Y   y xY wwr   )r   _execute_mutexr   r1   server_sidelistfetchallr   )r   r/   r0   results       r   r.   z)AsyncAdapt_aiomysql_cursor._execute_asynch   s     ))88 	 	!#||33I>>#||33IzJJ##
 "(=(=(?"?@
	 	 	>J #@	 	 	 	sz   CB;C!CB=$C'B?(2CC
C)C5C6C=C?CCCCCCC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   r8   r   r6   r4   s      r   r3   z-AsyncAdapt_aiomysql_cursor._executemany_asyncw   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.setinputsizes{   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__~   s)     jj**..## jjs   6;;c                 R    | j                   r| j                   j                  d      S y rC   rE   r   s    r   fetchonez#AsyncAdapt_aiomysql_cursor.fetchone   s    ::::>>!$$r   c                 x    || j                   }| j                  d| }| j                  |d  | j                  d d  |S rC   )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   rL   s     r   r;   z#AsyncAdapt_aiomysql_cursor.fetchall   s!    A

1r   r   )__name__
__module____qualname__r9   	__slots__r   propertyr   r    r#   setterr)   r,   r1   r6   r.   r3   rA   rG   rI   rM   r;   r?   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_cursorr?   Tc                    || _         |j                  | _        |j                  | _        | j                  j                  |j                  j
                  j                        }| j                  |j                               | _        y r   )	r   r   r   r   dbapiaiomysqlSSCursorr   r   r   s      r   r   z&AsyncAdapt_aiomysql_ss_cursor.__init__   sk    !1+77&--!!((""++44
 {{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   rI   r   s    r   rI   z&AsyncAdapt_aiomysql_ss_cursor.fetchone       {{4<<00233r   Nc                 X    | j                  | j                  j                  |            S )N)rK   )r   r   rM   )r   rK   s     r   rM   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   )
rO   rP   rQ   rR   r9   r   r,   rI   rM   r;   r?   r   r   rV   rV      s%    IK	8 
4>4r   rV   c                   R    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y
)AsyncAdapt_aiomysql_connection)rX   r   r8   c                 R    || _         || _        t        j                         | _        y r   )rX   r   r   Lockr8   )r   rX   
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   )rV   r   )r   r9   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   r,   z$AsyncAdapt_aiomysql_connection.close   s     r   N)F)rO   rP   rQ   staticmethodr
   r   rR   r   rf   ri   rk   r   rn   rp   r,   r?   r   r   ra   ra      s9    *%F:I-
=5841/!r   ra   c                        e Zd ZdZ ee      Zy)&AsyncAdaptFallback_aiomysql_connectionr?   N)rO   rP   rQ   rR   rr   r	   r   r?   r   r   rt   rt      s    I.)Fr   rt   c                       e Zd Zd Zd Zd Zy)AsyncAdapt_aiomysql_dbapic                 N    || _         || _        d| _        | j                          y )Nformat)rY   pymysql
paramstyle_init_dbapi_attributes)r   rY   ry   s      r   r   z"AsyncAdapt_aiomysql_dbapi.__init__   s#     "##%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getattrrY   ry   )r   names     r   r{   z0AsyncAdapt_aiomysql_dbapi._init_dbapi_attributes   sV    
 	>D D$t <=	>
 	=D D$d ;<	=r   c           
         |j                  dd      }t        j                  |      r/t        | t	         | j
                  j                  |i |            S t        | t         | j
                  j                  |i |            S Nasync_fallbackF)	rF   r   asboolrt   r	   rY   connectra   r
   )r   argkwr   s       r   r   z!AsyncAdapt_aiomysql_dbapi.connect   s     0%8;;~&94t}}44c@R@A 
 204==00#<<= r   N)rO   rP   rQ   r   r{   r   r?   r   r   rv   rv      s    &=4r   rv   c                   h     e Zd ZdZdZdZeZdZe	d        Z
e	d        Z fdZ fdZd Zd Z xZS )	MySQLDialect_aiomysqlrY   Tc                 >    t        t        d      t        d            S )NrY   ry   )rv   
__import__)clss    r   rX   zMySQLDialect_aiomysql.dbapi  s    (z"Jy$9
 	
r   c                     |j                   j                  dd      }t        j                  |      rt        j
                  S t        j                  S r   )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                 D    t         t        |   |t        dd            S )Nuserdb)usernamedatabase)_translate_args)superr   create_connect_argsdict)r   r   	__class__s     r   r   z)MySQLDialect_aiomysql.create_connect_args&  s*    *DEv!E F 
 	
r   c                 j    t         t        |   |||      ryt        |      j	                         }d|v S )NTznot connected)r   r   is_disconnectstrlower)r   erd   r   str_er   s        r   r   z#MySQLDialect_aiomysql.is_disconnect+  s9    &;z6
 FLLNE"e++r   c                 &    ddl m} |j                  S )NrD   )CLIENT)pymysql.constantsr   
FOUND_ROWS)r   r   s     r   _found_rows_client_flagz-MySQLDialect_aiomysql._found_rows_client_flag4  s    ,   r   c                     |j                   S r   )r   )r   rd   s     r   get_driver_connectionz+MySQLDialect_aiomysql.get_driver_connection9  s    %%%r   )rO   rP   rQ   driversupports_statement_cachesupports_server_side_cursorsrV   	_sscursoris_asyncclassmethodrX   r   r   r   r   r   __classcell__)r   s   @r   r   r     sX    F##' -IH
 

 . .

,!
&r   r   N)__doc__ry   r    r   r   enginer   util.concurrencyr   r	   r
   r   rV   ra   rt   rv   r   dialectr?   r   r   <module>r      sv   : *   ' ' . *f fR4$> 4< !%6  !F*-K *- -`-&0 -&`  r   