
    Zh                     x   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j8                    Z9n# e:$ r dZ9Y nw xY wd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&          ZCdS ))    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                            `/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/aiomysql/connection.pyconnectrL   0   sE     
H 
H 
H 
HDD 
H88 
H 
H
H+6;
H@G
H%X
H9J9J
H 
H ,7;
H !,	
H :E	
H
 ".
H %4O
H (:'9
H  *z
H 15
H ".
H 59D
H ?Bc
H !,
H ;G,
HD %T***    c                  V   K   t          | i |}|                                 d {V  |S N)
ConnectionrH   )argskwargsconns      rK   rH   rH   I   s=      t&v&&D
--//KrM   c                    K   t           j                                        }t          |          }t          j        ||           |j        fd| |fi | d{V \  }}t          j        |||          }||fS )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DDF6>rM   c                    K   t           j                                        }t          |          }t          j        ||           |j        fd| fi | d{V \  }}t          j        |||          }||fS )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$( ("&( ( ( ( ( ( ( (LIq!)XvtDDF6>rM   c                   F     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.
    Nc                 Z    d| _         t                                          |           d S )NFrU   )_eof_receivedsuper__init__)selfrC   	__class__s     rK   rq   z_StreamReader.__init__u   s,    "d#####rM   returnc                 V    d| _         t                                                       d S )NT)ro   rp   feed_eof)rr   rs   s    rK   rv   z_StreamReader.feed_eofy   s'    !rM   c                     | j         S rO   )ro   rr   s    rK   eof_receivedz_StreamReader.eof_received}   s    !!rM   rO   )rt   N)	__name__
__module____qualname____doc__rq   rv   propertyry   __classcell__)rs   s   @rK   r^   r^   n   s         $ $ $ $ $ $      " " X" " " " "rM   r^   c                      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!dDd#Z"d$ Z#d% Z$d& Z%dEd(Z&d) Z'd* Z(d+ Z)d, Z*d- Z+e,fd.Z-d/ Z.d0 Z/dDd1Z0d2 Z1d3 Z2d4 Z3d5 Z4d6 Z5d7 Z6d8 Z7d9 Z8d: Z9d; Z:d< Z;d= Z<d> Z=d? Z>d@ Z?dA Z@dB ZAdC ZBeCZCeDZDeEZEeFZFeGZGeHZHeIZIeJZJeKZKeLZLdS )FrP   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                    |pt          j                    | _        |t          j        d         dk    rd}|	r|sd}t          j                    }|                    t          j	        
                    |	                     t          |j        |          } |d|          } |d|          } |d	|          } |d
|          } |d|          }t           |d|                    } |d|          }|| _        || _        |pt           | _        |pd| _        || _        || _        | j                                        | _        || _        d| _        d| _        d| _        || _        d| _        ddlm} dt?          t          j                               |d| _!        |r
|| j!        d<   || _"        |r|| _#        d| _$        ntJ          | _#        d| _$        ||| _$        || _&        |r|tN          j(        z  }tS          | j#                  j*        | _+        |r|tN          j,        z  }|tN          j-        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| _=        dS )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55
3#3A#6#:#:K 	I% .%-".00CHHRW''(9::;;;cg'9::G76D111DwzH===H76D111Db111B!'([AAAKwwv55566Dg5HHHG

)\
!R
:??,,#. #% !#!2	!!!!!!&	$$*
 

  	?2>D/' 	%#DM#D+DM$D"*D 	&6:%K(77@ 	.6--Kv**v..8 	2611K&&.(  *  (  "rM   c                     | j         S )zMySQL server IP address or name)r   rx   s    rK   r0   zConnection.host       zrM   c                     | j         S )zMySQL server TCP/IP port)r   rx   s    rK   r4   zConnection.port  r   rM   c                     | j         S )zMySQL Unix socket file location)r   rx   s    rK   r5   zConnection.unix_socket"  s       rM   c                     | j         S )zCurrent database name.)r   rx   s    rK   r3   zConnection.db'  s     xrM   c                     | j         S )z#User used while connecting to MySQL)r   rx   s    rK   r1   zConnection.user,  r   rM   c                     | j         S )zReturn echo mode status.)r   rx   s    rK   rA   zConnection.echo1  r   rM   c                     | j         S )z'Return time() when connection was used.)r   rx   s    rK   
