Ë
    @Øï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
mZ 	 ddlZdZ	 ddlZd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 dd
lm Z m!Z! ddl"m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> dZ? G d„ d«      Z@ G d„ d«      ZA G d„ d«      ZB G d„ d«      ZCy# e$ r dZY Œ¥w xY w# e$ r dZY Œ«w xY w)z3Implementation of the X protocol for MySQL servers.é    N)ÚBytesIO)ÚAnyÚDictÚListÚOptionalÚTupleÚUnionTFé   )ÚInterfaceErrorÚNotSupportedErrorÚOperationalErrorÚProgrammingError)Ú
ExprParserÚbuild_bool_scalarÚ
build_exprÚbuild_int_scalarÚbuild_scalarÚbuild_unsigned_int_scalar)Úencode_to_bytesÚget_item_or_attr)Úlogger)ÚCRUD_PREPARE_MAPPINGÚPROTOBUF_REPEATED_TYPESÚSERVER_MESSAGESÚMessageÚmysqlxpb_enum)ÚColumn)
ÚAddStatementÚDeleteStatementÚFilterableStatementÚFindStatementÚInsertStatementÚModifyStatementÚReadStatementÚRemoveStatementÚSqlStatementÚUpdateStatement)Ú
ColumnTypeÚMessageTypeÚProtobufMessageCextTypeÚProtobufMessageTypeÚResultBaseTypeÚ
SocketTypeÚStatementTypeÚ
StrOrBytesiè  c                   ó@   — e Zd ZdZdeddfd„Zdedefd„Zdedefd„Z	y)	Ú
CompressorzËImplements compression/decompression using `zstd_stream`, `lz4_message`
    and `deflate_stream` algorithms.

    Args:
        algorithm (str): Compression algorithm.

    .. versionadded:: 8.0.21

    Ú	algorithmÚreturnNc                 ó  — || _         d | _        d | _        |dk(  r3t        j                  «       | _        t        j
                  «       | _        y |dk(  r3t        j                  «       | _        t        j                  «       | _        y y )NÚzstd_streamÚdeflate_stream)	Ú
_algorithmÚ_compressobjÚ_decompressobjÚzstdÚZstdCompressorÚZstdDecompressorÚzlibÚcompressobjÚdecompressobj©Úselfr2   s     úI/var/www/html/aiagents/fe/lib/python3.12/site-packages/mysqlx/protocol.pyÚ__init__zCompressor.__init__p   ss   € Ø(ˆŒØ!%ˆÔØ#'ˆÔà˜Ò%Ü $× 3Ñ 3Ó 5ˆDÔÜ"&×"7Ñ"7Ó"9ˆDÕØÐ*Ò*Ü $× 0Ñ 0Ó 2ˆDÔÜ"&×"4Ñ"4Ó"6ˆDÕð +ó    Údatac                 óà  — | j                   dk(  r| j                  j                  |«      S | j                   dk(  r`t        j                  j                  «       5 }|j                  «       }||j                  |«      z  }||j                  «       z  }ddd«       |S | j                  j                  |«      }|| j                  j                  t        j                  «      z  }|S # 1 sw Y   S xY w)z´Compresses data and returns it.

        Args:
            data (str, bytes or buffer object): Data to be compressed.

        Returns:
            bytes: Compressed data.
        r5   Úlz4_messageN)
r7   r8   ÚcompressÚlz4ÚframeÚLZ4FrameCompressorÚbeginÚflushr=   ÚZ_SYNC_FLUSH)rA   rE   Ú
compressorÚ
compresseds       rB   rH   zCompressor.compress|   sÚ   € ð �?‰?˜mÒ+Ø×$Ñ$×-Ñ-¨dÓ3Ð3Ø�?‰?˜mÒ+Ü—‘×-Ñ-Ó/ð 1°:Ø'×-Ñ-Ó/�
Ø˜j×1Ñ1°$Ó7Ñ7�
Ø˜j×.Ñ.Ó0Ñ0�
÷1ð Ðð ×&Ñ&×/Ñ/°Ó5ˆ
Ø�d×'Ñ'×-Ñ-¬d×.?Ñ.?Ó@Ñ@ˆ
ØÐ÷1ð Ðús   Á8C#Ã#C-c                 ó”  — | j                   dk(  r| j                  j                  |«      S | j                   dk(  r:t        j                  j                  «       5 }|j                  |«      }ddd«       |S | j                  j                  |«      }|| j                  j                  t        j                  «      z  }|S # 1 sw Y   S xY w)zÙDecompresses a frame of data and returns it as a string of bytes.

        Args:
            data (str, bytes or buffer object): Data to be compressed.

        Returns:
            bytes: Decompresssed data.
        r5   rG   N)	r7   r9   Ú
decompressrI   rJ   ÚLZ4FrameDecompressorrM   r=   rN   )rA   rE   ÚdecompressorÚdecompresseds       rB   rR   zCompressor.decompress“   s°   € ð �?‰?˜mÒ+Ø×&Ñ&×1Ñ1°$Ó7Ð7Ø�?‰?˜mÒ+Ü—‘×/Ñ/Ó1ð =°\Ø+×6Ñ6°tÓ<�÷=àÐð ×*Ñ*×5Ñ5°dÓ;ˆØ˜×+Ñ+×1Ñ1´$×2CÑ2CÓDÑDˆØÐ÷=àÐús   ÁB=Â=C)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrrC   r/   ÚbytesrH   rR   © rD   rB   r1   r1   e   s@   „ ñð
7 #ð 
7¨$ó 
7ð˜Zð ¨Eó ð.˜zð ¨eô rD   r1   c                   óX   — e Zd ZdZdeddfd„Zdefd„Zdefd„Zdeddfd	„Z	d
e
ddfd„Zy)ÚMessageReaderz™Implements a Message Reader.

    Args:
        socket_stream (mysqlx.connection.SocketStream): `SocketStream` object.

    .. versionadded:: 8.0.21
    Úsocket_streamr3   Nc                 ó<   — || _         d | _        d | _        g | _        y ©N)Ú_streamÚ_compressorÚ_msgÚ
_msg_queue©rA   r_   s     rB   rC   zMessageReader.__init__²   s   € Ø#0ˆŒØ15ˆÔØ!%ˆŒ	Ø)+ˆ�rD   c                 óT  — | j                   r| j                   j                  d«      S t        j                  d| j                  j                  d«      «      \  }}|dk(  rt        d«      ‚| j                  j                  |dz
  «      }|t        vrt        d|› �«      ‚|dk(  r|d	k(  r| j                  «       S t        j                  ||«      }|d
k(  rÕ|d   }t        | j                  j                  |d   «      «      }d}||k  ryt        j                  d|j                  d«      «      \  }}	|j                  |dz
  «      }
| j                   j                  t        j                  |	|
«      «       ||dz   z  }||k  rŒy| j                   r| j                   j                  d«      S dS |S )a¦  Reads X Protocol messages from the stream and returns a
        :class:`mysqlx.protobuf.Message` object.

        Raises:
            :class:`mysqlx.ProgrammingError`: If e connected server does not
                                              have the MySQL X protocol plugin
                                              enabled.

        Returns:
            mysqlx.protobuf.Message: MySQL X Protobuf Message.
        r   ú<LBé   é
   z[The connected server does not have the MySQL X protocol plugin enabled or protocol mismatchr
   zUnknown message type: é   rD   é   Úuncompressed_sizeÚpayloadé   N)re   ÚpopÚstructÚunpackrb   Úreadr   r   Ú
