Ë
    5¾ªj3¦  ã                  óP  — d Z ddlm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mZmZmZmZmZmZmZmZ ddlmZ dd	lmZmZmZmZmZ dd
lmZ ddlmZm Z m!Z!m"Z" ddl#m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 erddl1m2Z2 dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ< G d„ d«      Z=y)z,Implements the MySQL Client/Server protocol.é    )ÚannotationsN)Údeque)ÚDecimalÚDecimalException)	ÚTYPE_CHECKINGÚAnyÚDequeÚDictÚListÚOptionalÚSequenceÚTupleÚUnioné   )Úutils)ÚPARAMETER_COUNT_AVAILABLEÚ
ClientFlagÚ	FieldFlagÚ	FieldTypeÚ	ServerCmd)ÚMySQLConverter)ÚDatabaseErrorÚInterfaceErrorÚProgrammingErrorÚget_exception)Úlogger)ÚMySQLAuthPluginÚget_auth_plugin)Ú"MySQLCachingSHA2PasswordAuthPlugin)ÚBinaryProtocolTypeÚDescriptionTypeÚEofPacketTypeÚHandShakeTypeÚOkPacketTypeÚStatsPacketTypeÚ
StrOrBytes)ÚMySQLSocketé
   éþ   é   éÿ   éû   é-   i   @c                  óF  — e Zd ZdZed#d„«       Zed$d„«       Zed$d„«       Zed%d„«       Zed&d„«       Z	e	 	 	 d'	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(d	„«       Z
eded
eddddddf
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d)d„«       Zeed
ef	 	 	 	 	 	 	 d*d„«       Zed+d,d„«       Zed-d.d„«       Zed/d„«       Zed0d„«       Zed1d„«       Zed2d3d„«       Zd4d„Zed5d6d„«       Z	 	 d7	 	 	 	 	 	 	 	 	 d8d„Ze	 	 	 	 	 	 d9d„«       Ze	 	 	 	 	 	 d:d„«       Ze	 d;	 	 	 	 	 d<d„«       Ze	 	 	 	 	 	 d=d„«       Zed>d„«       Z	 d2	 	 	 	 	 	 	 d?d„Z	 	 	 d@	 	 	 	 	 	 	 	 	 	 	 dAd„ZedBd„«       ZedCd„«       Z e	 	 	 	 dDd„«       Z!e	 	 	 	 dEd „«       Z"edFd!„«       Z#	 	 	 	 	 	 	 dG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dHd"„Z$y)IÚMySQLProtocolzRImplements MySQL client/server protocol

    Create and parses MySQL packets.
    c                ó:   — | d   t         k(  st        d«      ‚| dd S )a  Parse a MySQL auth more data packet.

        Args:
            pkt: Packet representing an `auth more data` response.

        Returns:
            auth_data: Authentication method data (see [1]).

        Raises:
            InterfaceError: If packet's status tag doesn't
                            match `protocol.EXCHANGE_FURTHER_STATUS`.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_auth_more_data.html
        é   z"Failed parsing AuthMoreData packeté   N)ÚEXCHANGE_FURTHER_STATUSr   )Úpkts    úW/var/www/html/serviGia/entorno/lib/python3.12/site-packages/mysql/connector/protocol.pyÚparse_auth_more_dataz"MySQLProtocol.parse_auth_more_data^   s(   € ð$ �1‰vÔ0Ò0Ü Ð!EÓFÐFØ�1�2ˆwˆó    c                ó¬   — | d   t         k7  rt        d«      ‚t        j                  | dd d¬«      \  } }| r| d   dk(  r| dd } |j	                  «       | fS )	a|  Parse a MySQL auth switch request packet.

        Args:
            pkt: Packet representing an `auth switch request` response.

        Returns:
            plugin_name: Name of the client authentication plugin to switch to.
            plugin_provided_data: Plugin provided data (see [1]).

        Raises:
            InterfaceError: If packet's status tag doesn't
                            match `protocol.AUTH_SWITCH_STATUS`.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/                latest/page_protocol_connection_phase_packets_protocol_
                auth_switch_request.html
        r1   z'Failed parsing AuthSwitchRequest packetr2   Nó    ©Úendéÿÿÿÿr   )ÚAUTH_SWITCH_STATUSr   r   Úread_stringÚdecode)r4   Úplugin_names     r5   Úparse_auth_switch_requestz'MySQLProtocol.parse_auth_switch_requestt   sf   € ð( ˆq‰6Ô'Ò'Ü Ð!JÓKÐKÜ ×,Ñ,¨S°°¨W¸'ÔBÑˆˆ[Ù�3�r‘7˜a’<Ø�c�r�(ˆCØ×!Ñ!Ó# SÐ(Ð(r7   c                óº   — t        j                  | dd d«      \  } }|t        k7  rt        d«      ‚t        j                  | d¬«      \  } }|j                  «       | fS )a¦  Parse a MySQL auth next factor packet.

        Args:
            pkt: Packet representing an `auth next factor` response.

        Returns:
            plugin_name: Name of the client authentication plugin.
            plugin_provided_data: Initial authentication data for that
                                  client plugin (see [1]).

        Raises:
            InterfaceError: If packet's packet type doesn't
                            match `protocol.MFA_STATUS`.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_auth_                next_factor_request.html
        r1   Nr   z.Failed parsing AuthNextFactor packet (invalid)r9   r:   )r   Úread_intÚ
MFA_STATUSr   r>   r?   )r4   Ústatusr@   s      r5   Úparse_auth_next_factorz$MySQLProtocol.parse_auth_next_factor�   s]   € ô* —n‘n S¨¨ W¨aÓ0‰ˆˆVØ”ZÒÜ Ð!QÓRÐRÜ ×,Ñ,¨S°gÔ>Ñˆˆ[Ø×!Ñ!Ó# SÐ(Ð(r7   c           
     óV  ‡ — ‰ D ]  }‰ |   �Œ	d‰ |<   Œ t        ˆ fd„‰ D «       «      t        ‰ j                  «       «      z   t        ‰ j                  «       «      z   }t	        j
                  d|«      g}‰ D ]¢  }|j                  t	        j
                  dt        |«      «      «       |j                  |j                  «       «       |j                  t	        j
                  dt        ‰ |   «      «      «       |j                  ‰ |   j                  «       «       Œ¤ dj                  |«      S )az  Encode the connection attributes.

        Args:
            conn_attrs: Connection attributes.

        Returns:
            serialized_conn_attrs: Serialized connection attributes as per [1].

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_handshake_response.html
        Ú c              3  óR   •K  — | ]  }t        |«      t        ‰|   «      z   –— Œ  y ­w©N)Úlen)Ú.0ÚxÚ
