
    =hM                       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 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 e	r0d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e      Z" G d dee"      Z# G d  d!e      Z$ G d" d#e$      Z% G d$ d%e      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

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"
    )

    )annotations)
ModuleType)Any)NoReturn)Optional)TYPE_CHECKING)Union   )MySQLDialect_pymysql   )pool)util)AsyncAdapt_dbapi_connection)AsyncAdapt_dbapi_cursor)AsyncAdapt_dbapi_module)AsyncAdapt_dbapi_ss_cursor)await_fallback)
await_only)AsyncIODBAPIConnection)AsyncIODBAPICursor)ConnectArgsType)DBAPIConnection)DBAPICursor)DBAPIModule)PoolProxiedConnection)URLc                      e Zd ZdZy)AsyncAdapt_asyncmy_cursor N)__name__
__module____qualname__	__slots__r       q/var/www/html/phonemate/phone_mate_backend/venv/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/asyncmy.pyr   r   ;   s    Ir$   r   c                       e Zd ZdZ	 	 	 	 ddZy)AsyncAdapt_asyncmy_ss_cursorr   c                    |j                  | j                  j                  j                  j                  j
                        S N)cursor_adapt_connectiondbapiasyncmycursorsSSCursorself
connections     r%   _make_new_cursorz-AsyncAdapt_asyncmy_ss_cursor._make_new_cursorD   s8       ""((0088AA
 	
r$   N)r2   r   returnr   )r    r!   r"   r#   r3   r   r$   r%   r'   r'   ?   s     I
0
	
r$   r'   c                  P    e Zd ZdZeZeZd
dZddZ	ddZ
ddZddZddZddZy	)AsyncAdapt_asyncmy_connectionr   c                \    t        |t              r| j                  j                  d      |)Nz7network operation failed due to asyncmy attribute error)
isinstanceAttributeErrorr,   InternalErrorr1   errors     r%   _handle_exceptionz/AsyncAdapt_asyncmy_connection._handle_exceptionR   s-    e^,****I  r$   c                H    |rJ | j                  | j                               S r)   )await__do_ping)r1   	reconnects     r%   pingz"AsyncAdapt_asyncmy_connection.pingZ   s    }{{4==?++r$   c                "  K   	 | j                   4 d {    | j                  j                  d       d {    d d d       d {    y 7 87 7 	# 1 d {  7  sw Y   y xY w# t        $ r}| j	                  |       Y d }~y d }~ww xY ww)NF)_execute_mutex_connectionrB   	Exceptionr=   r;   s     r%   r@   z&AsyncAdapt_asyncmy_connection._do_ping^   sp     	****&&++E222 +**2 +*** 	*""5))	*s   BA( AA( AAAA( AA( BA( AA( A%AA%!A( $B%A( (	B1BBBBc                6    | j                   j                         S r)   )rE   character_set_namer1   s    r%   rH   z0AsyncAdapt_asyncmy_connection.character_set_namee   s    2244r$   c                X    | j                  | j                  j                  |             y r)   )r?   rE   
autocommit)r1   values     r%   rK   z(AsyncAdapt_asyncmy_connection.autocommith   s    D$$//67r$   c                8    | j                   j                          y r)   )rE   closerI   s    r%   	terminatez'AsyncAdapt_asyncmy_connection.terminatek   s     r$   c                V    | j                  | j                  j                                y r)   )r?   rE   ensure_closedrI   s    r%   rN   z#AsyncAdapt_asyncmy_connection.closeo   s    D$$2245r$   N)r<   rF   r4   r   )rA   boolr4   Noner4   rS   )r4   zOptional[str])rL   r   r4   rS   )r    r!   r"   r#   r   _cursor_clsr'   _ss_cursor_clsr=   rB   r@   rH   rK   rO   rN   r   r$   r%   r6   r6   L   s4    I+K1N,*58!6r$   r6   c                       e Zd ZdZ ee      Zy)%AsyncAdaptFallback_asyncmy_connectionr   N)r    r!   r"   r#   staticmethodr   r?   r   r$   r%   rX   rX   s   s    I.)Fr$   rX   c                      e Zd Zd
dZd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dZy	)AsyncAdapt_asyncmy_dbapic                @    || _         d| _        | j                          y )Nformat)r-   
paramstyle_init_dbapi_attributes)r1   r-   s     r%   __init__z!AsyncAdapt_asyncmy_dbapi.__init__z   s    "##%r$   c           	     h    dD ]-  }t        | |t        | j                  j                  |             / y )N)WarningErrorInterfaceError	DataErrorDatabaseErrorOperationalErrorrd   IntegrityErrorProgrammingErrorr:   NotSupportedError)setattrgetattrr-   errors)r1   names     r%   r_   z/AsyncAdapt_asyncmy_dbapi._init_dbapi_attributes   s-    
D D$(;(;T BC
r$   STRINGNUMBERBINARYDATETIME	TIMESTAMPc           
        |j                  dd      }|j                  d| j                  j                        }t        j                  |      rt        | t         ||i |            S t        | t         ||i |            S )Nasync_fallbackFasync_creator_fn)	popr-   connectr   asboolrX   r   r6   r   )r1   argkwru   
