
    dh                     j   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ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mZmZmZmZmZ d d
lmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'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/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 	  ejp                         Z9dddddddddedd e0dddddddddddfdZ;d Z<d'dZ=d(dZ> G d d e j~                        Z@ G d! d"      ZA G d# d$      ZB G d% d&      ZCy# e:$ r dZ9Y dw xY w))    N)partial)charset_by_namecharset_by_id)SERVER_STATUS)CLIENT)COMMAND)CR)
FIELD_TYPE)escape_itemencodersdecodersescape_stringescape_bytes_prefixedthrough)
WarningErrorInterfaceError	DataErrorDatabaseErrorOperationalErrorIntegrityErrorInternalErrorNotSupportedErrorProgrammingError)
TEXT_TYPESMAX_PACKET_LENDEFAULT_CHARSET)_auth)MysqlPacket)FieldDescriptorPacket)EOFPacketWrapper)OKPacketWrapper)LoadLocalPacketWrapper   )Cursor)_pack_int24_lenenc_int_ConnectionContextManager_ContextManager)loggerunknown	localhost   Fc                     t        di d| d|d|d|d|d|d|d|d	|d
|	d|
d|d|d|d|d|d|d|d|d|d|d|d|}t        |      S )zISee connections.Connection.__init__() for information about
    defaults.hostuserpassworddbportunix_socketcharsetsql_moderead_default_fileconvuse_unicodeclient_flagcursorclassinit_commandconnect_timeoutread_default_group
autocommitecholocal_infileloopsslauth_pluginprogram_name )_connectr(   )r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   server_public_keycoros                            M/var/www/netwell/bot/venv/lib/python3.12/site-packages/aiomysql/connection.pyconnectrL   0   s     
H 
HD 
H8 
H 
H
H+6
H@G
H%
H9J
H 
H ,7
H !,	
H :E	
H
 ".
H %4
H (:
H  *
H 15
H ".
H 59
H ?B
H !,
H ;G
HD %T**    c                  X   K   t        | i |}|j                          d {    |S 7 wN)
ConnectionrH   )argskwargsconns      rK   rH   rH   I   s.     t&v&D
--/K s   *(*c                   K   t         j                  j                         }t        |      }t        j                  ||       |j
                  fd| |fi | d{   \  }}t        j                  |||      }||fS 7 #w)zThis is based on asyncio.open_connection, allowing us to use a custom
    StreamReader.

    `limit` arg has been removed as we don't currently use it.
    rC   c                       S rO   rG   protocols   rK   <lambda>z"_open_connection.<locals>.<lambda>Y        rM   N)asyncioeventsget_running_loop_StreamReaderStreamReaderProtocolcreate_connectionStreamWriter)	r0   r4   kwdsrC   reader	transport_writerrX   s	           @rK   _open_connectionrg   O   s      >>**,D%F++F>H///$.(,. .LIq!!)XvtDF6>.s   AB B!$Bc                   K   t         j                  j                         }t        |      }t        j                  ||       |j
                  fd| fi | d{   \  }}t        j                  |||      }||fS 7 #w)zThis is based on asyncio.open_unix_connection, allowing us to use a custom
    StreamReader.

    `limit` arg has been removed as we don't currently use it.
    rU   c                       S rO   rG   rW   s   rK   rY   z'_open_unix_connection.<locals>.<lambda>i   rZ   rM   N)r[   r\   r]   r^   r_   create_unix_connectionra   )pathrb   rC   rc   rd   re   rf   rX   s          @rK   _open_unix_connectionrl   ^   s      >>**,D%F++F>H444$("&( (LIq!!)XvtDF6>(s   ABB $Bc                   @     e Zd ZdZd fd	Zd fdZed        Z xZS )r^   a  This StreamReader exposes whether EOF was received, allowing us to
    discard the associated connection instead of returning it from the pool
    when checking free connections in Pool._fill_free_pool().

    `limit` arg has been removed as we don't currently use it.
    c                 4    d| _         t        | 	  |       y )NFrU   )_eof_receivedsuper__init__)selfrC   	__class__s     rK   rq   z_StreamReader.__init__u   s    "d#rM   c                 0    d| _         t        | 	          y )NT)ro   rp   feed_eof)rr   rs   s    rK   ru   z_StreamReader.feed_eofy   s    !rM   c                     | j                   S rO   )ro   rr   s    rK   eof_receivedz_StreamReader.eof_received}   s    !!!rM   rO   )returnN)	__name__
__module____qualname____doc__rq   ru   propertyrx   __classcell__)rs   s   @rK   r^   r^   n   s&    $ " "rM   r^   c                   D   e Zd ZdZdddddddddeddedddddddddddfdZed	        Zed
        Z	ed        Z
ed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Z d" Z!dCd#Z"d$ Z#d% Z$d& Z%dDd'Z&d( Z'd) Z(d* Z)d+ Z*d, Z+e,fd-Z-d. Z.d/ Z/dCd0Z0d1 Z1d2 Z2d3 Z3d4 Z4d5 Z5d6 Z6d7 Z7d8 Z8d9 Z9d: Z:d; Z;d< Z<d= Z=d> Z>d? Z?d@ Z@dA ZAdB ZBeCZCeDZDeEZEeFZFeGZGeHZHeIZIeJZJeKZKeLZLy)ErP   zRepresentation of a socket with a mysql server.

    The proper way to get an instance of this class is to call
    connect().
    r,   Nr-   r.   r   Fc                    |xs t        j                         | _        |t        j                  d   dkD  rd}|	r|sd}t        j                         }|j                  t        j                  j                  |	             t        |j                  |      } |d|      } |d|      } |d	|      } |d
