
    "i|                         d Z ddlZddl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 ddlmZ ddlmZmZ d	Z G d
 de          ZdS )z,Implements the MySQL Client/Server protocol
    N)Decimal   )	FieldFlag	ServerCmd	FieldType
ClientFlagPARAMETER_COUNT_AVAILABLE)errorsutils)get_auth_plugin)DatabaseErrorget_exception
   c                       e Zd ZdZd Zd Z	 	 	 	 d+d	Zd
 Z	 	 d,dZd-dZ	d.dZ
	 	 	 d/dZd Zd Zd Zd Zd0dZd Zd1dZd.dZd Zd Zd2dZd Zd Zd0d Zd3d!Zd" Zd# Zd$ Zd% Zd& Z	 	 	 d4d(Z d) Z!d* Z"dS )5MySQLProtocolzRImplements MySQL client/server protocol

    Create and parses MySQL packets.
    c                 X    |t           j        z  r|r|                    d          dz   S dS )z.Prepare database string for handshake responseutf8    )r   CONNECT_WITH_DBencode)selfclient_flagsdatabases      P/srv/django_bis/venv311/lib/python3.11/site-packages/mysql/connector/protocol.py_connect_with_dbzMySQLProtocol._connect_with_db4   s5    *44 	5 	5??6**W44w    c                    |sdS 	  t          |          |||||          }|                                }	nR# t          t          j        f$ r9}
t          j        d                    t          |
                              d}
~
ww xY w|t          j        z  r(t          |	          }t          j        d|          |	z   }n|	dz   }|S )z#Prepare the authentication responser   )usernamepasswordr   ssl_enabledzFailed authentication: {0}N<B)r   auth_response	TypeErrorr
   InterfaceErrorformatstrr   SECURE_CONNECTIONlenstructpack)r   r   r   r   r   auth_plugin	auth_datar    authplugin_auth_responseexcresplenr"   s                r   _auth_responsezMySQLProtocol._auth_response:   s      	7	?/?;//!Hx') ) )D $(#5#5#7#7  601 	? 	? 	?',33CHH==? ? ?	? *66 	;.//G"Kg669MMMM07:Ms   18 B4BBN-   r      @Fc           
         	 |d         }|	p|d         }	n@# t           t          f$ r,}t          j        d                    |                    d}~ww xY w|sd}	 |                    d          }n# t          $ r |}Y nw xY wt          j        d                    dt          |          	          ||||          }|| 
                    |||||	||          z  }||                     ||          z  }|t          j        z  r||	                    d          d
z   z  }|t          j        z  r|
||                     |
          z  }|S )z"Make a MySQL Authentication packetr,   r+   *Handshake misses authentication info ({0})Nr   r   z<IIH{filler}{usrlen}sxxxxxxxxxxxxxxxxxxxxxxx)fillerusrlenr   )r#   KeyErrorr
   ProgrammingErrorr%   r   AttributeErrorr)   r*   r(   r1   r   r   PLUGIN_AUTHCONNECT_ARGSmake_conn_attrs)r   	handshaker   r   r   charsetr   max_allowed_packetr    r+   
conn_attrsr,   r/   username_bytespackets                  r   	make_authzMySQLProtocol.make_authQ   s   	J!+.I%A=)AKK8$ 	J 	J 	J)<CCCHHJ J J	J  	H	&%__V44NN 	& 	& 	&%NNN	& 5<<C$7$7 = 9 9)+=w+- -
 	$%%lHh&.&1&/> > 	>
 	$''h???*00 	;k((007::F:22 	7
8Nd**:666F&    A'AAA0 0A?>A?c           	      *   D ]}|         d|<   t          fdD                       t                                                    z   t                                                    z   }t	          j        d|          }D ]}|t	          j        dt          |                    z  }||                    d          z  }|t	          j        dt          |                             z  }||                             d          z  }|S )z Encode the connection attributesN c                 Z    g | ]'}t          |          t          |                   z   (S  )r(   ).0xrB   s     r   
<listcomp>z1MySQLProtocol.make_conn_attrs.<locals>.<listcomp>   s0    AAAQ#jm,,,AAAr   r!   r   )sumr(   keysvaluesr)   r*   r   )r   rB   	attr_nameconn_attrs_lenconn_attrs_packets    `   r   r>   zMySQLProtocol.make_conn_attrsy   s)   # 	+ 	+I)$,(*
9%AAAAjAAABB
!!""#%():):)<)<%=%=> 	 #Kn==# 	F 	FIT3y>>!B!BB!1!1&!9!99T3z)7L3M3M!N!NNI!6!=!=f!E!EE  r   c                     t          j        |          t          j        |          z   t          j        |          z   dz   S )z Make a SSL authentication packets                         r   	int4store	int2store)r   r@   r   rA   s       r   make_auth_sslzMySQLProtocol.make_auth_ssl   sE     |,,1223w''(  	r   c                 <    t          j        |          }|||z  }|S )z(Make a MySQL packet containing a command)r   	int1store)r   commandargumentdatas       r   make_commandzMySQLProtocol.make_command   s&    w''HDr   r   c                 T    t          j        |          t          j        |          z   S )z0Make a MySQL packet with Fetch Statement command)r   rV   )r   statement_idrowss      r   make_stmt_fetchzMySQLProtocol.make_stmt_fetch   s!    |,,ut/D/DDDr   c
           
         	 |d         }