last_usagezConnection.last_usage6  s     rM   c                     | j         S rO   )r   rx   s    rK   rC   zConnection.loop;  s
    zrM   c                     | j         du S )zVThe readonly property that returns ``True`` if connections is
        closed.
        N)r   rx   s    rK   closedzConnection.closed?  s    
 |t##rM   c                     | j         S )z&Encoding employed for this connection.)r   rx   s    rK   r   zConnection.encodingF  s     ~rM   c                     | j         S )z1Returns the character set for current connection.r   rx   s    rK   r6   zConnection.charsetK  s     }rM   c                 l    | j         r| j         j                                         d| _         d| _        dS )zClose socket connectionN)r   rd   closer   rx   s    rK   r   zConnection.closeP  s5    < 	+L"((***rM   c                   K   | j         dS t          j        dd          t          t          j        g          z   }| j                             |           | j                                          d{V  |                                  dS )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  s      <FKa((5'2B1C+D+DD	9%%%l  """""""""

rM   c                    K   t          |          | _        |                                 }||k    r|                                  d{V  dS dS )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,,........... rM   c                 H    | 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F||rM   c                    K   |                                   d {V }|                                st          dd          t          |          }|j        | _        dS )N  zCommand Out of SyncT)_read_packetis_ok_packetr   r"   r   )rr   pktoks      rK   _read_ok_packetzConnection._read_ok_packets  sl      %%''''''''!! 	@"4)>???S!!-trM   c                    K   |                      t          j        d|                     | j                  z             d{V  |                                  d{V  dS )z3Set whether or not to commit after every execute() zSET AUTOCOMMIT = %sN)_execute_commandr   	COM_QUERYescaper   r   rx   s    rK   r   z Connection._send_autocommit_mode{  s      ##!DKK0D$E$EEG G 	G 	G 	G 	G 	G 	G 	G ""$$$$$$$$$$$rM   c                    K   |                      t          j        d           d{V  |                                  d{V  dS )zBegin transaction.BEGINNr   r   r   r   rx   s    rK   beginzConnection.begin  s[      ##G$5w?????????""$$$$$$$$$$$rM   c                    K   |                      t          j        d           d{V  |                                  d{V  dS )z!Commit changes to stable storage.COMMITNr   rx   s    rK   commitzConnection.commit  s[      ##G$5x@@@@@@@@@""$$$$$$$$$$$rM   c                    K   |                      t          j        d           d{V  |                                  d{V  dS )z"Roll back the current transaction.ROLLBACKNr   rx   s    rK   rollbackzConnection.rollback  s[      ##G$5zBBBBBBBBB""$$$$$$$$$$$rM   c                    K   |                      t          j        |           d{V  |                                  d{V  dS )zSet current dbN)r   r   COM_INIT_DBr   )rr   r3   s     rK   	select_dbzConnection.select_db  s[      ##G$7<<<<<<<<<""$$$$$$$$$$$rM   c                    K   |                      t          j        d            d{V  t          |           }|                                 d{V  |j        S )zSHOW WARNINGSN)r   r   r   MySQLResultr   rows)rr   results     rK   show_warningszConnection.show_warnings  sf      ##G$5GGGGGGGGGT""kkmm{rM   c                     t          |t                    rd|                     |          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  sd    c3 	7++C000366c5!! 	.(---3...rM   c                 ,    |                      |          S )zAlias for escape())r   r   s     rK   literalzConnection.literal  s    {{3rM   c                 t    | j         t          j        z  r|                    dd          S t	          |          S )Nr   z'')r   r   "SERVER_STATUS_NO_BACKSLASH_ESCAPESreplacer   )rr   ss     rK   r   zConnection.escape_string  s;    @A 	(99S$'''QrM   c                    |                                   | j                                        | _        	 |r(t	          d |D                       rt          d          n# t
          $ r t          d          w xY w|r+t          |          dk    r |d         | | j                  }n{|r^d                    t          d |                    
                    dd          dz   }t          ||i           } || | j                  }n|                     | | j                  }| j                                        }|                    |           t          |          S )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   B   K   | ]}t          |t                     V  d S rO   )