|      } |d|      }t         |d|            } |d|      }|| _        || _        |xs t         | _        |xs d| _        || _        || _        | j                  j+                         | _        || _        d| _        d| _        d| _        || _        d| _        ddlm} dt?        t        j@                               |d| _!        |r|| jB                  d<   || _"        |r|| _#        d| _$        ntJ        | _#        d| _$        ||| _$        || _&        |r|tN        jP                  z  }tS        | jF                        jT                  | _+        |r|tN        jX                  z  }|tN        jZ                  z  }|tN        j\                  z  }| j&                  r|tN        j^                  z  }|| _0        || _1        || _2        d| _3        d| _4        d| _5        || _6        tn        | _7        |
| _8        || _9        || _:        d| _;        d| _<        d| _=        y)az  
        Establish a connection to the MySQL database. Accepts several
        arguments:

        :param host: Host where the database server is located
        :param user: Username to log in as
        :param password: Password to use.
        :param db: Database to use, None to not use a particular one.
        :param port: MySQL port to use, default is usually OK.
        :param unix_socket: Optionally, you can use a unix socket rather
        than TCP/IP.
        :param charset: Charset you want to use.
        :param sql_mode: Default SQL_MODE to use.
        :param read_default_file: Specifies  my.cnf file to read these
            parameters from under the [client] section.
        :param conv: Decoders dictionary to use instead of the default one.
            This is used to provide custom marshalling of types.
            See converters.
        :param use_unicode: Whether or not to default to unicode strings.
        :param  client_flag: Custom flags to send to MySQL. Find
            potential values in constants.CLIENT.
        :param cursorclass: Custom cursor class to use.
        :param init_command: Initial SQL statement to run when connection is
            established.
        :param connect_timeout: Timeout before throwing an exception
            when connecting.
        :param read_default_group: Group to read from in the configuration
            file.
        :param autocommit: Autocommit mode. None means use server default.
            (default: False)
        :param local_infile: boolean to enable the use of LOAD DATA LOCAL
            command. (default: False)
        :param ssl: Optional SSL Context to force SSL
        :param auth_plugin: String to manually specify the authentication
            plugin to use, i.e you will want to use mysql_clear_password
            when using IAM authentication with Amazon RDS.
            (default: Server Default)
        :param program_name: Program name string to provide when
            handshaking with MySQL. (omitted by default)
        :param server_public_key: SHA256 authentication plugin public
            key value.
        :param loop: asyncio loop
        Nr      Tclientr1   )fallbackr2   r0   databasesocketr4   zdefault-character-setr-   Fr$   )__version__aiomysql)_client_name_pid_client_versionrF   zNot connected)>r[   get_event_loop_loopsysversion_infoconfigparserRawConfigParserreadosrk   
expanduserr   getint_host_portDEFAULT_USER_user	_password_db_echotime_last_usage_client_auth_plugin_server_auth_plugin_auth_plugin_used_securerI   saltr-   r   strgetpid_connect_attrs_unix_socket_charsetr:   r   _ssl_contextr   SSLr   encoding	_encodingLOCAL_FILESCAPABILITIESMULTI_STATEMENTSCONNECT_WITH_DBr;   r<   r>   _result_affected_rows	host_infoautocommit_moder   r   r7   r=   _reader_writer_close_reason)rr   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rI   cfg_configr   s                               rK   rq   zConnection.__init__   s   h 5W335
3#3#3A#6#:K%%-"..0CHHRWW''(9:;cgg'9:G6D1DzH=H6D1Db1B!([AKwv56D5HG

)\
!R
::??,#. #% !#!2	!&		$*

 2>D/'#DM#D+DM$D"*D6::%K(7@@6---Kv***v...886111K&&.(  *  (  "rM   c                     | j                   S )zMySQL server IP address or name)r   rw   s    rK   r0   zConnection.host       zzrM   c                     | j                   S )zMySQL server TCP/IP port)r   rw   s    rK   r4   zConnection.port  r   rM   c                     | j                   S )zMySQL Unix socket file location)r   rw   s    rK   r5   zConnection.unix_socket"  s        rM   c                     | j                   S )zCurrent database name.)r   rw   s    rK   r3   zConnection.db'  s     xxrM   c                     | j                   S )z#User used while connecting to MySQL)r   rw   s    rK   r1   zConnection.user,  r   rM   c                     | j                   S )zReturn echo mode status.)r   rw   s    rK   rA   zConnection.echo1  r   rM   c                     | j                   S )z'Return time() when connection was used.)r   rw   s    rK   