ValueErrorÚ_read_messager   Úfrom_server_messager   rc   rR   Úappend)rA   Ú
frame_sizeÚ
frame_typeÚframe_payloadÚ	frame_msgrm   ÚstreamÚbytes_processedÚpayload_sizeÚmsg_typern   s              rB   ru   zMessageReader._read_message¸   s˜  € ð �?Š?Ø—?‘?×&Ñ& qÓ)Ð)ä!'§¡¨u°d·l±l×6GÑ6GÈÓ6JÓ!KÑˆ
�Jà˜ÒÜ"ð$óð ð Ÿ™×)Ñ)¨*°q©.Ó9ˆØœ_Ñ,ÜÐ5°j°\ÐBÓCÐCð ˜Ò °Ò 4Ø×%Ñ%Ó'Ð'ä×/Ñ/°
¸MÓJˆ	à˜ÒØ )Ð*=Ñ >ÐÜ˜T×-Ñ-×8Ñ8¸À9Ñ9MÓNÓOˆFØˆOØ!Ð$5Ò5Ü)/¯©°u¸f¿k¹kÈ!»nÓ)MÑ&�˜hØ Ÿ+™+ l°QÑ&6Ó7�Ø—‘×&Ñ&¤w×'BÑ'BÀ8ÈWÓ'UÔVØ <°!Ñ#3Ñ3�ð	 "Ð$5Ó5ð
 .2¯_ª_�4—?‘?×&Ñ& qÓ)ÐFÀ$ÐFàÐrD   c                 ód   — | j                   �| j                   }d| _         |S | j                  «       S )zgRead message.

        Returns:
            mysqlx.protobuf.Message: MySQL X Protobuf Message.
        N)rd   ru   ©rA   Úmsgs     rB   Úread_messagezMessageReader.read_messageç   s2   € ð �9‰9Ð Ø—)‘)ˆCØˆDŒIØˆJØ×!Ñ!Ó#Ð#rD   r‚   c                 ó@   — | j                   �t        d«      ‚|| _         y)zÇPush message.

        Args:
            msg (mysqlx.protobuf.Message): MySQL X Protobuf Message.

        Raises:
            :class:`mysqlx.OperationalError`: If message push slot is full.
        NzMessage push slot is full)rd   r   r�   s     rB   Úpush_messagezMessageReader.push_messageó   s!   € ð �9‰9Ð Ü"Ð#>Ó?Ð?Øˆ�	rD   r2   c                 ó8   — |rt        |«      | _        yd| _        y)zÏCreates a :class:`mysqlx.protocol.Compressor` object based on the
        compression algorithm.

        Args:
            algorithm (str): Compression algorithm.

        .. versionadded:: 8.0.21

        N©r1   rc   r@   s     rB   Úset_compressionzMessageReader.set_compression   s   € ñ 5>œ: iÓ0ˆÕÀ4ˆÕrD   )rV   rW   rX   rY   r-   rC   r)   ru   rƒ   r…   rZ   rˆ   r\   rD   rB   r^   r^   ©   s\   „ ñð, jð ,°Tó ,ð-˜{ó -ð^
$˜kó 
$ð ð °ó ð
H¨ð 
H°ô 
HrD   r^   c                   óD   — e Zd ZdZdeddfd„Zdededdfd„Zd	e	ddfd
„Z
y)ÚMessageWriterzšImplements a Message Writer.

    Args:
        socket_stream (mysqlx.connection.SocketStream): `SocketStream` object.

    .. versionadded:: 8.0.21

    r_   r3   Nc                 ó    — || _         d | _        y ra   )rb   rc   rf   s     rB   rC   zMessageWriter.__init__  s   € Ø#0ˆŒØ15ˆÕrD   r   r‚   c                 ó^  — |j                  |«      }| j                  �r0|t        kD  �r&t        |j	                  «       «      }t        j                  d|dz   |«      }| j                  j                  dj                  ||g«      «      }t        d«      }||d<   |dz   |d<   t        d«      }||d<   dj                  t        |j                  «       «      d	d
 t        |j                  «       «      g«      }	t        d«      }
t        j                  dt        |	«      dz   |
«      }| j                  j                  dj                  ||	g«      «       y	t        |j	                  «       «      }t        j                  d|dz   |«      }| j                  j                  dj                  ||g«      «       y	)z™Write message.

        Args:
            msg_type (int): The message type.
            msg (mysqlx.protobuf.Message): MySQL X Protobuf Message.
        rh   r
   rD   zMysqlx.Connection.CompressionÚclient_messagesri   rm   rn   Néþÿÿÿz&Mysqlx.ClientMessages.Type.COMPRESSION)Ú	byte_sizerc   Ú_COMPRESSION_THRESHOLDr   Úserialize_to_stringrq   ÚpackrH   Újoinr   Úserialize_partial_to_stringr   Úlenrb   Úsendall)rA   r   r‚   Úmsg_sizeÚmsg_strÚheaderrP   Úmsg_first_fieldsÚmsg_payloadÚoutputÚmsg_comp_ids              rB   Úwrite_messagezMessageWriter.write_message  s  € ð —=‘= Ó%ˆØ×Ó Ô+AÓ AÜ% c×&=Ñ&=Ó&?Ó@ˆGÜ—[‘[ ¨°1©°hÓ?ˆFØ×)Ñ)×2Ñ2°3·8±8¸VÀWÐ<MÓ3NÓOˆJä&Ð'FÓGÐØ2:ÐÐ.Ñ/Ø4<¸q±LÐÐ0Ñ1ä!Ð"AÓBˆKØ%/ˆK˜	Ñ"à—X‘Xä#Ð$4×$PÑ$PÓ$RÓSØ˜ðô $ K×$KÑ$KÓ$MÓNð	óˆFô (Ð(PÓQˆKÜ—[‘[ ¬¨F«°a©¸ÓEˆFØ�L‰L× Ñ  §¡¨6°6Ð*:Ó!;Õ<ä% c×&=Ñ&=Ó&?Ó@ˆGÜ—[‘[ ¨°1©°hÓ?ˆFØ�L‰L× Ñ  §¡¨6°7Ð*;Ó!<Õ=rD   r2   c                 ó8   — |rt        |«      | _        yd| _        y)z¬Creates a :class:`mysqlx.protocol.Compressor` object based on the
        compression algorithm.

        Args:
            algorithm (str): Compression algorithm.
        Nr‡   r@   s     rB   rˆ   zMessageWriter.set_compression@  s   € ñ 5>œ: iÓ0ˆÕÀ4ˆÕrD   )rV   rW   rX   rY   r-   rC   Úintr)   rž   rZ   rˆ   r\   rD   rB   rŠ   rŠ     sK   „ ñð6 jð 6°Tó 6ð#> cð #>°ð #>Àó #>ðJH¨ð H°ô HrD   rŠ   c                   ó0  — e Zd ZdZdededdfd„Zedee	   fd„«       Z
