zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
U
¤ý°d §ã@s¨dZddlZddlZddlmZddlmZmZmZm    Z    m
Z
m Z zddl Z dZWnek
rhdZYnXzddlZdZWnek
r’dZYnXddlmZmZmZmZdd    lmZmZmZmZmZmZdd
lm Z m!Z!dd l"m"Z"dd l#m$Z$m%Z%m&Z&m'Z'm(Z(dd l)m*Z*ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>dZ?Gdd„dƒZ@Gdd„dƒZAGdd„dƒZBGdd„dƒZCdS)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@s@eZdZdZeddœdd„Zeedœdd„Zeedœd    d
„Z    dS) Ú
CompressorzËImplements compression/decompression using `zstd_stream`, `lz4_message`
    and `deflate_stream` algorithms.
 
    Args:
        algorithm (str): Compression algorithm.
 
    .. versionadded:: 8.0.21
 
    N©Ú    algorithmÚreturncCsP||_d|_d|_|dkr0t ¡|_t ¡|_n|dkrLt ¡|_t ¡|_dS)NÚ zstd_streamZdeflate_stream)    Ú
_algorithmÚ _compressobjÚ_decompressobjÚzstdZZstdCompressorZZstdDecompressorÚzlibÚ compressobjÚ decompressobj©Úselfr1©r=úFd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\mysqlx/protocol.pyÚ__init__ps
 
zCompressor.__init__)Údatar2c    Cs~|jdkr|j |¡S|jdkr\tj ¡(}| ¡}|| |¡7}|| ¡7}W5QRX|S|j |¡}||j tj    ¡7}|S)z´Compresses data and returns it.
 
        Args:
            data (str, bytes or buffer object): Data to be compressed.
 
        Returns:
            bytes: Compressed data.
        r3Ú lz4_message)
r4r5ÚcompressÚlz4ÚframeZLZ4FrameCompressorÚbeginÚflushr8Ú Z_SYNC_FLUSH)r<r@Z
compressorÚ
compressedr=r=r>rB|s    
 
  zCompressor.compressc    Csf|jdkr|j |¡S|jdkrDtj ¡}| |¡}W5QRX|S|j |¡}||j tj¡7}|S)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.
        r3rA)    r4r6Ú
decompressrCrDZLZ4FrameDecompressorrFr8rG)r<r@Z decompressorÚ decompressedr=r=r>rI“s    
 
  zCompressor.decompress)
Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ústrr?r.ÚbytesrBrIr=r=r=r>r/es
 r/c@s\eZdZdZeddœdd„Zedœdd„Zedœd    d
„Zedd œd d „Z    e
ddœdd„Z dS)Ú MessageReaderz™Implements a Message Reader.
 
    Args:
        socket_stream (mysqlx.connection.SocketStream): `SocketStream` object.
 
    .. versionadded:: 8.0.21
    N©Ú socket_streamr2cCs||_d|_d|_g|_dS©N)Ú_streamÚ _compressorÚ_msgÚ