last_usagezConnection.last_usage6  s     rM   c                     | j                   S rO   )r   rw   s    rK   rC   zConnection.loop;  s    zzrM   c                     | j                   du S )zVThe readonly property that returns ``True`` if connections is
        closed.
        N)r   rw   s    rK   closedzConnection.closed?  s    
 ||t##rM   c                     | j                   S )z&Encoding employed for this connection.)r   rw   s    rK   r   zConnection.encodingF  s     ~~rM   c                     | j                   S )z1Returns the character set for current connection.r   rw   s    rK   r6   zConnection.charsetK  s     }}rM   c                     | j                   r$| j                   j                  j                          d| _         d| _        y)zClose socket connectionN)r   rd   closer   rw   s    rK   r   zConnection.closeP  s-    <<LL""((*rM   c                 &  K   | j                   yt        j                  dd      t        t        j
                  g      z   }| j                   j                  |       | j                   j                          d{    | j                          y7 w)z2Send quit command and then close socket connectionNz<ir$   )	r   structpackbytesr   COM_QUITwritedrainr   )rr   	send_datas     rK   ensure_closedzConnection.ensure_closedW  sl     <<KKa(5'2B2B1C+DD	9%ll  """

 	#s   A7B9B:Bc                    K   t        |      | _        | j                         }||k7  r| j                          d{    yy7 w)zuEnable/disable autocommit mode for current MySQL session.

        :param value: ``bool``, toggle autocommit
        N)boolr   get_autocommit_send_autocommit_mode)rr   valuecurrents      rK   r@   zConnection.autocommita  sD     
  $E{%%'G,,... .s   9AAAc                 R    | j                   t        j                  z  }t        |      S )zgReturns autocommit status for current MySQL session.

        :returns bool: current autocommit status.)server_statusr   SERVER_STATUS_AUTOCOMMITr   )rr   statuss     rK   r   zConnection.get_autocommitk  s$    
 ##m&L&LLF|rM   c                    K   | j                          d {   }|j                         st        dd      t        |      }|j                  | _        y7 =w)N  zCommand Out of SyncT)_read_packetis_ok_packetr   r"   r   )rr   pktoks      rK   _read_ok_packetzConnection._read_ok_packets  sQ     %%''!"4)>??S!-- (s   AA>Ac                    K   | j                  t        j                  d| j                  | j                        z         d{    | j                          d{    y7 7 w)z3Set whether or not to commit after every execute() zSET AUTOCOMMIT = %sN)_execute_commandr   	COM_QUERYescaper   r   rw   s    rK   r   z Connection._send_autocommit_mode{  sa     ##!DKK0D0D$EEG 	G 	G ""$$$	G 	%s$   A A$A A$A"A$"A$c                    K   | j                  t        j                  d       d{    | j                          d{    y7 7 w)zBegin transaction.BEGINNr   r   r   r   rw   s    rK   beginzConnection.begin  s>     ##G$5$5w???""$$$ 	@$   $AAAAAAc                    K   | j                  t        j                  d       d{    | j                          d{    y7 7 w)z!Commit changes to stable storage.COMMITNr   rw   s    rK   commitzConnection.commit  s>     ##G$5$5x@@@""$$$ 	A$r   c                    K   | j                  t        j                  d       d{    | j                          d{    y7 7 w)z"Roll back the current transaction.ROLLBACKNr   rw   s    rK   rollbackzConnection.rollback  s>     ##G$5$5zBBB""$$$ 	C$r   c                    K   | j                  t        j                  |       d{    | j                          d{    y7 7 w)zSet current dbN)r   r   COM_INIT_DBr   )rr   r3   s     rK   	select_dbzConnection.select_db  s=     ##G$7$7<<<""$$$ 	=$r   c                    K   | j                  t        j                  d        d{    t        |       }|j	                          d{    |j
                  S 7 37 w)zSHOW WARNINGSN)r   r   r   MySQLResultr   rows)rr   results     rK   show_warningszConnection.show_warnings  sO     ##G$5$5GGGT"kkm{{ 	Hs!   $AA"A	A
AAc                     t        |t              rd| j                  |      z   dz   S t        |t              rt	        |      S t        || j                        S )z% Escape whatever value you pass to it')
isinstancer   r   r   r   r   r   rr   objs     rK   r   zConnection.escape  sM    c3++C00366c5!(--3..rM   c                 $    | j                  |      S )zAlias for escape())r   r   s     rK   literalzConnection.literal  s    {{3rM   c                 v    | j                   t        j                  z  r|j                  dd      S t	        |      S )Nr   z'')r   r   "SERVER_STATUS_NO_BACKSLASH_ESCAPESreplacer   )rr   ss     rK   r   zConnection.escape_string  s6    @@A99S$''QrM   c                 f   | j                          | j                  j                         | _        	 |rt	        d |D              rt        d      |r%t        |      dk(  r |d   | | j                        }nn|rPdj                  t        d |            j                  dd      dz   }t        ||i       } || | j                        }n| j                  | | j                        }| j                  j                         }|j                  |       t        |      S # t
        $ r t        d      w xY w)a  Instantiates and returns a cursor

        By default, :class:`Cursor` is returned. It is possible to also give a
        custom cursor through the cursor_class parameter, but it needs to
        be a subclass  of :class:`Cursor`

        :param cursor: custom cursor class.
        :returns: instance of cursor, by default :class:`Cursor`
        :raises TypeError: cursor_class is not a subclass of Cursor.
        c              3   >   K   | ]  }t        |t                 y wrO   )
issubclassr%   ).0cursors     rK   	<genexpr>z$Connection.cursor.<locals>.<genexpr>  s     M6Jvv66Ms   z(Custom cursor must be subclass of Cursorr$   r   r-   c                     | j                   S rO   )rz   )xs    rK   rY   z#Connection.cursor.<locals>.<lambda>  s
    

 rM   r%   )_ensure_aliver   r   r   any	TypeErrorlenr   joinmapr  typer<   create_future
