
    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 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

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

    )deque)asynccontextmanager   )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_asyncmy_cursorF)_adapt_connection_connectionawait__cursor_rowsc                     || _         |j                  | _        |j                  | _        | j                  j                         }| j                  |j	                               | _        t               | _        y N)r   r   r   cursor
__aenter__r   r   r   selfadapt_connectionr   s      JD:\EasyAligner\venv\Lib\site-packages\sqlalchemy/dialects/mysql/asyncmy.py__init__z"AsyncAdapt_asyncmy_cursor.__init__6   s[    !1+77&--!!((*{{6#4#4#67W
    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.rowcountD   s    ||$$$r   c                 .    | j                   j                  S r   r   	arraysizer!   s    r   r&   z#AsyncAdapt_asyncmy_cursor.arraysizeH       ||%%%r   c                 &    || j                   _        y r   r%   r   values     r   r&   z#AsyncAdapt_asyncmy_cursor.arraysizeL   s    !&r   c                 .    | j                   j                  S r   )r   	lastrowidr!   s    r   r,   z#AsyncAdapt_asyncmy_cursor.lastrowidP   r'   r   c                 8    | j                   j                          y r   )r   clearr!   s    r   closezAsyncAdapt_asyncmy_cursor.closeT   s     	

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   r2   seq_of_parameterss      r   executemanyz%AsyncAdapt_asyncmy_cursor.executemanya   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   r4   server_sider   fetchallr   )r   r2   r3   results       r   r1   z(AsyncAdapt_asyncmy_cursor._execute_asyncf   s     ))AACC!#||33I>>#||33IzJJ##
 #)>)>)@#@A
	 	 	C>J $A	CCCsz   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   r;   r   r9   r7   s      r   r6   z,AsyncAdapt_asyncmy_cursor._executemany_asyncu   s]     ))AACC11)=NOO	P 	P 	PCO	PCCCsV   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.setinputsizesy   s    r   c              #   x   K   | j                   r*| j                   j                          | j                   r)y y wr   r   popleftr!   s    r   __iter__z"AsyncAdapt_asyncmy_cursor.__iter__|   s)     jj**$$&& jjs   5::c                 P    | j                   r| j                   j                         S y r   rE   r!   s    r   fetchonez"AsyncAdapt_asyncmy_cursor.fetchone   s    ::::%%''r   c                     || j                   }| j                  }t        t        |t	        |                  D cg c]  }|j                          c}S c c}w r   )r&   r   rangeminlenrF   )r   sizerr_s       r   	fetchmanyz#AsyncAdapt_asyncmy_cursor.fetchmany   sI    <>>DZZ&+Cc"g,>&?@&?

&?@@@s   Ac                 d    t        | j                        }| j                  j                          |S r   )listr   r.   )r   retvals     r   r=   z"AsyncAdapt_asyncmy_cursor.fetchall   s%    djj!

r   r   )__name__
__module____qualname__r<   	__slots__r   propertyr    r#   r&   setterr,   r/   r4   r9   r1   r6   rC   rG   rI   rQ   r=   rA   r   r   r   r   *   s     KI ( ( % % & & ' ' & &G

P'A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_cursorrA   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   rI   r!   s    r   rI   z%AsyncAdapt_asyncmy_ss_cursor.fetchone       {{4<<00233r   Nc                 X    | j                  | j                  j                  |            S )N)rN   )r   r   rQ   )r   rN   s     r   rQ   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   rd   r   r   )
rU   rV   rW   rX   r<   r   r/   rI   rQ   r=   rA   r   r   r\   r\      s'     IK	8 
4>4r   r\   c                   p    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ddZy)AsyncAdapt_asyncmy_connection)r^   _execute_mutexc                 R    || _         || _        t        j                         | _        y r   )r^   r   r   Lockri   )r   r^   
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)ri   AttributeErrorr^   InternalErrorr!   s    r   r;   z5AsyncAdapt_asyncmy_connection._mutex_and_adapt_errors   s_     &&& '&& " 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)r;   r   rs   r!   s    r   rq   z&AsyncAdapt_asyncmy_connection._do_ping   sR     //11))..u55	6 	6 	615	6111sS   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   rv   z0AsyncAdapt_asyncmy_connection.character_set_name   s    2244r   c                 X    | j                  | j                  j                  |             y r   )r   r   
autocommitr)   s     r   rx   z(AsyncAdapt_asyncmy_connection.autocommit   s    D$$//67r   c                 2    |rt        |       S t        |       S r   )r\   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   r{   z&AsyncAdapt_asyncmy_connection.rollback   s    D$$--/0r   c                 V    | j                  | j                  j                                y r   )r   r   commitr!   s    r   r}   z$AsyncAdapt_asyncmy_connection.commit   s    D$$++-.r   c                 8    | j                   j                          y r   )r   r/   r!   s    r   	terminatez'AsyncAdapt_asyncmy_connection.terminate   s     r   Nc                 V    | j                  | j                  j                                y r   )r   r   ensure_closedr!   s    r   r/   z#AsyncAdapt_asyncmy_connection.close   s    D$$2245r   )FreturnN)rU   rV   rW   staticmethodr   r   rX   r   r   r;   rs   rq   rv   rx   r   r{   r}   r   r/   rA   r   r   rh   rh      sY     *%F+I-
  ,65831/!6r   rh   c                        e Zd ZdZ ee      Zy)%AsyncAdaptFallback_asyncmy_connectionrA   N)rU   rV   rW   rX   r   r   r   rA   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)r_   
paramstyle_init_dbapi_attributes)r   r_   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ProgrammingErrorro   NotSupportedError)setattrgetattrr_   errors)r   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	   asboolr   r   rh   r   )r   argkwr   
creator_fns        r   r   z AsyncAdapt_asyncmy_dbapi.connect  s     0%8VV.0D0DE
;;~&8z35"56 
 1:s1b12 r   N)rU   rV   rW   r   r   r	   symbolr   r   r   r   r   r   r   Binaryr   rA   r   r   r   r      sn    &
D  T[["FT[["FT[["Ft{{:&HK(I'"F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_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 )Nr   F)querygetr	   r   r   FallbackAsyncAdaptedQueuePoolAsyncAdaptedQueuePool)r   urlr   s      r   get_pool_classz#MySQLDialect_asyncmy.get_pool_class0  s;    '7?;;~&555---r   c                 $    |j                          y r   )r   )r   dbapi_connections     r   do_terminatez!MySQLDialect_asyncmy.do_terminate9  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_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)r   erl   r   str_er   s        r   r   z"MySQLDialect_asyncmy.is_disconnectA  s>    7 J7FLLNE5(O,F%,Or   c                 &    ddl m} |j                  S )Nr   )CLIENT)asyncmy.constantsr   
FOUND_ROWS)r   r   s     r   _found_rows_client_flagz,MySQLDialect_asyncmy._found_rows_client_flagJ  s    ,   r   c                     |j                   S r   )r   )r   rl   s     r   get_driver_connectionz*MySQLDialect_asyncmy.get_driver_connectionO  s    %%%r   r   )rU   rV   rW   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   "  sb    F##' ,IHM? ? . .%

!
&r   r   N)__doc__collectionsr   
contextlibr   pymysqlr    r   r	   enginer
   util.concurrencyr   r   r   r   r\   rh   r   r   r   r   dialectrA   r   r   <module>r      s   *  * )   ' ' . *f fR4#< 4@46$5 46n*,I *
* *Z.&/ .&b r   