
    BR<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'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QueryAttrType
SocketTypeStatsPacketType
StrOrBytes!SupportedMysqlBinaryProtocolTypes
   PROTOCOL_VERSIONc                   B   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=   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     Y/var/www/html/delta-backend/venv/lib/python3.12/site-packages/mysql/connector/protocol.py_connect_with_dbzMySQLProtocol._connect_with_dbH   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,   )r2   r3   r(   r7   zFailed authentication: N<B)	r   auth_response	TypeErrorr   r   SECURE_CONNECTIONlenstructpack)r'   r2   r3   r(   r4   r5   r6   r7   authplugin_auth_responseerrresplenr:   s                r/   _auth_responsezMySQLProtocol._auth_responseO   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 packetNr6   r5   &Handshake misses authentication info ()r1   r+   xxxxxxxxxxxxxxxxxxxxxxz<IIHsxr,   )r;   KeyErrorr   r.   AttributeErrorr=   r>   r?   rD   r0   r   PLUGIN_AUTHCONNECT_ARGSmake_conn_attrs)selfrE   r2   r3   r(   rF   r'   rG   r7   r5   rH   r4   r6   rB   username_bytesfillerusername_lenpackets                     r/   	make_authzMySQLProtocol.make_autht   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xrH   s     r/   	<genexpr>z0MySQLProtocol.make_conn_attrs.<locals>.<genexpr>   s#     @AZ]++@s   $'r9   r+   )sumr=   keysvaluesr>   r?   r.   )rH   	attr_nameconn_attrs_lenconn_attrs_packets   `   r/   rR   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
 ! r1   c                     t        j                  |      t        j                  |      z   t        j                  |       z   dz   S )z Make a SSL authentication packets                         r   	int4store	int2store)rF   r'   rG   s      r/   make_auth_sslzMySQLProtocol.make_auth_ssl   sB     OOL)oo012oog&' 	
r1   commandargumentc                 >    t        j                  |       }|||z  }|S )z(Make a MySQL packet containing a command)r   	int1store)rk   rl   datas      r/   make_commandzMySQLProtocol.make_command   s'     w'HDr1   statement_idrowsc                 X    t        j                  |       t        j                  |      z   S )z0Make a MySQL packet with Fetch Statement command)r   rh   )rq   rr   s     r/   make_stmt_fetchzMySQLProtocol.make_stmt_fetch   s!     |,ut/DDDr1   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 commandr6   r5   rJ   rK   Nr1   r+   r9   rM   <Hr,   )r;   rN   r   r.   rO   r=   r>   r?   r   CHANGE_USERrD   r0   r   rP   rQ   rR   )rS   rE   r2   r3   r(   rF   r'   r7   r5   rH   r4   r6   rB   rT   rV   rW   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.rW   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_threadidrF   server_statusr1         z5.5.8r5   utf-8mysql_native_passwordr6   capabilities)r>   unpackr$   r   r   read_stringdecodeintreadr   r<   minrP   
startswith)	rW   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
r1   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   )rW   statusr5   s      r/   parse_auth_next_factorz$MySQLProtocol.parse_auth_next_factorS  sX     2Q; !QRR#//GD{))'222r1   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).rz   r{   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)rW   	ok_packetrB   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   )rW   countrB   s      r/   parse_column_countz MySQLProtocol.parse_column_counts  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)rW   r   _namerF   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=   )rS   rW   err_msgr   unpackedrB   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 informationr1   r   Ns        :r   r   z (:rK   )
splitstripr   r   r   intrN   r   r   repr)
rW   r   errmsgr   pairslblpairvvalrB   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   r1   r      r   )	recvr   appendr   read_lc_string_list	bytearrayjoinr   r   )rS   r   r   r   r   rr   eofrowdatairW   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- r1   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   )rW   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Mr1   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   )rW   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Mr1   c                 j    t        j                  |       \  } }| t        |j                  |            fS )z(Parse a New Decimal from a binary packet)r   r   r   r   )rW   rF   values      r/   _parse_binary_new_decimalz'MySQLProtocol._parse_binary_new_decimal  s1    
  ..v6W 5677r1   
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   rv   r   r   )yearmonthdayr      <Ir   r{      )r   r   r   hourminutesecondmicrosecond)r>   r   r   DATETIME	TIMESTAMPdatetimedate)rW   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,,r1   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   r{   r   r   r   )dayssecondsmicrosecondsminuteshours)r   	timedeltar>   r   )rW   r   ro   r   r  tmps         r/   _parse_binary_timez MySQLProtocol._parse_binary_timeD  s     12J 2 2 455a&1*%A:--d12h/2C}}T4!9-a07a<BJD  GGq'
 vz|$c**r1   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)rS   r  rW   rF   null_bitmap_lengthr   null_bitmaprb   r   posr   s              r/   _parse_binary_valuesz"MySQLProtocol._parse_binary_values[  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   r{   r   )r   r   r  r   r   )