set_resultr)   )rr   cursorscurcursor_namecursor_classfuts         rK   r  zConnection.cursor  s    	::??,	HMWMM JKK s7|q('!*T4::.C''#&:G"DE2&2KWb9LtTZZ0C""44Cjj&&(ss##  	HFGG	Hs   D D0c                   K   t        |t              r|j                  | j                  d      }| j	                  t
        j                  |       d {    | j                  |       d {    | j                  S 7 *7 w)Nsurrogateescape)
unbuffered)	r   r   encoder   r   r   r   _read_query_resultr   )rr   sqlr   s      rK   queryzConnection.query  sm     c3**T]],=>C##G$5$5s;;;%%%<<<""" 	<<s$   ABA=B,A?-B?Bc                 V   K   | j                          d {    | j                  S 7 wrO   )r"  r   rw   s    rK   next_resultzConnection.next_result  s)     %%'''""" 	(s   )')c                     | j                   S rO   )r   rw   s    rK   affected_rowszConnection.affected_rows      """rM   c                    K   t        j                  d|      }| j                  t        j                  |       d {    | j                          d {    y 7 7 w)N<I)r   r   r   r   COM_PROCESS_KILLr   )rr   	thread_idargs      rK   killzConnection.kill  sN     kk$	*##G$<$<cBBB""$$$ 	C$s!   :AAAAAAc                   K   | j                   4| j                  (|r| j                          d{    d}nt        d      	 | j	                  t
        j                  d       d{    | j                          d{    y7 T7 7 	# t        $ r9 |r5| j                          d{  7   | j                  d       d{  7   Y y w xY ww)zCheck if the server is aliveNFzAlready closedr-   )
r   r   rH   r   r   r   COM_PINGr   	Exceptionping)rr   	reconnects     rK   r3  zConnection.ping  s     <<DLL$8mmo%%!	,--	''(8(8"===&&((( &
 >( 	mmo%%ii&&&	so   .CBC#B 'B(B ?B	 B CB 	B C)B,*CCC	CCCc                    K   t        |      j                  }| j                  t        j                  d| j                  |      z         d{    | j                          d{    || _        || _        y7 +7 w)z1Sets the character set for the current connectionzSET NAMES %sN)	r   r   r   r   r   r   r   r   r   )rr   r6   r   s      rK   set_charsetzConnection.set_charset  st      #7+44##G$5$5~&*kk'&:8; < 	< 	<!!!!		<!s$   AA=A9A=%A;&A=;A=c                 v  K   	 | j                   ret        j                  t        | j                         | j                         d {   \  | _        | _        d| j                   z   | _        d| _        nt        j                  t        | j                  | j                        | j                         d {   \  | _        | _        | j                          | j                  d       d| j                  | j                  fz  | _        d| _        | j                          d {    | j!                          d {    | j"                  j%                         | _        | j(                  &| j+                  d| j(                          d {    | j,                  ;| j+                  | j,                         d {    | j/                          d {    | j0                  $| j3                  | j0                         d {    y y 7 7 V7 7 7 7 Y7 C7 # t4        $ r}| j                  r$| j                  j6                  j9                          d | _        d | _        t;        |t<        t>        t        j@                  f      r(tC        tD        jF                  d| j                  z        | d }~ww xY ww)N)timeoutzLocalhost via UNIX socket: Tzsocket %s:%dr   zSET sql_mode=z#Can't connect to MySQL server on %r)$r   r[   wait_forrl   r>   r   r   r   r   rg   r   r   _set_keep_alive_set_nodelay_next_seq_id_get_server_information_request_authenticationr   r   connected_timer7   r$  r=   r   r   r@   r2  rd   r   r   IOErrorOSErrorTimeoutErrorr   r	   CR_CONN_HOST_ERROR)rr   es     rK   rH   zConnection._connect   sN    7	  $$- --/ $ 4 46.6*dl
 "?!%!2!2"3# $$( JJ JJ( !% 4 4	6.6*dl $$&!!$'!/4::tzz2J!J !D..000..000"&**//"3D}}(jj=!@AAA  ,jj!2!2333kkm####/ood&:&:;;; 0C.6.6 10
 B 4# < 	||&&,,.DLDL
 !gw0D0DEF&))9DJJF  %	s   J9AH H
A/H 7H8A,H $H%H <H=AH H.H <H=H H.H HH J9
H H H H H H H H 	J6%BJ11J66J9c                    | j                   j                  }|j                          |j                  dd       }|t	        d      |j                  t        j                  t        j                  d       |j                          y )Nr   default)Transport does not expose socket instancer$   )
r   rd   pause_readingget_extra_infoRuntimeError
setsockoptr   
SOL_SOCKETSO_KEEPALIVEresume_reading)rr   rd   raw_socks      rK   r:  zConnection._set_keep_alive=  sn    LL**	!++Hd+CJKKF--v/B/BAF  "rM   c                 6   t        t        |            }| j                  j                  }|j	                          |j                  dd       }|t        d      |j                  t        j                  t        j                  |       |j                          y )Nr   rF  rH  )r   r   r   rd   rI  rJ  rK  rL  r   IPPROTO_TCPTCP_NODELAYrO  )rr   r   flagrd   rP  s        rK   r;  zConnection._set_nodelayF  s|    4;LL**	!++Hd+CJKKF..0B0BDI  "rM   c                     t        t        |            t        | j                  g      z   |z   }| j	                  |       | j                  dz   dz  | _        y)zwWrites an entire "mysql packet" in its entirety to the network
        addings its length and sequence number.
        r$      N)r&   r  r   r<  _write_bytes)rr   payloaddatas      rK   write_packetzConnection.write_packetP  sP     3w<(5$2C2C1D+EEO$!..2c9rM   c                 D  K   d}	 	 | j                  d       d{   }t	        j
                  d|      \  }}}||dz  z   }|| j                  k7  rI| j                          |dk(  rt        t        j                  d      t        d	|| j                  fz        | j                  d
z   dz  | _        	 | j                  |       d{   }||z  }|dk(  r|t        k  rn ||| j                        }	|	j                         rE| j                  )| j                  j                   du rd| j                  _        |	j#                          |	S 7 0# t        j                  $ r | j                           w xY w7 # t        j                  $ r | j                           w xY ww)zRead an entire "mysql packet" in its entirety from the network
        and return a MysqlPacket type that represents the results.
        rM   T   Nz<HBB   r   ,Lost connection to MySQL server during queryz1Packet sequence number wrong - got %d expected %dr$   rV  i F)_read_bytesr[   CancelledError_close_on_cancelr   unpackr<  r   r   r	   CR_SERVER_LOSTr   r   r   is_error_packetr   unbuffered_activeraise_for_error)