_msg_queue©r<rSr=r=r>r?²szMessageReader.__init__©r2c Cs|jr|j d¡St d|j d¡¡\}}|dkr:tdƒ‚|j |d¡}|tkr`td|›ƒ‚|dkrx|d    krx|     ¡St
  ||¡}|d
kr|d }t |j  |d ¡ƒ}d}||krüt d| d¡¡\}}    | |d¡}
|j t
  |    |
¡¡||d 7}q®|jr|j d¡SdS|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    zUnknown message type: é óéÚuncompressed_sizeÚpayloadéN)rXÚpopÚstructÚunpackrUÚreadr rÚ
ValueErrorÚ _read_messagerZfrom_server_messagerrVrIÚappend) r<Ú
frame_sizeZ
frame_typeZ frame_payloadZ    frame_msgraÚstreamZbytes_processedZ payload_sizeÚmsg_typerbr=r=r>ri¸s0  ÿ 
zMessageReader._read_messagecCs"|jdk    r|j}d|_|S| ¡S)zgRead message.
 
        Returns:
            mysqlx.protobuf.Message: MySQL X Protobuf Message.
        N)rWri©r<Úmsgr=r=r>Ú read_messageçs
 
zMessageReader.read_message)ror2cCs|jdk    rtdƒ‚||_dS)zÇPush message.
 
        Args:
            msg (mysqlx.protobuf.Message): MySQL X Protobuf Message.
 
        Raises:
            :class:`mysqlx.OperationalError`: If message push slot is full.
        NzMessage push slot is full)rWr rnr=r=r>Ú push_messageós    
zMessageReader.push_messager0cCs|r t|ƒnd|_dS)zÏCreates a :class:`mysqlx.protocol.Compressor` object based on the
        compression algorithm.
 
        Args:
            algorithm (str): Compression algorithm.
 
        .. versionadded:: 8.0.21
 
        N©r/rVr;r=r=r>Úset_compressions
zMessageReader.set_compression) rKrLrMrNr,r?r(rirprqrOrsr=r=r=r>rQ©s /  rQc@sBeZdZdZeddœdd„Zeeddœdd„Ze    dd    œd
d „Z
dS) Ú MessageWriterzšImplements a Message Writer.
 
    Args:
        socket_stream (mysqlx.connection.SocketStream): `SocketStream` object.
 
    .. versionadded:: 8.0.21
 
    NrRcCs||_d|_dSrT)rUrVrYr=r=r>r?szMessageWriter.__init__©rmror2c Cs | |¡}|jrÔ|tkrÔt| ¡ƒ}t d|d|¡}|j d ||g¡¡}t    dƒ}||d<|d|d<t    dƒ}||d<d t| 
¡ƒd    d
…t| 
¡ƒg¡}    t d ƒ}
t dt |    ƒd|
¡}|j  d ||    g¡¡n4t| ¡ƒ}t d|d|¡}|j  d ||g¡¡d    S) z™Write message.
 
        Args:
            msg_type (int): The message type.
            msg (mysqlx.protobuf.Message): MySQL X Protobuf Message.
        r[r    r_zMysqlx.Connection.CompressionZclient_messagesr\rarbNéþÿÿÿz&Mysqlx.ClientMessages.Type.COMPRESSION)Z    byte_sizerVÚ_COMPRESSION_THRESHOLDrZserialize_to_stringreÚpackrBÚjoinrZserialize_partial_to_stringrÚlenrUÚsendall) r<rmroZmsg_sizeZmsg_strÚheaderrHZmsg_first_fieldsZ msg_payloadÚoutputZ msg_comp_idr=r=r>Ú write_messages.
   ÿ
üÿ     zMessageWriter.write_messager0cCs|r t|ƒnd|_dS)z¬Creates a :class:`mysqlx.protocol.Compressor` object based on the
        compression algorithm.
 
        Args:
            algorithm (str): Compression algorithm.
        Nrrr;r=r=r>rs@szMessageWriter.set_compression) rKrLrMrNr,r?Úintr(r~rOrsr=r=r=r>rt s    %rtc    @sæeZdZdZeeddœdd„Zeee    dœdd„ƒZ
e e e dd    œd
d „ƒZeee d œd d„ZdUee efeeedeeeeffdœdd„Ze eddœdd„Zeee dœdd„Ze    ddœdd„Ze dœdd„Zeddœdd „ZdVe    ee    ee    dd!œd"d#„Zedœd$d%„Z e    dd&œd'd(„Z!ddœd)d*„Z"e    e ee#e$e%e&e'e(fdd+œd,d-„Z)e    e e dd+œd.d/„Z*e+dd0œd1d2„Z,e    e ee efdd+œd3d4„Z-e    e dd5œd6d7„Z.ee#e&fe/e    e fd8œd9d:„Z0ee%e(fe/e    e fd8œd;d<„Z1ee$e'fe/e    e fd8œd=d>„Z2dWe    ee    e3fee4e    efe/e    e fd?œd@dA„Z5e ee6e7fe/e    e fd8œdBdC„ƒZ8eddœdDdE„Z9eee dœdFdG„Z:eee;dœdHdI„Z<ddœdJdK„Z=ddœdLdM„Z>ddœdNdO„Z?ddœdPdQ„Z@dXeeedRœdSdT„ZAdS)YÚ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
    N)ÚreaderÚwriterr2cCs||_||_d|_g|_dSrT)Ú_readerÚ_writerÚ_compression_algorithmÚ    _warnings)r<rr‚r=r=r>r?TszProtocol.__init__rZcCs|jS)zstr: The compresion algorithm.)r…)r<r=r=r>Úcompression_algorithmZszProtocol.compression_algorithm)roÚstmtr2cCsX|jr| ¡|d<|jr*|d | ¡¡|jrB|d | ¡¡|jrT| ¡|d<dS)z­Apply filter.
 
        Args:
            msg (mysqlx.protobuf.Message): The MySQL X Protobuf Message.
            stmt (Statement): A `Statement` based type object.
        ZcriteriaÚorderÚgroupingZgrouping_criteriaN)    Z    has_whereZget_where_exprZhas_sortÚextendZ get_sort_exprZ has_group_byZ get_groupingZ
has_havingZ
get_having)rorˆr=r=r>Ú _apply_filter_s zProtocol._apply_filter)Úargr2cCsöt|tƒr2td|d}tdd|d}tdd|dSt|tƒrNtddt|ƒdSt|tƒr„|d    krrtddt|ƒdStddt|ƒdSt|tƒrÖt    |ƒd
krÖ|\}}td || 
|¡d }td |  ¡gd}tdd
|dSt|t ƒst|t tfƒr’t|d    t ƒr’g}|D]h}    g}
|     ¡D],\} }td | | 
|¡d }|
 |  ¡¡qtd |
d} tdd
| d} | |   ¡¡q
tdƒ}||d<tdd|dSt|t ƒròg}
|D],\} }td | | 
|¡d }|
 |  ¡¡q¦td |
d} tdd
| d} | SdS)z Create any.
 
        Args:
            arg (object): Arbitrary object.
 
        Returns:
            mysqlx.protobuf.Message: MySQL X Protobuf Message.
        zMysqlx.Datatypes.Scalar.String©ÚvaluezMysqlx.Datatypes.Scalaré)ÚtypeZv_stringúMysqlx.Datatypes.Anyr    )r‘Úscalarréú#Mysqlx.Datatypes.Object.ObjectField©ÚkeyrúMysqlx.Datatypes.Object©Zfld©r‘ÚobjzMysqlx.Datatypes.Arrayré)r‘ÚarrayN)Ú
isinstancerOrÚboolrrrrÚtuplerzÚ _create_anyÚ get_messageÚdictÚlistÚitemsrj)r<rrr“Zarg_keyÚ    arg_valueÚobj_fldr›Z array_valuesr¥Úobj_fldsr—Úmsg_objÚmsg_anyror=r=r>r¡ps‚    
 
ÿ
ýýý  ÿ ÿý   ý zProtocol._create_anyT)rˆÚ    is_scalarr2c
s®ttttfdœ‡‡fdd„ ‰| ¡}| ¡}|dkrH‡fdd„|DƒSt|ƒ}|dg}|t|ƒkrntdƒ‚| ¡D]2\}}||kr”td|›ƒ‚||}    ˆ|ƒ||    <qv|S)    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r2csˆrt|ƒ ¡Sˆ |¡ ¡SrT)rr¢r¡rŽ)r«r<r=r>Ú build_valueËs z/Protocol._get_binding_args.<locals>.build_valueNcsg|] }ˆ|ƒ‘qSr=r=©Ú.0r)r¬r=r>Ú
<listcomp>×sz.Protocol._get_binding_args.<locals>.<listcomp>z;The number of bind parameters and placeholders do not matchz*Unable to find placeholder for parameter: )    rrr*r)Ú get_bindingsZget_binding_maprzr r¥)
r<rˆr«ZbindingsZ binding_mapÚcountÚargsÚnamerÚposr=)r¬r«r<r>Ú_get_binding_argsºs*
þ
 ÿÿzProtocol._get_binding_args)roÚresultr2cCs(|ddkrRt d|d¡}|j |j¡t d|j|j¡| |j    |j|j¡nÒ|ddkrpt d|d¡n´|ddkr$t d    |d¡}|d
t
d ƒkr¸|  d d „|dDƒ¡nlt |dt tƒƒrÖ|ddn|d}|d
t
dƒkr| t|dƒ¡n"|d
t
dƒkr$| t|dƒ¡dS)z¨Process frame.
 
        Args:
            msg (mysqlx.protobuf.Message): A MySQL X Protobuf Message.
            result (Result): A `Result` based type object.
        r‘r    zMysqlx.Notice.Warningrbz:Protocol.process_frame Received Warning Notice code %s: %sr”z$Mysqlx.Notice.SessionVariableChangedrœz!Mysqlx.Notice.SessionStateChangedÚparamzBMysqlx.Notice.SessionStateChanged.Parameter.GENERATED_DOCUMENT_IDScSs g|]}tt|dƒdƒ ¡‘qS)Zv_octetsr)rÚdecoder­r=r=r>r¯s
ýÿz+Protocol._process_frame.<locals>.<listcomp>rrz9Mysqlx.Notice.SessionStateChanged.Parameter.ROWS_AFFECTEDZv_unsigned_intz?Mysqlx.Notice.SessionStateChanged.Parameter.GENERATED_INSERT_IDN)rZ from_messager†rjrorÚwarningÚcodeZappend_warningÚlevelrZset_generated_idsržr rZset_rows_affectedrZset_generated_insert_id)r<ror¶Zwarn_msgZsess_state_msgZsess_state_valuer=r=r>Ú_process_frameèsV ý ÿÿüÿ ÿÿûÿÿÿÿzProtocol._process_frame)r¶r2c
Cs z|j ¡}WnFtk
rT}z(t| ¡ƒ}|rDt|›d|›ƒ|‚W5d}~XYnX|jdkrrt|d|dƒ‚|jdkr¬z| ||¡Wntt    fk
r¨YqYnXq|jdkrºdS|jdkrÐ| 
d    ¡q|jd
kræ|  d    ¡q|jd kr|  d    ¡qqqq|S) z`Read message.
 
        Args:
            result (Result): A `Result` based type object.
        z     reason: Nú Mysqlx.ErrorrorºúMysqlx.Notice.FramezMysqlx.Sql.StmtExecuteOkzMysqlx.Resultset.FetchDoneTz(Mysqlx.Resultset.FetchDoneMoreResultsetsúMysqlx.Resultset.Row) rƒrpÚ RuntimeErrorÚreprZ get_warningsr‘r r¼ÚAttributeErrorÚKeyErrorZ