conn_attrss     €r5   ú	<genexpr>z0MySQLProtocol.make_conn_attrs.<locals>.<genexpr>¼   s#   øè ø€ Ò@°”�A“œ˜Z¨™]Ó+Õ+Ñ@ùs   ƒ$'ú<Br7   )	ÚsumrK   ÚkeysÚvaluesÚstructÚpackÚappendÚencodeÚjoin)rN   Ú	attr_nameÚconn_attrs_lenÚconn_attrs_packets   `   r5   Úmake_conn_attrszMySQLProtocol.make_conn_attrsª   s  ø€ ð $ò 	+ˆIØ˜)Ñ$Ñ,Ø(*�
˜9Ò%ð	+ô Ó@°ZÔ@Ó@Ü�*—/‘/Ó#Ó$ñ%ä�*×#Ñ#Ó%Ó&ñ'ð 	ô $Ÿ[™[¨¨~Ó>Ð?ÐØ#ò 	EˆIØ×$Ñ$¤V§[¡[°´s¸9³~Ó%FÔGØ×$Ñ$ Y×%5Ñ%5Ó%7Ô8Ø×$Ñ$¤V§[¡[°´s¸:ÀiÑ;PÓ7QÓ%RÔSØ×$Ñ$ Z°	Ñ%:×%AÑ%AÓ%CÕDð		Eð
 �x‰xÐ)Ó*Ð*r7   c                óV   — | t         j                  z  r|r|j                  «       dz   S dS )aÙ  Prepare database string for handshake response.

        Args:
            client_flags: Integer representing client capabilities flags.
            database: Initial database name for the connection.

        Returns:
            serialized_database: Serialized database name as per [1].

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_handshake_response.html
        r9   )r   ÚCONNECT_WITH_DBrW   )Úclient_flagsÚdatabases     r5   Úconnect_with_dbzMySQLProtocol.connect_with_dbÉ   s4   € ð" œj×8Ñ8Ò8¹Xð �O‰OÓ Ñ'ð	
ð ð	
r7   NFc                óT  — |s|dk(  rdt        |||¬«      fS |€i }	  t        ||«      |||¬«      } |j                  | fi |¤Ž}|€t	        d|j
                  › �«      ‚t        j                  t        |«      «      |z   }||fS # t        t        f$ r}	t	        d|	› �«      |	‚d}	~	ww xY w)a  Prepare the first authentication response.

        Args:
            auth_data: Authorization data from initial handshake.
            username: Account's username.
            password: Account's password.
            client_flags: Integer representing client capabilities flags.
            auth_plugin: Authorization plugin name.
            auth_plugin_class: Authorization plugin class (has higher precedence
                               than the authorization plugin name).
            ssl_enabled: Whether SSL is enabled or not.
            plugin_config: Custom configuration to be passed to the auth plugin
                           when invoked. The parameters defined here will override
                           the ones defined in the auth plugin itself.

        Returns:
            auth_response: Authorization plugin response.
            auth_strategy: Authorization plugin instance created based
                           on the provided `auth_plugin` and `auth_plugin_class`
                           parameters.

        Raises:
            InterfaceError: If authentication fails or when got a NULL auth response.
        rH   r9   )Ússl_enabledNzFailed authentication: z8Got NULL auth response while authenticating with plugin )	r   r   Úauth_responseÚ	TypeErrorr   Únamer   Úlc_intrK   )
Ú	auth_dataÚusernameÚpasswordÚauth_pluginÚauth_plugin_classrc   Úplugin_configÚauth_strategyrd   Úerrs
             r5   Úauth_plugin_first_responsez(MySQLProtocol.auth_plugin_first_responseÞ   sð   € ñD ˜K¨2Ò-àÔ>Ø˜(°ôð ð ð Ð ØˆMð	KØKœO¨KÐ9JÓKØ˜(°ôˆMð 8˜M×7Ñ7¸	ÑSÀ]ÑSˆMð Ð Ü ðØ'×,Ñ,Ð-ð/óð ô
 Ÿ™¤S¨Ó%7Ó8¸=ÑHˆà˜mÐ+Ð+øô œ>Ð*ò 	KÜ Ð#:¸3¸%Ð!@ÓAÀsÐJûð	Kús   �(B ÂB'ÂB"Â"B'r   c           	     ó\  — |j                  «       }g }|
rt        j                  d«       t        j                  d«       | €t        d«      d‚| j	                  d«      €t        d«      d‚	 |xs | d   }t        j                  d
|«       |
rB|j                  t        j                  dt        |«      › d�t        j                  |«      «       n9d}|j                  t        j                  d|› t        |«      › d�||||«      «       t        j                  | d   ||||||¬«      \  }}|j                  |«       |j                  t        j                  ||«      «       |
r%|j                  t        j                  d|«      «       |t         j"                  z  r"|j                  |j                  «       dz   «       |t         j$                  z  r&|	�$|j                  t        j'                  |	«      «       dj)                  |«      |fS # t
        t        f$ r}t        d|› d	�«      d‚d}~ww xY w)a²  Make a MySQL Authentication packet.

        Args:
            handshake: Initial handshake.
            username: Account's username.
            password: Account's password.
            database: Initial database name for the connection
            charset: Client charset (see [2]), only the lower 8-bits.
            client_flags: Integer representing client capabilities flags.
            max_allowed_packet: Maximum packet size.
            auth_plugin: Authorization plugin name.
            auth_plugin_class: Authorization plugin class (has higher precedence
                               than the authorization plugin name).
            conn_attrs: Connection attributes.
            is_change_user_request: Whether is a `change user request` operation or not.
            ssl_enabled: Whether SSL is enabled or not.
            plugin_config: Custom configuration to be passed to the auth plugin
                           when invoked. The parameters defined here will override
                           the one defined in the auth plugin itself.

        Returns:
            handshake_response: Handshake response as per [1].
            auth_strategy: Authorization plugin instance created based
                           on the provided `auth_plugin` and `auth_plugin_class`.

        Raises:
            ProgrammingError: Handshake misses authentication info.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_handshake_response.html

            [2]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_basic_character_set.html#a_protocol_character_set
        zGot a `change user` requestzStarting authorization phaseNzGot a NULL handshakerh   z$Handshake misses authentication infork   z-Handshake misses authentication plugin info (ú)z#The provided initial strategy is %srP   ÚsxÚxxxxxxxxxxxxxxxxxxxxxxxz<IIB)rh   ri   rj   rk   rl   rc   rm   ú<Hr9   r7   )rW   r   Údebugr   Úgetre   ÚKeyErrorrV   rT   rU   rK   r   ÚCHANGE_USERr/   rp   ra   r   ÚPLUGIN_AUTHÚCONNECT_ARGSr\   rX   )Ú	handshakeri   rj   r`   Úcharsetr_   Úmax_allowed_packetrk   rl   rN   Úis_change_user_requestrc   rm   Ú
