HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/site-packages/mysql/connector/__pycache__/protocol.cpython-311.pyc
�

�nc�~���dZddlZddlZddlmZmZddlmZddlm	Z	ddl
mZmZm
Z
mZmZddlmZmZmZmZd	ZGd
�d��ZdS)z,Implements the MySQL Client/Server protocol.�N)�Decimal�DecimalException�)�utils)�get_auth_plugin)�PARAMETER_COUNT_AVAILABLE�
ClientFlag�	FieldFlag�	FieldType�	ServerCmd)�
DatabaseError�InterfaceError�ProgrammingError�
get_exception�
c��eZdZdZed���Zed���Z									d+d	�Zed
���Zed,d���Z	ed-d���Z
ed.d���Z								d/d�Zed���Z
ed���Zed���Zed���Zed0d���Zd�Zed1d���Zd.d�Zed���Zed���Zed2d���Zed���Zed���Zd0d �Zd3d!�Zed"���Zed#���Zed$���Zed%���Zed&���Z 							d4d(�Z!ed)���Z"ed*���Z#dS)5�
MySQLProtocolzRImplements MySQL client/server protocol

    Create and parses MySQL packets.
    c�X�|tjzr|r|�d��dzSdS)z.Prepare database string for handshake response�utf8�)r	�CONNECT_WITH_DB�encode)�client_flags�databases  �:D:\Python311\Lib\site-packages\mysql/connector/protocol.py�_connect_with_dbzMySQLProtocol._connect_with_db8s7���*�4�4�	5��	5��?�?�6�*�*�W�4�4��w�c�D�|sdS	t|��|||||���}|���}n,#ttf$r}	td|	����|	�d}	~	wwxYw|tjzr(t
|��}
tjd|
��|z}n|dz}|S)z#Prepare the authentication responser)�username�passwordr�ssl_enabledzFailed authentication: N�<B)	r�
auth_response�	TypeErrorrr	�SECURE_CONNECTION�len�struct�pack)rrr r�auth_plugin�	auth_datar!�auth�plugin_auth_response�err�resplenr#s            r�_auth_responsezMySQLProtocol._auth_response?s����	��7�
	K�/�?�;�/�/��!�!�!�'����D�$(�#5�#5�#7�#7� � ���>�*�	K�	K�	K� �!@�3�!@�!@�A�A�s�J�����	K�����*�6�6�	;��.�/�/�G�"�K��g�6�6�9M�M�M�M�0�7�:�M��s�18�A!�	A�A!N�-r�@Fc