eded	eddfd
„«       Zdedee   fd„Z	 d5d	eeef   dedeed   eeeef      f   fd„Zdededdfd„Zdedee   fd„Zde	ddfd„Zdefd„Zdeddfd„Z	 	 d6de	dee	   dee	   ddfd„Zdefd„Z de	ddfd„Z!d7d„Z"de	ded	ee#e$e%e&e'e(f   ddfd„Z)de	ded	eddfd „Z*d!e+ddfd"„Z,de	ded	eeef   ddfd#„Z-de	deddfd$„Z.d	ee#e&f   de/e	ef   fd%„Z0d	ee%e(f   de/e	ef   fd&„Z1d	ee$e'f   de/e	ef   fd'„Z2	 d8d(e	d	ee	e3f   d)ee4e	ef      de/e	ef   fd*„Z5ed	ee6e7f   de/e	ef   fd+„«       Z8deddfd,„Z9dedee   fd-„Z:dedee;   fd.„Z<d7d/„Z=d7d0„Z>d7d1„Z?d7d2„Z@d8d3ee   defd4„ZAy)9ÚProtocolzàImplements the MySQL X Protocol.

    Args:
        read (mysqlx.protocol.MessageReader): A Message Reader object.
        writer (mysqlx.protocol.MessageWriter): A Message Writer object.

    .. versionchanged:: 8.0.21
    ÚreaderÚwriterr3   Nc                 ó<   — || _         || _        d | _        g | _        y ra   )Ú_readerÚ_writerÚ_compression_algorithmÚ	_warnings)rA   r£   r¤   s      rB   rC   zProtocol.__init__T  s   € Ø&,ˆŒØ&,ˆŒØ59ˆÔ#Ø$&ˆ�rD   c                 ó   — | j                   S )zstr: The compresion algorithm.)r¨   )rA   s    rB   Úcompression_algorithmzProtocol.compression_algorithmZ  s   € ð ×*Ñ*Ð*rD   r‚   Ústmtc                 ó:  — |j                   r|j                  «       | d<   |j                  r"| d   j                  |j	                  «       «       |j
                  r"| d   j                  |j                  «       «       |j                  r|j                  «       | d<   yy)z­Apply filter.

        Args:
            msg (mysqlx.protobuf.Message): The MySQL X Protobuf Message.
            stmt (Statement): A `Statement` based type object.
        ÚcriteriaÚorderÚgroupingÚgrouping_criteriaN)	Ú	has_whereÚget_where_exprÚhas_sortÚextendÚget_sort_exprÚhas_group_byÚget_groupingÚ
has_havingÚ
get_having)r‚   r¬   s     rB   Ú_apply_filterzProtocol._apply_filter_  s�   € ð �>Š>Ø"×1Ñ1Ó3ˆC�
‰OØ�=Š=Ø�‰L×Ñ × 2Ñ 2Ó 4Ô5Ø×ÒØ�
‰O×"Ñ" 4×#4Ñ#4Ó#6Ô7Ø�?Š?Ø'+§¡Ó'8ˆCÐ#Ò$ð rD   Úargc           	      óè  — t        |t        «      r)t        d|¬«      }t        dd|¬«      }t        dd|¬«      S t        |t        «      rt        ddt	        |«      ¬«      S t        |t
        «      r3|d	k  rt        ddt        |«      ¬«      S t        ddt        |«      ¬«      S t        |t        «      rZt        |«      d
k(  rL|\  }}t        d|| j                  |«      ¬«      }t        d|j                  «       g¬«      }t        dd
|¬«      S t        |t        «      s)t        |t        t        f«      rÊt        |d	   t        «      r·g }|D ]’  }	g }
|	j                  «       D ]A  \  }}t        d|| j                  |«      ¬«      }|
j                  |j                  «       «       ŒC t        d|
¬«      }t        dd
|¬«      }|j                  |j                  «       «       Œ” t        d«      }||d<   t        dd|¬«      S t        |t        «      reg }
|D ]A  \  }}t        d|| j                  |«      ¬«      }|
j                  |j                  «       «       ŒC t        d|
¬«      }t        dd
|¬«      }|S y)z Create any.

        Args:
            arg (object): Arbitrary object.

        Returns:
            mysqlx.protobuf.Message: MySQL X Protobuf Message.
        zMysqlx.Datatypes.Scalar.String)ÚvaluezMysqlx.Datatypes.Scalaré   )ÚtypeÚv_stringúMysqlx.Datatypes.Anyr
   )rÀ   Úscalarr   é   ú#Mysqlx.Datatypes.Object.ObjectField©Úkeyr¾   úMysqlx.Datatypes.Object©Úfld©rÀ   ÚobjzMysqlx.Datatypes.Arrayr¾   é   )rÀ   ÚarrayN)Ú
isinstancerZ   r   Úboolr   r    r   r   Útupler•   Ú_create_anyÚget_messageÚdictÚlistÚitemsrw   )rA   r¼   r¾   rÃ   Úarg_keyÚ	arg_valueÚobj_fldrÌ   Úarray_valuesrÖ   Úobj_fldsrÇ   Úmsg_objÚmsg_anyr‚   s                  rB   rÒ   zProtocol._create_anyp  sv  € ô �cœ3ÔÜÐ<ÀCÔHˆEÜÐ6¸QÈÔOˆFÜÐ1¸À&ÔIÐIÜ�cœ4Ô ÜØ&¨QÔ7HÈÓ7Môð ô �cœ3ÔØ�QŠwÜØ*ØÜ+¨CÓ0ôð ô
 Ø&ØÜ0°Ó5ôð ô
 �cœ5Ô!¤c¨#£h°!¢mØ!$ÑˆG�YÜØ5ØØ×&Ñ& yÓ1ôˆGô
 Ð3¸'×:MÑ:MÓ:OÐ9PÔQˆCÜÐ1¸¸sÔCÐCÜ�cœ4Ô Ü�sœT¤5˜MÔ*¬z¸#¸a¹&Ä$Ô/GàˆLØò ;�Ø�Ø"'§+¡+£-ò ;‘J�C˜ä%Ø=ØØ"×.Ñ.¨uÓ5ô�Gð
 —O‘O G×$7Ñ$7Ó$9Õ:ð;ô "Ð";ÀÔJ�Ü!Ð"8¸qÀgÔN�Ø×#Ñ# G×$7Ñ$7Ó$9Õ:ð;ô Ð2Ó3ˆCØ'ˆC�‰LÜÐ1¸ÀÔEÐEÜ�cœ4Ô ØˆHØ!ò 7‘
��UÜ!Ø9ØØ×*Ñ*¨5Ó1ô�ð
 —‘ × 3Ñ 3Ó 5Õ6ð7ô Ð7¸XÔFˆGÜÐ4¸1À'ÔJˆGØˆNàrD   Ú	is_scalarc                 óŒ  ‡ ‡— dt         dt        t        t        f   fˆˆ fd„}|j	                  «       }|j                  «       }|€|D �cg c]
  } ||«      ‘Œ c}S t        |«      }|dgz  }|t        |«      k7  rt        d«      ‚|j                  «       D ]'  \  }	}|	|vrt        d|	› �«      ‚||	   }
 ||«      ||