issubclassr%   ).0cursors     rK   	<genexpr>z$Connection.cursor.<locals>.<genexpr>  s/      MM6Jvv666MMMMMMrM   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  su    	:??,,	H LMMWMMMMML JKKK 	H 	H 	HFGGG	H 	5s7||q(('!*T4:..CC 	5''#&:&:G"D"DEE2&&2KWb99L,tTZ00CC""444Cj&&((ss###s   *A A9c                    K   t          |t                    r|                    | j        d          }|                     t
          j        |           d {V  |                     |           d {V  | j        S )Nsurrogateescape)
unbuffered)	r   r   encoder   r   r   r   _read_query_resultr   )rr   sqlr  s      rK   queryzConnection.query  s      c3 	?**T],=>>C##G$5s;;;;;;;;;%%%<<<<<<<<<""rM   c                 H   K   |                                   d {V  | j        S rO   )r!  r   rx   s    rK   next_resultzConnection.next_result  s3      %%'''''''''""rM   c                     | j         S rO   )r   rx   s    rK   affected_rowszConnection.affected_rows      ""rM   c                    K   t          j        d|          }|                     t          j        |           d {V  |                                  d {V  d S )N<I)r   r   r   r   COM_PROCESS_KILLr   )rr   	thread_idargs      rK   killzConnection.kill  sl      k$	**##G$<cBBBBBBBBB""$$$$$$$$$$$rM   Tc                   K   | j         5| j        .|r|                                  d{V  d}nt          d          	 |                     t
          j        d           d{V  |                                  d{V  dS # t          $ r< |r8|                                  d{V  | 	                    d           d{V  Y dS  w xY w)zCheck if the server is aliveNFzAlready closedr-   )
r   r   rH   r   r   r   COM_PINGr   	Exceptionping)rr   	reconnects     rK   r2  zConnection.ping  s      <DL$8 .mmoo%%%%%%%!		,---	''(8"=========&&((((((((((( 	 	 	 mmoo%%%%%%%ii&&&&&&&&&&&&	s    A B ACCc                    K   t          |          j        }|                     t          j        d|                     |          z             d{V  |                                  d{V  || _        || _        dS )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  s       #7++4##G$5~&*kk'&:&:8; < < 	< 	< 	< 	< 	< 	< 	<!!!!!!!!!!rM   c                   K   	 | j         rWt          j        t          | j                   | j                   d {V \  | _        | _        d| j         z   | _        d| _        nt          j        t          | j
        | j                  | j                   d {V \  | _        | _        |                                  |                     d           d| j
        | j        fz  | _        d| _        |                                  d {V  |                                  d {V  | j                                        | _        | j        #|                     d| j                    d {V  | j        :|                     | j                   d {V  |                                  d {V  | j        "|                     | j                   d {V  d S d S # t4          $ r}| j        r| j        j                                         d | _        d | _        t;          |t<          t>          t          j         f          r#tC          tD          j#        d| j
        z            | d }~ww xY 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@   r1  rd   r   r   IOErrorOSErrorTimeoutErrorr   r	   CR_CONN_HOST_ERROR)rr   es     rK   rH   zConnection._connect   s     7	  K$- -/ / $ 46 6 6.6 .6 .6 .6 .6 .6*dl
 "?!%!2"3# $( J J( ( !% 4	6 6 6.6 .6 .6 .6 .6 .6*dl $$&&&!!$'''!/4:tz2J!J !D..000000000..000000000"&*//"3"3D}(jj!@!@!@AAAAAAAAA ,jj!2333333333kkmm########/ood&:;;;;;;;;;;; 0/ 	 	 	| /&,,...DLDL
 !gw0DEFF &)9DJF   %	s   GG 
I# A>II#c                    | j         j        }|                                 |                    dd           }|t	          d          |                    t          j        t          j        d           |	                                 d S )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   r9  zConnection._set_keep_alive=  s    L*	!!!++Hd+CCJKKKF-v/BAFFF  """""rM   c                 L   t          t          |                    }| j        j        }|                                 |                    dd           }|t          d          |                    t          j	        t          j
        |           |                                 d S )Nr   rE  rG  )r   r   r   rd   rH  rI  rJ  rK  r   IPPROTO_TCPTCP_NODELAYrN  )rr   r   flagrd   rO  s        rK   r:  zConnection._set_nodelayF  s    4;;L*	!!!++Hd+CCJKKKF.0BDIII  """""rM   c                     t          t          |                    t          | j        g          z   |z   }|                     |           | j        dz   dz  | _        dS )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  s^     3w<<((5$2C1D+E+EEO$!.2c9rM   c                 $  K   d}	 	 |                      d           d{V }n(# t          j        $ r |                                   w xY wt	          j        d|          \  }}}||dz  z   }|| j        k    rM|                                  |dk    rt          t          j
        d          t          d	|| j        fz            | j        d
z   dz  | _        	 |                      |           d{V }n(# t          j        $ r |                                   w xY w||z  }|dk    r#|t          k     rn0 ||| j                  }	|	                                r5| j        | j        j        du rd| j        _        |	                                 |	S )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$   rU  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 9 9 9 9 9 9)   %%''' )/)' )'%D$ DBJ/M
  111

 A%%*)FH H H $G"D$5678 8 8 "&!2Q!6# =D"&"2"2="A"AAAAAAA		)   %%''' ID((~--M&	P T4>22!!## 	%|'|-5516.""$$$s   # %AC3 3%Dc                 b  K   	 | j                             |           d {V }n# t          j        $ r6}d}|                                  t          t          j        |          |d }~wt          $ r:}d| d}|                                  t          t          j        |          |d }~ww xY w|S )Nr]  z.Lost connection to MySQL server during query ())	r   readexactlyr[   IncompleteReadErrorr   r   r	   rb  r@  )rr   	num_bytesrX  rC  msgs        rK   r^  zConnection._read_bytes  s      		B11)<<<<<<<<DD* 	B 	B 	B@CJJLLL"2#4c::A 	B 	B 	BG1GGGCJJLLL"2#4c::A	B s     % B,1A%%B,25B''B,c                 6    | j                             |          S rO   )r   r   )rr   rX  s     rK   rV  zConnection._write_bytes  s    |!!$'''rM   c                 N  K   d | _         |rH	 t          |           }|                                 d {V  nF# t          $ r d|_        d |_         w xY wt          |           }|                                 d {V  || _         |j        | _        |j	        |j	        | _	        d S d S )NF)
r   r   init_unbuffered_queryBaseExceptionrd  
connectionr   r'  r   r   )rr   r  r   s      rK   r!  zConnection._read_query_result  s       
	 $T**224444444444    +0($(!
 !&&F++--$2+!'!5D ,+s	   )7 Ac                 ,    | j         r| j         j        S dS Nr   )r   	insert_idrx   s    rK   r|  zConnection.insert_id  s    < 	<))1rM   c                 
   K   | S rO   rG   rx   s    rK   
__aenter__zConnection.__aenter__  s      rM   c                 l   K   |r|                                   n|                                  d {V  d S rO   )r   r   )rr   exc_typeexc_valexc_tbs       rK   	__aexit__zConnection.__aexit__  sF       	'JJLLLL$$&&&&&&&&&rM   c                 <  K   |                                   | j        x| j        j        r3t          j        d           | j                                         d {V  | j        j        r&|                                  d {V  | j        j        &d | _        t          |t                    r|
                    | j                  }t          t          t          |          dz             }t          j        d||          }|                     ||d |dz
           z              d| _        |t          k     rd S ||dz
  d          }	 t          t          t          |                    }|                     |d |                    ||d          }|s|t          k     rd S Y)Nz.Previous unbuffered result was left incompleter$   z<iB)r  r   rd  warningswarn_finish_unbuffered_queryhas_nextr%  r   r   r   r   minr   r  r   r   rV  r;  rY  )rr   commandr"  
chunk_sizepreludes        rK   r   zConnection._execute_command  s      <#|- >NOOOl;;=========,' )&&((((((((( ,' )DLc3 	-**T^,,CSA66
+eZ99'Ca$88999&&F*q.//"	^SXX66Jc+:+.///jkk"C :66	rM   c                   K   t          | 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                            dd 	          }|t-          d
          |                                }| j        j                                         t3          || j        | j                   d {V \  | _        | _        d| _        t;          | j        t<                    r | j                            | j                   }n| j        }||z   dz   }d}| j!        }| j!        s| j"        }|dv r3tG          j$        | j%                            d          | j&                  }n|dk    r:| j%        r2tG          j'        | j%                            d          | j&                  }nm|dk    rF| j        r2| j        t          j        z  r| j%                            d          dz   }n.| j%        rd}n$d}n!|dv r| j%                            d          dz   }| j        t          j(        z  r#|tS          tU          |                    |z   z  }nE| j        t          j+        z  r)|t          j        dtU          |                    |z   z  }n||dz   z  }| j,        r]| j        t          j-        z  rIt;          | j,        t<                    r | j,                            | j                   }n| j,        }||dz   z  }| j        t          j.        z  r4|}	t;          |	t<                    r|	                    d          }	||	dz   z  }|| _/        | j        t          j0        z  rd}
| j1        2                                D ]\  }}|                    d          |                    d          }}|
t          j        dtU          |                    |z   z  }
|
t          j        dtU          |                    |z   z  }
|t          j        dtU          |
                    |
z   z  }|                     |           | 3                                 d {V }|4                                r|5                                 |6                                }| j        t          j.        z  r || 7                    ||           d {V  d S tG          j8        | j%                            d          |9                                          dz   }|                     |           | 3                                 d {V  d S |:                                rV|dk    r| ;                    |           d {V  d S |dk    r| <                    |           d {V  d S t{          d|          d S )N.r$   r      zDid not specify a usernamez<iIB23srM   r   rE  rG  )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   rY  r   rd   rH  rI  rJ  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_initrO  r   rX  authresprE   r3   nameconnect_attrskvauth_packetplugin_names                  rK   r=  z"Connection._request_authentication  s     t"((a0034499 4499:::$T\225
K	4+;^ *C1 1	  	 !9FJ!F 	 i((( L"00222 |-<<XEI = K KH"#NOOO||~~HL"((***
 0@4#4 $
0 0 0 * * * * * *&DL$,
  DLdi%% 	I$$T]33EEIE5 5(.' 	32K7775%%h//< <HH333~  6N))(33TY  ---  !T%=
%J !>00::UB !  888~,,X66>H#f&KK 	%KH..99DD%(@@ 	%FKS]]33h>>DD Hu$$D8 	063II 	$(C(( X__T]33XBJD#f&88 	!D$$$ ,{{7++D5L D!, #f&:: 	IM+1133 > >1xx''&)9)91S#a&&!9!9A!==S#a&&!9!9A!==FKS%7%788=HHD$ --//////// --// 	J ""$$$%1133K(6+== 	*+((kBBBBBBBBBBB 2N))(33((**, ,.34 !!$''''')))))))))))++-- 	J55555kBBBBBBBBBBB 111//<<<<<<<<<<<& (<=HJ J J	J 	JrM   c                 ^  K   |dk    r6|                      |           d {V  |                                | _        d S |dk    r6|                     |           d {V  |                                | _        d S |dk    r@t	          j        | j                            d          |                                          }n|dk    rCt	          j	        | j                            d          |                                          dz   }nG|dk    r| j                            d          dz   }n#t          dd	                    |                    |                     |           |                                  d {V }|                                 |                                | _        |S )
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   formatrY  r   check_error)rr   r  r  rX  r   s        rK   r  zConnection._process_authh  s     22211+>>>>>>>>>%0%7%7%9%9D"""...++K888888888%0%7%7%9%9D""" 666 5N))(33((**, ,  555 2N))(33((**    777 ~,,X66>& ,,2F;,?,?  
 d###))++++++++COO%0%7%7%9%9D"JrM   c                 x  K   | j         sE|                     d           |                                  d {V }|                                 |S |                                rt          j        d           |                                | _        t          j
        | j                             d          | j                  }|                     |           |                                  d {V }|                                 |                                s/t          d                    |j        d d                             |                    d           |                                }|dk    rDt          j        d           |                                  d {V }|                                 |S |dk    r"t          d	                    |                    t          j        d
           | j        rtt          j        d           |                     | j                             d          dz              |                                  d {V }|                                 |S | j        s|                     d           |                                  d {V }|                                 |                                s/t          d                    |j        d d                             |j        dd          | _        t          j        | j                            d                     t          j        | j                             d          | j        | j                  }|                     |           |                                  d {V }|                                 d S )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   rY  r   r  r  r*   debugr  r   r   r  r   r  r   r  _dataadvancer  r   rI   r  sha2_rsa_encrypt)rr   r   	scramblednrX  s        rK   r  z%Connection.caching_sha2_password_auth  s     ~ 	c"""))++++++++COOJ%%'' 
	L9:::DI3%%h// I i((())++++++++COO %%'' 	"$$*F39RaR=$9$9   	ANN66L@AAA))++++++++COOJ66" $>>DfQiiI I I 	8999< 	L : ; ; ;dn33H==EFFF))++++++++COOJ% 	Ag&&&))++++++++COO))++ &))/	"1")>)>  
 &)Yqrr]D"L/66w??@@@%N!!(++TY"
 
 	$%%''''''''rM   c                   K   | j         rvt          j        d           | j                            d          dz   }|                     |           |                                  d {V }|                                 |S |                                r~|	                                | _
        | j        s^| j        rWt          j        d           |                     d           |                                  d {V }|                                 |                                rA|j        dd          | _        t          j        d| j                            d                     | j        rO| j        st          d	          t!          j        | j                            d          | j
        | j                  }nd
}|                     |           |                                  d {V }|                                 |S )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   rY  r   r  r  r  r   rI   r  r  r  r   r   r  )rr   r   rX  s      rK   r  zConnection.sha256_password_auth  s     < 	L9:::>((22U:Dd###))++++++++COOJ%%'' 	"DI) "dn "CDDD!!%((( --////////!!!!!## 	%(Yqrr]D"L*&--g66  
 > 		) O&'MNNN)%%h//& DD
 D$%%''''''''
rM   c                     | j         d         S r{  )server_thread_idrx   s    rK   r,  zConnection.thread_id
  s    $Q''rM   c                     | j         S rO   r   rx   s    rK   character_set_namezConnection.character_set_name  s
    }rM   c                     | j         S rO   )r   rx   s    rK   get_host_infozConnection.get_host_info  s
    ~rM   c                     | j         S rO   )protocol_versionrx   s    rK   get_proto_infozConnection.get_proto_info  s    $$rM   c                   K   d}|                                   d {V }|                                }||         | _        |dz  }|                    d|          }|||                             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    rt          j        d|||dz                      \  }}}}|dz  }|| _        	 t          |          j        | _        n# t           $ r
 d | _        Y nw xY w|| _        | 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  rwt          |          |k    rf|                    d|          }|dk     r$||d                              d          | _        d S |||                             d          | _        d S d S d S )Nr   r$   r  r  r*  r[     	   z<Hr      z<BHHBr\     
   )r   get_all_datar  findr  r  r   ra  r  r   r  r  server_languager   r  server_charsetKeyErrorr   maxr   r  r   )	rr   irn  rX  