|p|d         }n@# t           t          f$ r,}t          j        d                    |                    d}~ww xY w|sd}	 |                    d          }n# t          $ r |}Y nw xY wt          j        d                    t          |                    t          j        |          }||                     ||||||
|          z  }||                     ||          z  }|t          j        d	|          z  }|t          j        z  r||                    d          d
z   z  }|t          j        z  r|	||                     |	          z  }|S )z0Make a MySQL packet with the Change User commandr,   r+   r5   Nr   r   z<B{usrlen}sx)r8   <Hr   )r#   r9   r
   r:   r%   r   r;   r)   r*   r(   r   CHANGE_USERr1   r   r   r<   r=   r>   )r   r?   r   r   r   r@   r   r    r+   rB   r,   r/   rC   rD   s                 r   make_change_userzMySQLProtocol.make_change_user   s   
	J!+.I%A=)AKK8$ 	J 	J 	J)<CCCHHJ J J	J  	H	&%__V44NN 	& 	& 	&%NNN	& ^22#n:M:M2NN&2ND D 	$%%lHh&.&1&/> > 	>
 	$''h???&+dG,,,*00 	;k((007::F:22 	7
8Nd**:666FrF   c           	         i }t          j        d|dd                   d         |d<   |d         t          k    r.t          d                    |d         t                              t          j        |dd         d          \  }|d	<   t          j        d
|dd                   \  |d<   }}|d<   |d<   }}|d	                                         |d	<   |dd         }t          j        ||z             }d}|t          j
        z  rA|rt          d|dz
            nd}	|d|	         }||	d         }|d         dk    r
|dd         }|t          j        z  rcd|vr$|d	                             d          r	d|c}|d<   nt          j        |d          \  }|d<   |d                             d          |d<   nd|d<   ||z   |d<   ||d<   |S )zParse a MySQL Handshake-packet<xxxxBr      protocolz;Protocol mismatch; server version = {}, client version = {}Nr   endserver_version_originalz<I8sx2sBH2sBxxxxxxxxxx   server_threadidr@   server_statusr         z5.5.8r+   utf-8mysql_native_passwordr,   capabilities)r)   unpackPROTOCOL_VERSIONr   r%   r   read_stringdecodeintreadr   r'   minr<   
startswith)
r   rD   res
auth_data1capabilities1capabilities2auth_data_lengthrv   
auth_data2sizes
             r   parse_handshakezMySQLProtocol.parse_handshake   sC    -&1+>>qAJz?... !66<fS_=M7O 7OP P P 493D122JG4% 4% 4%0./ M2F1R4LAA	
				Y	_			),-F)G)N)N)P)P%&}]]%BCC
*66 	-4DL3r+a/000"D$JDEE]F"~""'_
*00 
	9v%%56AA'JJ & 14V,]++/4/@0) 0) 0),]+!$]!3!:!:7!C!CC!8C%
2K*N
r   c                     t          j        |d          \  }}|dk    st          j        d          t          j        |d          \  }}||                    d          fS )z$Parse a MySQL AuthNextFactor packet.r      z.Failed parsing AuthNextFactor packet (invalid)r   rk   rt   )r   read_intr
   r$   ry   rz   )r   rD   statusr+   s       r   parse_auth_next_factorz$MySQLProtocol.parse_auth_next_factor   sm    22{{'@   $/GDDD{))'2222r   c                 *   |d         dk    st          j        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         }|r8t	          j        |          \  }|d<   |d                             d          |d<   n"# t          $ r t          j        d          w xY w|S )zParse a MySQL OK-packet   r   z#Failed parsing OK packet (invalid).rh   ri   field_countNaffected_rows	insert_idz<HHstatus_flagwarning_countinfo_msgrt   zFailed parsing OK packet.)	r
   r$   r)   rw   r   read_lc_intread_lc_stringrz   