<   Œ) |S c c}w )a›  Returns the binding any/scalar.

        Args:
            stmt (Statement): A `Statement` based type object.
            is_scalar (bool): `True` to return scalar values.

        Raises:
            :class:`mysqlx.ProgrammingError`: If unable to find placeholder for
                                              parameter.

        Returns:
            list: A list of ``Any`` or ``Scalar`` objects.
        r¾   r3   c                 óx   •— ‰rt        | «      j                  «       S ‰j                  | «      j                  «       S ra   )r   rÓ   rÒ   )r¾   rÞ   rA   s    €€rB   Úbuild_valuez/Protocol._get_binding_args.<locals>.build_valueË  s6   ø€ ñ Ü# EÓ*×6Ñ6Ó8Ð8Ø×#Ñ# EÓ*×6Ñ6Ó8Ð8rD   Nz;The number of bind parameters and placeholders do not matchz*Unable to find placeholder for parameter: )	r   r	   r+   r*   Úget_bindingsÚget_binding_mapr•   r   rÖ   )rA   r¬   rÞ   rá   ÚbindingsÚbinding_mapr¾   ÚcountÚargsÚnameÚposs   ` `        rB   Ú_get_binding_argszProtocol._get_binding_argsº  sò   ù€ ð"	9Üð	9äÔ&Ô(?Ð?Ñ@ö	9ð ×$Ñ$Ó&ˆØ×*Ñ*Ó,ˆð ÐØ4<Ö=¨5‘K Õ&Ò=Ð=ä�KÓ ˆØ 4 &™.ˆØ”C˜“MÒ!Ü"ØMóð ð $Ÿ>™>Ó+ò 	+‰KˆD�%Ø˜;Ñ&Ü&Ø@ÀÀÐGóð ð ˜dÑ#ˆCÙ# EÓ*ˆD�ŠIð	+ð ˆùò >s   Á	CÚresultc                 óŽ  — |d   dk(  r›t        j                  d|d   «      }| j                  j                  |j                  «       t        j                  d|j                  |j                  «       |j                  |j                  |j                  |j                  «       y|d   dk(  rt        j                  d|d   «       y|d   dk(  rót        j                  d	|d   «      }|d
   t        d«      k(  rE|j                  |d   D �cg c]&  }t        t        |d«      d«      j                  «       ‘Œ( c}«       yt        |d   t        t         «      «      r|d   d   n|d   }|d
   t        d«      k(  r|j#                  t        |d«      «       y|d
   t        d«      k(  r|j%                  t        |d«      «       yyyc c}w )z¨Process frame.

        Args:
            msg (mysqlx.protobuf.Message): A MySQL X Protobuf Message.
            result (Result): A `Result` based type object.
        rÀ   r
   zMysqlx.Notice.Warningrn   z:Protocol.process_frame Received Warning Notice code %s: %srÄ   z$Mysqlx.Notice.SessionVariableChangedrÍ   z!Mysqlx.Notice.SessionStateChangedÚparamzBMysqlx.Notice.SessionStateChanged.Parameter.GENERATED_DOCUMENT_IDSr¾   Úv_octetsr   z9Mysqlx.Notice.SessionStateChanged.Parameter.ROWS_AFFECTEDÚv_unsigned_intz?Mysqlx.Notice.SessionStateChanged.Parameter.GENERATED_INSERT_IDN)r   Úfrom_messager©   rw   r‚   r   ÚwarningÚcodeÚappend_warningÚlevelr   Úset_generated_idsr   ÚdecoderÏ   rÑ   r   Úset_rows_affectedÚset_generated_insert_id)rA   r‚   rë   Úwarn_msgÚsess_state_msgr¾   Úsess_state_values          rB   Ú_process_framezProtocol._process_frameè  sÖ  € ð ˆv‰;˜!ÒÜ×+Ñ+Ð,CÀSÈÁ^ÓTˆHØ�N‰N×!Ñ! (§,¡,Ô/Ü�N‰NØLØ—‘Ø—‘ôð
 ×!Ñ! (§.¡.°(·-±-ÀÇÁÕNØ�‰[˜AÒÜ× Ñ Ð!GÈÈYÉÕXØ�‰[˜AÒÜ$×1Ñ1Ø3°S¸±^óˆNð ˜gÑ&¬-ØTó+ò ð ×(Ñ(ð
 &4°GÑ%<ö	ð "ô )Ü,¨U°JÓ?Àóç ™&›(ñ#òõô "Ø& wÑ/´Ô7NÓ1Oôð # 7Ñ+¨AÒ.ð (¨Ñ0ð !ð " 'Ñ*¬mØOó/ò ð ×,Ñ,Ü(Ð)9Ð;KÓLõð $ GÑ,´ØUó1ò ð ×2Ñ2Ü(Ð)9Ð;KÓLõðð; ùòs   Ä
+Gc                 ód  — 	 	 | j                   j                  «       }j
                  dk(  rt        |d   |d   «      ‚|j
                  dk(  r	 | j                  ||«       nx|j
                  dk(  ry|j
                  d	k(  r|j                  d«       nG|j
                  d
k(  r|j                  d«       n&|j
                  dk(  r|j                  d«       	 |S 	 |S ŒØ# t        $ r6}t        |j	                  «       «      }|rt        |› d|› �«      |‚Y d}~Œ÷d}~ww xY w# t        t        f$ r Y �Œ-w xY w)z`Read message.

        Args:
            result (Result): A `Result` based type object.
        Tz	 reason: NúMysqlx.Errorr‚   rò   úMysqlx.Notice.FramezMysqlx.Sql.StmtExecuteOkzMysqlx.Resultset.FetchDonez(Mysqlx.Resultset.FetchDoneMoreResultsetsúMysqlx.Resultset.Row)r¦   rƒ   ÚRuntimeErrorÚreprÚget_warningsrÀ   r   rü   ÚAttributeErrorÚKeyErrorÚ
set_closedÚset_has_more_resultsÚset_has_data)rA   rë   r‚   ÚerrÚwarningss        rB   ru   zProtocol._read_message  s?  € ð ðMØ—l‘l×/Ñ/Ó1�ð
 �x‰x˜>Ò)Ü& s¨5¡z°3°v±;Ó?Ð?Ø�x‰xÐ0Ò0ðØ×'Ñ'¨¨VÕ4ð —‘Ð7Ò7ØØ—‘Ð9Ò9Ø×!Ñ! $Õ'Ø—‘ÐGÒGØ×+Ñ+¨DÕ1Ø—‘Ð3Ò3Ø×#Ñ# DÔ)Øð ˆ
ð Øˆ
ð3 øô  ò MÜ × 3Ñ 3Ó 5Ó6�ÙÜ&¨#¨¨i¸°zÐ'BÓCÈÐLô ûðMûô '¬Ð1ò Úðús)   ƒC ÁD Ã	DÃ#,DÄDÄD/Ä.D/r2   c                 ó~   — || _         | j                  j                  |«       | j                  j                  |«       y)zðSets the compression algorithm to be used by the compression
        object, for uplink and downlink.

        Args:
            algorithm (str): Algorithm to be used in compression/decompression.

        .. versionadded:: 8.0.21

        N)r¨   r¦   rˆ   r§   r@   s     rB   rˆ   zProtocol.set_compression?  s0   € ð '0ˆÔ#Ø�‰×$Ñ$ YÔ/Ø�‰×$Ñ$ YÕ/rD   c                 óN  — t        d«      }| j                  j                  t        d«      |«       | j                  j                  «       }|j                  dk(  r*| j                  j                  «       }|j                  dk(  rŒ*|j                  dk(  rt        |d   |d   «      ‚|S )zkGet capabilities.

        Returns:
            mysqlx.protobuf.Message: MySQL X Protobuf Message.
        z!Mysqlx.Connection.CapabilitiesGetz/Mysqlx.ClientMessages.Type.CON_CAPABILITIES_GETrÿ   rþ   r‚   rò   )r   r§   rž   r   r¦   rƒ   rÀ   r   r�   s     rB   Úget_capabiliteszProtocol.get_capabilitesM  s—   € ô Ð9Ó:ˆØ�‰×"Ñ"ÜÐKÓLØô	
ð �l‰l×'Ñ'Ó)ˆØ�h‰hÐ/Ò/Ø—,‘,×+Ñ+Ó-ˆCð �h‰hÐ/Ó/ð �8‰8�~Ò%Ü" 3 u¡:¨s°6©{Ó;Ð;àˆ
rD   Úkwargsc           
      óÆ  — |syt        d«      }|j                  «       D ]Õ  \  }}t        d«      }||d<   t        |t        «      ry|}g }|D ]A  }t        d|| j	                  ||   «      ¬«      }	|j                  |	j                  «       «       ŒC t        d|¬«      }
t        d	d
|
¬«      }|j                  «       |d<   n| j	                  |«      |d<   |d   j                  |j                  «       g«       Œ× t        d«      }||d<   | j                  j                  t        d«      |«       	 | j                  «       S # t        $ r}|j                  dk7  r‚ Y d}~yd}~ww xY w)z­Set capabilities.

        Args:
            **kwargs: Arbitrary keyword arguments.

        Returns:
            mysqlx.protobuf.Message: MySQL X Protobuf Message.
        NzMysqlx.Connection.CapabilitieszMysqlx.Connection.Capabilityrè   rÅ   rÆ   rÈ   rÉ   rÂ   rÄ   rË   r¾   Úcapabilitiesz!Mysqlx.Connection.CapabilitiesSetz/Mysqlx.ClientMessages.Type.CON_CAPABILITIES_SETiŠ  )r   rÖ   rÏ   rÔ   rÒ   rw   rÓ   rµ   r§   rž   r   Úread_okr   Úerrno)rA   r  r  rÇ   r¾   Ú