rr   packet_typebuffpacket_headerbtrlbtrhpacket_numberbytes_to_read	recv_datapackets
             rK   r   zConnection._read_packetZ  s     &*&6&6q&9 9
 )/)'%D$ DBJ/M
  1 11

 A%*))FH H $G"D$5$5678 8 "&!2!2Q!6# =D"&"2"2="AA	
 ID(~-M P T4>>2!!#||'||--516.""$Y !:)) %%'2 B)) %%'sW   F E EE BF 2E8 E6E8 B F E %E33F 6E8 8%FF c                 d  K   	 | j                   j                  |       d {   }|S 7 # t        j                  $ r2}d}| j	                          t        t        j                  |      |d }~wt        $ r6}d| d}| j	                          t        t        j                  |      |d }~ww xY ww)Nr^  z.Lost connection to MySQL server during query ())	r   readexactlyr[   IncompleteReadErrorr   r   r	   rc  rA  )rr   	num_bytesrY  rD  msgs        rK   r_  zConnection._read_bytes  s     		B11)<<D  =** 	B@CJJL"2#4#4c:A 	BB1#QGCJJL"2#4#4c:A	Bs<   B0+ )+ B0+ B--A++B-71B((B--B0c                 8    | j                   j                  |      S rO   )r   r   )rr   rY  s     rK   rW  zConnection._write_bytes  s    ||!!$''rM   c                 Z  K   d | _         |r%	 t        |       }|j                          d {    n#t        |       }|j                          d {    || _         |j                  | _        |j                  |j                  | _	        y y 7 _# t        $ r d_        d |_         w xY w7 Yw)NF)
r   r   init_unbuffered_queryBaseExceptionre  
connectionr   r(  r   r   )rr   r   r   s      rK   r"  zConnection._read_query_result  s     $T*22444 !&F++-$22+!'!5!5D , 5  +0($(!  s7   
B+B BB B+B);B+B B&&B+c                 H    | j                   r| j                   j                  S yNr   )r   	insert_idrw   s    rK   r}  zConnection.insert_id  s    <<<<)))rM   c                    K   | S wrO   rG   rw   s    rK   
__aenter__zConnection.__aenter__  s     s   c                 f   K   |r| j                          y | j                          d {    y 7 wrO   )r   r   )rr   exc_typeexc_valexc_tbs       rK   	__aexit__zConnection.__aexit__  s3     JJL 	 $$&&& 's   '1/1c                    K   | j                          | j                  | j                  j                  r7t        j                  d       | j                  j                          d {    | j                  j                  r/| j                          d {    | j                  j                  r/d | _        t        |t              r|j                  | j                        }t        t        t        |      dz         }t        j                   d||      }| j#                  ||d |dz
   z          d| _        |t        k  ry ||dz
  d  }	 t        t        t        |            }| j'                  |d |        ||d  }|s
|t        k  ry ?7 "7 w)Nz.Previous unbuffered result was left incompleter$   z<iB)r  r   re  warningswarn_finish_unbuffered_queryhas_nextr&  r   r   r!  r   minr   r  r   r   rW  r<  rZ  )rr   commandr#  
chunk_sizepreludes        rK   r   zConnection._execute_command  sU     <<#||--NOll;;===,,''&&((( ,,''DLc3**T^^,CSA6
++eZ9'Ca$889&*q./"^SX6Jc+:./jk"C:6 ' >(s+   A%F'F	(-FFF1CFFc                 ~  K   t        | j                  j                  dd      d         dk\  r#| xj                  t        j
                  z  c_        | j                  t        d      t        | j                        j                  }t        j                  d| j                  t        |d      }| j                  r| j                  t        j                   z  r| j#                  |       | j$                  j&                  j)                          | j$                  j&                  j+                  dd 	      }|t-        d
      |j/                         }| j$                  j&                  j1                          t3        || j                  | j4                         d {   \  | _        | _        d| _        t;        | j                  t<              r&| j                  j?                  | j@                        }n| j                  }||z   dz   }d}| jB                  }| jB                  s| jD                  }|dv r:tG        jH                  | jJ                  j?                  d      | jL                        }n|dk(  rF| jJ                  rtG        jN                  | jJ                  j?                  d      | jL                        }n|dk(  rZ| j                  r<| j                  t        j                   z  r| jJ                  j?                  d      dz   }n4| jJ                  rd}n%d}n"|dv r| jJ                  j?                  d      dz   }| j                  t        jP                  z  r|tS        tU        |            |z   z  }nK| j                  t        jV                  z  r&|t        j                  dtU        |            |z   z  }n||dz   z  }| jX                  rq| j                  t        jZ                  z  rTt;        | jX                  t<              r&| jX                  j?                  | j@                        }n| jX                  }||dz   z  }| j                  t        j\                  z  r+|}	t;        |	t<              r|	j?                  d      }	||	dz   z  }|| _/        | j                  t        j`                  z  rd}
| jb                  je                         D ]q  \  }}|j?                  d      |j?                  d      }}|
t        j                  dtU        |            |z   z  }
|
t        j                  dtU        |            |z   z  }
s |t        j                  dtU        |
            |
z   z  }| j#                  |       | jg                          d {   }|ji                         r|jk                          |jm                         }| j                  t        j\                  z  r|| jo                  ||       d {    y tG        jp                  | jJ                  j?                  d      |js                               dz   }| j#                  |       | jg                          d {    y |ju                         rJ|dk(  r| jw                  |       d {    y |dk(  r| jy                  |       d {    y t{        d|      y 7 7 77 7 h7 ;7 w)N.r$   r      zDid not specify a usernamez<iIB23srM   r   rF  rH  )sockrD   server_hostnameT    )r-   mysql_native_passwordlatin1caching_sha2_passwordsha256_password   )r-   mysql_clear_passwordBasciiutf8z(Received extra packet for auth method %r)>r   server_versionsplitr;   r   MULTI_RESULTSr1   
ValueErrorr   r6   idr   r   r   r   server_capabilitiesr   rZ  r   rd   rI  rJ  rK  dupr   rg   r   r   r   r   r   r!  r   r   r   r   scramble_native_passwordr   r   scramble_caching_sha2PLUGIN_AUTH_LENENC_CLIENT_DATAr'   r  SECURE_CONNECTIONr   r   PLUGIN_AUTHr   CONNECT_ATTRSr   itemsr   is_auth_switch_request
read_uint8read_string_process_authscramble_old_passwordread_allis_extra_auth_datacaching_sha2_password_authsha256_password_authr   )rr   
charset_id	data_initrP  r   rY  authresprE   r3   nameconnect_attrskvauth_packetplugin_names                  rK   r>  z"Connection._request_authentication  s    t""((a0349 4 44999::$T\\255
KK	4+;+;^ *C1	 !9!9FJJ!Fi( LL""002 ||--<<XEI = KH"#NOO||~HLL""((*
 0@4#4#4 $

0 *&DL$,
  DLdii%II$$T]]3EIIE5 5(..''22K7755%%h/<H33~~ 66NN))(3TYY --  T%=%=

%J>>00:UB  88~~,,X6>H##f&K&KKKH.99D%%(@(@@FKKS]3h>>D Hu$$D880063I3II$((C(XX__T]]3XXBJD##f&8&88D$${{7+D5L D!, ##f&:&::M++113 >1xx'&)91S#a&!9A!==S#a&!9A!==> FKKS%78=HHD$ --// --/ ""$%113K((6+=+==+((kBBB 22NN))(3((*,.34 !!$''')))++-5555kBBB 11//<<<& (<=HJ J .}*V 0 C * C<so   FZ=Z/O!Z=;Z2<A(Z=$Z5%A)Z=Z7.Z==Z9>Z=Z;Z=2Z=5Z=7Z=9Z=;Z=c                   K   |dk(  r/| j                  |       d {    |j                         | _        y |dk(  r/| j                  |       d {    |j                         | _        y |dk(  r>t	        j
                  | j                  j                  d      |j                               }n|dk(  rAt	        j                  | j                  j                  d      |j                               dz   }n?|dk(  r| j                  j                  d      dz   }nt        dd	j                  |            | j                  |       | j                          d {   }|j                          |j                         | _        |S 7 g7 67 1w)