b_usernameÚresponse_payloadro   Úfillerrd   rn   s                      r5   Ú	make_authzMySQLProtocol.make_auth  s,  € ðf —_‘_Ó&ˆ
ØÐá!Ü�L‰LÐ6Ô7ä�‰Ð3Ô4ØÐÜ"Ð#9Ó:ÀÐDà�=‰=˜Ó%Ð-Ü"Ð#IÓJÐPTÐTð	Ø%ÒA¨°=Ñ)AˆKô 	�‰Ð:¸KÔHá!Ø×#Ñ#Ü—‘Øœ˜Z›Ð)¨Ð,Ü×)Ñ)Øóõð ˆFØ×#Ñ#Ü—‘Ø˜6˜(¤3 z£?Ð"3°2Ð6Ø Ø&ØØóôô (5×'OÑ'OØ Ñ,ØØØ#Ø/Ø#Ø'ð (Pó (
Ñ$ˆ�}ð 	×Ñ Ô.ð 	×Ñ¤× =Ñ =¸lÈHÓ UÔVñ "Ø×#Ñ#¤F§K¡K°°gÓ$>Ô?ð œ*×0Ñ0Ò0Ø×#Ñ# K×$6Ñ$6Ó$8¸7Ñ$BÔCð œ:×2Ñ2Ò2¸
Ð8NØ×#Ñ#¤M×$AÑ$AÀ*Ó$MÔNà�x‰xÐ(Ó)¨=Ð8Ð8øôm œ8Ð$ò 	Ü"Ø?À¸uÀAÐFóàðûð	ús   Á+	H ÈH+ÈH&È&H+c                óž   — dj                  t        j                  |«      t        j                  |«      t        j                  | «      dg«      S )a“  Make a SSL authentication packet (see [1]).

        Args:
            charset: Client charset (see [2]), only the lower 8-bits.
            client_flags: Integer representing client capabilities flags.
            max_allowed_packet: Maximum packet size.

        Returns:
            ssl_request_pkt: SSL connection request packet.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_ssl_request.html

            [2]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_basic_character_set.html#a_protocol_character_set
        r7   s                          )rX   r   Ú	int4storeÚ	int1store)r}   r_   r~   s      r5   Úmake_auth_sslzMySQLProtocol.make_auth_ssl•  sB   € ð0 �x‰xä—‘ Ó-Ü—‘Ð 2Ó3Ü—‘ Ó(Øð	ó
ð 	
r7   c                ó>   — t        j                  | «      }|€|S ||z   S )z(Make a MySQL packet containing a command)r   r†   )ÚcommandÚargumentÚdatas      r5   Úmake_commandzMySQLProtocol.make_command¶  s&   € ô �‰˜wÓ'ˆØÐ'ˆtÐ<¨T°H©_Ð<r7   c                óX   — t        j                  | «      t        j                  |«      z   S )z0Make a MySQL packet with Fetch Statement command)r   r…   )Ústatement_idÚrowss     r5   Úmake_stmt_fetchzMySQLProtocol.make_stmt_fetch¼  s!   € ô �‰˜|Ó,¬u¯©¸tÓ/DÑDÐDr7   c           	     óþ  — i }t        j                  d| dd «      d   |d<   |d   t        k7  rt        d|d   › dt        › �«      ‚t	        j
                  | dd d¬	«      \  } |d
<   t        j                  d| dd «      \  |d<   }}|d<   |d<   }}|d
   j                  «       |d
<   | dd } t	        j                  ||z   «      }d}|t        j                  z  r*|rt        d|dz
  «      nd}| d| }| |d } |d   dk(  r|dd }|t        j                  z  rVd| vr|d
   j                  d«      r	d| c} |d<   nt	        j
                  | d¬	«      \  } |d<   |d   j                  d«      |d<   nd|d<   ||z   |d<   ||d<   |S )zParse a MySQL Handshake-packet.ú<xxxxBr   r2   Úprotocolz$Protocol mismatch; server version = z, client version = Nr9   r:   Úserver_version_originalz<I8sx2sBH2sBxxxxxxxxxxé   Úserver_threadidr}   Úserver_statusr7   é   é   r<   z5.5.8rk   úutf-8Úmysql_native_passwordrh   Úcapabilities)rT   ÚunpackÚPROTOCOL_VERSIONr   r   r>   r?   Úintreadr   ÚSECURE_CONNECTIONÚminrz   Ú
startswith)	ÚpacketÚresÚ
auth_data1Úcapabilities1Úcapabilities2Úauth_data_lengthrœ   Ú
auth_data2Úsizes	            r5   Úparse_handshakezMySQLProtocol.parse_handshakeÁ  sò  € ð ˆÜ Ÿ-™-¨°&¸¸1°+Ó>¸qÑAˆˆJ‰Øˆz‰?Ô.Ò.ÜØ6°s¸:±Ð6Gð H$Ü$4Ð#5ð7óð ô 27×1BÑ1BØ�1�2ˆJ˜Gô2
Ñ.ˆ�Ð-Ñ.ô �M‰MÐ2°F¸1¸R°LÓAñ	
ØÐ!Ñ"ØØØ�	‰NØ�Ñ ØØà),Ð-FÑ)G×)NÑ)NÓ)PˆÐ%Ñ&à˜˜�ˆä—}‘} ]°]Ñ%BÓCˆØˆ
Øœ*×6Ñ6Ò6Ù4D”3�rÐ+¨aÑ/Ô0È"ˆDØ  $˜ˆJØ˜D˜E�]ˆFØ˜"‰~ Ò"Ø'¨¨˜_�
àœ*×0Ñ0Ò0Ø˜fÑ$¨Ð-FÑ)G×)RÑ)RØô*ð 14°VÐ,�˜˜]Ò+ä/4×/@Ñ/@ÀÈWÔ/UÑ,�˜˜]Ñ+Ø!$ ]Ñ!3×!:Ñ!:¸7Ó!CˆC�Òà!8ˆC�Ñà%¨
Ñ2ˆˆKÑØ*ˆˆNÑØˆ
r7   c                óÒ  — | d   dk(  st        d«      ‚i }	 t        j                  d| dd «      d   |d<   t        j                  | dd «      \  } |d<   t        j                  | «      \  } |d	<   t        j                  d
| dd «      \  |d<   |d<   | dd } | r2t        j
                  | «      \  } |d<   |d   j                  d«      |d<   |S # t        $ r}t        d«      |‚d}~ww xY w)zParse a MySQL OK-packetr1   r   z#Failed parsing OK packet (invalid).r’   r2   Úfield_countNÚaffected_rowsÚ	insert_idz<HHÚstatus_flagÚwarning_countÚinfo_msgrš   zFailed parsing OK packet.)r   rT   r�   r   Úread_lc_intÚread_lc_stringr?   Ú
ValueError)r£   Ú	ok_packetro   s      r5   Úparse_okzMySQLProtocol.parse_okõ  s  € ð �a‰y˜AŠ~Ü Ð!FÓGÐGàˆ	ð	GÜ'-§}¡}°X¸vÀaÈ¸{Ó'KÈAÑ'NˆI�mÑ$Ü16×1BÑ1BÀ6È!È"À:Ó1NÑ.ˆF�I˜oÑ.Ü-2×->Ñ->¸vÓ-FÑ*ˆF�I˜kÑ*ô —‘˜e V¨A¨a [Ó1ñØ˜-Ñ(Ø˜/Ñ*à˜A˜B�ZˆFÙÜ05×0DÑ0DÀVÓ0LÑ-�˜	 *Ñ-Ø(1°*Ñ(=×(DÑ(DÀWÓ(M�	˜*Ñ%ð Ðøô ò 	GÜ Ð!<Ó=À3ÐFûð	Gús   —B3C Ã	C&ÃC!Ã!C&c                ó˜   — 	 t        j                  | dd «      d   }|S # t        j                  t        f$ r}t        d«      |‚d}~ww xY w)z=Parse a MySQL packet with the number of columns in result setr1   Nr   zFailed parsing column count)r   r³   rT   Úerrorrµ   r   )r£   Úcountro   s      r5   Úparse_column_countz MySQLProtocol.parse_column_count  sQ   € ð	IÜ×%Ñ% f¨Q¨R jÓ1°!Ñ4ˆEØˆLøÜ—‘œjÐ)ò 	IÜ Ð!>Ó?ÀSÐHûð	Iús   ‚ ŸA	¸AÁA	c           	     ó   — t        j                  | dd «      \  } }t        j                  | «      \  } }t        j                  | «      \  } }t        j                  | «      \  } }t        j                  | «      \  } }t        j                  | «      \  } }	 t        j                  d| «      \  }}}}}|j                  |«      |dddd| t        j                  z  ||f	S # t        j                  $ r t        d«      d‚w xY w)zParse a MySQL column-packet.r1   Nz	<xHIBHBxxz!Failed parsing column information)	r   r´   rT   r�   r¹   r   r?   r   ÚNOT_NULL)r£   ÚencodingÚ_rf   r}   Úcolumn_typeÚflagss          r5   Úparse_columnzMySQLProtocol.parse_column  s  € ô ×(Ñ(¨°°¨Ó4‰	ˆ�Ü×(Ñ(¨Ó0‰	ˆ�Ü×(Ñ(¨Ó0‰	ˆ�Ü×(Ñ(¨Ó0‰	ˆ�Ü×+Ñ+¨FÓ3‰ˆ�Ü×(Ñ(¨Ó0‰	ˆ�ð		Pô —‘˜k¨6Ó2ñØØØØØð �K‰K˜Ó!ØØØØØØˆF”Y×'Ñ'Ñ'ØØð