server_endlangstatcap_hsalt_lens	            rK   r<  z"Connection._get_server_information  s     ((********""$$ $Q	QYYua((
"1Z<077AAN &dD1q5M B B	Q1q5M		Q#)=tAa!eG}#E#Ea#H 	Qt99A*0-aAg*O*O'D$xFA#'D +&3D&9&9&>## + + +&*###+ "&D$$3$$2x!|,,H 	
Rt99H$$IIaHn--IIMA	Q #f&88 	OSYY!^^ 5!,,JA~~+/8??8+D+D(((+/*+=+D+DX+N+N(((	O 	O^^s   ;E E)(E)c                 D    t          | j        t          j        z            S rO   )r   r   r   SERVER_STATUS_IN_TRANSrx   s    rK   get_transaction_statusz!Connection.get_transaction_statusT  s    D&)MMNNNrM   c                     | j         S rO   )r  rx   s    rK   get_server_infozConnection.get_server_infoW  r(  rM   c                 <    |                                   d| _        d S )NzCancelled during execution)r   r   rx   s    rK   r`  zConnection._close_on_cancel\  s    

9rM   c                 h    | j         s*| j        t          d          t          | j                  d S )Nz(0, 'Not connected'))r   r   r   rx   s    rK   r  zConnection._ensure_alive`  s?    | 	9!)$%;<<<$T%7888		9 	9rM   c                 z    | j         r3t          j        d| t                     |                                  d S d S )NzUnclosed connection )r   r  r  ResourceWarningr   rx   s    rK   __del__zConnection.__del__g  sI    < 	M999)+ + +JJLLLLL	 	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.  r2  r5  rH   r9  r:  rY  r   r   r^  rV  r!  r|  r~  r  r   r=  r  r  r  r,  r  r  r  r<  r  r  r`  r  r  r   r   r   r   r   r   r   r   r   r   rG   rM   rK   rP   rP      s         (dRtd#'hDF!%$!#$Db DM" M" M" M"^   X   X ! ! X!   X   X   X     X    X $ $ X$   X   X    / / /    % % %% % %
% % %
% % %
% % %
  / / /          $ $ $B# # # ## # ## # #% % %
   $" " "; ; ;z# # ## # #: : : .9 3 3 3 3j  ( ( (6 6 6 6$           DCJ CJ CJJ( ( (TL L L\' ' 'T( ( (    % % %<O <O <O|O O O# # #
: : :9 9 9   GE#N!MI'#N!M')rM   rP   c                   V    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dS )r   c                     || _         d | _        d | _        d | _        d| _        d | _        d| _        d | _        d | _        d | _	        d| _
        d S )Nr   F)ry  r'  r|  r   warning_countmessagefield_countdescriptionr   r  rd  )rr   ry  s     rK   rq   zMySQLResult.__init__}  s[    $!!	!&rM   c                 Z  K   	 | j                                          d {V }|                                r|                     |           nK|                                r|                     |           d {V  n|                     |           d {V  d | _         d S # d | _         w xY wrO   )ry  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22244 =22<@@@@@@@@@@..|<<<<<<<<<"DOOOdDO""""s   BB! !	B*c                   K   d| _         | j                                         d {V }|                                r%|                     |           d| _         d | _        d S |                                r+|                     |           d {V  d| _         d | _        d S |                                | _        | 	                                 d {V  d| _
        d S )NTFl    )rd  ry  r   r   r   r  r  read_length_encoded_integerr  _get_descriptionsr'  r  s     rK   rw  z!MySQLResult.init_unbuffered_query  s     !%!_99;;;;;;;;$$&& 	6  ...%*D""DOOO..00 	6..|<<<<<<<<<%*D""DOOO+GGIID((*********
 "6DrM   c                     t          |          }|j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        d S rO   )r"   r'  r|  r   r  r  r  )rr   r  	ok_packets      rK   r   zMySQLResult._read_ok_packet  sR    #L11	&4",&4&4 (!*rM   c                   K   t          |          }t          |j        | j                  }	 |                                 d {V  n.# t
          $ r! | j                                         d {V   w xY w| j                                         d {V }|                                st          dd          | 	                    |           d S )Nr   zCommands Out of Sync)