set_closedZset_has_more_resultsZ set_has_data)r<r¶roÚerrÚwarningsr=r=r>ris0 &
 
 
 
 
 
zProtocol._read_messager0cCs"||_|j |¡|j |¡dS)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ƒrsr„r;r=r=r>rs?s
 zProtocol.set_compressioncCsZtdƒ}|j tdƒ|¡|j ¡}|jdkr:|j ¡}q$|jdkrVt|d|dƒ‚|S)zkGet capabilities.
 
        Returns:
            mysqlx.protobuf.Message: MySQL X Protobuf Message.
        z!Mysqlx.Connection.CapabilitiesGetz/Mysqlx.ClientMessages.Type.CON_CAPABILITIES_GETr¾r½rorº)rr„r~rrƒrpr‘r rnr=r=r>Úget_capabilitesMsþ
 
 
zProtocol.get_capabilites)Úkwargsr2c
Ks"|sdStdƒ}| ¡D]¤\}}tdƒ}||d<t|tƒrš|}g}|D]*}td|| ||¡d}    | |     ¡¡qFtd|d}
td    d
|
d } |  ¡|d <n| |¡|d <|d  | ¡g¡qtdƒ} || d <|j     t
dƒ| ¡z
|  ¡WSt k
r} z| j dkr ‚W5d} ~ XYnXdS)z­Set capabilities.
 
        Args:
            **kwargs: Arbitrary keyword arguments.
 
        Returns:
            mysqlx.protobuf.Message: MySQL X Protobuf Message.
        NzMysqlx.Connection.CapabilitieszMysqlx.Connection.Capabilityr³r•r–r˜r™r’r”ršrÚ capabilitiesz!Mysqlx.Connection.CapabilitiesSetz/Mysqlx.ClientMessages.Type.CON_CAPABILITIES_SETiŠ)rr¥ržr£r¡rjr¢r‹r„r~rÚread_okr