ð 
	
øô �|‰|ò 	PÜ Ð!DÓEÈ4ÐOð	Pús   ÂC Ã C=c                ó  — |d   dk(  r| j                  |«      S d}i }	 t        j                  d|«      }|d   dk(  rt        |«      dk  st	        |«      ‚|d	   |d
<   |d   |d<   |S # t        j                  $ r}t	        |«      |‚d}~ww xY w)zParse a MySQL EOF-packetr1   r   zFailed parsing EOF packet.z<xxxBBHHNr   r)   é	   r*   r±   é   r°   )r·   rT   r�   r¹   r   rK   )Úselfr£   Úerr_msgr¤   Úunpackedro   s         r5   Ú	parse_eofzMySQLProtocol.parse_eof6  s£   € à�!‰9˜Š>à—=‘= Ó(Ð(à.ˆØˆð	3Ü—}‘} Z°Ó8ˆHð ˜‘˜sÒ"¤s¨6£{°aÒ'7Ü  Ó)Ð)à'¨™{ˆˆOÑØ% a™[ˆˆMÑØˆ
øô �|‰|ò 	3Ü  Ó)¨sÐ2ûð	3ús   ŸA( Á(BÁ;BÂBc                ó$  — d}i }dg}d}|r| dd j                  d«      }n| j                  d«      }|D ]T  }	 |j                  dd«      D �cg c]  }|j                  «       ‘Œ c}\  }}|j	                  d«      }	 t        |«      ||<   ŒV |S c c}w # t        $ r}	t        |«      |	‚d}	~	ww xY w# t        t        f$ rQ 	 t        |j	                  d«      «      ||<   n/# t        $ r#}	t        |› d	|› d
t        |«      › d�«      |	‚d}	~	ww xY wY ŒÚw xY w)zParse the statistics packetz)Failed getting COM_STATISTICS informationr7   r1   Ns     ó   :r*   rš   z (ú:rr   )
ÚsplitÚstriprµ   r   r?   Úintrx   r   r   Úrepr)
r£   Úwith_headerÚerrmsgr¤   ÚpairsÚlblÚpairÚvÚvalro   s
             r5   Úparse_statisticszMySQLProtocol.parse_statisticsJ  s8  € ð =ˆØ.0ˆà�ˆØˆÙØ˜1˜2�J×$Ñ$ [Ó1‰Eà—L‘L Ó-ˆEØò 	SˆDð6Ø/3¯z©z¸$ÀÓ/BÖC¨!˜AŸG™G�IÒC‘��Sð
 —*‘*˜WÓ%ˆCðSÜ˜s›8��C’ð	Sð ˆ
ùò DøÜò 6Ü$ VÓ,°#Ð5ûð6ûô œjÐ)ò SðSÜ& s§z¡z°'Ó':Ó;�C˜’HøÜ'ò SÜ(¨F¨8°2°c°U¸!¼DÀ»I¸;ÀaÐ)HÓIÈsÐRûðSúñ ðSús_   ¸BÁBÁ#BÁ;B/ÂBÂ	B,ÂB'Â'B,Â/DÂ?CÃDÃ	D	Ã&DÄD	Ä	DÄDc                óŠ  — |}g }d}d}d}		 |s|	|k(  r	 ||fS |j                  |«      }
|
j                  d«      r˜|
dd g}|j                  |«      }
|
j                  d«      r7|j                  |
dd «       |j                  |«      }
|
j                  d«      rŒ7|j                  |
dd «       t        j                  dj                  |«      «      }nG|
d   dk(  r|
d   dk  r| j                  |
«      }d}n#d}t        j                  t        |
dd «      «      }|€|�|j                  |«       n|€|€t        |
«      ‚|	dz  }	�Œ9)	z¶Read MySQL text result

        Reads all or given number of rows from the socket.

        Returns a tuple with 2 elements: a list with all rows and
        the EOF packet.
        Nr   s   ÿÿÿr1   r7   r)   é   r   )	Úrecvr¢   rV   r   Úread_lc_string_listrX   rÉ   Úbytesr   )rÆ   ÚsockÚversionrº   Úread_timeoutr¿   r�   ÚeofÚrowdataÚir£   Údatass               r5   Úread_text_resultzMySQLProtocol.read_text_resultg  s\  € ð$ ˆØˆØˆØˆØˆØÙ�a˜5’jØð* �SˆyÐð) —Y‘Y˜|Ó,ˆFØ× Ñ  Ô1Ø  ˜˜�ØŸ™ <Ó0�Ø×'Ñ'¨Ô8Ø—L‘L ¨¨ Ô,Ø!ŸY™Y |Ó4�Fð ×'Ñ'¨Õ8ð —‘˜V A B˜ZÔ(Ü×3Ñ3°C·H±H¸U³OÓD‘Ø˜‘˜cÒ! f¨Q¡i°!¢mØ—n‘n VÓ,�Ø‘à�Ü×3Ñ3´E¸&ÀÀ¸*Ó4EÓF�Øˆ{˜wÐ2Ø—‘˜GÕ$Ø�  Ü# FÓ+Ð+Ø�‰FˆAñ- r7   c                óœ  — |d   t         j                  k(  rd}d}nk|d   t         j                  k(  rd}d}nP|d   t         j                  t         j                  fv rd}d}n&|d   t         j
                  k(  rd}d}nt        d	«      ‚|d
   t        j                  z  r|j                  «       }| |d t        j                  || d| «      d   fS )z%Parse an integer from a binary packetr   ú<bú<hr*   ú<ir1   ú<qr™   zUnknown integer typerÚ   Nr   )r   ÚTINYÚSHORTÚINT24ÚLONGÚLONGLONGrµ   r   ÚUNSIGNEDÚupperrT   r�   )r£   ÚfieldÚformat_Úlengths       r5   Ú_parse_binary_integerz#MySQLProtocol._parse_binary_integer—  sÊ   € ð
 �‰8”y—~‘~Ò%ØˆGØ‰FØ�1‰XœŸ™Ò(ØˆGØ‰FØ�1‰Xœ)Ÿ/™/¬9¯>©>Ð:Ñ:ØˆGØ‰FØ�1‰Xœ×+Ñ+Ò+ØˆGØ‰Fô Ð3Ó4Ð4à�‰8”i×(Ñ(Ò(Ø—m‘m“oˆGà�v�w�¤§¡¨w¸¸qÀÐ8HÓ!IÈ!Ñ!LÐMÐMr7   c                ó‚   — |d   t         j                  k(  rd}d}nd}d}| |d t        j                  || d| «      d   fS )z)Parse a float/double from a binary packetr   r™   ú<dr1   z<fNr   )r   ÚDOUBLErT   r�   )r£   rò   rô   ró   s       r5   Ú_parse_binary_floatz!MySQLProtocol._parse_binary_float±  sR   € ð
 �‰8”y×'Ñ'Ò'ØˆFØ‰GàˆFØˆGà�v�w�¤§¡¨w¸¸qÀÐ8HÓ!IÈ!Ñ!LÐMÐMr7   c                ój   — t        j                  | «      \  } }| t        |j                  |«      «      fS )z(Parse a New Decimal from a binary packet)r   r´   r   r?   )r£   r}   Úvalues      r5   Ú_parse_binary_new_decimalz'MySQLProtocol._parse_binary_new_decimal¿  s1   € ô
  ×.Ñ.¨vÓ6‰ˆ�Øœ §¡¨WÓ 5Ó6Ð7Ð7r7   c           	     ó  — | d   }d}|dk(  rzt        j                  d| dd «      d   }| d   }| d   }|t        j                  t        j                  fv rt        j
                  |||¬«      }n‰t        j                  |||¬«      }np|dk\  rkd}|d	k(  rt        j                  d
| d|dz    «      d   }t        j
                  t        j                  d| dd «      d   | d   | d   | d   | d   | d   |¬«      }| |dz   d |fS )z&Parse a timestamp from a binary packetr   Nr1   ru   r   rÅ   )ÚyearÚmonthÚdayrÚ   é   ú<Ir™   r2   é   )rþ   rÿ   r   ÚhourÚminuteÚsecondÚmicrosecond)rT   r�   r   ÚDATETIMEÚ	TIMESTAMPÚdatetimeÚdate)r£   Ú