r#   LoadLocalFilefilenamery  r   r1  r   r   r   r   )rr   r  load_packetsenderr  s        rK   r  z#MySQLResult._read_load_local_packet  s      ,\::{3T_EE	""$$$$$$$$$$ 	 	 	/..000000000	
 /6688888888	%%'' 	A"4)?@@@Y'''''s   A +A3c                     |                                 r)t          |          }|j        | _        |j        | _        dS dS )NTF)is_eof_packetr!   r  r  )rr   rn  
eof_packets      rK   _check_packet_is_eofz MySQLResult._check_packet_is_eof  sB    !! 	)&11J!+!9D&/DM4urM   c                    K   |                                 | _        |                                  d {V  |                                  d {V  d S rO   )r  r  r  _read_rowdata_packetr  s     rK   r  zMySQLResult._read_result_packet  sh      'CCEE$$&&&&&&&&&'')))))))))))rM   c                    K   | j         sd S | j                                         d {V }|                     |          rd| _         d | _        d | _        d S |                     |          }d| _        |f| _        |S )NFr$   )rd  ry  r   r  r   _read_row_from_packetr'  )rr   rn  rows      rK   _read_rowdata_packet_unbufferedz+MySQLResult._read_rowdata_packet_unbuffered  s      % 	F3355555555$$V,, 	%*D""DODIF((00F	
rM   c                   K   | j         r	 | j                                         d {V }n6# t          $ r)}|j        d         dv rd| _         d | _        Y d }~d S  d }~ww xY w|                     |          rd| _         d | _        | j         d S d S )Nr   )i  i  F)rd  ry  r   r   rQ   r  )rr   rn  rC  s      rK   r  z$MySQLResult._finish_unbuffered_query  s       $ 	'#;;========#    6!9 !  
 .3D*&*DOFFFFF ((00 ').&"&) $ 	' 	' 	' 	' 	's   + 
AAAAc                 *  K   g }	 | j                                          d{V }|                     |          rd| _         n)|                    |                     |                     et          |          | _        t          |          | _        dS )z:Read a rowdata packet for each data row in the result set.TN)	ry  r   r  appendr  r  r'  tupler   )rr   r   rn  s      rK   r
  z MySQLResult._read_rowdata_packet  s      	<?7799999999F((00 "&KK226::;;;	< !YY$KK			rM   c                    g }| j         D ]g\  }}	 |                                }n# t          $ r Y  n@w xY w|$||                    |          }| ||          }|                    |           ht          |          S rO   )
convertersread_length_coded_string
IndexErrorr  r  r  )rr   rn  r  r   	converterrX  s         rK   r  z!MySQLResult._read_row_from_packet  s    #'? 	 	Hi6688     ';;x00D($9T??DJJtSzzs   %
33c                   K   g | _         g | _        | j        j        }| j        j        }g }t          | j                  D ]}| j                            t                     d{V }| j         	                    |           |	                    |
                                           |j        }|r0|t          j        k    r|}n|t          v r|j        dk    rd}n|}nd}nd}| j        j                            |          }|t$          u rd}| j        	                    ||f           | j                                         d{V }	|	                                s