Úerrno)r<rÇrÈr—rZ
capabilityr¥r¨Úitemr§r©rªrorÄr=r=r>Úset_capabilitiesasB    
 ý þ
 zProtocol.set_capabilities)ÚmethodÚ    auth_dataÚinitial_responser2cCsFtdƒ}||d<|dk    r ||d<|dk    r0||d<|j tdƒ|¡dS)zÖSend authenticate start.
 
        Args:
            method (str): Message method.
            auth_data (Optional[str]): Authentication data.
            initial_response (Optional[str]): Initial response.
        z Mysqlx.Session.AuthenticateStartZ    mech_nameNrÎrÏz2Mysqlx.ClientMessages.Type.SESS_AUTHENTICATE_START©rr„r~r)r<rÍrÎrÏror=r=r>Úsend_auth_start‘s þzProtocol.send_auth_startcCs:|j ¡}|jdkr |j ¡}q
|jdkr2tdƒ‚|dS)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ƒrpr‘r
rnr=r=r>Úread_auth_continue©s
 
 
 
ÿzProtocol.read_auth_continue)rÎr2cCs"td|d}|j tdƒ|¡dS)zeSend authenticate continue.
 
        Args:
            auth_data (str): Authentication data.
        rÒ)rÎz5Mysqlx.ClientMessages.Type.SESS_AUTHENTICATE_CONTINUENrÐ)r<rÎror=r=r>Úsend_auth_continue¼s
 þzProtocol.send_auth_continuecCs0|j ¡}|jdkrq,|jdkrt|jƒ‚qdS)z~Read authenticate OK.
 
        Raises:
            :class:`mysqlx.InterfaceError`: If message type is `Mysqlx.Error`.
        zMysqlx.Session.AuthenticateOkr½N)rƒrpr‘r