field_typerô   rû   rþ   rÿ   r   Úmcss           r5   Ú_parse_binary_timestampz%MySQLProtocol._parse_binary_timestampÇ  s  € ð ˜‘ˆØCGˆØ�QŠ;Ü—=‘=  v¨a° {Ó3°AÑ6ˆDØ˜1‘IˆEØ˜‘)ˆCØœi×0Ñ0´)×2EÑ2EÐFÑFÜ ×)Ñ)¨t¸5ÀcÔJ‘ä Ÿ™¨4°uÀ#ÔF‘Ø�qŠ[ØˆCØ˜Š|Ü—m‘m D¨&°°V¸a±ZÐ*@ÓAÀ!ÑD�Ü×%Ñ%Ü—]‘] 4¨°°!¨Ó5°aÑ8Ø˜Q‘iØ˜1‘IØ˜A‘YØ˜a‘yØ˜a‘yØôˆEð �v ‘z�|Ð$ eÐ,Ð,r7   c                óD  — | d   }|s| dd t        j                  «       fS | d|dz    }d}|dkD  rt        j                  d|dd «      d   }t        j                  d|dd «      d   }|d   dk(  r|dz  }t        j                  ||d   ||d	   |d   ¬
«      }| |dz   d |fS )z'Parse a time value from a binary packetr   r   Nr™   r  r2   r<   rÚ   r  )ÚdaysÚsecondsÚmicrosecondsÚminutesÚhours)r
  Ú	timedeltarT   r�   )r£   rô   r‹   r  r  Útmps         r5   Ú_parse_binary_timez MySQLProtocol._parse_binary_timeç  sÓ   € ð ˜‘ˆÙØ˜1˜2�J¤× 2Ñ 2Ó 4Ð5Ð5Ø�a˜& 1™*Ð%ˆØˆØ�AŠ:Ü—-‘-  d¨1¨2 hÓ/°Ñ2ˆCÜ�}‰}˜T 4¨¨! 9Ó-¨aÑ0ˆØ�‰7�aŠ<Ø�B‰JˆDÜ× Ñ ØØ˜‘GØØ˜‘GØ�q‘'ô
ˆð �v ‘z�|Ð$ cÐ*Ð*r7   c                ój  — t        |«      dz   dz   dz  }|d| D �cg c]  }t        |«      ‘Œ }}||d }g }d}t        |«      D �]¼  \  }	}
|t        |	dz   dz  «         d|	dz   dz  z  z  r|j                  d«       Œ9|
d   t        j
                  t        j                  t        j                  t        j                  t        j                  fv r'| j                  ||