creator_fns        r%   rx   z AsyncAdapt_asyncmy_dbapi.connect   s     0%8VV.0D0DE
;;~&8z35"56 
 1:s1b12 r$   N)r-   r   rT   )rz   r   r{   r   r4   r6   )r    r!   r"   r`   r_   r   symbolro   rp   rq   rr   rs   rY   bytesBinaryrx   r   r$   r%   r[   r[   y   sn    &
D  T[["FT[["FT[["Ft{{:&HK(I% Fr$   r[   c                       e Zd ZdZdZdZeZdZdZ	e
d
d       Ze
dd       ZddZd fdZ	 	 	 	 	 	 	 	 d fdZddZ	 	 	 	 dd	Z xZS )MySQLDialect_asyncmyr-   Tc                *    t        t        d            S )Nr-   )r[   
__import__)clss    r%   import_dbapiz!MySQLDialect_asyncmy.import_dbapi   s    '
9(=>>r$   c                    |j                   j                  dd      }t        j                  |      rt        j
                  S t        j                  S )Nru   F)querygetr   ry   r   FallbackAsyncAdaptedQueuePoolAsyncAdaptedQueuePool)r   urlru   s      r%   get_pool_classz#MySQLDialect_asyncmy.get_pool_class   s;    '7?;;~&555---r$   c                $    |j                          y r)   )rO   )r1   dbapi_connections     r%   do_terminatez!MySQLDialect_asyncmy.do_terminate   s    ""$r$   c                <    t         |   |t        dd            S )Nuserdb)usernamedatabase)_translate_args)supercreate_connect_argsdict)r1   r   	__class__s     r%   r   z(MySQLDialect_asyncmy.create_connect_args   s&    w*v!E + 
 	
r$   c                n    t         |   |||      ryt        |      j                         }d|v xs d|v S )NTznot connectedznetwork operation failed)r   is_disconnectstrlower)r1   er2   r*   str_er   s        r%   r   z"MySQLDialect_asyncmy.is_disconnect   s@     7 J7FLLNE5(O,F%,Or$   c                &    ddl m} |j                  S )Nr   )CLIENT)asyncmy.constantsr   
FOUND_ROWS)r1   r   s     r%   _found_rows_client_flagz,MySQLDialect_asyncmy._found_rows_client_flag   s    ,   r$   c                    |j                   S r)   )rE   r0   s     r%   get_driver_connectionz*MySQLDialect_asyncmy.get_driver_connection   s     %%%r$   )r4   r   )r   r   r4   type)r   r   r4   rS   )r   r   r4   r   )r   zDBAPIModule.Errorr2   z7Optional[Union[PoolProxiedConnection, DBAPIConnection]]r*   zOptional[DBAPICursor]r4   rR   )r4   int)r2   r   r4   r   )r    r!   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? ? . .%

 L &	
 
!
&)&	&r$   r   N))__doc__
__future__r   typesr   typingr   r   r   r   r	   pymysqlr    r   r   connectors.asyncior   r   r   r   util.concurrencyr   r   r   r   engine.interfacesr   r   r   r   r   
engine.urlr   r   r'   r6   rX   r[   r   dialectr   r$   r%   <module>r      s   * #        )   = 9 9 < . *<84400:! 7 

 9

$6$? $6N*,I **6 *Z5&/ 5&p r$   