
    i                         U d Z ddlZddl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 ddl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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Z(e)e*d<    G d d      Z+y)z,Implements the MySQL Client/Server protocol.    N)DecimalDecimalException)AnyDictListOptionalSequenceTupleUnion   )utils)get_auth_plugin)PARAMETER_COUNT_AVAILABLE
ClientFlag	FieldFlag	FieldType	ServerCmd)DatabaseErrorInterfaceErrorProgrammingErrorget_exception)
ConnAttrsTypeDescriptionTypeEofPacketTypeHandShakeTypeOkPacketType%ParseValueFromBinaryResultPacketTypes
SocketTypeStatsPacketType
StrOrBytes!SupportedMysqlBinaryProtocolTypes
   PROTOCOL_VERSIONc                   R   e Zd ZdZededee   defd       Z	ededee
   dee   dee   ded	ed
ee   dedefd       Z	 	 	 	 	 	 	 	 	 	 dGdee   dee
   dee   dee   dedededed	ee   dee   dee   defdZededefd       Ze	 dHdedededefd       ZedIdedee   defd       ZedJdededefd       Z	 	 	 	 	 	 	 	 	 dKdedee
   dee   dee   dededed	ee   dee   dee   defdZededefd       Zededeeef   fd       Zededefd       Zededee   fd        ZedLded!edefd"       Zdedefd#ZedMded$ede fd%       Z!	 dJd&e"d'eed(f   d)edee#eee   d(f      ee   f   fd*Z$eded+edeeef   fd,       Z%eded+edeee&f   fd-       Z'e	 dNdededeee(f   fd.       Z)eded/edeeee*e+jX                  e+jV                  f      f   fd0       Z-ededeee+j\                  f   fd1       Z/	 dLd2e#e   dededee0d(f   fd3Z1	 	 dOd&e"d4e#e   d)ededee#ee0d(f      ee   f   f
d5Z2edede3eef   fd6       Z4ed7edeeeef   fd8       Z5ed7e*e+jX                  e+jV                  f   deeef   fd9       Z6ed7e*e+j\                  e+jn                  f   deeef   fd:       Z8ed;ed<ed=edefd>       Z9	 	 	 	 	 	 	 dPded=e:e;   d?e:e<   d@edAee3eee   f      dedBee#eee<f         dCedefdDZ=ededeeef   fdE       Z>ededefdF       Z?y)QMySQLProtocolzRImplements MySQL client/server protocol

    Create and parses MySQL packets.
    client_flagsdatabasereturnc                 V    | t         j                  z  r|r|j                  d      dz   S y)z.Prepare database string for handshake responseutf8    )r   CONNECT_WITH_DBencode)r&   r'   s     j/var/www/catia.catastroantioquia-mas.com/valormas/lib/python3.12/site-packages/mysql/connector/protocol.py_connect_with_dbzMySQLProtocol._connect_with_dbG   s+     *444??6*W44    usernamepasswordauth_plugin_classauth_plugin	auth_datassl_enabledc                 $   |sy	  t        ||      |||||      }|j                         }	| t        j
                  z  r&t        |	      }t        j                  d|      |	z   }|S |	dz   }|S # t        t        f$ r}
t        d|
       |
d}
~
ww xY w)z#Prepare the authentication responser+   )r1   r2   r'   r6   zFailed authentication: N<B)	r   auth_response	TypeErrorr   r   SECURE_CONNECTIONlenstructpack)r&   r1   r2   r'   r3   r4   r5   r6   authplugin_auth_responseerrresplenr9   s                r.   _auth_responsezMySQLProtocol._auth_responseN   s     	KB?;0AB!!!'D $(#5#5#7  *666./G"KKg69MMM  17:M >* 	K #:3%!@AsJ	Ks   'A, ,B;B