ValueError)r   rD   	ok_packets      r   parse_okzMySQLProtocol.parse_ok   s;   ayA~~'(MNNN		E'-}Xvac{'K'KA'NIm$383DVABBZ3P3P0VY//4/@/H/H,VY{++1=qs+L+L)Y}%'ABBZF N272Fv2N2N/:.(1*(=(D(DW(M(M	*% 	E 	E 	E'(CDDD	Es   CC1 1Dc                     	 t          j        |dd                   d         }|S # t          j        t          f$ r t          j        d          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
   r$   )r   rD   counts      r   parse_column_countz MySQLProtocol.parse_column_count  sb    	G%fQRRj11!4ELj) 	G 	G 	G'(EFFF	Gs	   #& +Art   c           	         t          j        |dd                   \  }}t          j        |          \  }}t          j        |          \  }}t          j        |          \  }}t          j        |          \  }}t          j        |          \  }}	 t          j        d|          \  }}}}}n'# t          j        $ r t          j        d          w xY w|                    |          |dddd| t          j	        z  ||f	S )zParse a MySQL column-packetr   Nz	<xHIBHBxxz!Failed parsing column information)
r   r   r)   rw   r   r
   r$   rz   r   NOT_NULL)r   rD   encoding_namer@   column_typeflagss           r   parse_columnzMySQLProtocol.parse_column  s   *6!"":66*622*622*622-f55*622		M k622| 	M 	M 	M'(KLLL	M KK!!FY''

 
	
s   B0 0$Cc                 ^   |d         dk    r|                      |          S d}i }	 t          j        d|          }n'# t          j        $ r t	          j        |          w xY w|d         dk    rt          |          dk    st	          j        |          |d         |d	<   |d
         |d<   |S )zParse a MySQL EOF-packetr   r   zFailed parsing EOF packet.z<xxxBBHHr      	   r   r      r   )r   r)   rw   r   r
   r$   r(   )r   rD   err_msgr~   unpackeds        r   	parse_eofzMySQLProtocol.parse_eof;  s    !9>>==(((.	1}Z88HH| 	1 	1 	1'000	1 s""s6{{a'7'7'000'{O%a[M
s	   = $A!Tc           
         d}i }|r|dd                              d          }n|                     d          }|D ]}	 d |                     dd          D             \  }}n#  t          j        |          xY w|                    d          }	 t	          |          ||<   i#  	 t          |                    d                    ||<   n.#  t          j        d	                    |||                    xY wY xY w|S )