«      \  }}|j                  |«       Œ²|
d   t        j                  t        j                  fv r'| j                  ||
«      \  }}|j                  |«       Œþ|
d   t        j                  t        j                  fv r(| j!                  ||«      \  }}|j                  |«       �ŒK|
d   t        j"                  t        j$                  t        j&                  fv r+| j)                  ||
d   «      \  }}|j                  |«       �Œª|
d   t        j*                  k(  r'| j-                  |«      \  }}|j                  |«       �Œç|
d   t        j.                  k(  r>t1        j2                  |«      \  }}|j                  t5        j6                  |«      «       �Œ;|
d   t8        j:                  k(  s|
d   dk(  r+t1        j2                  |«      \  }}|j                  |«       �Œ„t1        j2                  |«      \  }}	 |j                  |j=                  |«      «       �Œ¿ tA        |«      S c c}w # t>        $ r |j                  |«       Y �Œíw xY w)z(Parse values from a binary result packetrÚ   r*   r™   r   Nr   é?   )!rK   rÏ   Ú	enumeraterV   r   rë   rì   rí   rî   rï   rõ   rø   ÚFLOATrù   ÚDECIMALÚ
NEWDECIMALrü   r  ÚDATEr	  r  ÚTIMEr  ÚVECTORr   r´   r   Ú_vector_to_pythonr   ÚBINARYr?   ÚUnicodeDecodeErrorÚtuple)rÆ   Úfieldsr£   r}   Únull_bitmap_lengthrã   Únull_bitmaprS   rû   Úposrò   s              r5   Ú_parse_binary_valuesz"MySQLProtocol._parse_binary_valuesþ  sÓ  € ô " &›k¨A™o°Ñ1°aÑ7ÐØ'-¨aÐ0BÐ'CÖD !”s˜1•vÐDˆÐDØÐ*Ð+Ð,ˆàˆØ$(ˆÜ# FÓ+ó )	)‰JˆC�Øœ3  a¡¨1™}Ó-Ñ.°!¸¸a¹À1±}Ñ2DÒEØ—‘˜dÔ#ØØ�Q‰xÜ—‘Ü—‘Ü—‘Ü—‘Ü×"Ñ"ðñ ð !%× :Ñ :¸6À5Ó I‘�˜Ø—‘˜eÕ$Ø�q‘œi×.Ñ.´	·±Ð@Ñ@Ø $× 8Ñ 8¸ÀÓ G‘�˜Ø—‘˜eÕ$Ø�q‘œi×/Ñ/´×1EÑ1EÐFÑFØ $× >Ñ >¸vÀwÓ O‘�˜Ø—‘˜eÖ$Ø�q‘Ü×"Ñ"Ü—‘Ü×#Ñ#ðñ ð
 #'×">Ñ">¸vÀuÈQÁxÓ"P‘�˜Ø—‘˜eÖ$Ø�q‘œYŸ^™^Ò+Ø"&×"9Ñ"9¸&Ó"A‘�˜Ø—‘˜eÖ$Ø�q‘œY×-Ñ-Ò-ä"'×"6Ñ"6°vÓ">‘�˜Ø—‘œn×>Ñ>¸uÓEÖFØ�q‘œY×-Ñ-Ò-°°q±¸R²Ü"'×"6Ñ"6°vÓ">‘�˜Ø—‘˜eÖ$ä"'×"6Ñ"6°vÓ">‘�˜ð)Ø—M‘M %§,¡,¨wÓ"7Ö8ðO)	)ôV �V‹}Ðùòa EøôZ *ò )Ø—M‘M %×(ð)ús   œLË! LÌL2Ì1L2c                ó8  — g }d}d}d}		 |�	 ||fS |	|k(  r	 ||fS t        |j                  |«      «      }
|
d   dk(  r| j                  |
«      }d}n |
d   dk(  rd}| j                  ||
dd |«      }|€|�|j	                  |«       n|€|€t        |
«      ‚|	dz  }	Œ’)zwRead MySQL binary protocol result

        Reads all or given number of binary resultset rows from the socket.
        Nr   r1   r)   r2   r   )rÝ   rÛ   rÉ   r)  rV   r   )rÆ   rÞ   Úcolumnsrº   r}   rà   r�   rá   rS   rã   r£   s              r5   Úread_binary_resultz MySQLProtocol.read_binary_result8  sÝ   € ð ˆØˆØˆØˆØØˆØð �cˆ{Ðð �EŠzØð �cˆ{Ðô ˜4Ÿ9™9 \Ó2Ó3ˆFØ�a‰y˜CÒØ—n‘n VÓ,�Ø‘Ø˜‘˜a’Ø�Ø×2Ñ2°7¸FÀ1À2¸JÈÓP�Øˆ{˜vÐ1Ø—‘˜FÕ#Ø�  Ü# FÓ+Ð+Ø�‰FˆAð! r7   c                ó\  — | d   dk(  st        d«      ‚i }	 t        j                  | dd d«      \  } |d<   t        j                  | d«      \  } |d<   t        j                  | d«      \  } |d	<   | d
d } t        j                  | d«      \  } |d<   |S # t        $ r}t        d«      |‚d}~ww xY w)z(Parse a MySQL Binary Protocol OK packet.r1   r   zFailed parsing Binary OK packetr2   NrŽ   r*   Únum_columnsÚ
num_paramsr   r±   )r   r   rC   rµ   )r£   Úok_pktro   s      r5   Úparse_binary_prepare_okz%MySQLProtocol.parse_binary_prepare_ok^  sÈ   € ð �a‰y˜AŠ~Ü Ð!BÓCÐCàˆð	MÜ-2¯^©^¸FÀ1À2¸JÈÓ-JÑ*ˆF�F˜>Ñ*Ü,1¯N©N¸6À1Ó,EÑ)ˆF�F˜=Ñ)Ü+0¯>©>¸&À!Ó+DÑ(ˆF�F˜<Ñ(Ø˜A˜B�ZˆFÜ.3¯n©n¸VÀQÓ.GÑ+ˆF�F˜?Ñ+ð ˆøô ò 	MÜ Ð!BÓCÈÐLûð	Mús   —A8B Â	B+ÂB&Â&B+c                ó´  — d}d}| dk  r[| dk\  rd}t         j                  }nŸ| dk\  rd}t         j                  }n‡| dk\  rd}t         j                  }nod	}t         j                  }n\d
}| dk  rd}t         j                  }nB| dk  rd}t         j                  }n*| dk  rd}t         j                  }nt         j                  }d}t        j                  || «      ||fS )z0Prepare an integer for the MySQL binary protocolNr   i€ÿÿÿrç   i €ÿÿrè   i   €ré   rê   é€   r+   rP   iÿÿ  ru   l   ÿÿ r  z<Q)r   rë   rì   rî   rï   rT   rU   )rû   r  rÁ   ró   s       r5   Úprepare_binary_integerz$MySQLProtocol.prepare_binary_integerp  sÒ   € ð ˆ
ØˆØ�1Š9Ø˜Š}Ø�Ü&Ÿ^™^‘
Ø˜&’Ø�Ü&Ÿ_™_‘
Ø˜+Ò%Ø�Ü&Ÿ^™^‘
à�Ü&×/Ñ/‘
àˆEØ˜Š|Ø�Ü&Ÿ^™^‘
Ø˜%’Ø�Ü&Ÿ_™_‘
Ø˜*Ò$Ø�Ü&Ÿ^™^‘
ä&×/Ñ/�
Ø�Ü—‘˜G UÓ+¨Z¸Ð?Ð?r7   c                óh  — t        | t        j                  «      rt        j                  }n6t        | t        j                  «      rt        j
                  }nt        d«      ‚t        j                  | j                  «      t        j                  | j                  «      t        j                  | j                  «      g}t        | t        j                  «      r¨|j                  t        j                  | j                  «      t        j                  | j                  «      t        j                  | j                   «      g«       | j"                  dkD  r.|j%                  t        j&                  | j"                  «      «       dj)                  |«      }t        j                  t+        |«      «      |z   |fS )aƒ  Prepare a timestamp object for the MySQL binary protocol

        This method prepares a timestamp of type datetime.datetime or
        datetime.date for sending over the MySQL binary protocol.
        A tuple is returned with the prepared value and field type
        as elements.

        Raises ValueError when the argument value is of invalid type.

        Returns a tuple.
        z2Argument must a datetime.datetime or datetime.dater   r7   )Ú
isinstancer
  r   r  r  r  rµ   r   Ú	int2storerþ   r†   rÿ   r   Úextendr  r  r  r  rV   r…   rX   rK   )rû   r  ÚchunksÚpackeds       r5   Úprepare_binary_timestampz&MySQLProtocol.prepare_binary_timestamp’  s$  € ô �eœX×.Ñ.Ô/Ü"×+Ñ+‰JÜ˜œxŸ}™}Ô-Ü"Ÿ™‰JäÐQÓRÐRô �O‰O˜EŸJ™JÓ'Ü�O‰O˜EŸK™KÓ(Ü�O‰O˜EŸI™IÓ&ð
ˆô �eœX×.Ñ.Ô/Ø�M‰Mä—O‘O E§J¡JÓ/Ü—O‘O E§L¡LÓ1Ü—O‘O E§L¡LÓ1ðôð × Ñ  1Ò$Ø—‘œeŸo™o¨e×.?Ñ.?Ó@ÔAà—‘˜&Ó!ˆä�‰œs 6›{Ó+¨fÑ4°jÐ@Ð@r7   c                ód  — t        | t        j                  t        j                  f«      st	        d«      ‚t
        j                  }d}d}t        g «      }t        | t        j                  «      rº| j                  dk  rd}t        | j                  d«      \  }}t        |d«      \  }}|j                  t        j                  t        | j                  «      «      t        j                  |«      t        j                  |«      t        j                  |«      g«       | j                   }n‹|j                  t        j                  d«      t        j                  | j"                  «      t        j                  | j$                  «      t        j                  | j&                  «      g«       | j(                  }|r$|j+                  t        j                  |«      «       |j-                  t        j                  |«      «       dj/                  |«      }	t        j                  t1        |	«      «      |	z   |fS )a�  Prepare a time object for the MySQL binary protocol

        This method prepares a time object of type datetime.timedelta or
        datetime.time for sending over the MySQL binary protocol.
        A tuple is returned with the prepared value and field type
        as elements.

        Raises ValueError when the argument value is of invalid type.

        Returns a tuple.
        z3Argument must a datetime.timedelta or datetime.timer   Nr   i  é<   r7   )r6  r
  r  Útimerµ   r   r  r   r  Údivmodr  r8  r   r…   Úabsr†   r  r  r  r  r  rV   Ú