rS   r   r  r   rF   rr   r   rb   r   rW   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! r1   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 packetr{   Nrq   r   num_columns
num_paramsr   r   )r   r   r   r   )rW   ok_pktrB   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         r9   i  rv   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??r1   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   ri   r   rn   r   r   r   r   r   r   rh   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
##r1   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   Nr1   r   i  <   )r&  r   r  timer   r   r  r  divmodr  r   rh   absrn   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
##r1   	statementparamro   c                 b    t        j                  |       t        j                  |      z   |z   }|S )zMPrepare long data for prepared statements

        Returns a string.
        rg   )r3  r4  ro   rW   s       r/   prepare_stmt_send_long_dataz)MySQLProtocol.prepare_stmt_send_long_dataC  s+     "OOI69OORVVr1   
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/        j0                  d	|             t        j2                  }n t        |t4        j4                  t4        j6                  f      r&| j9                  |      \  }}|j                  |       nt        |t4        j:                  t4        j<                  f      r&| j?                  |      \  }}|j                  |       n|r[t        |      j!                  |      }|j                  t        j"                  t        |            |z          t        j                  }n#tA        d
|jB                  jD                   d      |j                  t        j                  |      t        j                  |      z          |s|dz   |kD  s|||z
     d   j!                  |      }|j                  t        j"                  t        |            |z           t        jF                  |      t        j                  |      z   t        jF                  |	      z   }||t        |      z   }n|}|r||t        j"                  |      z  }|djI                  |
D cg c]  }t/        j0                  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   r1   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   rn   r   NULLBLOBSTRINGr&  r   r$  strr.   lc_intVARCHARbytesr   r  floatr>   r?   r   r   r   r(  r  r+  r2  r   	__class____name__rh   r   )rS   rq   ro   r7  r   r8  rF   r9  r:  iteration_countr  rb   typesr'  data_lenquery_attr_namesr   attr_valr  r   _flagsr   r   rW   parameter_countbitr   a_typea_values                                r/   make_stmt_executezMySQLProtocol.make_stmt_executeN  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!*!2!2Ju-MM%,,s5z":U"BC!*J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 packetr{   Nr,   r}   r   r   r+   )r   r   r   r   )rW   plugin_names     r/   parse_auth_switch_requestz'MySQLProtocol.parse_auth_switch_request  sg     ayC !JKK#//qr
HfRjAoCR[F!!&)611r1   c                 2    | d   dk(  st        d      | dd S )z!Parse a MySQL AuthMoreData-packetr   r   z"Failed parsing AuthMoreData packetr{   N)r   )rW   s    r/   parse_auth_more_dataz"MySQLProtocol.parse_auth_more_data  s'     ayA~ !EFFabzr1   )
NNN-   r      @FNNN)rY  r   rZ  r\   )r   )	NNNrY  r   FNNN)r   )T)r+   )r   r   ) r[  r   Nr+   NF)ArH  
__module____qualname____doc__staticmethodr   r   rB  rE  r0   r!   boolrD   r   r   rX   rR   r   rj   rp   rt   rx   r   r
   r   r   r   r   r   r   r   r   r    r   r   r   r   r   rF  r   r   r   r   r   r   r  r  r
  r   r  r  r   r   r$  r(  r+  r2  r6  r	   r"   r   r   rS  rV  rX  r[  r1   r/   r&   r&   B   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 "*/	  =?$&;?/3',AA 89A SM	A
 A !c5;&6!78A A m,A !%A 
AF 	2% 	2E#u*4E 	2 	2 U u  r1   r&   )-r^  r   r>   decimalr   r   typingr   r   r   r   r	   r
   r   rZ   r   authenticationr   	constantsr   r   r   r   r   errorsr   r   r   r   rJ  r   r   r   r   r   r   r   r   r    r!   r"   r$   r   __annotations__r&   r[  r1   r/   <module>rg     sb   > 3   - D D D  +  S R     # a ar1   