J d            t)          |          | _
        dS )z>Read a column descriptor packet for each column in the result.N?   r  zProtocol error, expecting EOF)fieldsr  ry  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  s     o10t'(( 	: 	:A/66%' ' ' ' ' ' ' 'EKu%%%u0022333J  00  -HH:--",,#'#0  'HH044Z@@IG## 	O""Hi#89999?7799999999
''))JJ+JJJ) --rM   N)rz   r{   r|   rq   r   rw  r   r  r  r  r  r  r
  r  r  rG   rM   rK   r   r   {  s        ' ' '# # #6 6 6*+ + +( ( (  * * *
  $' ' '4       "*. *. *. *. *.rM   r   c                   &    e Zd Zd Zd Zd Zd ZdS )r  c                 V    || _         || _        |j        | _        d | _        d | _        d S rO   )r  ry  rC   r   _file_object	_executor)rr   r  ry  s      rK   rq   zLoadLocalFile.__init__K  s,     $_
 rM   c                 ^      fd} j                              j        | j                  }|S )Nc                     	 t          | d          _        d S # t          $ r}d|  d}t          d|          |d }~ww xY w)NrbzCan't find file 'r   i  )openr$  r@  r   )r  rC  rt  rr   s      rK   openerz(LoadLocalFile._open_file.<locals>.openerT  sa    9$(4$8$8!!! 9 9 95(555&tS11q89s    