zParse the statistics packetz)Failed getting COM_STATISTICS informationr   Ns     c                 6    g | ]}|                                 S rJ   )strip)rK   vs     r   rM   z2MySQLProtocol.parse_statistics.<locals>.<listcomp>Z  s     EEEAaggiiEEEr      :r   rt   z{0} ({1}:{2}).)splitr
   r$   rz   intr   r%   )	r   rD   with_headererrmsgr~   pairspairlblvals	            r   parse_statisticszMySQLProtocol.parse_statisticsO  s7   < 	.122J$$[11EELL--E 	C 	CD4EED!1D1DEEE
cc4+F333 **W%%CCs88CCC&szz'':':;;CHHC /(//SAAC C C H 
s/   #A##A9B%%C>(%CC>+C99C>c                    g }d}d}d}	 |s||k    rnw|                                 }|                    d          r|dd         g}	|                                 }|                    d          rF|	                    |dd                    |                                 }|                    d          F|	                    |dd                    t          j        t          d                              |	                    }nN|d         dk    r$|d         dk     r|                     |          }d}nd}t          j        |dd                   }|||                    |           n||t          |          |d	z  }||fS )
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   Ts   r   r   r      r   )	recvr}   appendr   read_lc_string_list	bytearrayjoinr   r   )
r   sockversionr   ra   eofrowdatairD   datass
             r   read_text_resultzMySQLProtocol.read_text_resultj  s    	 a5jjYY[[F  11 @''88 )LL,,,!YY[[F ''88 ) VABBZ(((3IcNN4G4G4N4NOOc!!fQi!mmnnV,,3F122J??{w2G$$$$#F+++FA-	. Syr   c                    |d         t           j        k    rd}d}nZ|d         t           j        k    rd}d}n?|d         t           j        t           j        fv rd}d}n|d         t           j        k    rd}d}|d	         t          j        z  r|                                }||d
         t          j
        ||d|                   d         fS )z%Parse an integer from a binary packetr   <b<hr   <ir   <qrr   r   Nr   )r   TINYSHORTINT24LONGLONGLONGr   UNSIGNEDupperr)   rw   )r   rD   fieldformat_lengths        r   _parse_binary_integerz#MySQLProtocol._parse_binary_integer  s    8y~%%GFF1X((GFF1X)/9>:::GFF1X+++GF8i(( 	&mmooGvwwwqx8H!I!I!!LMMr   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   rr   <dr   z<fNr   )r   DOUBLEr)   rw   )r   rD   r   r   r   s        r   _parse_binary_floatz!MySQLProtocol._parse_binary_float  sW    8y'''FGGFGvwwwqx8H!I!I!!LMMr   r   c                 x    t          j        |          \  }}|t          |                    |                    fS )z(Parse a New Decimal from a binary packet)r   r   r   rz   )r   rD   r@   values       r   _parse_binary_new_decimalz'MySQLProtocol._parse_binary_new_decimal  s5    .v66W 5 56677r   c           	         |d         }d}|dk    rEt          j        t          j        d|dd                   d         |d         |d                   }n|dk    rd}|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   rd   r   r   )yearmonthdayr      <Irr   ri      )r   r   r   hourminutesecondmicrosecond)datetimedater)   rw   )r   rD   r   r   r   mcss         r   _parse_binary_timestampz%MySQLProtocol._parse_binary_timestamp  s
   Q;;M]4!55a8Qi1I  EE q[[C||mD&6A:*>??B%]4!55a8Qi1IAYayay! ! !E vz{{#U++r   c                 ^   |d         }|d|dz            }d}|dk    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   rr   r   Nri   rs   r   r   )dayssecondsmicrosecondsminuteshours)r)   rw   r   	timedelta)r   rD   r   r   r]   r   r   tmps           r   _parse_binary_timez MySQLProtocol._parse_binary_time  s    a
l#A::-d122h//2C}T4!9--a07a<<BJD d)-a.1)-a'+Aw	0 0 0 vz{{#S))r   c                    t          |          dz   dz   dz  }d |d|         D             }||d         }g }t          |          D ]3\  }}|t          |dz   dz                     d|dz   dz  z  z  r|                    d           C|d         t          j        t          j        t          j        t          j        t          j	        fv r/| 
                    ||          \  }}	|                    |	           |d         t          j        t          j        fv r0|                     ||          \  }}	|                    |	           |d         t          j        t          j        fv r0|                     ||          \  }}	|                    |	           S|d         t          j        t          j        t          j        fv r0|                     ||          \  }}	|                    |	           |d         t          j        k    r0|                     ||          \  }}	|                    |	           t/          j        |          \  }}	|                    |	                    |                     5t5          |          S )z(Parse values from a binary result packetr   r   rr   c                 ,    g | ]}t          |          S rJ   )r   )rK   r   s     r   rM   z6MySQLProtocol._parse_binary_values.<locals>.<listcomp>  s    DDD!s1vvDDDr   r   Nr   )r(   	enumerater   r   r   r   r   r   r   r   r   r   FLOATr   DECIMAL
NEWDECIMALr   DATETIMEDATE	TIMESTAMPr   TIMEr   r   r   rz   tuple)
r   fieldsrD   r@   null_bitmap_lengthnull_bitmaprP   posr   r   s
             r   _parse_binary_valuesz"MySQLProtocol._parse_binary_values  so   !&kkAo1a7DDva0B.B'CDDD*++,#F++ 	5 	5JC3Aqy>>*aC!Gq=.@A 5d###qinio'o'ni.@B B B #'"<"<VU"K"Ke$$$$qi.	@@@"&":":65"I"Ie$$$$qi/1EFFF"&"@"@"Q"Qe$$$$qi0).'13 3 3"&">">vu"M"Me$$$$qY^++"&"9"9&%"H"He$$$$"'"6v">">ell7334444V}}r   c                 `   g }d}d}d}	 |n||k    rn|                                 }	|	d         dk    r|                     |	          }d}n-|	d         dk    r!d}|                     ||	dd         |          }|||                    |           n||t	          |	          |dz  }||fS )zwRead MySQL binary protocol result

        Reads all or given number of binary resultset rows from the socket.
        Nr   Tr   r   ri   r   )r   r   r  r   r   )