capabilityrÖ   rÛ   ÚitemrÙ   rÜ   rÝ   r‚   r	  s                 rB   Úset_capabilitieszProtocol.set_capabilitiesa  su  € ñ ØÜÐ?Ó@ˆØ Ÿ,™,›.ò 	L‰JˆC�Ü Ð!?Ó@ˆJØ!$ˆJ�vÑÜ˜%¤Ô&Ø�Ø�Ø!ò ;�DÜ%Ø=Ø Ø"×.Ñ.¨u°T©{Ó;ô�Gð
 —O‘O G×$7Ñ$7Ó$9Õ:ð;ô "Ð";ÀÔJ�Ü!Ð"8¸qÀgÔN�Ø&-×&9Ñ&9Ó&;�
˜7Ò#à&*×&6Ñ&6°uÓ&=�
˜7Ñ#à˜Ñ(×/Ñ/°×1GÑ1GÓ1IÐ0JÕKð'	Lô( Ð9Ó:ˆØ*ˆˆNÑØ�‰×"Ñ"ÜÐKÓLØô	
ð
	Ø—<‘<“>Ð!øÜò 	ð �y‰y˜DÒ Øó !àûð	ús   Ä-D= Ä=	E ÅEÅE ÚmethodÚ	auth_dataÚinitial_responsec                 óŠ   — t        d«      }||d<   |�||d<   |�||d<   | j                  j                  t        d«      |«       y)zÖSend authenticate start.

        Args:
            method (str): Message method.
            auth_data (Optional[str]): Authentication data.
            initial_response (Optional[str]): Initial response.
        z Mysqlx.Session.AuthenticateStartÚ	mech_nameNr  r  z2Mysqlx.ClientMessages.Type.SESS_AUTHENTICATE_START©r   r§   rž   r   )rA   r  r  r  r‚   s        rB   Úsend_auth_startzProtocol.send_auth_start‘  sX   € ô Ð8Ó9ˆØ!ˆˆKÑØÐ Ø(ˆC�ÑØÐ'Ø&6ˆCÐ"Ñ#Ø�‰×"Ñ"ÜÐNÓOØõ	
rD   c                 óæ   — | j                   j                  «       }|j                  dk(  r*| j                   j                  «       }|j                  dk(  rŒ*|j                  dk7  rt        d«      ‚|d   S )züRead authenticate continue.

        Raises:
            :class:`InterfaceError`: If the message type is not
                                     `Mysqlx.Session.AuthenticateContinue`

        Returns:
            str: The authentication data.
        rÿ   ú#Mysqlx.Session.AuthenticateContinuez>Unexpected message encountered during authentication handshaker  ©r¦   rƒ   rÀ   r   r�   s     rB   Úread_auth_continuezProtocol.read_auth_continue©  sn   € ð �l‰l×'Ñ'Ó)ˆØ�h‰hÐ/Ò/Ø—,‘,×+Ñ+Ó-ˆCð �h‰hÐ/Ó/à�8‰8Ð<Ò<Ü ØPóð ð �;ÑÐrD   c                 óh   — t        d|¬«      }| j                  j                  t        d«      |«       y)zeSend authenticate continue.

        Args:
            auth_data (str): Authentication data.
        r  )r  z5Mysqlx.ClientMessages.Type.SESS_AUTHENTICATE_CONTINUENr  )rA   r  r‚   s      rB   Úsend_auth_continuezProtocol.send_auth_continue¼  s/   € ô Ð;ÀyÔQˆØ�‰×"Ñ"ÜÐQÓRØõ	
rD   c                 ó¢   — 	 | j                   j                  «       }|j                  dk(  ry|j                  dk(  rt        |j                  «      ‚ŒO)z~Read authenticate OK.

        Raises:
            :class:`mysqlx.InterfaceError`: If message type is `Mysqlx.Error`.
        zMysqlx.Session.AuthenticateOkrþ   N)r¦   rƒ   rÀ   r   r‚   r�   s     rB   Úread_auth_okzProtocol.read_auth_okÈ  sI   € ð Ø—,‘,×+Ñ+Ó-ˆCØ�x‰xÐ:Ò:ØØ�x‰x˜>Ò)Ü$ S§W¡WÓ-Ð-ð rD   r   c                 ó,  — |j                   rñ|j                  dk7  râ|j                  dk(  r| j                  |«      \  }}nV|j                  dk(  r| j                  |«      \  }}n2|j                  dk(  r| j	                  |«      \  }}nt        d|› �«      ‚t        |j                  «       «      }t        d«      }t        d«      }t        d||¬	«      |d
<   |j                  dk(  rt        d||dz   ¬	«      |d<   ||d<   t        |   \  }}	t        d«      }
t        |«      |
d<   ||
|	<   t        d«      }|j                  |d<   |
|d<   | j                  j                  t        d«      |«       	 | j                  «        y# t        $ r}t         |‚d}~ww xY w)a¦  
        Send prepare statement.

        Args:
            msg_type (str): Message ID string.
            msg (mysqlx.protobuf.Message): MySQL X Protobuf Message.
            stmt (Statement): A `Statement` based type object.

        Raises:
            :class:`mysqlx.NotSupportedError`: If prepared statements are not
                                               supported.

        .. versionadded:: 8.0.16
        úMysqlx.Crud.InsertúMysqlx.Crud.FindúMysqlx.Crud.UpdateúMysqlx.Crud.DeletezInvalid message type: z!Mysqlx.Expr.Expr.Type.PLACEHOLDERzMysqlx.Crud.LimitExprzMysqlx.Expr.Expr)rÀ   ÚpositionÚ	row_countr
   ÚoffsetÚ
limit_exprú#Mysqlx.Prepare.Prepare.OneOfMessagerÀ   zMysqlx.Prepare.PrepareÚstmt_idr¬   z*Mysqlx.ClientMessages.Type.PREPARE_PREPAREN)Ú	has_limitrÀ   Ú
build_findÚbuild_updateÚbuild_deletert   r•   râ   r   r   r   r/  r§   rž   r  r   r   )rA   r   r‚   r¬   Ú_r*  ÚplaceholderÚmsg_limit_exprÚ
oneof_typeÚoneof_opÚ	msg_oneofÚmsg_preparer	  s                rB   Úsend_prepare_preparezProtocol.send_prepare_prepareÕ  s™  € ð6 �>Š>˜cŸh™hÐ*>Ò>à�x‰xÐ-Ò-ØŸ™¨Ó.‘�‘3Ø—‘Ð1Ò1Ø×*Ñ*¨4Ó0‘�‘3Ø—‘Ð1Ò1Ø×*Ñ*¨4Ó0‘�‘3ä Ð#9¸(¸Ð!DÓEÐEä˜4×,Ñ,Ó.Ó/ˆHÜ'Ð(KÓLˆKÜ$Ð%<Ó=ˆNÜ*1Ø"¨¸xô+ˆN˜;Ñ'ð �x‰xÐ-Ò-Ü+2Ø&¨[À8ÈaÁ<ô,�˜xÑ(ð !/ˆC�Ñä3°HÑ=Ñˆ
�HÜÐAÓBˆ	Ü)¨*Ó5ˆ	�&ÑØ!ˆ	�(ÑÜÐ6Ó7ˆØ!%§¡ˆ�IÑØ'ˆ�FÑà�‰×"Ñ"ÜÐFÓGØô	
ð
	-Ø�L‰L�NøÜò 	-Ü#¨Ð,ûð	-ús   Å-E> Å>	FÆFÆFc                 ó  — t         |   \  }}t        d«      }t        |«      |d<   |||<   t        d«      }|j                  |d<   | j	                  |d¬«      }|r|d   j                  |«       |j                  rl|d   j                  | j                  |j                  «       «      j                  «       | j                  |j                  «       «      j                  «       g«       | j                  j                  t        d«      |«       y	)
a  
        Send execute statement.

        Args:
            msg_type (str): Message ID string.
            msg (mysqlx.protobuf.Message): MySQL X Protobuf Message.
            stmt (Statement): A `Statement` based type object.

        .. versionadded:: 8.0.16
        r.  rÀ   zMysqlx.Prepare.Executer/  F©rÞ   rç   z*Mysqlx.ClientMessages.Type.PREPARE_EXECUTEN)r   r   r   r/  rê   rµ   r0  rÒ   Úget_limit_row_countrÓ   Úget_limit_offsetr§   rž   )	rA   r   r‚   r¬   r7  r8  r9  Úmsg_executerç   s	            rB   Úsend_prepare_executezProtocol.send_prepare_execute  sú   € ô  4°HÑ=Ñˆ