Ns   caching_sha2_passwords   sha256_passwords   mysql_native_passwordr  s   mysql_old_passwordr  s   mysql_clear_passwordi  z)Authentication plugin '{}' not configured)r  decoder   r  r   r  r   r!  r  r  r   formatrZ  r   check_error)rr   r  r  rY  r   s        rK   r  zConnection._process_authh  sz    2211+>>>%0%7%7%9D"..++K888%0%7%7%9D" 66 55NN))(3((*,  55 22NN))(3((*   77 ~~,,X6>& ,,2F;,? 
 d#))++COO%0%7%7%9D"JK ? 9: ,s4   FF3FFDFF	,FF	Fc                   K   | j                   s;| j                  d       | j                          d {   }|j                          |S |j	                         rt        j                  d       |j                         | _        t        j                  | j                   j                  d      | j                        }| j                  |       | j                          d {   }|j                          |j                         s't        dj                  |j                  d d             |j!                  d       |j#                         }|dk(  r?t        j                  d       | j                          d {   }|j                          |S |dk7  rt        d	j                  |            t        j                  d
       | j$                  rlt        j                  d       | j                  | j                   j                  d      dz          | j                          d {   }|j                          |S | j&                  s| j                  d       | j                          d {   }|j                          |j                         s't        dj                  |j                  d d             |j                  dd  | _        t        j                  | j&                  j)                  d             t        j*                  | j                   j                  d      | j                  | j&                        }| j                  |       | j                          d {   }|j                          y 7 G7 7 7 \7 7 $w)NrM   zcaching sha2: Trying fast pathr  z.caching sha2: Unknown packet for fast auth: {}r$      z%caching sha2: succeeded by fast path.r\  z.caching sha2: Unknown result for fast auth: {}z!caching sha2: Trying full auth...z:caching sha2: Sending plain password via secure connectionr     z/caching sha2: Unknown packet for public key: {}r  )r   rZ  r   r  r  r*   debugr  r   r   r  r!  r  r   r  _dataadvancer  r   rI   r  sha2_rsa_encrypt)rr   r   	scramblednrY  s        rK   r  z%Connection.caching_sha2_password_auth  s    ~~c"))++COOJ%%'LL9:DI33%%h/I i())++COO %%'"$$*F399Ra=$9  	ANN6LL@A))++COOJ6" $>>DfQiI I 	89<<LL : ;dnn33H=EF))++COOJ%%g&))++COO))+&))/		"1)> 
 &)YYqr]D"LL//66w?@%%NN!!(+TYY""
 	$%%''Q , ,* , , ," (sn   1NM:B-N!M="BN;N <B+N'N(AN.N/C5N$N	%N=N NNN	Nc                   K   | j                   rnt        j                  d       | j                  j	                  d      dz   }| j                  |       | j                          d {   }|j                          |S |j                         r{|j                         | _
        | j                  sZ| j                  rNt        j                  d       | j                  d       | j                          d {   }|j                          |j                         rC|j                  dd  | _        t        j                  d| j                  j                  d             | j                  r\| j                  st        d	      t!        j"                  | j                  j	                  d      | j                  | j                        }nd
}| j                  |       | j                          d {   }|j                          |S 7 7 7 w)Nzsha256: Sending plain passwordr  r  z$sha256: Requesting server public keyr  r$   zReceived public key:
%sr  z$Couldn't receive server's public keyrM   )r   r*   r  r   r!  rZ  r   r  r  r  r   rI   r  r  r  r   r   r  )rr   r   rY  s      rK   r  zConnection.sha256_password_auth  s    <<LL9:>>((2U:Dd#))++COOJ%%'DI))dnnCD!!%( --//!!!#%(YYqr]D"LL*&&--g6
 >>))&'MNN))%%h/&&D
 D$%%''
E , 0, (s8   A$H&H 'BH3H4C5H)H*HHHc                      | j                   d   S r|  )server_thread_idrw   s    rK   r-  zConnection.thread_id
  s    $$Q''rM   c                     | j                   S rO   r   rw   s    rK   character_set_namezConnection.character_set_name  s    }}rM   c                     | j                   S rO   )r   rw   s    rK   get_host_infozConnection.get_host_info  s    ~~rM   c                     | j                   S rO   )protocol_versionrw   s    rK   get_proto_infozConnection.get_proto_info  s    $$$rM   c                 D  K   d}| j                          d {   }|j                         }||   | _        |dz  }|j                  d|      }||| j	                  d      | _        |dz   }t        j                  d|||dz          | _        |dz  }|||dz    | _	        |dz  }t        j                  d	|||d
z          d   | _
        |d