r   r   columnsr   r@   ra   r   rP   r   rD   s
             r   read_binary_resultz MySQLProtocol.read_binary_result   s    
 	EzzYY[[FayCnnV,,a227F122JPP{v1F#####F+++FA!	" c{r   c                    |d         dk    st          j        d          i }	 t          j        |dd         d          \  }|d<   t          j        |d          \  }|d<   t          j        |d          \  }|d	<   |d
d         }t          j        |d          \  }|d<   n"# t          $ r t          j        d          w xY w|S )z'Parse a MySQL Binary Protocol OK packetr   r   zFailed parsing Binary OK packetri   Nr`   r   num_columns
num_paramsr   r   )r
   r$   r   r   r   )r   rD   ok_pkts      r   parse_binary_prepare_okz%MySQLProtocol.parse_binary_prepare_ok  s    ayA~~'(IJJJ	K/4~fQRRj!/L/L,VVN+.3nVQ.G.G+VVM*-2^FA-F-F*VVL)ABBZF05vq0I0I-VVO,, 	K 	K 	K'(IJJJ	K s   A>B# #Cc                    d}d}|dk     rN|dk    rd}t           j        }n|dk    rd}t           j        }ns|dk    rd}t           j        }n^d	}t           j        }nOd
}|dk    rd}t           j        }n8|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         r!   i  rd   l    r   z<Q)r   r   r   r   r   r)   r*   )r   r   
field_typer   r   s        r   _prepare_binary_integerz%MySQLProtocol._prepare_binary_integer-  s    
199}}&^

&&_

+%%&^

&/

E||&^

%&_

*$$&^

&/
GU++Z??r   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                  rw|t          j
        |j                  z   t          j
        |j                  z   t          j
        |j                  z   }|j        dk    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   rW   r   rZ   r   r   r   r   r   r   rV   r(   )r   r   r  packeds       r   _prepare_binary_timestampz'MySQLProtocol._prepare_binary_timestampN  s6    eX.// 	F"+JJx}-- 	F"JJDF F F /%*--/%+..//%),,- eX.// 	=uuz:::oel334oel334F  1$$%/%*;<<<V--6
##r   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        }nl|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   Nr   r   i  <   )r  r   r   timer   r   r   r   divmodr   r   rV   absrZ   r   r   r   r   r   r(   )
r   r   r  negativer   r  r   	remainderminssecss
             r   _prepare_binary_timez"MySQLProtocol._prepare_binary_timep  s    %("4hm!DEE 	GEG G G ^
eX/00 	$zA~~!'t!<!<UI!)R00LT4us5:77u--.t,,- t,,- .F $CCuq))uz223u|445 u|445 6F #C 	+eoc***F**V3V--6
##r   c                 ^    t          j        |          t          j        |          z   |z   }|S )zMPrepare long data for prepared statements

        Returns a string.
        rU   )r   	statementparamr]   rD   s        r   _prepare_stmt_send_long_dataz*MySQLProtocol._prepare_stmt_send_long_data  s7     OI&&OE""# 	 r   rJ   c	           
      V   d}	dgt          |          dz   dz  z  }
g }g }d}t          |          }g }|s|n	|t          z   }|dk    rd}|i }|rEt          |          }|D ]\  }}|                    |           dgt          |          dz   dz  z  }
|s|r|t          |          k    rt	          j        d	          t          |          D ]w\  }}||         }d}|`|
|dz  xx         d|dz  z  z  cc<   |                    t          j        t          j
                  t          j        |          z              r||v r*||         d         rt          j        }nCt          j        }n5t          |t                    r0|                     |          \  }}}|                    |           nt          |t                     rZ|                    |          }|                    t          j        t          |                    |z              t          j        }nt          |t(                    rE|                    t          j        t          |                    |z              t          j        }n't          |t*                    r|                    t          j        t          t!          |                              |                              t!          |                              |          z              t          j        }nt          |t.                    r6|                    t1          j        d
|                     t          j        }nBt          |t6          j        t6          j        f          r.|                     |          \  }}|                    |           nt          |t6          j        t6          j        f          r.|                      |          \  }}|                    |           n|rft!          |                              |          }|                    t          j        t          |                    |z              t          j        }n2t	          j!        d"                    |j#        j$                            |                    t          j        |          t          j        |          z              |rd|dz   |k    r[|||z
           d                             |          }|                    t          j        t          |                    |z              yt          j%        |          t          j        |          z   t          j%        |	          z   }||t          |          z   }n|}|r||t          j        |          z  }|d&                    d |
D                       t          j        d          z   z  }d}|D ]+}||z  }||dz   |k    r||||z
           z  }n|dz  }|dz  },|D ]}||z  }|S )z6Make a MySQL packet with the Statement Execute commandr   r   r   rr   r   utf8mb4r   NzTFailed executing prepared statement: data values does not match number of parametersr   z:MySQL binary protocol can not handle '{classname}' objects)	classnamec                 8    g | ]}t          j        d |          S )B)r)   r*   )rK   bits     r   rM   z3MySQLProtocol.make_stmt_execute.<locals>.<listcomp>  s$    GGGC&+c3//GGGr   r   )'r(   r	   listr   r
   r$   r   r   rZ   r   NULLBLOBSTRINGr  r   r  r&   r   lc_intVARCHARbytesr   r   floatr)   r*   r   r   r   r  r   r  r   r:   r%   	__class____name__rV   r   )r   r`   r]   