�HÜÐAÓBˆ	Ü)¨*Ó5ˆ	�&ÑØ!ˆ	�(ÑÜÐ6Ó7ˆØ!%§¡ˆ�IÑà×%Ñ% d°eÐ%Ó<ˆÙØ˜Ñ×&Ñ& tÔ,à�>Š>Ø˜Ñ×&Ñ&à×$Ñ$ T×%=Ñ%=Ó%?Ó@×LÑLÓNØ×$Ñ$ T×%:Ñ%:Ó%<Ó=×IÑIÓKðôð 	�‰×"Ñ"ÜÐFÓGØõ	
rD   r/  c                 óŽ   — t        d«      }||d<   | j                  j                  t        d«      |«       | j	                  «        y)zŽ
        Send prepare deallocate statement.

        Args:
            stmt_id (int): Statement ID.

        .. versionadded:: 8.0.16
        zMysqlx.Prepare.Deallocater/  z-Mysqlx.ClientMessages.Type.PREPARE_DEALLOCATEN)r   r§   rž   r   r  )rA   r/  Úmsg_deallocs      rB   Úsend_prepare_deallocatez Protocol.send_prepare_deallocate>  sB   € ô Ð9Ó:ˆØ!(ˆ�IÑØ�‰×"Ñ"ÜÐIÓJØô	
ð 	�‰�rD   c                 ó&  — |j                   rEt        d«      }|j                  «       |d<   |j                  dk(  r|j	                  «       |d<   ||d<   |dk7  }| j                  ||¬«      }|r|d   j                  |«       | j                  ||«       y	)
a)  
        Send a message without prepared statements support.

        Args:
            msg_type (str): Message ID string.
            msg (mysqlx.protobuf.Message): MySQL X Protobuf Message.
            stmt (Statement): A `Statement` based type object.

        .. versionadded:: 8.0.16
        zMysqlx.Crud.Limitr+  r'  r,  Úlimitú+Mysqlx.ClientMessages.Type.SQL_STMT_EXECUTEr=  rç   N)r0  r   r>  rÀ   r?  rê   rµ   Úsend_msg)rA   r   r‚   r¬   Ú	msg_limitrÞ   rç   s          rB   Úsend_msg_without_pszProtocol.send_msg_without_psO  s•   € ð  �>Š>ÜÐ 3Ó4ˆIØ%)×%=Ñ%=Ó%?ˆI�kÑ"Ø�x‰xÐ-Ò-Ø&*×&;Ñ&;Ó&=�	˜(Ñ#Ø$ˆC�‰LØÐ MÑMˆ	Ø×%Ñ% d°iÐ%Ó@ˆÙØ�‰K×Ñ˜tÔ$Ø�‰�h Õ$rD   c                 óN   — | j                   j                  t        |«      |«       y)zÆ
        Send a message.

        Args:
            msg_type (str): Message ID string.
            msg (mysqlx.protobuf.Message): MySQL X Protobuf Message.

        .. versionadded:: 8.0.16
        N)r§   rž   r   )rA   r   r‚   s      rB   rH  zProtocol.send_msgk  s   € ð 	�‰×"Ñ"¤=°Ó#:¸CÕ@rD   c                 ó  — t        |j                  «       rdnd«      }t        d|j                  j                  |j
                  j                  ¬«      }t        d||¬«      }|j                  r|j                  «       |d<   | j                  ||«       |j                  «       rt        d«      |d	<   n|j                  «       rt        d
«      |d	<   |j                  j                  dkD  r|j                  j                  |d<   d|fS )a‹  Build find/read message.

        Args:
            stmt (Statement): A :class:`mysqlx.ReadStatement` or
                              :class:`mysqlx.FindStatement` object.

        Returns:
            (tuple): Tuple containing:

                * `str`: Message ID string.
                * :class:`mysqlx.protobuf.Message`: MySQL X Protobuf Message.

        .. versionadded:: 8.0.16
        úMysqlx.Crud.DataModel.DOCUMENTúMysqlx.Crud.DataModel.TABLEúMysqlx.Crud.Collection©rè   Úschemar'  ©Ú
data_modelÚ
collectionÚ
projectionz'Mysqlx.Crud.Find.RowLock.EXCLUSIVE_LOCKÚlockingz$Mysqlx.Crud.Find.RowLock.SHARED_LOCKr   Úlocking_optionsz$Mysqlx.ClientMessages.Type.CRUD_FIND)r   Úis_doc_basedr   Útargetrè   rQ  Úhas_projectionÚget_projection_exprr»   Úis_lock_exclusiveÚis_lock_sharedÚlock_contentionr¾   ©rA   r¬   rS  rT  r‚   s        rB   r1  zProtocol.build_findw  sô   € ô" #à× Ñ Ô"ñ -à.ó
ˆ
ô
 Ø$Ø—‘×!Ñ!Ø—;‘;×#Ñ#ô
ˆ
ô
 Ð(°ZÈJÔWˆØ×ÒØ $× 8Ñ 8Ó :ˆC�ÑØ×Ñ˜3 Ô%à×!Ñ!Ô#Ü*Ð+TÓUˆC�	ŠNØ× Ñ Ô"Ü*Ð+QÓRˆC�	‰Nà×Ñ×%Ñ%¨Ò)Ø%)×%9Ñ%9×%?Ñ%?ˆCÐ!Ñ"à5°sÐ:Ð:rD   c                 ó  — t        |j                  «       rdnd«      }t        d|j                  j                  |j
                  j                  ¬«      }t        d||¬«      }| j                  ||«       |j                  «       j                  «       D ]u  \  }}t        d«      }|j                  |d<   |j                  |d	<   |j                  �t        |j                  «      |d
<   |d   j                  |j                  «       g«       Œw d|fS )aŒ  Build update message.

        Args:
            stmt (Statement): A :class:`mysqlx.ModifyStatement` or
                              :class:`mysqlx.UpdateStatement` object.

        Returns:
            (tuple): Tuple containing:

                * `str`: Message ID string.
                * :class:`mysqlx.protobuf.Message`: MySQL X Protobuf Message.

        .. versionadded:: 8.0.16
        rM  rN  rO  rP  r(  rR  zMysqlx.Crud.UpdateOperationÚ	operationÚsourcer¾   z&Mysqlx.ClientMessages.Type.CRUD_UPDATE)r   rX  r   rY  rè   rQ  r»   Úget_update_opsrÖ   Úupdate_typerb  r¾   r   rµ   rÓ   )rA   r¬   rS  rT  r‚   r4  Ú	update_opra  s           rB   r2  zProtocol.build_update¡  s	  € ô" #à× Ñ Ô"ñ -à.ó