�T�	|d}|	p|d}	n-#ttf$r}td|�d���d�d}~wwxYw|sd}	|�d��}
n#t$r|}
YnwxYwd}t|
��}t
jd	|�|�d
�||||
��}||�|||||	||��z
}||�	||��z
}|tjzr||	�d��dzz
}|tjzr|
�||�
|
��z
}|S)z"Make a MySQL Authentication packetr*r)�&Handshake misses authentication info (�)Nrr�xxxxxxxxxxxxxxxxxxxxxxz<IIH�sxr)r$�KeyErrorrr�AttributeErrorr&r'r(r/rr	�PLUGIN_AUTH�CONNECT_ARGS�make_conn_attrs)�self�	handshakerr r�charsetr�max_allowed_packetr!r)�
conn_attrsr*r-�username_bytes�filler�username_len�packets                 r�	make_authzMySQLProtocol.make_auth`s���	�!�+�.�I�%�A��=�)A�K�K���8�$�	�	�	�"�?��?�?�?����
�����	����
�	��H�	&�%�_�_�V�4�4�N�N���	&�	&�	&�%�N�N�N�	&�������>�*�*����+�6�+�<�+�+�+�����
�
��	�$�%�%��������
�
�	
��	�$�'�'��h�?�?�?���*�0�0�	;��k�(�(��0�0�7�:�:�F��:�2�2�	7�
�	7��d�*�*�:�6�6�6�F��
�"��?�:�?�A�A,�+A,c	�*���D]}�|�d�|<�t�fd��D����t������zt������z}t	jd|��}�D]�}|t	jdt|����z
}||�d��z
}|t	jdt�|����z
}|�|�d��z
}��|S)z Encode the connection attributesN�c3�b�K�|])}t|��t�|��zV��*dS�N)r&)�.0�xr@s  �r�	<genexpr>z0MySQLProtocol.make_conn_attrs.<locals>.<genexpr>�s:�����@�@���A����Z��]�+�+�+�@�@�@�@�@�@rr"r)�sumr&�keys�valuesr'r(r)r@�	attr_name�conn_attrs_len�conn_attrs_packets`   rr;zMySQLProtocol.make_conn_attrs�s-���$�	+�	+�I��)�$�
+�(*�
�9�%���@�@�@�@�Z�@�@�@�@�@��*�/�/�#�#�$�$�
%��*�#�#�%�%�&�&�
'�	�#�K��n�=�=��#�	F�	F�I����T�3�y�>�>�!B�!B�B����!1�!1�&�!9�!9�9�����T�3�z�)�7L�3M�3M�!N�!N�N����I�!6�!=�!=�f�!E�!E�E��� � rc��tj|��tj|��ztj|��zdzS)z Make a SSL authentication packets�r�	int4store�	int2store)r>rr?s   r�
make_auth_sslzMySQLProtocol.make_auth_ssl�sE��
�O�L�)�)��o�0�1�1�
2��o�g�&�&�
'��
�	
rc�<�tj|��}|�||z
}|S)z(Make a MySQL packet containing a command)r�	int1store)�command�argument�datas   r�make_commandzMySQLProtocol.make_command�s*����w�'�'���	��H��D��rrc�T�tj|��tj|��zS)z0Make a MySQL packet with Fetch Statement command)rrV)�statement_id�rowss  r�make_stmt_fetchzMySQLProtocol.make_stmt_fetch�s#����|�,�,�u��t�/D�/D�D�Drc

��	|d}
|p|d}n-#ttf$r}td|�d���d�d}~wwxYw|sd}	|�d��}n#t$r|}YnwxYwt|��}
t
jd|
�d	�tj	|��}||�
||||||
|��z
}||�||��z
}|t
jd
|��z
}|tj
zr||�d��dzz
}|tjzr|	�||�|	��z
}|S)z0Make a MySQL packet with the Change User commandr*r)r3r4Nrrr"r6�<Hr)r$r7rrr8r&r'r(r�CHANGE_USERr/rr	r9r:r;)r<r=rr rr>rr!r)r@r*r-rArCrDs               r�make_change_userzMySQLProtocol.make_change_user�s���	�!�+�.�I�%�A��=�)A�K�K���8�$�	�	�	�"�?��?�?�?����
�����	����
�	��H�	&�%�_�_�V�4�4�N�N���	&�	&�	&�%�N�N�N�	&�����>�*�*����!��!�!�!��!��
�
��	�$�%�%��������
�
�	
��	�$�'�'��h�?�?�?���&�+�d�G�,�,�,���*�0�0�	;��k�(�(��0�0�7�:�:�F��:�2�2�	7�
�	7��d�*�*�:�6�6�6�F��
rFc	��i}tjd|dd���d|d<|dtkr td|d�dt�����t	j|dd�d�	��\}|d
<tjd|dd���\|d
<}}|d<|d<}}|d
���|d
<|dd�}t	j||z��}d}|tj	zrA|rtd|dz
��nd}|d|�}||d�}|ddkr
|dd�}|tjzrcd|vr$|d
�d��r	d|c}|d<nt	j|d�	��\}|d<|d�d��|d<nd|d<||z|d<||d<|S)zParse a MySQL Handshake-packet�<xxxxBr��protocolz$Protocol mismatch; server version = z, client version = Nr��end�server_version_originalz<I8sx2sBH2sBxxxxxxxxxx��server_threadidr>�
server_statusr�
����z5.5.8r)�utf-8�mysql_native_passwordr*�capabilities)
r'�unpack�PROTOCOL_VERSIONr
r�read_string�decode�intreadr	r%�minr9�
startswith)	rD�res�
auth_data1�
capabilities1�
capabilities2�auth_data_lengthrv�
auth_data2�sizes	         r�parse_handshakezMySQLProtocol.parse_handshakesK���� �-��&��1��+�>�>�q�A��J���z�?�.�.�	��7�s�:��7�7�$4�7�7���
�27�1B��1�2�2�J�G�2
�2
�2
�.���-�.�
�M�2�F�1�R�4�L�A�A�	
��!�"����	�N��� ���),�-F�)G�)N�)N�)P�)P��%�&��������}�]�]�%B�C�C���
��*�6�6�	-�4D�L�3�r�+�a�/�0�0�0�"�D���$���J��D�E�E�]�F��"�~��"�
-�'����_�
��*�0�0�
	9��f�$�
V��-F�)G�)R�)R��*�*�
V�14�V�,���]�+�+�/4�/@��W�/U�/U�/U�,���]�+�!$�]�!3�!:�!:�7�!C�!C�C�
���!8�C�
��%�
�2��K��*��N���
rc��tj|d��\}}|dkstd���tj|d���\}}||�d��fS)z$Parse a MySQL AuthNextFactor packet.r�z.Failed parsing AuthNextFactor packet (invalid)rrkrt)r�read_intrryrz)rD�statusr)s   r�parse_auth_next_factorz$MySQLProtocol.parse_auth_next_factor8sh������2�2������{�	S� �!Q�R�R�R�#�/��G�D�D�D�����{�)�)�'�2�2�2�2rc� �|ddkstd���i}	tjd|dd���d|d<tj|dd���\}|d<tj|��\}|d	<tjd
|dd���\|d<|d<|dd�}|r8tj|��\}|d
<|d
�d��|d
<n"#t$r}td��|�d}~wwxYw|S)zParse a MySQL OK-packet�rz#Failed parsing OK packet (invalid).rhri�field_countN�
affected_rows�	insert_idz<HH�status_flag�
warning_count�info_msgrtzFailed parsing OK packet.)rr'rwr�read_lc_int�read_lc_stringrz�
ValueError)rD�	ok_packetr-s   r�parse_okzMySQLProtocol.parse_okAsD���a�y�A�~�	H� �!F�G�G�G��	�
	G�'-�}�X�v�a��c�{�'K�'K�A�'N�I�m�$�16�1B�6�!�"�"�:�1N�1N�.�F�I�o�.�-2�->�v�-F�-F�*�F�I�k�*��
�e�V�A�a�C�[�1�1�
��-�(��/�*��A�B�B�Z�F��
N�05�0D�V�0L�0L�-��	�*�-�(1�*�(=�(D�(D�W�(M�(M�	�*�%����	G�	G�	G� �!<�=�=�3�F�����	G�����s�CC,�,
D�6D�Dc��	tj|dd���d}|S#tjtf$r}td��|�d}~wwxYw)z=Parse a MySQL packet with the number of columns in result setr�NrzFailed parsing column count)rr�r'�errorr�r)rD�countr-s   r�parse_column_countz MySQLProtocol.parse_column_countXse��	I��%�f�Q�R�R�j�1�1�!�4�E��L����j�)�	I�	I�	I� �!>�?�?�S�H�����	I���s�#&�A�A�Artc	��tj|dd���\}}tj|��\}}tj|��\}}tj|��\}}tj|��\}}tj|��\}}	tjd|��\}}}}}n##tj$rtd��d�wxYw|�|��|dddd|tjz||f	S)zParse a MySQL column-packetr�Nz	<xHIBHBxxz!Failed parsing column information)	rr�r'rwr�rrzr
�NOT_NULL)rD�encoding�_�namer>�column_type�flagss       r�parse_columnzMySQLProtocol.parse_columnas ���(������4�4�	����(��0�0�	����(��0�0�	����(��0�0�	����+�F�3�3�����(��0�0�	���		P��
�k�6�2�2�

���������|�	P�	P�	P� �!D�E�E�4�O�	P����
�K�K��!�!������
�F�Y�'�'���

�
	
s�B0�0 Cc�T�|ddkr|�|��Sd}i}	tjd|��}n'#tj$r}t	|��|�d}~wwxYw|ddkrt|��dkst	|���|d	|d
<|d|d<|S)
zParse a MySQL EOF-packetr�rzFailed parsing EOF packet.z<xxxBBHHNr��	r�r��r�)r�r'rwr�rr&)r<rD�err_msgr~�unpackedr-s      r�	parse_eofzMySQLProtocol.parse_eof�s����!�9��>�	)��=�=��(�(�(�.����	3��}�Z��8�8�H�H���|�	3�	3�	3� ��)�)�s�2�����	3�������s�"�	*�s�6�{�{�a�'7�	*� ��)�)�)�'��{��O��%�a�[��M���
s�=�A!�A�A!Tc�2�d}i}|r|dd��d��}n|�d��}|D]�}	d�|�dd��D��\}}n"#t$r}t|��|�d}~wwxYw|�d��}	t	|��||<�r#t
tf$rU	t
|�d����||<n+#t$r}t|�d	|�d
|�d���|�d}~wwxYwY��wxYw|S)zParse the statistics packetz)Failed getting COM_STATISTICS informationr�Ns  c�6�g|]}|�����S�)�strip)rK�vs  r�
<listcomp>z2MySQLProtocol.parse_statistics.<locals>.<listcomp>�s ��C�C�C�!�A�G�G�I�I�C�C�Cr�:r�rtz (�:r4)�splitr�rrz�intr7rr)	rD�with_header�errmsgr~�pairs�pair�lbl�valr-s	         r�parse_statisticszMySQLProtocol.parse_statistics�s}��=�����	.��1�2�2�J�$�$�[�1�1�E�E��L�L��-�-�E��	M�	M�D�
6�C�C�t�z�z�$��/B�/B�C�C�C���S�S���
6�
6�
6�$�V�,�,�#�5�����
6�����*�*�W�%�%�C�
M��s�8�8��C�����j�)�
M�
M�
M�M�&�s�z�z�'�':�':�;�;�C��H�H��'�M�M�M�(�F�)B�)B�c�)B�)B�C�)B�)B�)B�C�C��L�����M�����H�
M����
�
sM�#A#�#
B�-A=�=B�B.�.D�%C&�%D�&
D�0D	�	D�D�Dc�"�|}g}d}d}d}	|s||kr�nw|���}	|	�d��r�|	dd�g}
|���}	|	�d��rF|
�|	dd���|���}	|	�d���F|
�|	dd���tjtd���|
����}nN|	ddkr$|	ddkr|�|	��}d}nd}tj|	dd���}|�|�|�|��n|�|�t|	���|d	z
}���||fS)
z�Read MySQL text result

        Reads all or given number of rows from the socket.

        Returns a tuple with 2 elements: a list with all rows and
        the EOF packet.
        NrTs���r�rr��r)	�recvr}�appendr�read_lc_string_list�	bytearray�joinr�r)r<�sock�versionr�r�ra�eof�rowdata�irD�datass           r�read_text_resultzMySQLProtocol.read_text_result�s���
��������
��	��
�a�5�j�
���Y�Y�[�[�F�� � ��1�1�

@���������������'�'��8�8�)��L�L������,�,�,�!�Y�Y�[�[�F��'�'��8�8�)����V�A�B�B�Z�(�(�(��3�I�c�N�N�4G�4G��4N�4N�O�O������c�!�
@�f�Q�i�!�m�
@��n�n�V�,�,��������3�F�1�2�2�J�?�?���
,�w�
,����G�$�$�$�$��
,��
,�#�F�+�+�+�
��F�A�-	�.�S�y�rc��|dtjkrd}d}nZ|dtjkrd}d}n?|dtjtjfvrd}d}n|dtjkrd}d}|d	tjzr|���}||d
�tj
||d|���dfS)z%Parse an integer from a binary packetr�<b�<hr��<ir��<qrrr�Nr)r�TINY�SHORT�INT24�LONG�LONGLONGr
�UNSIGNED�upperr'rw)rD�field�format_�lengths    r�_parse_binary_integerz#MySQLProtocol._parse_binary_integer�s�����8�y�~�%�	��G��F�F�
�1�X���
(�	��G��F�F�
�1�X�)�/�9�>�:�
:�	��G��F�F�
�1�X��+�
+�	��G��F���8�i�(�(�	&��m�m�o�o�G��v�w�w����w��q��x�8H�!I�!I�!�!L�M�Mrc��|dtjkrd}d}nd}d}||d�tj||d|���dfS)z)Parse a float/double from a binary packetrrr�<dr�z<fNr)r�DOUBLEr'rw)rDr�r�r�s    r�_parse_binary_floatz!MySQLProtocol._parse_binary_float�s[����8�y�'�'�	��F��G�G��F��G��v�w�w����w��q��x�8H�!I�!I�!�!L�M�Mrrc�x�tj|��\}}|t|�|����fS)z(Parse a New Decimal from a binary packet)rr�rrz)rDr>�values   r�_parse_binary_new_decimalz'MySQLProtocol._parse_binary_new_decimal�s7�� �.�v�6�6���������W� 5� 5�6�6�7�7rc	���|d}d}|dkrEtjtjd|dd���d|d|d���}n�|dkr�d}|d	kr&tjd
|d|dz���d}tjtjd|dd���d|d|d|d|d
|d|���}||dzd�|fS)z&Parse a timestamp from a binary packetrNr�rdrr�)�year�month�dayr���<Irrri�)r�r�r��hour�minute�second�microsecond)�datetime�dater'rw)rDr�r��mcss    r�_parse_binary_timestampz%MySQLProtocol._parse_binary_timestamp�s���������Q�;�	��M��]�4���!���5�5�a�8��Q�i��1�I����E�E�
�q�[�	��C���|�
E��m�D�&��V�a�Z��*@�A�A�!�D���%��]�4���!���5�5�a�8��Q�i��1�I��A�Y��a�y��a�y�����E��v��z�|�|�$�e�,�,rc��|d}|s|dd�tj��fS|d|dz�}d}|dkr#tjd|dd���d}tjd|dd���d}|ddkr|dz}tj||d||d	|d�
��}||dzd�|fS)z'Parse a time value from a binary packetrrNrrr�rirsr�r�)�days�seconds�microseconds�minutes�hours)r��	timedeltar'rw)rDr�r]r�r��tmps      r�_parse_binary_timez MySQLProtocol._parse_binary_times��������	6��1�2�2�J�� 2� 4� 4�5�5��a�&�1�*�n�%�����A�:�	3��-��d�1�2�2�h�/�/��2�C��}�T�4��!��9�-�-�a�0����7�a�<�	��B�J�D�� ����G����G��q�'�
�
�
���v��z�|�|�$�c�*�*rc��t|��dzdzdz}d�|d|�D��}||d�}g}t|��D�]1\}}|t|dzdz��d|dzdzzzr|�d���C|dtjtjtjtjtj	fvr/|�
||��\}}	|�|	����|dtjtjfvr0|�
||��\}}	|�|	����|dtjtjfvr0|�||��\}}	|�|	����S|dtjtjtjfvr/|�|��\}}	|�|	�����|dtjkr/|�|��\}}	|�|	�����t/j|��\}}	|�|	�|������3t5|��S)z(Parse values from a binary result packetr�r�rrc�,�g|]}t|����Sr�)r�)rKr�s  rr�z6MySQLProtocol._parse_binary_values.<locals>.<listcomp>4s��D�D�D�!�s�1�v�v�D�D�DrrNr)r&�	enumerater�r�rr�r�r�r�r�r�r��FLOATr��DECIMAL�
NEWDECIMALr��DATETIME�DATE�	TIMESTAMPr��TIMEr�rr�rz�tuple)
r<�fieldsrDr>�null_bitmap_length�null_bitmaprP�posr�r�s
          r�_parse_binary_valuesz"MySQLProtocol._parse_binary_values1sw��!�&�k�k�A�o��1�a�7��D�D�v�a�0B�.B�'C�D�D�D���*�+�+�,����#�F�+�+�	5�	5�J�C���3��a��1�}�-�-�.�!��a��1�}�2D�E�
��
�
�d�#�#�#���Q�x����������"���
5�!%� :� :�6�5� I� I�
����
�
�e�$�$�$�$��q��i�.�	��@�@�
5� $� 8� 8��� G� G�
����
�
�e�$�$�$�$��q��i�/��1E�F�F�
5� $� >� >�v�w� O� O�
����
�
�e�$�$�$�$��q���"����#���
5�
#'�">�">�v�"F�"F�����
�
�e�$�$�$�$��q��Y�^�+�
5�"&�"9�"9�&�"A�"A�����
�
�e�$�$�$�$�"'�"6�v�">�">�����
�
�e�l�l�7�3�3�4�4�4�4��V�}�}�rc�`�g}d}d}d}	|�n�||krn�|���}	|	ddkr|�|	��}d}n-|	ddkr!d}|�||	dd�|��}|�|�|�|��n|�|�t	|	���|dz
}��||fS)zwRead MySQL binary protocol result

        Reads all or given number of binary resultset rows from the socket.
        NrTr�r�rir)r�r�rr�r)
r<r��columnsr�r>rar�rPr�rDs
          r�read_binary_resultz MySQLProtocol.read_binary_result[s���
������
��	��
���E�z�
���Y�Y�[�[�F��a�y�C��
Q��n�n�V�,�,��������a��
Q����2�2�7�F�1�2�2�J��P�P���
,�v�
,����F�#�#�#�#��
,��
,�#�F�+�+�+�
��F�A�!	�"�c�{�rc��|ddkstd���i}	tj|dd�d��\}|d<tj|d��\}|d<tj|d��\}|d	<|d
d�}tj|d��\}|d<n"#t$r}td��|�d}~wwxYw|S)z'Parse a MySQL Binary Protocol OK packetr�rzFailed parsing Binary OK packetriNr`r��num_columns�
num_paramsrr�)rrr�r�)rD�ok_pktr-s   r�parse_binary_prepare_okz%MySQLProtocol.parse_binary_prepare_okws����a�y�A�~�	D� �!B�C�C�C���	M�-2�^�F�1�2�2�J��-J�-J�*�F�F�>�*�,1�N�6�1�,E�,E�)�F�F�=�)�+0�>�&�!�+D�+D�(�F�F�<�(��A�B�B�Z�F�.3�n�V�Q�.G�.G�+�F�F�?�+�+���	M�	M�	M� �!B�C�C��L�����	M�����
s�A>B�
B=�(B8�8B=c��d}d}|dkrN|dkrd}tj}n�|dkrd}tj}ns|dkrd}tj}n^d	}tj}nOd
}|dkrd}tj}n8|d
krd}tj}n#|dkrd}tj}ntj}d}tj||��||fS)z0Prepare an integer for the MySQL binary protocolNri����r�i���r�i�r�r���r"i��rdl��r�z<Q)rr�r�r�r�r'r()r��
field_typer�r�s    r�prepare_binary_integerz$MySQLProtocol.prepare_binary_integer�s����
����1�9�	���}�
0���&�^�
�
��&��
0���&�_�
�
��+�%�
0���&�^�
�
���&�/�
�
��E���|�
���&�^�
�
��%��
���&�_�
�
��*�$�
���&�^�
�
�&�/�
�����G�U�+�+�Z��?�?rc���t|tj��r
tj}n6t|tj��r
tj}nt
d���tj|j	��tj
|j��ztj
|j��z}t|tj��rw|tj
|j
��ztj
|j��ztj
|j��z}|jdkr|tj|j��z
}tj
t%|����|z}||fS)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�rr�r�rr�rrWr�rZr�r�r�r�r�r�rVr&)r�r�packeds   r�prepare_binary_timestampz&MySQLProtocol.prepare_binary_timestamp�s:���e�X�.�/�/�	S�"�+�J�J�
��x�}�
-�
-�	S�"��J�J��Q�R�R�R�
�O�E�J�'�'��o�e�k�*�*�
+��o�e�i�(�(�
)�	��e�X�.�/�/�	=���/�%�*�-�-�.��/�%�,�/�/�0��/�%�,�/�/�0�
�� �1�$�
=��%�/�%�*;�<�<�<�����V���-�-��6���
�#�#rc��t|tjtjf��st	d���t
j}d}d}d}t|tj��r�|jdkrd}t|j	d��\}}t|d��\}}|tjt|j����tj
|��ztj
|��ztj
|��zz
}|j}nl|tjd��tj
|j��ztj
|j��ztj
|j��zz
}|j}|r|tj|��z
}tj
|��|z}tj
t'|����|z}||fS)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.timerNrri�<)rr�r��timer�rrr��divmodr�rrV�absrZr�r�r�r�r�r&)	r�r�negativer�rr��	remainder�mins�secss	         r�prepare_binary_timez!MySQLProtocol.prepare_binary_time�s����%�(�"4�h�m�!D�E�E�	T��R�S�S�S��^�
��������e�X�/�0�0�	$��z�A�~�
���!'��
�t�!<�!<��U�I�!�)�R�0�0�L�T�4�����E�J���0�0��/�%�(�(�)��/�$�'�'�(��/�$�'�'�(�
�F��$�C�C�����"�"��/�%�*�-�-�.��/�%�,�/�/�0��/�%�,�/�/�0�
�F��#�C��	+��e�o�c�*�*�*�F����*�*�V�3�����V���-�-��6���
�#�#rc�^�tj|��tj|��z|z}|S)zMPrepare long data for prepared statements

        Returns a string.
        rU)�	statement�paramr]rDs    r�prepare_stmt_send_long_dataz)MySQLProtocol.prepare_stmt_send_long_datas,�����+�+�e�o�e�.D�.D�D�t�K���
rr�c	
��d}	dgt|��dzdzz}
g}g}d}
t|��}g}|s|n	|tz}|dkrd}|�i}|rEt|��}|D]\}}|�|���dgt|��dzdzz}
|s|�r�|t|��krt	d	���t|��D�]Z\}}d}|�`|
|dzxxd|dzzzcc<|�t
jtj	��t
j|��z���j||vr*||drtj
}�n.tj}�n t|t��r0|�|��\}
}}|�|
���n�t|t��rZ|�|��}|�t
jt|����|z��tj}�nlt|t&��rE|�t
jt|����|z��tj
}�nt|t(��r�|�t
jtt|���|������t|���|��z��tj}�nxt|t,��r6|�t/jd
|����tj}�n-t|t4jt4jf��r.|�|��\}
}|�|
��n�t|t4jt4jf��r.|�|��\}
}|�|
��n�|rft|���|��}|�t
jt|����|z��tj}ntAd|j!j"�d����|�t
j|��t
j|��z��|rd|dz|kr[|||z
d�|��}|�t
jt|����|z����\t
j#|��t
j|��zt
j#|	��z}|�|t|��z}n|}|r�|�|t
j|��z
}|d�$d
�|
D����t
jd��zz
}d}|D]+}||z
}|�|dz|kr||||z
z
}n|dz
}|dz
}�,|D]}||z
}�|S)z6Make a MySQL packet with the Statement Execute commandrrr�rrr�utf8mb4rNzTFailed executing prepared statement: data values does not match number of parametersr�z&MySQL binary protocol can not handle 'z	' objectsc�8�g|]}tjd|����S)�B)r'r()rK�bits  rr�z3MySQLProtocol.make_stmt_execute.<locals>.<listcomp>zs$��>�>�>�3���S�#�&�&�>�>�>rr)%r&r�listr�rr�rrZr�NULL�BLOB�STRINGrr�r�strr�lc_int�VARCHAR�bytesrr��floatr'r(r�r�r�rr�rr#r�	__class__�__name__rVr�)r<r`r]�
parametersr��long_data_usedr>�query_attrs�converter_str_fallback�iteration_countrrP�typesr�data_len�query_attr_namesr��attr_valrr��_flagsrr�rD�parameter_countr��a_type�a_values                            r�make_stmt_executezMySQLProtocol.make_stmt_executesA�����c�c�$�i�i�!�m��1�2���������t�9�9����(�O���e�6O�.O���i��	��G��	 ��N��	7���:�:�D�*�
&�
&���8����H�%�%�%�%��#�#�d�)�)�a�-�A�!5�6�K��>	L��>	L��3�z�?�?�*�
�$�2����(��o�o�8
L�8
L�
��U���������+�+�+�q�S�1�W�~�=�+�+�+��L�L���	��7�7�%�/�&�:Q�:Q�Q������.�(�,�%�c�*�1�-�6�%.�^�
�
�&/�%5�
�
���s�+�+�%�
�3�3�E�:�:�	��"���M�M�&�)�)�)�)���s�+�+��!�L�L��1�1�E��M�M�%�,�s�5�z�z�":�":�U�"B�C�C�C�!*�!2�J�J���u�-�-���M�M�%�,�s�5�z�z�":�":�U�"B�C�C�C�!*��J�J���w�/�/���M�M���S��U���):�):�7�)C�)C�%D�%D�E�E��e�*�*�+�+�G�4�4�5����"+�!2�J�J���u�-�-���M�M�&�+�d�E�":�":�;�;�;�!*�!1�J�J����(9�8�=�'I�J�J��+/�+H�+H��+O�+O�(�V�Z��M�M�&�)�)�)�)����(:�H�M�'J�K�K��+/�+C�+C�E�+J�+J�(�V�Z��M�M�&�)�)�)�)�+����J�J�-�-�g�6�6�E��M�M�%�,�s�5�z�z�":�":�U�"B�C�C�C�!*�!1�J�J�*�@�!�O�4�@�@�@�������U�_�Z�8�8�5�?�6�;R�;R�R�S�S�S��L�3��7�X�#5�L�&�s�X�~�6�q�9�@�@��I�I�D�$�+�+�E�L��T���,C�,C�d�,J�K�K�K���O�L�)�)��o�e�$�$�
%��o�o�.�.�
/�	��	'�&��[�)9�)9�9�O�O�&�O��	"��
8��%�,��7�7�7���c�h�h�>�>�+�>�>�>������"�"�#�
#�F��E��
�
���&� ��
�*��q�y�8�+�*��"2�5�8�3C�"D�D����'�)����
���!�
"�
"���'�!����
rc���|ddkstd���tj|dd�d���\}}|r|dd	kr
|dd�}|�d
��|fS)z&Parse a MySQL AuthSwitchRequest-packetr�r�z'Failed parsing AuthSwitchRequest packetriNrrkrsrr)rrryrz)rD�plugin_names  r�parse_auth_switch_requestz'MySQLProtocol.parse_auth_switch_request�s����a�y�C��	L� �!J�K�K�K�#�/��q�r�r�
��H�H�H�����	!�f�R�j�A�o�	!��C�R�C�[�F��!�!�&�)�)�6�1�1rc�L�|ddkstd���|dd�S)z!Parse a MySQL AuthMoreData-packetr�rz"Failed parsing AuthMoreData packetriN)r)rDs r�parse_auth_more_dataz"MySQLProtocol.parse_auth_more_data�s2���a�y�A�~�	G� �!E�F�F�F��a�b�b�z�r)	NNNr0rr1FNN)r0rr1rJ)r)NNNr0rFNN)rt)T)r)rrt)r�r�rNrNF)$r7�
__module__�__qualname__�__doc__�staticmethodrr/rEr;rXr^rbrfr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr#r'rErHrJr�rrrr2s���������
����\������\��F�����%����<�<�<�<�|�!�!��\�!�&�
�
�
��\�
������\���E�E�E��\�E���������9�9�9�9�v�1�1��\�1�f�3�3��\�3�����\��,�I�I��\�I��
�
�
��\�
�@���(�����\��4%�%�%�%�N�N�N��\�N�(�	N�	N��\�	N��8�8�8��\�8�
�-�-��\�-�4�+�+��\�+�,(�(�(�(�T����8����\��"�@�@��\�@�B�$$�$$��\�$$�L�.$�.$��\�.$�`����\��������$�A�A�A�A�F�	2�	2��\�	2�����\���rr)rMr�r'�decimalrrrHr�authenticationr�	constantsrr	r
rr�errorsr
rrrrxrr�rr�<module>rSs
��:3�2�����
�
�
�
�-�-�-�-�-�-�-�-�������+�+�+�+�+�+���������������S�R�R�R�R�R�R�R�R�R�R�R���o
�o
�o
�o
�o
�o
�o
�o
�o
�o
r