A ;A )r   run_in_executorr%  r  )rr   r*  r  s   `  rK   
_open_filezLoadLocalFile._open_fileR  s@    	9 	9 	9 	9 	9 j((OO
rM   c                 T      fd} j                              j        ||          }|S )Nc                    	 j                             |           }|s j                                          d _         nM# t          $ r@}j                                          d _         dj         }t          d|          |d }~ww xY w|S )NzError reading file i   )r$  r   r   r1  r  r   )r  chunkrC  rt  rr   s       rK   freaderz)LoadLocalFile._file_read.<locals>.freader`  s    9)..z:: -%++---(,D% 9 9 9!'')))$(!;DM;;&tS11q8	9
 Ls   <A   
B

;BB
)r   r+  r%  )rr   r  r0  r  s   `   rK   
_file_readzLoadLocalFile._file_read^  s>    	 	 	 	 	 j((*MM
rM   c                   K   | j                                          | j         }	 |                                  d{V  | j        5  t          }	 |                     |           d{V }|sn|                    |           4	 ddd           n# 1 swxY w Y   n-# t          j        $ r | j         	                                  w xY w|                    d           dS # |                    d           w xY w)z3Send data packets from the local file to the serverNTrM   )
ry  r  r,  r$  r   r1  rY  r[   r_  r`  )rr   rS   r  r/  s       rK   r   zLoadLocalFile.send_datar  sj     %%'''	#//#########" - -+
-"&//*"="=======E  %%e,,,- - - - - - - - - - - - - - - - % 	 	 	O,,...	
 c"""""Dc""""sA   !B =BB BB BB C *CC C6N)rz   r{   r|   rq   r,  r1  r   rG   rM   rK   r  r  J  sP          
 
 
  (# # # # #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 O O O O O O O O O O O O O O+ + + + + + + + + + + + + + + + + + + + + + + + L K K K K K K K K K % % % % % % + + + + + + 5 5 5 5 5 5 0 0 0 0 0 0 / / / / / / 6 6 6 6 6 6       W W W W W W W W W W W W      "7?$$LL   LLL 4"$D"tvD T5Ttt+ + + +2         " " " " "G( " " "(t* t* t* t* t* t* t* t*rL. L. L. L. L. L. L. L.^<# <# <# <# <# <# <# <# <# <#s   <C CC