parametersr   long_data_usedr@   query_attrsconverter_str_fallbackiteration_countr  rP   typesr  data_lenquery_attr_namesr   attr_valr  r   _flagsr  r   rD   parameter_countr   a_typea_values                               r   make_stmt_executezMySQLProtocol.make_stmt_execute  sd    cc$ii!m12t99(Oe6O.OiG!N 	7::D* & &8H%%%%##d))a-A!56K <	8 <	83z??**+23 3 3 $D// 78 78QS	=+++qS1W~=+++LL!@!@!&!8!8"9 : : :N**%c*1- 6%.^

 &/%5

s++ "A#;;EBBVZMM&))))s++ A!LL11EMM%,s5zz":":U"BCCC!*!2JJu-- AMM%,s5zz":":U"BCCC!*JJw// AMMSU):):#*% *% && && ' '),U):):7)C)CDE E E "+!2JJu-- AMM&+dE":":;;;!*!1JJ(98='IJJ A+/+I+I, ,(VZMM&))))(:HM'JKK A+/+D+DU+K+K(VZMM&))))+ AJJ--g66EMM%,s5zz":":U"BCCC!*!1JJ 1006&+o&> 17 1@ 1@A A A U_Z88"_V445 6 6 6 83q58#3#3&sX~6q9@@IID$++SYY//$68 8 8 OL))OE""#OO,,- 	 "&[)9)99OO&O 	"&%,777GG;GGGHH""#$F E  & 
 *Qw))"2583C"DD')q! " "'!r   c                     |d         dk    st          j        d          t          j        |dd         d          \  }}|r|d         d	k    r
|dd         }|                    d
          |fS )z&Parse a MySQL AuthSwitchRequest-packetr   r   z'Failed parsing AuthSwitchRequest packetri   Nr   rk   rs   r   r   )r
   r$   r   ry   rz   )r   rD   plugin_names      r   parse_auth_switch_requestz'MySQLProtocol.parse_auth_switch_request   s    ayC'9; ; ; !& 1&*' J J J 	!fRjAooCRC[F!!&))611r   c                 V    |d         dk    st          j        d          |dd         S )z!Parse a MySQL AuthMoreData-packetr   r   z"Failed parsing AuthMoreData packetri   N)r
   r$   )r   rD   s     r   parse_auth_more_dataz"MySQLProtocol.parse_auth_more_data,  s7    ayA~~'46 6 6 abbzr   )	NNNr2   r   r3   FNN)r2   r   r3   )N)r   )NNNr2   r   FNN)rt   )T)r   )r   rt   )rJ   rJ   r   Nr   NF)#r4  
__module____qualname____doc__r   r1   rE   r>   rX   r^   rb   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r$  rB  rE  rG  rJ   r   r   r   r   .   s{        
    . KO+,=B/3& & & &P! ! !" 67)3      E E E E CGABIM% % % %N. . .`3 3 3  (G G G
 
 
 
@  (   6# # # #JN N N(	N 	N 	N8 8 8 8
, , ,0* * *$! ! ! !F   8  "@ @ @B $  $  $D+$ +$ +$Z	 	 	 CE@FCHv v v vp
2 
2 
2    r   r   )rJ  r)   r   decimalr   	constantsr   r   r   r   r	   rH   r
   r   authenticationr   r   r   rx   objectr   rJ   r   r   <module>rO     s  :         L L L L L L L L L L L L L L         + + + + + + 0 0 0 0 0 0 0 0 D D D D DF D D D D Dr   