appendleftrX   rK   )
rû   r  Únegativer  r9  r  Ú	remainderÚminsÚsecsr:  s
             r5   Úprepare_binary_timez!MySQLProtocol.prepare_binary_time½  s”  € ô ˜%¤(×"4Ñ"4´h·m±mÐ!DÔEÜÐRÓSÐSä—^‘^ˆ
ØˆØˆÜ$ R›yˆä�eœX×/Ñ/Ô0Ø�z‰z˜AŠ~Ø�Ü!'¨¯©°tÓ!<ÑˆU�IÜ! )¨RÓ0‰LˆT�4Ø�M‰Mä—O‘O¤C¨¯
©
£OÓ4Ü—O‘O EÓ*Ü—O‘O DÓ)Ü—O‘O DÓ)ð	ôð ×$Ñ$‰Cà�M‰Mä—O‘O AÓ&Ü—O‘O E§J¡JÓ/Ü—O‘O E§L¡LÓ1Ü—O‘O E§L¡LÓ1ð	ôð ×#Ñ#ˆCÙØ�M‰Mœ%Ÿ/™/¨#Ó.Ô/à×Ñœ%Ÿ/™/¨(Ó3Ô4à—‘˜&Ó!ˆä�‰œs 6›{Ó+¨fÑ4°jÐ@Ð@r7   c                óv   — dj                  t        j                  | «      t        j                  |«      |g«      S )zMPrepare long data for prepared statements

        Returns a string.
        r7   )rX   r   r…   r7  )Ú	statementÚparamr‹   s      r5   Úprepare_stmt_send_long_dataz)MySQLProtocol.prepare_stmt_send_long_dataõ  s,   € ð �x‰xœŸ™¨Ó3´U·_±_ÀUÓ5KÈTÐRÓSÐSr7   c	           
     óü  — d}	dgt        |«      dz   dz  z  }
g }g }d}t        |«      }g }|s|n|t        z   }|dk(  rd}|€i }|r;t        |«      }|D ]  \  }}|j                  |«       Œ dgt        |«      dz   dz  z  }
|s|�r)|t        |«      k7  rt	        d«      ‚t        |«      D �]  \  }}d}|€_|
|dz  xx   d|dz  z  z  cc<   |j                  t        j                  t        j                  «      t        j                  |«      z   «       Œj||v r,||   d   rt        j                  }�nèt        j                  }�nÖt        |t        «      r(| j                  |«      \  }}}|j                  |«       �nžt        |t        «      rS|j!                  |«      }|j                  t        j"                  t        |«      «      |z   «       t        j                  }�n;t        |t$        «      rB|j                  t        j"                  t        |«      «      |z   «       t        j                  }�nét        |t&        «      rr|j                  t        j"                  t        t        |«      j!                  |«      «      «      t        |«      j!                  |«      z   «       t        j(                  }�ngt        |t*        «      r7|j                  t-        j.                  d	|«      «       t        j0                  }�n t        |t2        j2                  t2        j4                  f«      r&| j7                  |«      \  }}|j                  |«       nÐt        |t2        j8                  t2        j:                  f«      r&| j=                  |«      \  }}|j                  |«       n€|r[t        |«      j!                  |«      }|j                  t        j"                  t        |«      «      |z   «       t        j                  }n#t?        d
|j@                  jB                  › d�«      ‚|j                  t        j                  |«      t        j                  |«      z   «       |s�Œ®|dz   |kD  s�Œ¸|||z
     d   j!                  |«      }|j                  t        j"                  t        |«      «      |z   «       �Œ t        jD                  |«      t        j                  |«      t        jD                  |	«      g}|�|t        |«      z   }n|}|rç|�$|j                  t        j"                  |«      «       |jG                  |
D �cg c]  }t-        j.                  d|«      ‘Œ c}«       |j                  t        j                  d«      «       d}|D ]K  }|j                  |«       |�1|dz   |kD  r|j                  |||z
     «       n|j                  d«       |dz  }ŒM |D ]  }|j                  |«       Œ djI                  |«      S c c}w )z6Make a MySQL packet with the Statement Execute commandr   r   rÚ   r™   r7   Úutf8mb4Úutf8zTFailed executing prepared statement: data values does not match number of parametersr÷   z&MySQL binary protocol can not handle 'z	' objectsÚBr9   )%rK   r   ÚlistrV   r   r  r   r†   r   ÚNULLÚBLOBÚSTRINGr6  rÏ   r4  ÚstrrW   rg   rÝ   r   r  ÚfloatrT   rU   rø   r
  r  r;  r  r>  rF  r   Ú	__class__Ú__name__r…   r8  rX   )rÆ   rŽ   r‹   Ú