BN	handshakecharsetmax_allowed_packet
conn_attrsc                 &   |i }	 |d   }|	xs |d   }	|sd}	 |j                  d      }d}t        |      }t        j                  d	| | d
||||      }|| j                  ||||||	||      z  }|| j                  ||      z  }|t        j                  z  r||	j                  d      dz   z  }|t        j                  z  r|
|| j                  |
      z  }|S # t         t        f$ r}t        d| d      dd}~ww xY w# t        $ r |}Y w xY w)z"Make a MySQL Authentication packetNr5   r4   &Handshake misses authentication info ()r0   r*   xxxxxxxxxxxxxxxxxxxxxxz<IIHsxr+   )r:   KeyErrorr   r-   AttributeErrorr<   r=   r>   rC   r/   r   PLUGIN_AUTHCONNECT_ARGSmake_conn_attrs)selfrD   r1   r2   r'   rE   r&   rF   r6   r4   rG   r3   r5   rA   username_bytesfillerusername_lenpackets                     r.   	make_authzMySQLProtocol.make_auths   sm    I	)2;)?I%A=)AK H	&%__V4N
 >*6(<.+
 	$%%	
 		
 	$''h??*000k((07::F:222
8Nd**:66FW 8$ 	"8Q?	  	&%N	&s(   C D C?*C::C?DDc           	           D ]  } |   	d |<    t         fd D              t         j                               z   t         j                               z   }t	        j
                  d|      } D ]t  }|t	        j
                  dt        |            z  }||j                  d      z  }|t	        j
                  dt         |               z  }| |   j                  d      z  }v |S )z Encode the connection attributes c              3   R   K   | ]  }t        |      t        |         z      y wN)r<   ).0xrG   s     r.   	<genexpr>z0MySQLProtocol.make_conn_attrs.<locals>.<genexpr>   s#     @AZ]++@s   $'r8   r*   )sumr<   keysvaluesr=   r>   r-   )rG   	attr_nameconn_attrs_lenconn_attrs_packets   `   r.   rQ   zMySQLProtocol.make_conn_attrs   s     $ 	+I)$,(*
9%	+ @Z@@*//#$%*##%&' 	 #KKn=# 	FIT3y>!BB!1!1&!99T3z)7L3M!NNI!6!=!=f!EE		F
 ! r0   c                     t        j                  |      t        j                  |      z   t        j                  |       z   dz   S )z Make a SSL authentication packets                         r   	int4store	int2store)rE   r&   rF   s      r.   make_auth_sslzMySQLProtocol.make_auth_ssl   sB     OOL)oo012oog&' 	