rornr=r=r>Ú read_auth_okÈs
 
 
 
zProtocol.read_auth_ok)rmrorˆr2c
CsR|jrÂ|jdkrÂ|jdkr*| |¡\}}nB|jdkrD| |¡\}}n(|jdkr^| |¡\}}ntd|›ƒ‚t| ¡ƒ}tdƒ}t    dƒ}t    d||d    |d
<|jdkrºt    d||d d    |d <||d <t
|\}}    t    dƒ}
t|ƒ|
d<||
|    <t    dƒ} |j | d<|
| d<|j   tdƒ| ¡z | ¡Wn*tk
rL} z
t| ‚W5d} ~ XYnXdS)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.DeletezInvalid message type: z!Mysqlx.Expr.Expr.Type.PLACEHOLDERzMysqlx.Crud.LimitExprzMysqlx.Expr.Expr)r‘ÚpositionÚ    row_countr    ÚoffsetZ
limit_exprú#Mysqlx.Prepare.Prepare.OneOfMessager‘zMysqlx.Prepare.PrepareÚstmt_idrˆz*Mysqlx.ClientMessages.Type.PREPARE_PREPAREN)Ú    has_limitr‘Ú
build_findÚ build_updateÚ build_deleterhrzr°rrrrßr„r~rÉr
r ) r<rmrorˆÚ_rÛÚ placeholderZmsg_limit_exprÚ
oneof_typeÚoneof_opÚ    msg_oneofZ msg_preparerÄr=r=r>Úsend_prepare_prepareÕsL
 
 
 ÿ
 
ÿ
 