parametersrÁ   Úlong_data_usedr}   Úquery_attrsÚconverter_str_fallbackÚiteration_countr'  rS   Útypesr:  Údata_lenÚquery_attr_namesr¿   Úattr_valr(  rû   Ú_flagsr  rf   r£   Úparameter_countÚbitrº   Úa_typeÚa_values                                r5   Úmake_stmt_executezMySQLProtocol.make_stmt_executeý  s  € ð ˆØ�cœc $›i¨!™m°Ñ1Ñ2ˆØ ˆØˆØˆÜ�t“9ˆØ(*ÐÙ(‘¨eÔ6OÑ.Oˆà�iÒØˆGàÐ!ØˆNáÜ˜“:ˆDØ*ò &‘��8Ø—‘˜HÕ%ð&à˜#¤# d£)¨a¡-°AÑ!5Ñ6ˆKášØœ3˜z›?Ò*Ü$ð2óð ô (¨›oó 8L‘
��UØ�Ø�=Ø ¨¡Ó+¨q°S¸1±W©~Ñ=Ó+Ø—L‘LÜŸ™¬	¯©Ó7¼%¿/¹/È&Ó:QÑQôð Ø˜.Ñ(Ø% cÑ*¨1Ò-ä%.§^¡^š
ô &/×%5Ñ%5š
Ü ¤sÔ+ð
 ×3Ñ3°EÓ:ñ	ØØ"Øà—M‘M &Ö)Ü ¤sÔ+Ø!ŸL™L¨Ó1�EØ—M‘M¤%§,¡,¬s°5«zÓ":¸UÑ"BÔCÜ!*×!1Ñ!1’JÜ ¤uÔ-Ø—M‘M¤%§,¡,¬s°5«zÓ":¸UÑ"BÔCÜ!*×!1Ñ!1’JÜ ¤wÔ/Ø—M‘MÜŸ™¤S¬¨U«×):Ñ):¸7Ó)CÓ%DÓEÜ˜e›*×+Ñ+¨GÓ4ñ5ôô "+×!2Ñ!2’JÜ ¤uÔ-Ø—M‘M¤&§+¡+¨d°EÓ":Ô;Ü!*×!1Ñ!1’JÜ ¬×(9Ñ(9¼8¿=¹=Ð'IÔJØ+/×+HÑ+HÈÓ+OÑ(�V˜ZØ—M‘M &Õ)Ü ¬×(:Ñ(:¼H¿M¹MÐ'JÔKØ+/×+CÑ+CÀEÓ+JÑ(�V˜ZØ—M‘M &Õ)Ù+Ü ›J×-Ñ-¨gÓ6�EØ—M‘M¤%§,¡,¬s°5«zÓ":¸UÑ"BÔCÜ!*×!1Ñ!1‘Jä*ðØ!ŸO™O×4Ñ4Ð5°Yð@óð ð —‘œUŸ_™_¨ZÓ8¼5¿?¹?È6Ó;RÑRÔSÛ 3¨¡7¨XÔ#5Ø& s¨X¡~Ñ6°qÑ9×@Ñ@ÀÓI�DØ$×+Ñ+¬E¯L©L¼¸T»Ó,CÀdÑ,JÖKðq8Lôt �O‰O˜LÓ)Ü�O‰O˜EÓ"Ü�O‰O˜OÓ,ð
ˆð Ð"Ø&¬¨[Ó)9Ñ9‰Oà&ˆOÙàÐ&Ø—‘œeŸl™l¨?Ó;Ô<à�M‰M¸KÖH°Sœ6Ÿ;™; s¨CÕ0ÒHÔIØ�M‰Mœ%Ÿ/™/¨!Ó,Ô-àˆEØò �Ø—‘˜fÔ%ð
 Ð*Ø˜q‘y 8Ò+ØŸ™Ð&6°u¸xÑ7GÑ&HÕIàŸ™ gÔ.Ø˜‘
‘ðð "ò '�Ø—‘˜gÕ&ð'ð �x‰x˜ÓÐùò) Is   Ô6W9)r4   rÝ   ÚreturnrÝ   )r4   rÝ   rf  zTuple[str, bytes])rN   zDict[str, str]rf  rÝ   )r_   rÏ   r`   úOptional[str]rf  rÝ   )NFN)rh   rÝ   ri   rS  rj   rS  rk   rS  rl   rg  rc   Úboolrm   úOptional[Dict[str, Any]]rf  úTuple[bytes, MySQLAuthPlugin])r|   r#   ri   rS  rj   rS  r`   rg  r}   rÏ   r_   rÏ   r~   rÏ   rk   rg  rl   rg  rN   zOptional[Dict[str, str]]r   rh  rc   rh  rm   ri  rf  rj  )r}   rÏ   r_   rÏ   r~   rÏ   rf  rÝ   rJ   )r‰   rÏ   rŠ   zOptional[bytes]rf  rÝ   )r   )rŽ   rÏ   r�   rÏ   rf  rÝ   )r£   rÝ   rf  r#   )r£   rÝ   rf  r$   )r£   rÝ   rf  úOptional[int])rš   )r£   rÝ   r¾   rS  rf  r!   )r£   rÝ   rf  r"   )T)r£   rÝ   rÑ   rh  rf  r%   )r   N)
rÞ   r'   rß   zTuple[int, ...]rº   rÏ   rà   rk  rf  zATuple[List[Tuple[Optional[bytes], ...]], Optional[EofPacketType]])r£   rÝ   rò   r!   rf  úTuple[bytes, int])r£   rÝ   rò   r!   rf  zTuple[bytes, float])rM  )r£   rÝ   r}   rS  rf  zTuple[bytes, Decimal])r£   rÝ   r  rÏ   rf  z?Tuple[bytes, Optional[Union[datetime.date, datetime.datetime]]])r£   rÝ   rf  z Tuple[bytes, datetime.timedelta])r%  úList[DescriptionType]r£   rÝ   r}   rS  rf  zTuple[BinaryProtocolType, ...])r   rš   N)rÞ   r'   r+  rm  rº   rÏ   r}   rS  rà   rk  rf  zDTuple[List[Tuple[BinaryProtocolType, ...]], Optional[EofPacketType]])r£   rÝ   rf  zDict[str, int])rû   rÏ   rf  zTuple[bytes, int, int])rû   z'Union[datetime.date, datetime.datetime]rf  rl  )rû   z(Union[datetime.timedelta, datetime.time]rf  rl  )rH  rÏ   rI  rÏ   r‹   rÝ   rf  rÝ   )© rn  r   NrM  NF)rŽ   rÏ   r‹   zSequence[BinaryProtocolType]rW  r   rÁ   rÏ   rX  z Optional[Dict[int, Tuple[bool]]]r}   rS  rY  z.Optional[List[Tuple[str, BinaryProtocolType]]]rZ  rh  rf  rÝ   )%rV  Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr6   rA   rF   r\   ra   rp   ÚDEFAULT_CHARSET_IDÚDEFAULT_MAX_ALLOWED_PACKETrƒ   r‡   rŒ   r�   r«   r·   r»   rÂ   rÉ   rØ   rå   rõ   rù   rü   r  r  r)  r,  r1  r4  r;  rF  rJ  re  rn  r7   r5   r/   r/   X   s  „ ñð
 òó ðð* ò)ó ð)ð4 ò)ó ð)ð4 ò+ó ð+ð< ò
ó ð
ð( ð ,0Ø!Ø26ð:,Øð:,àð:,ð ð:,ð ð	:,ð
 )ð:,ð ð:,ð 0ð:,ð 
'ò:,ó ð:,ðx ð
 #'Ø)ØØ"<Ø%)Ø+/Ø/3Ø',Ø!Ø26ðw9Ø ðw9àðw9ð ðw9ð  ð	w9ð
 ðw9ð ðw9ð  ðw9ð #ðw9ð )ðw9ð -ðw9ð !%ðw9ð ðw9ð 0ðw9ð 
'òw9ó ðw9ðr à)ØØ"<ð
Øð
àð
ð  ð
ð 
ò	
ó ð
ð@ ó=ó ð=ð
 óEó ðEð ò1ó ð1ðf òó ðð, òIó ðIð ó
ó ð
ó@ð( óó ðð@ Ø&*ð.àð.ð !ð.ð ð	.ð
 $ð.ð
ó.ð` ðNØðNØ-ðNà	òNó ðNð2 ðNØðNØ-ðNà	òNó ðNð à&,ð8Øð8Ø #ð8à	ò8ó ð8ð ð-Øð-àð-ð 
Iò-ó ð-ð> ò+ó ð+ð4 ð	8à%ð8ð ð8ð ð	8ð
 
(ó8ð| ØØ&*ð$àð$ð 'ð$ð ð	$ð
 ð$ð $ð$ð
ó$ðL òó ðð" ò@ó ð@ðB ð(AØ6ð(Aà	ò(Aó ð(AðT ð5AØ7ð5Aà	ò5Aó ð5Aðn òTó ðTð .0Ø!ØØ;?ØØFJØ',ðE àðE ð +ðE ð ð	E ð
 ðE ð 9ðE ð ðE ð DðE ð !%ðE ð 
ôE r7   r/   )>rq  Ú
__future__r   r
  rT   Úcollectionsr   Údecimalr   r   Útypingr   r   r	   r
   r   r   r   r   r   rH   r   Ú	constantsr   r   r   r   r   Ú
conversionr   Úerrorsr   r   r   r   r   Úpluginsr   r   Úplugins.caching_sha2_passwordr   r\  r    r!   r"   r#   r$   r%   r&   Únetworkr'   rž   r=   r3   Ú	OK_STATUSÚ
EOF_STATUSrD   Ú
ERR_STATUSÚLOCAL_INFILE_STATUSrs  rt  r/   rn  r7   r5   ú<module>rƒ     s¨   ðñ: 3Ý "ã Û å ß -÷
÷ 
õ 
õ ÷õ õ 'ß RÓ RÝ ß 5Ý M÷÷ ñ ñ Ý$ð Ð ØÐ ØÐ Ø€	Ø€
Ø€
Ø€
ØÐ ØÐ Ø'Ð ÷j ò j r7   