r0   commandargumentc                 >    t        j                  |       }|||z  }|S )z(Make a MySQL packet containing a command)r   	int1store)rj   rk   datas      r.   make_commandzMySQLProtocol.make_command   s'     w'HDr0   statement_idrowsc                 X    t        j                  |       t        j                  |      z   S )z0Make a MySQL packet with Fetch Statement command)r   rg   )rp   rq   s     r.   make_stmt_fetchzMySQLProtocol.make_stmt_fetch   s!     |,ut/DDDr0   c                 b   	 |d   }|xs |d   }|sd}	 |j                  d      }t        |      }t        j                  d| d	t        j                  |      }|| j                  |||||
|||      z  }|| j                  ||      z  }|t        j                  d
|      z  }|t        j                  z  r||j                  d      dz   z  }|t        j                  z  r|	|| j                  |	      z  }|S # t         t        f$ r}t        d| d      dd}~ww xY w# t        $ r |}Y w xY w)z0Make a MySQL packet with the Change User commandr5   r4   rI   rJ   Nr0   r*   r8   rL   <Hr+   )r:   rM   r   r-   rN   r<   r=   r>   r   CHANGE_USERrC   r/   r   rO   rP   rQ   )rR   rD   r1   r2   r'   rE   r&   r6   r4   rG   r3   r5   rA   rS   rU   rV   s                   r.   make_change_userzMySQLProtocol.make_change_user   sl   	)2;)?I%A=)AK H	&%__V4N
 >*b!!!
 	$%%	
 		
 	$''h??&++dG,,*000k((07::F:222
8Nd**:66FS 8$ 	"8Q?	  	&%N	&s(   C8 D 8DDDD.-D.rV   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      protocolz$Protocol mismatch; server version = z, client version = Nr+   endserver_version_originalz<I8sx2sBH2sBxxxxxxxxxx   server_threadidrE   server_statusr0         z5.5.8r4   utf-8mysql_native_passwordr5   capabilities)r=   unpackr#   r   r   read_stringdecodeintreadr   r;   minrO   
startswith)	rV   res
auth_data1capabilities1capabilities2auth_data_lengthr   
auth_data2sizes	            r.   parse_handshakezMySQLProtocol.parse_handshake  s     --&1+>qAJz?..6s:6G H$$4#57  271B1B12JG2
.-. MM2F1RLA	
!"	N ),-F)G)N)N)P%&}}]]%BC
*6664D3r+a/0"D$JDE]F"~"'_
*000f$-F)G)R)R* 14V,]+/4/@/@W/U,]+!$]!3!:!:7!CC!8C%
2K*N
r0   c                     t        j                  | d      \  } }|dk7  rt        d      t        j                  | d      \  } }| |j	                  d      fS )z$Parse a MySQL AuthNextFactor packet.r      z.Failed parsing AuthNextFactor packet (invalid)r+   r|   r   )r   read_intr   r   r   )rV   statusr4   s      r.   parse_auth_next_factorz$MySQLProtocol.parse_auth_next_factorR  sX     2Q; !QRR#//GD{))'222r0   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-packet   r   z#Failed parsing OK packet (invalid).ry   rz   field_countNaffected_rows	insert_idz<HHstatus_flagwarning_countinfo_msgr   zFailed parsing OK packet.)r   r=   r   r   read_lc_intread_lc_stringr   
ValueError)rV   	ok_packetrA   s      r.   parse_okzMySQLProtocol.parse_ok[  s    ayA~ !FGG		G'-}}Xva{'KA'NIm$161B1B6!":1N.FIo.-2->->v-F*FIk* eVAa[1-(/*ABZF050D0DV0L-	*-(1*(=(D(DW(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 setr   Nr   zFailed parsing column count)r   r   r=   errorr   r   )rV   countrA   s      r.   parse_column_countz MySQLProtocol.parse_column_countr  sQ    	I%%fQRj1!4ELj) 	I !>?SH	Is    A	AA	encodingc           	          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-packetr   Nz	<xHIBHBxxz!Failed parsing column information)	r   r   r=   r   r   r   r   r   NOT_NULL)rV   r   _namerE   column_typeflagss          r.   parse_columnzMySQLProtocol.parse_column{  s    ((4	((0	((0	((0	++F3((0			P k62 KK!FY'''

 
	
 || 	P !DE4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-packetr   r   zFailed parsing EOF packet.z<xxxBBHHNr      	   r   r      r   )r   r=   r   r   r   r<   )rR   rV   err_msgr   unpackedrA   s         r.   	parse_eofzMySQLProtocol.parse_eof  s    !9>==((.	3}}Z8H s"s6{a'7 ))'{O%a[M
 || 	3 )s2	3s   A( (B;BBwith_headerc                 $   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 informationr0   r   Ns        :r   r   z (:rJ   )
splitstripr   r   r   intrM   r   r   repr)
rV   r   errmsgr   pairslblpairvvalrA   s
             r.   parse_statisticszMySQLProtocol.parse_statistics  s8    =.0!U12J$$[1ELL-E 	SD6/3zz$/BC!AGGICS
 **W%CSs8C	S 
 D 6$V,#56 j) SS&szz'':;CH' S(F82cU!DI;a)HIsRS Ss_   BB#B;B/B	B,B''B,/D?CD	D	&DD		DDsockversion.r   c                    |}g }d}d}d}	 |s||k(  r	 ||fS |j                         }	|	j                  d      r|	dd g}
|j                         }	|	j                  d      r6|
j                  |	dd        |j                         }	|	j                  d      r6|
j                  |	dd        t        j                  t        d      j                  |
            }n>|	d   dk(  r|	d   dk  r| j                  |	      }d}nd}t        j                  |	dd       }|||j                  |       n||t        |	      |dz  }6)	zRead 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   r   r0   r      r   )	recvr   appendr   read_lc_string_list	bytearrayjoinr   r   )rR   r   r   r   r   rq   eofrowdatairV   datass              r.   read_text_resultzMySQLProtocol.read_text_result  sU    a5j* Sy) YY[F  1''8LL,!YY[F ''8 VABZ(33IcN4G4G4NOc!fQi!mnnV,33F12J?{w2G$#F++FA- r0   fieldc                    |d   t         j                  k(  rd}d}n_|d   t         j                  k(  rd}d}nD|d   t         j                  t         j                  fv rd}d}n|d   t         j
                  k(  rd}d}|d	   t        j                  z  rj                         }| d
 t        j                  | d|       d   fS )z%Parse an integer from a binary packetr   <b<hr   <ir   <qr   r   Nr   )r   TINYSHORTINT24LONGLONGLONGr   UNSIGNEDupperr=   r   )rV   r   format_lengths       r.   _parse_binary_integerz#MySQLProtocol._parse_binary_integer  s    
 8y~~%GF1X(GF1X)//9>>::GF1X+++GF8i(((mmoGvwwq8H!I!!LMMr0   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   <dr   z<fNr   )r   DOUBLEr=   r   )rV   r   r   r   s       r.   _parse_binary_floatz!MySQLProtocol._parse_binary_float  sR    
 8y'''FGFGvwwq8H!I!!LMMr0   c                 j    t        j                  |       \  } }| t        |j                  |            fS )z(Parse a New Decimal from a binary packet)r   r   r   r   )rV   rE   values      r.   _parse_binary_new_decimalz'MySQLProtocol._parse_binary_new_decimal  s1    
  ..v6W 5677r0   
field_typec           	         | d   }d}|dk(  rzt        j                  d| dd       d   }| d   }| d   }|t        j                  t        j                  fv rt        j
                  |||      }nt        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   Nr   ru   r   r   )yearmonthdayr      <Ir   rz      )r   r   r   hourminutesecondmicrosecond)r=   r   r   DATETIME	TIMESTAMPdatetimedate)rV   r   r   r   r   r   r   mcss           r.   _parse_binary_timestampz%MySQLProtocol._parse_binary_timestamp#  s    Q;==va{3A6D1IE)Ci00)2E2EFF ))t5cJ 4u#Fq[C|mmD&VaZ*@A!D%%]]4!5a8Qi1IAYayayE vz|$e,,r0   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   rz   r   r   r   )dayssecondsmicrosecondsminuteshours)r   	timedeltar=   r   )rV   r   rn   r   r  tmps         r.   _parse_binary_timez MySQLProtocol._parse_binary_timeC  s     12J 2 2 455a&1*%A:--d12h/2C}}T4!9-a07a<BJD  GGq'
 vz|$c**r0   fieldsc                 0   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                  |       t/        j0                  |      \  }}	 |j                  |j3                  |             " t7        |      S c c}w # t4        $ r |j                  |       Y Pw xY w)z(Parse values from a binary result packetr   r   r   r   Nr   )r<   r   	enumerater   r   r   r   r   r   r   r   r   FLOATr   DECIMAL
NEWDECIMALr   r   DATEr   r   TIMEr	  r   r   r   UnicodeDecodeErrortuple)rR   r
  rV   rE   null_bitmap_lengthr   null_bitmapra   r   posr   s              r.   _parse_binary_valuesz"MySQLProtocol._parse_binary_valuesZ  sZ    "&kAo1a7'-a0B'CD!s1vDD*+,#F+ "	)JC3a1}-.!a1}2DEd#Qx""  !% : :65 Ie$qi..	@@ $ 8 8 Ge$qi//1E1EFF $ > >vw Oe$q""## 
 #'">">vuQx"Pe$qY^^+"&"9"9&"Ae$"'"6"6v">)MM%,,w"78A"	)H V}S EL * )MM%()s   I2 I77JJcolumnsc                 $   g }d}d}d}	 |	 ||fS ||k(  r	 ||fS |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   r   r   rz   r   )r   r   r  r   r   )
rR   r   r  r   rE   rq   r   ra   r   rV   s
             r.   read_binary_resultz MySQLProtocol.read_binary_result  s      c{ Ez c{ YY[FayCnnV,a227F12JP{v1F##F++FA! r0   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 packetr   r   zFailed parsing Binary OK packetrz   Nrp   r   num_columns
num_paramsr   r   )r   r   r   r   )rV   ok_pktrA   s      r.   parse_binary_prepare_okz%MySQLProtocol.parse_binary_prepare_ok  s     ayA~ !BCC	M-2^^F12J-J*FF>*,1NN61,E)FF=)+0>>&!+D(FF<(ABZF.3nnVQ.G+FF?+   	M !BCL	Ms   A8B 	B+B&&B+r   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   ir   i r   i   r   r         r8   i  ru   l    r   z<Q)r   r   r   r   r   r=   r>   )r   r   r   r   s       r.   prepare_binary_integerz$MySQLProtocol.prepare_binary_integer  s     
19}&^^
&&__
+%&^^
&//
E|&^^
%&__
*$&^^
&//
GU+Z??r0   c                 &   t        | t        j                        rt        j                  }n6t        | t        j                        rt        j
                  }nt        d      t        j                  | j                        t        j                  | j                        z   t        j                  | j                        z   }t        | t        j                        r|t        j                  | j                        z   t        j                  | j                        z   t        j                  | j                        z   }| j                   dkD  r"|t        j"                  | j                         z  }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   )
isinstancer   r   r   r   r  r   r   rh   r   rm   r   r   r   r   r   r   rg   r<   )r   r   packeds      r.   prepare_binary_timestampz&MySQLProtocol.prepare_binary_timestamp  s)    eX../"++Jx}}-"JQRR OOEJJ'ooekk*+ooeii() 	 eX..///%**-.//%,,/0 //%,,/0    1$%//%*;*;<<V-6
##r0   c                    t        | t        j                  t        j                  f      st	        d      t
        j                  }d}d}d}t        | t        j                        r| j                  dk  rd}t        | j                  d      \  }}t        |d      \  }}|t        j                  t        | j                              t        j                  |      z   t        j                  |      z   t        j                  |      z   z  }| j                  }n|t        j                  d      t        j                  | j                        z   t        j                  | j                         z   t        j                  | j"                        z   z  }| j$                  }|r|t        j                  |      z  }t        j                  |      |z   }t        j                  t'        |            |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   Nr0   r   i  <   )r%  r   r  timer   r   r  r  divmodr  r   rg   absrm   r  r   r   r   r   r<   )	r   r   negativer   r&  r  	remainderminssecss	            r.   prepare_binary_timez!MySQLProtocol.prepare_binary_time  s    %("4"4hmm!DERSS^^
eX//0zzA~!'t!<UI!)R0LT4EJJ0//%()//$'( //$'(F $$C"//%**-.//%,,/0 //%,,/0F ##Ceooc**F*V3V-6
##r0   	statementparamrn   c                 b    t        j                  |       t        j                  |      z   |z   }|S )zMPrepare long data for prepared statements

        Returns a string.
        rf   )r2  r3  rn   rV   s       r.   prepare_stmt_send_long_dataz)MySQLProtocol.prepare_stmt_send_long_dataB  s+     "OOI69OORVVr0   
parametersr   long_data_usedquery_attrsconverter_str_fallbackc	           
      V   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                  }nt        j                  }nt        |t              r(| j                  |      \  }}}|j                  |       nt        |t              rS|j!                  |      }|j                  t        j"                  t        |            |z          t        j                  }n;t        |t$              rB|j                  t        j"                  t        |            |z          t        j                  }nt        |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                  |       nt        |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                  |      z   t        jD                  |	      z   }||t        |      z   }n|}|r||t        j"                  |      z  }|djG                  |
D cg c]  }t-        j.                  d|       c}      t        j                  d      z   z  }d}|D ]'  }||z  }||dz   |kD  r||||z
     z  }n|dz  }|dz  }) |D ]  }||z  }	 |S c c}w )z6Make a MySQL packet with the Statement Execute commandr   r   r   r   r0   utf8mb4r*   zTFailed executing prepared statement: data values does not match number of parametersr   z&MySQL binary protocol can not handle 'z	' objectsBr+   )$r<   r   listr   r   r  r   rm   r   NULLBLOBSTRINGr%  r   r#  strr-   lc_intbytesr   r  floatr=   r>   r   r   r   r'  r  r*  r1  r   	__class____name__rg   r   )rR   rp   rn   r6  r   r7  rE   r8  r9  iteration_countr  ra   typesr&  data_lenquery_attr_namesr   attr_valr  r   _flagsr   r   rV   parameter_countbitr   a_typea_values                                r.   make_stmt_executezMySQLProtocol.make_stmt_executeM  s    cc$i!m12t9(e6O.OiG!N:D* &8H%&##d)a-A!56K3z?*$2  (o 8L
U=+qS1W~=+LL	7%//&:QQ .(%c*1-%.^^
 &/%5%5
s+
 33E:	"MM&)s+!LL1EMM%,,s5z":U"BC!*!1!1Ju-MM%,,s5z":U"BC!*!1!1Jw/MMSU):):7)C%DEe*++G45 "+!2!2Ju-MM&++dE":;!*!1!1J(9(98=='IJ+/+H+H+O(VZMM&)(:(:HMM'JK+/+C+CE+J(VZMM&)+J--g6EMM%,,s5z":U"BC!*!1!1J*!OO445Y@  U__Z85??6;RRS37X#5&sX~6q9@@ID$++ELLT,Cd,JKq8Lt OOL)ooe$%ooo./ 	 "&[)99O&O&%,,77chh2=>3S#&>"# #F E & 
 *qy8+"2583C"DD')
 " "'!" ' ?s   .V&
c                     | d   dk(  st        d      t        j                  | dd d      \  } }| r| d   d	k(  r| dd } |j                  d
      | fS )z&Parse a MySQL AuthSwitchRequest-packetr   r   z'Failed parsing AuthSwitchRequest packetrz   Nr+   r|   r   r   r*   )r   r   r   r   )rV   plugin_names     r.   parse_auth_switch_requestz'MySQLProtocol.parse_auth_switch_request  sg     ayC !JKK#//qr
HfRjAoCR[F!!&)611r0   c                 2    | d   dk(  st        d      | dd S )z!Parse a MySQL AuthMoreData-packetr   r   z"Failed parsing AuthMoreData packetrz   N)r   )rV   s    r.   parse_auth_more_dataz"MySQLProtocol.parse_auth_more_data  s'     ayA~ !EFFabzr0   )
NNN-   r      @FNNN)rW  r   rX  r[   )r   )	NNNrW  r   FNNN)r   )T)r*   )r   r   ) rY  r   Nr*   NF)@rF  
__module____qualname____doc__staticmethodr   r   rA  rC  r/   r    boolrC   r   r   rW   rQ   r   ri   ro   rs   rw   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD  r   r   r   r   r   r   r   r  r	  r   r  r  r   r  r#  r'  r*  r1  r5  r	   r!   r   rQ  rT  rV  rY  r0   r.   r%   r%   A   s   
 s hsm    "":&" 3-" 3-	"
 " " E?" " 
" "N *."&"&",!%).2+/?M*? :&? 3-	?
 3-? ? ?  ? ? c]? ]+? $C=? 
?B !M !e ! !& LV	
	
),	
FI	
		
 	
 c Xe_ 	   Ec E EY E E *."&"&!%).2+/; ; :&; 3-	;
 3-; ; ; ; c]; ]+; $C=; 
;z 1 1- 1 1f 3u 3ucz1B 3 3  <  , I5 IXc] I I 
U 
c 
 
 
@ - (  T _  : HI'').sCx'AD'	tE(5/3./0(=2IJ	K'R NN-N	ucz	N N, NN-N	ue|	N N &,88 #8	ug~	8 8 --- 
uhuX]]H4E4E%EFGG	H- -> +5 +U5(:L:L3L-M + +4 	1_%1 1 	1
 
4c9	:1n ## o&# 	#
 # 
U8#=>?	!
#J  $sCx.  " @c @eE3O.D @ @B &$X]]H$5$556&$	y#~	&$ &$P 0$X''670$	y#~	0$ 0$d "*/	  =?$&;?7;',AA 89A SM	A
 A !c5;&6!78A A d5c?34A !%A 
AF 	2% 	2E#u*4E 	2 	2 U u  r0   r%   ),r\  r   r=   decimalr   r   typingr   r   r   r   r	   r
   r   rY   r   authenticationr   	constantsr   r   r   r   r   errorsr   r   r   r   rH  r   r   r   r   r   r   r   r   r    r!   r#   r   __annotations__r%   rY  r0   r.   <module>re     s]   > 3   - D D D  +  S R    # a ar0   