þ zProtocol.send_prepare_preparec    Cs¤t|\}}tdƒ}t|ƒ|d<|||<tdƒ}|j|d<|j|dd}|rZ|d |¡|jrŽ|d | | ¡¡     ¡| | 
¡¡     ¡g¡|j   tdƒ|¡d    S)
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‘zMysqlx.Prepare.ExecuterßF©r«r²z*Mysqlx.ClientMessages.Type.PREPARE_EXECUTEN) rrrrßrµr‹ràr¡Úget_limit_row_countr¢Úget_limit_offsetr„r~)    r<rmrorˆrærçrèZ msg_executer²r=r=r>Úsend_prepare_executes&  
þÿþzProtocol.send_prepare_execute)rßr2cCs.tdƒ}||d<|j tdƒ|¡| ¡dS)zŽ
        Send prepare deallocate statement.
 
        Args:
            stmt_id (int): Statement ID.
 
        .. versionadded:: 8.0.16
        zMysqlx.Prepare.Deallocaterßz-Mysqlx.ClientMessages.Type.PREPARE_DEALLOCATEN)rr„r~rrÉ)r<rßZ msg_deallocr=r=r>Úsend_prepare_deallocate>s    þz Protocol.send_prepare_deallocatecCsp|jr8tdƒ}| ¡|d<|jdkr0| ¡|d<||d<|dk}|j||d}|r`|d |¡| ||¡d    S)
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
        zMysqlx.Crud.LimitrÜrØrÝÚlimitú+Mysqlx.ClientMessages.Type.SQL_STMT_EXECUTErêr²N)ràrrër‘rìrµr‹Úsend_msg)r<rmrorˆZ    msg_limitr«r²r=r=r>Úsend_msg_without_psOs 
 zProtocol.send_msg_without_psrucCs|j t|ƒ|¡dS)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)r<rmror=r=r>rñks
zProtocol.send_msg)rˆr2cCs t| ¡rdndƒ}td|jj|jjd}td||d}|jrJ| ¡|d<| ||¡|     ¡rltdƒ|d    <n| 
¡r€td
ƒ|d    <|j j d kr˜|j j |d <d |fS)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_LOCKrZlocking_optionsz$Mysqlx.ClientMessages.Type.CRUD_FIND) rÚ is_doc_basedrÚtargetr³r÷Zhas_projectionZget_projection_exprrŒZis_lock_exclusiveZis_lock_sharedZlock_contentionr©r<rˆrùrúror=r=r>ráws*ÿýý     zProtocol.build_findcCsªt| ¡rdndƒ}td|jj|jjd}td||d}| ||¡| ¡ ¡D]P\}}tdƒ}|j    |d<|j
|d    <|j d
k    rŒt |j ƒ|d <|d  | ¡g¡qPd |fS) 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
        rórôrõrörÙrøzMysqlx.Crud.UpdateOperationÚ    operationÚsourceNrz&Mysqlx.ClientMessages.Type.CRUD_UPDATE)rrýrrþr³r÷rŒZget_update_opsr¥Z update_typerrrr‹r¢)r<rˆrùrúroräZ    update_oprr=r=r>râ¡s0ÿýýÿ 
 
 
zProtocol.build_updatecCsLt| ¡rdndƒ}td|jj|jjd}td||d}| ||¡d|fS)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
        rórôrõrörÚrøz&Mysqlx.ClientMessages.Type.CRUD_DELETE)rrýrrþr³r÷rŒrÿr=r=r>rãÊs"ÿýýÿ zProtocol.build_delete)Ú    namespacerˆÚfieldsr2c Cs|td||dd}|rtg}| ¡D]*\}}td|| |¡d}| | ¡¡q td|d}    tdd    |    d
}
|
 ¡g|d <d |fS) 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
        zMysqlx.Sql.StmtExecuteF)rrˆZcompact_metadatar•r–r˜r™r’r”ršr²rð)rr¥r¡rjr¢) r<rrˆrror¨r—rr§r©rªr=r=r>Úbuild_execute_statementës&üý z Protocol.build_execute_statementc    Cst| ¡rdndƒ}td|jj|jjd}td||d}t|dƒrv|jD],}t|| ¡ ƒ     ¡}|d 
|  ¡g¡qH|  ¡D]f}td    ƒ}t |tƒr¸|D]}|d
t|ƒ  ¡g¡q˜n|d
t|ƒ  ¡g¡|d  
|  ¡g¡q~t|d ƒrü| ¡|d <d|fS)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
        rórôrõrör×røÚ_fieldsrûzMysqlx.Crud.Insert.TypedRowÚfieldÚrowÚ    is_upsertZupsertz&Mysqlx.ClientMessages.Type.CRUD_INSERT)rrýrrþr³r÷ÚhasattrrrZparse_table_insert_fieldr‹r¢Z
get_valuesržr¤rr)    rˆrùrúrorÚexprrrÚvalr=r=r>Ú build_inserts@ÿýýÿ
 
ÿ 
 
 zProtocol.build_insertcCs| |¡}|dk    rtdƒ‚dS)z¼Close the result.
 
        Args:
            result (Result): A `Result` based type object.
 
        Raises:
            :class:`mysqlx.OperationalError`: If message read is None.
        NzExpected to close the result)rir ©r<r¶ror=r=r>Ú close_resultJs    
zProtocol.close_resultcCs4| |¡}|dkrdS|jdkr$|S|j |¡dS)z\Read row.
 
        Args:
            result (Result): A `Result` based type object.
        Nr¿)rir‘rƒrqr r=r=r>Úread_rowWs
 
 zProtocol.read_rowcCs²g}| |¡}|dkrq®|jdkr0|j |¡q®|jdkrBtdƒ‚t|d|d|d|d|d    |d
|d | d d ¡| dd¡| dd¡| dd¡| d¡ƒ }| |¡q|S)z¿Returns column metadata.
 
        Args:
            result (Result): A `Result` based type object.
 
        Raises:
            :class:`mysqlx.InterfaceError`: If unexpected message.
        Nr¿zMysqlx.Resultset.ColumnMetaDatazUnexpected msg typer‘Úcatalogr÷ÚtableZoriginal_tabler³Ú original_nameÚlengthéZ    collationrZfractional_digitsÚflagséÚ content_type)rir‘rƒrqr
rÚgetrj)r<r¶ÚcolumnsroÚcolr=r=r>Úget_column_metadataes2    
 
 
 
 
 
 
ô zProtocol.get_column_metadatacCsD|j ¡}|jdkr.td|d›|dd‚|jdkr@tdƒ‚dS)    zeRead OK.
 
        Raises:
            :class:`mysqlx.InterfaceError`: If unexpected message.
        r½zMysqlx.Error: rorº)rÊz    Mysqlx.OkzUnexpected message encounteredNrÓrnr=r=r>rɉs
 
 
 
zProtocol.read_okcCstdƒ}|j tdƒ|¡dS)zSend connection close.zMysqlx.Connection.Closez$Mysqlx.ClientMessages.Type.CON_CLOSENrÐrnr=r=r>Úsend_connection_close•s
ÿzProtocol.send_connection_closecCstdƒ}|j tdƒ|¡dS)z Send close.zMysqlx.Session.Closez%Mysqlx.ClientMessages.Type.SESS_CLOSENrÐrnr=r=r>Ú
send_closeœs
ÿzProtocol.send_closecCsLtdƒ}tdƒ}||d<d|d<tdƒ}| ¡g|d<|j tdƒ|¡d    S)
zSend expectation.z3Mysqlx.Expect.Open.Condition.Key.EXPECT_FIELD_EXISTzMysqlx.Expect.Open.ConditionZ condition_keyz6.1Zcondition_valuezMysqlx.Expect.OpenZcondz&Mysqlx.ClientMessages.Type.EXPECT_OPENN)rrr¢r„r~)r<Zcond_keyZmsg_ocZmsg_eor=r=r>Úsend_expect_open£sÿzProtocol.send_expect_open)Ú    keep_openr2cCsttdƒ}|dkrBz| ¡| ¡d}Wntk
r@d}YnX|rNd|d<|j tdƒ|¡| ¡|rpdSdS)z¨Send reset session message.
 
        Returns:
            boolean: ``True`` if the server will keep the session open,
                     otherwise ``False``.
        zMysqlx.Session.ResetNTFrz%Mysqlx.ClientMessages.Type.SESS_RESET)rrrÉr
r„r~r)r<rror=r=r>Ú
send_reset±s$
ÿzProtocol.send_reset)T)NN)N)N)BrKrLrMrNrQrtr?ÚpropertyrrOr‡Ú staticmethodr(rrŒrr¡rr%rŸrr*r)rµr+r¼rirsrÆrÌrÑrPrÔrÕrÖr rr"r#r$r&rérírrîròrñrrárârãr-rrrr!r rrr'rrÉrrrr r=r=r=r>r€Js¤    Kÿ
þ .6!3üû  ûÿô Eþ %
û 
 
þ +
 
þ *
 
þ %ü
 
û *
 
þ4 $ r€)DrNrer8ÚiorÚtypingrrrrrrZ    lz4.framerCZHAVE_LZ4Ú ImportErrorZ    zstandardr7Z    HAVE_ZSTDÚerrorsr
r r r r
rrrrrrZhelpersrrrZprotobufrrrrrr¶rZ    statementrrrr r!r"r#r$r%r&Útypesr'r(r)r*r+r,r-r.rwr/rQrtr€r=r=r=r>Ú<module>s6  
 
   0 ( Dd=