ˆ
ô
 Ø$Ø—‘×!Ñ!Ø—;‘;×#Ñ#ô
ˆ
ô
 Ø ¨ZÀJô
ˆð 	×Ñ˜3 Ô%Ø ×/Ñ/Ó1×7Ñ7Ó9ò 	?‰LˆAˆyÜÐ =Ó>ˆIØ%.×%:Ñ%:ˆI�kÑ"Ø"+×"2Ñ"2ˆI�hÑØ�‰Ð*Ü%/°	·±Ó%@�	˜'Ñ"Ø�Ñ×#Ñ# Y×%:Ñ%:Ó%<Ð$=Õ>ð	?ð 8¸Ð<Ð<rD   c                 óð   — t        |j                  «       rdnd«      }t        d|j                  j                  |j
                  j                  ¬«      }t        d||¬«      }| j                  ||«       d|fS )aŒ  Build delete message.

        Args:
            stmt (Statement): A :class:`mysqlx.DeleteStatement` or
                              :class:`mysqlx.RemoveStatement` object.

        Returns:
            (tuple): Tuple containing:

                * `str`: Message ID string.
                * :class:`mysqlx.protobuf.Message`: MySQL X Protobuf Message.

        .. versionadded:: 8.0.16
        rM  rN  rO  rP  r)  rR  z&Mysqlx.ClientMessages.Type.CRUD_DELETE)r   rX  r   rY  rè   rQ  r»   r_  s        rB   r3  zProtocol.build_deleteÊ  s{   € ô" #à× Ñ Ô"ñ -à.ó
ˆ
ô
 Ø$Ø—‘×!Ñ!Ø—;‘;×#Ñ#ô
ˆ
ô
 Ø ¨ZÀJô
ˆð 	×Ñ˜3 Ô%Ø7¸Ð<Ð<rD   Ú	namespaceÚfieldsc                 ó6  — t        d||d¬«      }|r…g }|j                  «       D ]A  \  }}t        d|| j                  |«      ¬«      }|j                  |j	                  «       «       ŒC t        d|¬«      }	t        dd	|	¬
«      }
|
j	                  «       g|d<   d|fS )aª  Build execute statement.

        Args:
            namespace (str): The namespace.
            stmt (Statement): A `Statement` based type object.
            fields (Optional[dict]): The message fields.

        Returns:
            (tuple): Tuple containing:

                * `str`: Message ID string.
                * :class:`mysqlx.protobuf.Message`: MySQL X Protobuf Message.

        .. versionadded:: 8.0.16
        zMysqlx.Sql.StmtExecuteF)rg  r¬   Úcompact_metadatarÅ   rÆ   rÈ   rÉ   rÂ   rÄ   rË   rç   rG  )r   rÖ   rÒ   rw   rÓ   )rA   rg  r¬   rh  r‚   rÛ   rÇ   r¾   rÙ   rÜ   rÝ   s              rB   Úbuild_execute_statementz Protocol.build_execute_statementë  s°   € ô* Ø$ØØØ"ô	
ˆñ ØˆHØ$Ÿl™l›nò 7‘
��UÜ!Ø9ØØ×*Ñ*¨5Ó1ô�ð
 —‘ × 3Ñ 3Ó 5Õ6ð7ô Ð7¸XÔFˆGÜÐ4¸1À'ÔJˆGØ"×.Ñ.Ó0Ð1ˆC�‰KØ<¸cÐAÐArD   c                 óB  — t        | j                  «       rdnd«      }t        d| j                  j                  | j
                  j                  ¬«      }t        d||¬«      }t        | d«      r]| j                  D ]N  }t        || j                  «        «      j                  «       }|d   j                  |j                  «       g«       ŒP | j                  «       D ]   }t        d	«      }t        |t        «      r4|D ].  }|d
   j                  t        |«      j                  «       g«       Œ0 n,|d
   j                  t        |«      j                  «       g«       |d   j                  |j                  «       g«       Œ¢ t        | d«      r| j!                  «       |d<   d|fS )a‹  Build insert statement.

        Args:
            stmt (Statement): A :class:`mysqlx.AddStatement` or
                              :class:`mysqlx.InsertStatement` object.

        Returns:
            (tuple): Tuple containing:

                * `str`: Message ID string.
                * :class:`mysqlx.protobuf.Message`: MySQL X Protobuf Message.

        .. versionadded:: 8.0.16
        rM  rN  rO  rP  r&  rR  Ú_fieldsrU  zMysqlx.Crud.Insert.TypedRowÚfieldÚrowÚ	is_upsertÚupsertz&Mysqlx.ClientMessages.Type.CRUD_INSERT)r   rX  r   rY  rè   rQ  Úhasattrrm  r   Úparse_table_insert_fieldrµ   rÓ   Ú
get_valuesrÏ   rÕ   r   rp  )	r¬   rS  rT  r‚   rn  Úexprr¾   ro  Úvals	            rB   Úbuild_insertzProtocol.build_insert  s�  € ô$ #à× Ñ Ô"ñ -à.ó
ˆ
ô
 Ø$Ø—‘×!Ñ!Ø—;‘;×#Ñ#ô
ˆ
ô
 Ø ¨ZÀJô
ˆô �4˜Ô#ØŸ™ò ?�Ü!Ø˜t×0Ñ0Ó2Ð2óç*Ñ*Ó,ð ð �LÑ!×(Ñ(¨$×*:Ñ*:Ó*<Ð)=Õ>ð	?ð —_‘_Ó&ò 	3ˆEÜÐ7Ó8ˆCÜ˜%¤Ô&Ø ò I�CØ˜‘L×'Ñ'¬°C«×)DÑ)DÓ)FÐ(GÕHñIð �G‘×#Ñ#¤Z°Ó%6×%BÑ%BÓ%DÐ$EÔFØ�‰J×Ñ˜sŸ™Ó0Ð1Õ2ð	3ô �4˜Ô%Ø ŸN™NÓ,ˆC�‰Mà7¸Ð<Ð<rD   c                 ó@   — | j                  |«      }|�t        d«      ‚y)z¼Close the result.

        Args:
            result (Result): A `Result` based type object.

        Raises:
            :class:`mysqlx.OperationalError`: If message read is None.
        NzExpected to close the result)ru   r   ©rA   rë   r‚   s      rB   Úclose_resultzProtocol.close_resultJ  s*   € ð × Ñ  Ó(ˆØˆ?Ü"Ð#AÓBÐBð rD   c                 ó„   — | j                  |«      }|€y|j                  dk(  r|S | j                  j                  |«       y)z\Read row.

        Args:
            result (Result): A `Result` based type object.
        Nr   )ru   rÀ   r¦   r…   ry  s      rB   Úread_rowzProtocol.read_rowW  sC   € ð × Ñ  Ó(ˆØˆ;ØØ�8‰8Ð-Ò-ØˆJØ�‰×!Ñ! #Ô&ØrD   c                 óÚ  — g }	 | j                  |«      }|€	 |S |j                  dk(  r| j                  j                  |«       	 |S |j                  dk7  rt	        d«      ‚t        |d   |d   |d   |d   |d   |d	   |d
   |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  d«      «      }|j                  |«       Œé)z¿Returns column metadata.

        Args:
            result (Result): A `Result` based type object.

        Raises:
            :class:`mysqlx.InterfaceError`: If unexpected message.
        r   zMysqlx.Resultset.ColumnMetaDatazUnexpected msg typerÀ   ÚcatalogrQ  ÚtableÚoriginal_tablerè   Úoriginal_nameÚlengthé   Ú	collationr   Úfractional_digitsÚflagsé   Úcontent_type)ru   rÀ   r¦   r…   r   r   Úgetrw   )rA   rë   Úcolumnsr‚   Úcols        rB   Úget_column_metadatazProtocol.get_column_metadatae  s  € ð ˆØØ×$Ñ$ VÓ,ˆCØˆ{Øð* ˆð) �x‰xÐ1Ò1Ø—‘×)Ñ)¨#Ô.Øð$ ˆð# �x‰xÐ<Ò<Ü$Ð%:Ó;Ð;ÜØ�F‘Ø�I‘Ø�H‘Ø�G‘ØÐ$Ñ%Ø�F‘Ø�OÑ$Ø—‘˜ "Ó%Ø—‘˜ QÓ'Ø—‘Ð+¨QÓ/Ø—‘˜ Ó$Ø—‘˜Ó'óˆCð �N‰N˜3Ôð/ rD   c                 ó¶   — | j                   j                  «       }|j                  dk(  rt        d|d   › �|d   ¬«      ‚|j                  dk7  rt        d«      ‚y)	zeRead OK.

        Raises:
            :class:`mysqlx.InterfaceError`: If unexpected message.
        rþ   zMysqlx.Error: r‚   rò   )r  z	Mysqlx.OkzUnexpected message encounteredNr  r�   s     rB   r  zProtocol.read_ok‰  s[   € ð �l‰l×'Ñ'Ó)ˆØ�8‰8�~Ò%Ü  >°#°e±*°Ð!>ÀcÈ&ÁkÔRÐRØ�8‰8�{Ò"Ü Ð!AÓBÐBð #rD   c                 ód   — t        d«      }| j                  j                  t        d«      |«       y)zSend connection close.zMysqlx.Connection.Closez$Mysqlx.ClientMessages.Type.CON_CLOSENr  r�   s     rB   Úsend_connection_closezProtocol.send_connection_close•  s*   € äÐ/Ó0ˆØ�‰×"Ñ"ÜÐ@ÓAÀ3õ	
