
    +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d Z G d d      Z G d de      ZeZy)a\  
.. dialect:: mysql+asyncmy
    :name: asyncmy
    :dbapi: asyncmy
    :connectstring: mysql+asyncmy://user:password@host:port/dbname[?key=value&key=value...]
    :url: https://github.com/long2ice/asyncmy

.. note:: The asyncmy dialect as of September, 2021 was added to provide
   MySQL/MariaDB asyncio compatibility given that the :ref:`aiomysql` database
   driver has become unmaintained, however asyncmy is itself very new.

Using a special asyncio mediation layer, the asyncmy 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+asyncmy://user:pass@hostname/dbname?charset=utf8mb4")


   )MySQLDialect_pymysql   )pool)util)AdaptedConnection)asynccontextmanager)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_asyncmy_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      T/var/www/html/venv/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/asyncmy.py__init__z"AsyncAdapt_asyncmy_cursor.__init__3   sY    !1+77&--!!((*{{6#4#4#67
    c                 .    | j                   j                  S r   )r   descriptionr   s    r   r   z%AsyncAdapt_asyncmy_cursor.description=   s    ||'''r   c                 .    | j                   j                  S r   )r   rowcountr   s    r   r!   z"AsyncAdapt_asyncmy_cursor.rowcountA   s    ||$$$r   c                 .    | j                   j                  S r   r   	arraysizer   s    r   r$   z#AsyncAdapt_asyncmy_cursor.arraysizeE       ||%%%r   c                 &    || j                   _        y r   r#   r   values     r   r$   z#AsyncAdapt_asyncmy_cursor.arraysizeI   s    !&r   c                 .    | j                   j                  S r   )r   	lastrowidr   s    r   r*   z#AsyncAdapt_asyncmy_cursor.lastrowidM   r%   r   c                 "    g | j                   d d  y r   r   r   s    r   closezAsyncAdapt_asyncmy_cursor.closeQ   s     

1r   Nc                 D    | j                  | j                  ||            S r   )r   _execute_async)r   	operation
parameterss      r   executez!AsyncAdapt_asyncmy_cursor.execute[   s    {{4..y*EFFr   c                 D    | j                  | j                  ||            S r   )r   _executemany_asyncr   r0   seq_of_parameterss      r   executemanyz%AsyncAdapt_asyncmy_cursor.executemany^   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   _mutex_and_adapt_errorsr   r2   server_sidelistfetchallr   )r   r0   r1   results       r   r/   z(AsyncAdapt_asyncmy_cursor._execute_asyncc   s     ))AAC 	 	!#||33I>>#||33IzJJ##
 "(=(=(?"?@
	 	 	>J #@	 	 	 	sz   CB?C!C	C$C	+C,2C	C
C	-C9C: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   r9   r   r7   r5   s      r   r4   z,AsyncAdapt_asyncmy_cursor._executemany_asyncr   sl     ))AAC 	P 	P11)=NOO	P 	P 	PO	P 	P 	P 	PsV   A6AA6 A!AA!	A6AA6A!A6!A3'A*(A3/A6c                      y r    )r   
inputsizess     r   setinputsizesz'AsyncAdapt_asyncmy_cursor.setinputsizesv   s    r   c              #   z   K   | j                   r+| j                   j                  d       | j                   r*y y wN    r   popr   s    r   __iter__z"AsyncAdapt_asyncmy_cursor.__iter__y   s)     jj**..## jjs   6;;c                 R    | j                   r| j                   j                  d      S y rD   rF   r   s    r   fetchonez"AsyncAdapt_asyncmy_cursor.fetchone}   s    ::::>>!$$r   c                 x    || j                   }| j                  d| }| j                  |d  | j                  d d  |S rD   )r$   r   )r   sizeretvals      r   	fetchmanyz#AsyncAdapt_asyncmy_cursor.fetchmany   s=    <>>DAd#

45)

1r   c                 B    | j                   d d  }g | j                   d d  |S r   r,   )r   rM   s     r   r<   z"AsyncAdapt_asyncmy_cursor.fetchall   s!    A

1r   r   )__name__
__module____qualname__r:   	__slots__r   propertyr   r!   r$   setterr*   r-   r2   r7   r/   r4   rB   rH   rJ   rN   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_asyncmy_ss_cursorr@   Tc                 $   || _         |j                  | _        |j                  | _        | j                  j                  |j                  j
                  j                  j                        }| j                  |j                               | _	        y r   )
r   r   r   r   dbapiasyncmycursorsSSCursorr   r   r   s      r   r   z%AsyncAdapt_asyncmy_ss_cursor.__init__   sq    !1+77&--!!((""**22;;
 {{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_asyncmy_ss_cursor.close   s1    <<#KK**,-DL $r   c                 T    | j                  | j                  j                               S r   )r   r   rJ   r   s    r   rJ   z%AsyncAdapt_asyncmy_ss_cursor.fetchone       {{4<<00233r   Nc                 X    | j                  | j                  j                  |            S )N)rL   )r   r   rN   )r   rL   s     r   rN   z&AsyncAdapt_asyncmy_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_asyncmy_ss_cursor.fetchall   r_   r   r   )
rP   rQ   rR   rS   r:   r   r-   rJ   rN   r<   r@   r   r   rW   rW      s%    IK	8 
4>4r   rW   c                   h    e Zd Z ee      ZdZd Zed        Z	d Z
d Zd Zd ZddZd	 Zd
 Zd Zy)AsyncAdapt_asyncmy_connection)rY   r   _execute_mutexc                 R    || _         || _        t        j                         | _        y r   )rY   r   r	   Lockrd   )r   rY   
connections      r   r   z&AsyncAdapt_asyncmy_connection.__init__   s    
%%llnr   c                   K   | j                   4 d {    	 d  d d d       d {    y 7 # t        $ r | j                  j                  d      w xY w7 /# 1 d {  7  sw Y   y xY ww)Nz7network operation failed due to asyncmy attribute error)rd   AttributeErrorrY   InternalErrorr   s    r   r9   z5AsyncAdapt_asyncmy_connection._mutex_and_adapt_errors   sp     && 	 		 	 	 " jj..M 	 	 	 	sO   A0/A0A1A0AA0%AAA0A-!A$"A-)A0c                 H    |rJ | j                  | j                               S r   )r   _do_ping)r   	reconnects     r   pingz"AsyncAdapt_asyncmy_connection.ping   s    }{{4==?++r   c                    K   | j                         4 d {    | j                  j                  d       d {   cd d d       d {    S 7 87 7 	# 1 d {  7  sw Y   y xY ww)NF)r9   r   rn   r   s    r   rl   z&AsyncAdapt_asyncmy_connection._do_ping   s\     //1 	6 	6))..u55	6 	6 	65	6 	6 	6 	6sS   A+AA+AAAA+
AA+AA+A(AA($A+c                 6    | j                   j                         S r   )r   character_set_namer   s    r   rq   z0AsyncAdapt_asyncmy_connection.character_set_name   s    2244r   c                 X    | j                  | j                  j                  |             y r   )r   r   
autocommitr'   s     r   rs   z(AsyncAdapt_asyncmy_connection.autocommit   s    D$$//67r   c                 2    |rt        |       S t        |       S r   )rW   r   )r   r:   s     r   r   z$AsyncAdapt_asyncmy_connection.cursor   s    /55,T22r   c                 V    | j                  | j                  j                                y r   )r   r   rollbackr   s    r   rv   z&AsyncAdapt_asyncmy_connection.rollback   s    D$$--/0r   c                 V    | j                  | j                  j                                y r   )r   r   commitr   s    r   rx   z$AsyncAdapt_asyncmy_connection.commit   s    D$$++-.r   c                 8    | j                   j                          y r   )r   r-   r   s    r   r-   z#AsyncAdapt_asyncmy_connection.close   s     r   N)F)rP   rQ   rR   staticmethodr   r   rS   r   r   r9   rn   rl   rq   rs   r   rv   rx   r-   r@   r   r   rc   rc      sR    *%F:I-
  ,65831/!r   rc   c                        e Zd ZdZ ee      Zy)%AsyncAdaptFallback_asyncmy_connectionr@   N)rP   rQ   rR   rS   rz   r
   r   r@   r   r   r|   r|      s    I.)Fr   r|   c                     t        |       S )zReturn x as a binary type.)bytes)xs    r   _Binaryr      s    8Or   c                       e Zd Zd Zd Z ej                  d      Z ej                  d      Z ej                  d      Z	 ej                  d      Z
 ej                  d      Z ee      Zd Zy	)
AsyncAdapt_asyncmy_dbapic                 @    || _         d| _        | j                          y )Nformat)rZ   
paramstyle_init_dbapi_attributes)r   rZ   s     r   r   z!AsyncAdapt_asyncmy_dbapi.__init__   s    "##%r   c           	      h    dD ]-  }t        | |t        | j                  j                  |             / y )N)WarningErrorInterfaceError	DataErrorDatabaseErrorOperationalErrorr   IntegrityErrorProgrammingErrorrj   NotSupportedError)setattrgetattrrZ   errors)r   names     r   r   z/AsyncAdapt_asyncmy_dbapi._init_dbapi_attributes   s4    
 	DD D$(;(;T BC	Dr   STRINGNUMBERBINARYDATETIME	TIMESTAMPc           
         |j                  dd      }t        j                  |      r/t        | t	         | j
                  j                  |i |            S t        | t         | j
                  j                  |i |            S Nasync_fallbackF)	rG   r   asboolr|   r
   rZ   connectrc   r   )r   argkwr   s       r   r   z AsyncAdapt_asyncmy_dbapi.connect	  s     0%8;;~&83t||33S?B?@ 
 1/4<<//;;< r   N)rP   rQ   rR   r   r   r   symbolr   r   r   r   r   rz   r   Binaryr   r@   r   r   r   r      sn    &
D  T[["FT[["FT[["Ft{{:&HK(I'"Fr   r   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_asyncmyrZ   Tc                 *    t        t        d            S )NrZ   )r   
__import__)clss    r   rY   zMySQLDialect_asyncmy.dbapi!  s    '
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_asyncmy.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_asyncmy.create_connect_args/  s*    )4Dv!E E 
 	
r   c                 v    t         t        |   |||      ryt        |      j	                         }d|v xs d|v S )NTznot connectedznetwork operation failed)r   r   is_disconnectstrlower)r   erg   r   str_er   s        r   r   z"MySQLDialect_asyncmy.is_disconnect4  sF    %t:z6
 FLLNE5(O,F%,Or   c                 &    ddl m} |j                  S )NrE   )CLIENT)asyncmy.constantsr   
FOUND_ROWS)r   r   s     r   _found_rows_client_flagz,MySQLDialect_asyncmy._found_rows_client_flag?  s    ,   r   c                     |j                   S r   )r   )r   rg   s     r   get_driver_connectionz*MySQLDialect_asyncmy.get_driver_connectionD  s    %%%r   )rP   rQ   rR   driversupports_statement_cachesupports_server_side_cursorsrW   	_sscursoris_asyncclassmethodrY   r   r   r   r   r   __classcell__)r   s   @r   r   r     sX    F##' ,IH? ? . .

	!
&r   r   N)__doc__pymysqlr    r   r   enginer   util.concurrencyr   r	   r
   r   r   rW   rc   r|   r   r   r   dialectr@   r   r   <module>r      s~   0 *   ' 3 ' . *e eP4#< 4</!$5 /!d*,I *
) )X-&/ -&` r   