z  }t        |      |dz   k\  rvt        j                  d|||dz          \  }}}}|dz  }|| _        	 t        |      j                  | _        || _        | xj                  |dz  z  c_
        t%        d|dz
        }|dz  }t        |      |z   k\  r | xj                  ||||z    z  c_	        ||z  }|dz  }| j                  t&        j(                  z  rZt        |      |k\  rK|j                  d|      }|dk  r||d  j	                  d      | _        y ||| j	                  d      | _        y y y 7 # t         $ r
 d | _        Y w xY ww)Nr   r$   r  r  r+  r\     	   z<Hr      z<BHHBr]     
   )r   get_all_datar  findr  r  r   rb  r  r   r  r  server_languager   r  server_charsetKeyErrorr   maxr   r  r   )	rr   iro  rY  
server_endlangstatcap_hsalt_lens	            rK   r=  z"Connection._get_server_information  s?    ((**""$ $Q	QYYua(
"1Z077AN &dD1q5M B	Q1q5M		Q#)==tAa!e}#Ea#H 	Qt9A*0--aA*O'D$xFA#'D +&3D&9&>&>#
 "&D$$3$2x!|,H 	
Rt9H$IIaH--IMA	Q ##f&8&88SY!^ 5!,JA~+/8??8+D(+/*+=+D+DX+N( >L8] +2  +&*#+s5   H HC2H H
 &C"H 
HH HH c                 N    t        | j                  t        j                  z        S rO   )r   r   r   SERVER_STATUS_IN_TRANSrw   s    rK   get_transaction_statusz!Connection.get_transaction_statusT  s    D&&)M)MMNNrM   c                     | j                   S rO   )r  rw   s    rK   get_server_infozConnection.get_server_infoW  r)  rM   c                 2    | j                          d| _        y )NzCancelled during execution)r   r   rw   s    rK   ra  zConnection._close_on_cancel\  s    

9rM   c                 t    | j                   s,| j                  t        d      t        | j                        y )Nz(0, 'Not connected'))r   r   r   rw   s    rK   r  zConnection._ensure_alive`  s7    ||!!)$%;<<$T%7%788	 rM   c                 x    | j                   r.t        j                  d| t               | j	                          y y )NzUnclosed connection )r   r  r  ResourceWarningr   rw   s    rK   __del__zConnection.__del__g  s0    <<MM09)+JJL rM   )F)T)Mrz   r{   r|   r}   r   r%   rq   r~   r0   r4   r5   r3   r1   rA   r   rC   r   r   r6   r   r   r@   r   r   r   r   r   r   r   r   r   r  r   r  r$  r&  r(  r/  r3  r6  rH   r:  r;  rZ  r   r   r_  rW  r"  r}  r  r  r   r>  r  r  r  r-  r  r  r  r=  r  r  ra  r  r  r   r   r   r   r   r   r   r   r   r   rG   rM   rK   rP   rP      sZ    (dRtd#'hDF!%$!#$Db DM"^     ! !             $ $    /%%
%
%
%
/  $B###%
$";z##: .9 3j(6$ DCJJ(TL\'T(%<O|O#
:9 GE#N!MI'#N!M')rM   rP   c                   T    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)r   c                     || _         d | _        d | _        d | _        d| _        d | _        d| _        d | _        d | _        d | _	        d| _
        y )Nr   F)rz  r(  r}  r   warning_countmessagefield_countdescriptionr   r  re  )rr   rz  s     rK   rq   zMySQLResult.__init__}  sU    $!!	!&rM   c                 N  K   	 | j                   j                          d {   }|j                         r| j                  |       nC|j	                         r| j                  |       d {    n| j                  |       d {    d | _         y 7 q7 (7 # d | _         w xY wwrO   )rz  r   r   r   is_load_local_packet_read_load_local_packet_read_result_packetrr   first_packets     rK   r   zMySQLResult.read  s     	#!%!=!=!??L ((*$$\222422<@@@..|<<<"DO @ A<"DOsQ   B%B BA
B ,B-B BB B%B B B 	B""B%c                   K   d| _         | j                  j                          d {   }|j                         r | j	                  |       d| _         d | _        y |j                         r(| j                  |       d {    d| _         d | _        y |j                         | _        | j                          d {    d| _
        y 7 7 J7 w)NTFl    )re  rz  r   r   r   r  r  read_length_encoded_integerr  _get_descriptionsr(  r  s     rK   rx  z!MySQLResult.init_unbuffered_query  s     !%!__99;;$$&  .%*D""DO..0..|<<<%*D""DO+GGID((***
 "6D# < =
 +s4   %CC	AC C;C<C=CCCc                     t        |      }|j                  | _        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        y rO   )r"   r(  r}  r   r  r  r  )rr   r  	ok_packets      rK   r   zMySQLResult._read_ok_packet  s]    #L1	&44",,&44&44 ((!**rM   c                   K   t        |      }t        |j                  | j                        }	 |j	                          d {    | j                  j                          d {   }|j                         st        dd      | j                  |       y 7 T# t
        $ r% | j                  j                          d {  7    w xY w7 ew)Nr   zCommands Out of Sync)
r#   LoadLocalFilefilenamerz  r   r2  r   r   r   r   )rr   r  load_packetsenderr   s        rK   r  z#MySQLResult._read_load_local_packet  s     ,\:{33T__E	""$$$ //6688	%%'"4)?@@Y' % 	//..000	
 9sF   ,CB BB C$C
%2CB &C?C CCc                     |j                         r.t        |      }|j                  | _        |j                  | _        yy)NTF)is_eof_packetr!   r  r  )rr   ro  
eof_packets      rK   _check_packet_is_eofz MySQLResult._check_packet_is_eof  s9    !)&1J!+!9!9D&//DMrM   c                    K   |j                         | _        | j                          d {    | j                          d {    y 7 7 wrO   )r  r  r  _read_rowdata_packetr  s     rK   r  zMySQLResult._read_result_packet  sD     'CCE$$&&&''))) 	')s!   )AA	AAAAc                    K   | j                   sy | j                  j                          d {   }| j                  |      rd| _         d | _        d | _        y | j                  |      }d| _        |f| _        |S 7 Mw)NFr$   )re  rz  r   r	  r   _read_row_from_packetr(  )rr   ro  rows      rK   _read_rowdata_packet_unbufferedz+MySQLResult._read_rowdata_packet_unbuffered  sy     %%3355$$V,%*D""DODI((0F	
 6s   +A=A;AA=c                 4  K   | j                   rP	 | j                  j                          d {   }| j                  |      rd| _         d | _        | j                   rOy y 7 2# t        $ r*}|j                  d   dv rd| _         d | _        Y d }~y  d }~ww xY ww)Nr   )i  i  F)re  rz  r   r   rQ   r	  )rr   ro  rD  s      rK   r  z$MySQLResult._finish_unbuffered_query  s      $$#;;== ((0).&"&) $$=#  66!9 ! 
 .3D*&*DOsI   BA" A A" +BB A" "	B+B
BBBBc                   K   g }	 | j                   j                          d{   }| j                  |      rd| _         n!|j                  | j	                  |             \t        |      | _        t        |      | _        y7 _w)z:Read a rowdata packet for each data row in the result set.N)	rz  r   r	  appendr  r  r(  tupler   )rr   r   ro  s      rK   r  z MySQLResult._read_rowdata_packet  su     ??7799F((0"&KK226:;  !Y$K	 :s   !BBA Bc                     g }| j                   D ]F  \  }}	 |j                         }|||j                  |      }| ||      }|j	                  |       H t        |      S # t        $ r Y  t        |      S w xY wrO   )
convertersread_length_coded_string
IndexErrorr  r  r  )rr   ro  r  r   	converterrY  s         rK   r  z!MySQLResult._read_row_from_packet  s    #'?? 	Hi668
 ';;x0D($T?DJJt	 Sz    Szs   A##	A:9A:c                 :  K   g | _         g | _        | j                  j                  }| j                  j                  }g }t        | j                        D ]  }| j                  j                  t               d{   }| j                   j                  |       |j                  |j                                |j                  }|r6|t        j                  k(  r|}n"|t        v r|j                  dk(  rd}n|}nd}nd}| j                  j                   j#                  |      }|t$        u rd}| j                  j                  ||f        | j                  j                          d{   }	|	j'                         sJ d       t)        |      | _
        y7 7 /w)z>Read a column descriptor packet for each column in the result.N?   r  zProtocol error, expecting EOF)fieldsr  rz  r:   r   ranger  r   r    r  r  	type_coder
   JSONr   	charsetnrr   r   r   r  r  )
rr   r:   conn_encodingr  r  field
field_typer   r  r  s
             rK   r  zMySQLResult._get_descriptions  sg    oo1100t''( 	:A//66%' 'EKKu%u0023J0  -H:-",#'#0  'H0044Z@IG# 	OO""Hi#89?	:B  ??7799
'')J+JJ) -E'@ :s%   A7F9F:C/F)F*-FFN)rz   r{   r|   rq   r   rx  r   r  r	  r  r  r  r  r  r  rG   rM   rK   r   r   {  s>    '#6*+(*
$'4 "*.rM   r   c                   $    e Zd Zd Zd Zd Zd Zy)r  c                 ^    || _         || _        |j                  | _        d | _        d | _        y rO   )r  rz  rC   r   _file_object	_executor)rr   r  rz  s      rK   rq   zLoadLocalFile.__init__K  s*     $__
 rM   c                 t      fd} j                   j                   j                  | j                        }|S )Nc                 r    	 t        | d      _        y # t        $ r}d|  d}t        d|      |d }~ww xY w)NrbzCan't find file 'r   i  )openr%  rA  r   )r  rD  ru  rr   s      rK   openerz(LoadLocalFile._open_file.<locals>.openerT  sD    9$(4$8! 9)(15&tS1q89s    	616)r   run_in_executorr&  r  )rr   r+  r  s   `  rK   