rD   c                 ód   — t        d«      }| j                  j                  t        d«      |«       y)zSend close.zMysqlx.Session.Closez%Mysqlx.ClientMessages.Type.SESS_CLOSENr  r�   s     rB   Ú
send_closezProtocol.send_closeœ  s*   € äÐ,Ó-ˆØ�‰×"Ñ"ÜÐAÓBÀCõ	
rD   c                 óÌ   — t        d«      }t        d«      }||d<   d|d<   t        d«      }|j                  «       g|d<   | j                  j	                  t        d«      |«       y	)
zSend expectation.z3Mysqlx.Expect.Open.Condition.Key.EXPECT_FIELD_EXISTzMysqlx.Expect.Open.ConditionÚcondition_keyz6.1Úcondition_valuezMysqlx.Expect.OpenÚcondz&Mysqlx.ClientMessages.Type.EXPECT_OPENN)r   r   rÓ   r§   rž   )rA   Úcond_keyÚmsg_ocÚmsg_eos       rB   Úsend_expect_openzProtocol.send_expect_open£  sj   € ä Ð!VÓWˆÜÐ7Ó8ˆØ"*ˆˆÑØ$)ˆÐ Ñ!äÐ-Ó.ˆØ ×,Ñ,Ó.Ð/ˆˆv‰à�‰×"Ñ"ÜÐBÓCÀVõ	
rD   Ú	keep_openc                 ó  — t        d«      }|€#	 | j                  «        | j                  «        d}|rd|d<   | j                  j                  t        d«      |«       | j                  «        |ryy# t        $ r d}Y ŒMw xY w)z¨Send reset session message.

        Returns:
            boolean: ``True`` if the server will keep the session open,
                     otherwise ``False``.
        zMysqlx.Session.ResetTFrš  z%Mysqlx.ClientMessages.Type.SESS_RESET)r   r™  r  r   r§   rž   r   )rA   rš  r‚   s      rB   Ú
send_resetzProtocol.send_reset±  sŠ   € ô Ð,Ó-ˆØÐð"à×%Ñ%Ô'Ø—‘”Ø �	ñ Ø#ˆC�ÑØ�‰×"Ñ"ÜÐAÓBÀCô	
ð 	�‰ŒÙØØøô "ò "à!’	ð"ús   �"A1 Á1A?Á>A?)T)NN)r3   Nra   )BrV   rW   rX   rY   r^   rŠ   rC   Úpropertyr   rZ   r«   Ústaticmethodr)   r    r»   r   rÒ   r	   r&   rÐ   r   r+   r*   rê   r,   rü   ru   rˆ   r  r  r  r[   r   r"  r$  r!   r   r#   r$   r%   r'   r;  rA  r    rD  rJ  rH  r   r1  r2  r3  r.   r   rk  r   r"   rw  rz  r|  r(   rŒ  r  r�  r‘  r™  rœ  r\   rD   rB   r¢   r¢   J  sö  „ ñð'˜}ð '°mð 'Èó 'ð ð+ x°¡}ò +ó ð+ð ð9˜;ð 9Ð.Að 9Àdò 9ó ð9ð H˜sð H x°Ñ'<ó HðV QUñ,ØÐ-¨|Ð;Ñ<ð,ØIMð,à	ˆt�D‰z˜4 Ð&9Ð;RÐ&RÑ SÑTÐTÑ	Uó,ð\4 +ð 4°~ð 4È$ó 4ðl Nð °xÀÑ7Ló ðB0¨ð 0°ó 0ð ó ð(.¨ð .°ó .ðf $(Ø*.ñ	
àð
ð ˜C‘=ð
ð # 3™-ð	
ð
 
ó
ð0  Eó  ð&

¨Cð 

°Dó 

ó.ðB-àðB-ð ðB-ð ØØØØØØðñ
ð	B-ð 
óB-ðH#
Øð#
Ø"-ð#
Ø5Hð#
à	ó#
ðJ¨sð °tó ð"%àð%ð ð%ð Ð'¨Ð5Ñ6ð	%ð
 
ó%ð8
A ð 
A¨;ð 
A¸4ó 
Að(;Ø˜-¨Ð6Ñ7ð(;à	ˆs�KÐÑ	 ó(;ðT'=Ø˜/¨?Ð:Ñ;ð'=à	ˆs�KÐÑ	 ó'=ðR=Ø˜/¨?Ð:Ñ;ð=à	ˆs�KÐÑ	 ó=ðJ ,0ñ	(Bàð(Bð �C˜Ð&Ñ'ð(Bð ˜˜c 3˜h™Ñ(ð	(Bð
 
ˆs�KÐÑ	 ó(BðT ð2=Ø�L /Ð1Ñ2ð2=à	ˆs�KÐÑ	 ò2=ó ð2=ðhC >ð C°dó Cð˜~ð °(¸;Ñ2Gó ð"¨.ð "¸TÀ*Ñ=Mó "óH
Có
ó
ó
ñ H¨T¡Nð ¸dô rD   r¢   )DrY   rq   r=   Úior   Útypingr   r   r   r   r   r	   Ú	lz4.framerI   ÚHAVE_LZ4ÚImportErrorÚ	zstandardr:   Ú	HAVE_ZSTDÚerrorsr   r   r   r   ru  r   r   r   r   r   r   Úhelpersr   r   r   Úprotobufr   r   r   r   r   rë   r   Ú	statementr   r   r    r!   r"   r#   r$   r%   r&   r'   Útypesr(   r)   r*   r+   r,   r-   r.   r/   r�   r1   r^   rŠ   r¢   r\   rD   rB   ú<module>r«     så   ðñ: :ã Û å ß :× :ðÛà€HðÛà€I÷ó ÷÷ ÷ 7Ý ÷õ õ ÷÷ ÷ ÷	÷ 	ó 	ð Ð ÷Añ A÷HaHñ aH÷H:Hñ :H÷z@ò @øðC	 ò Ø‚Hðûð ò Ø‚Iðús"   ¢C ©C ÃCÃCÃCÃC