_open_filezLoadLocalFile._open_fileR  s/    	9 jj((O
rM   c                 `      fd} j                   j                   j                  ||      }|S )Nc                 "   	 j                   j                  |       }|s!j                   j                          d _         |S # t        $ rB}j                   j                          d _         dj                   }t        d|      |d }~ww xY w)NzError reading file i   )r%  r   r   r2  r  r   )r  chunkrD  ru  rr   s       rK   freaderz)LoadLocalFile._file_read.<locals>.freader`  s    9))..z:%%++-(,D% L  9!!'')$(!+DMM?;&tS1q8	9s   >A 	B=B		B)r   r,  r&  )rr   r  r1  r  s   `   rK   
_file_readzLoadLocalFile._file_read^  s+    	 jj((*M
rM   c                   K   | j                   j                          | j                   }	 | j                          d{    | j                  5  t        }	 | j                  |       d{   }|sn|j                  |       .	 ddd       |j                  d       y7 a7 6# 1 sw Y   xY w# t        j                  $ r | j                   j                           w xY w# |j                  d       w xY ww)z3Send data packets from the local file to the serverNrM   )
rz  r  r-  r%  r   r2  rZ  r[   r`  ra  )rr   rS   r  r0  s       rK   r   zLoadLocalFile.send_datar  s     %%'	#//###"" -+
"&//*"==E %%e,  - c" $ >- - %% 	OO,,.	
 c"sb   'C7B/ BB/ B#*B!+B#B/ C7B/ !B##B,(B/ //CC! !C44C7N)rz   r{   r|   rq   r-  r2  r   rG   rM   rK   r  r  J  s    
(#rM   r  )NNrO   )Dr[   r   r   r   r   r  r   getpass	functoolsr   pymysql.charsetr   r   pymysql.constantsr   r   r   r	   r
   pymysql.convertersr   r   r   r   r   r   pymysql.errr   r   r   r   r   r   r   r   r   r   pymysql.connectionsr   r   r   r   r   r    r!   r"   r#   r  r%   utilsr&   r'   r(   r)   logr*   getuserr   r  rL   rH   rg   rl   StreamReaderr^   rP   r   r  rG   rM   rK   <module>r?     s'    	   
     : + $ %   (O O+ + + L K % + 5 0 / 6  W W "7??$L
 4"$D"tvD T5Ttt+2 "G(( "(t* t*rL. L.^<# <#}(  Ls   <D( (D21D2