hyb
2025-11-18 7539e6f48c75dcaeb808359cccfd1c0d0d182ce8
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
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
Ë
Wñúh@Óã    óŽ—dZddlmZddlZddlZddlZddlmZmZddl    m
Z
m    Z    m Z m Z ddl mZddlmZddl mZdd    lmZdd
lmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%d Z&    ddl'Z'e(e'd «re'jRrd Z&ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5ddl6m7Z7m8Z8ddl9m:Z:m;Z;m<Z<m=Z=m>Z>ddl?m@Z@mAZAmBZBmCZCeCr ddlDmEZEmFZFmGZGmHZHddlImJZJddlKmLZLddlMmNZNmOZOddlmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZddl[m\Z\m]Z]dZ^dZ_dZ`dZadZbdZceede
e    eeefege e f    ZhGd„d e\«ZiGd!„d"e«ZjGd#„d$e«Zky#e*$rYŒ¾wxYw)%z+Module gathering all abstract base classes.é)Ú annotationsN)ÚABCÚabstractmethod)ÚdateÚdatetimeÚtimeÚ    timedelta)ÚDecimal)Ú    signature)Úsleep)Ú TracebackType)ÚAnyÚBinaryIOÚCallableÚClassVarÚDequeÚDictÚ    GeneratorÚIteratorÚListÚMappingÚNoReturnÚOptionalÚSequenceÚTupleÚTypeÚUnionÚcastFÚ HAS_TLSv1_3Té)
Ú CONN_ATTRS_DNÚDEFAULT_CONFIGURATIONÚDEPRECATED_METHOD_WARNINGÚMYSQL_DEFAULT_CHARSET_ID_57ÚMYSQL_DEFAULT_CHARSET_ID_80ÚOPENSSL_CS_NAMESÚTLS_CIPHER_SUITESÚ TLS_VERSIONSÚ CharacterSetÚ
ClientFlag)ÚMySQLConverterÚMySQLConverterBase)Ú DatabaseErrorÚErrorÚInterfaceErrorÚNotSupportedErrorÚProgrammingError)ÚCONNECTION_SPAN_NAMEÚOPTION_CNX_SPANÚOPTION_CNX_TRACERÚ OTEL_ENABLED)Úend_spanÚrecord_exception_eventÚset_connection_span_attrsÚtrace)Ú
deprecated)Úread_option_files)ÚUNACCEPTABLE_TLS_CIPHERSUITESÚUNACCEPTABLE_TLS_VERSIONS) ÚBinaryProtocolTypeÚCextEofPacketTypeÚDescriptionTypeÚ EofPacketTypeÚ HandShakeTypeÚMySQLConvertibleTypeÚMySQLScriptPartitionÚ RowItemTypeÚRowTypeÚ
StrOrBytesÚ WarningType)ÚGenericWrapperÚ import_objectzVThe '{list}' list must not contain repeated values, the value '{value}' is duplicated.zdThe given tls_version: '{}' is not recognized as a valid TLS protocol version (should be one of {}).zHThe given tls_version: '{}' are no longer allowed (should be one of {}).zINo supported TLS protocol version found in the 'tls-versions' list '{}'. aOption "krb_service_principal" {error}, must be a string in the form "primary/instance@realm" e.g "ldap/ldapauth@MYSQL.COM" where "@realm" is optional and if it is not given will be assumed to belong to the default realm, as configured in the krb5.conf file.z`Option "openid_token_file" {error}, it must be a string in the form "path/to/openid/token/file".có—eZdZdZy)ÚCMySQLPrepStmtaPStructure to represent a result from `CMySQLConnection.cmd_stmt_prepare`.
    It can be used consistently as a type hint.
 
    `_mysql_connector.MySQLPrepStmt` isn't available when the C-ext isn't built.
 
    In this regard, `CmdStmtPrepareResult` acts as a proxy/wrapper entity for a
    `_mysql_connector.MySQLPrepStmt` instance.
    N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__©óúLH:\Change_password\venv_build\Lib\site-packages\mysql/connector/abstracts.pyrLrL«s„òrRrLcóh
—eZdZUdZdqd„Zdrd„Z                                dsd„Zdrd„Zedtd„«Z    edtd„«Z
edud„«Z dvd    „Z dwd
„Z dqd „Zdqd „Zdqd „Zedxd„«Zedxd„«Zedyd„«Zedzd„«Zeedxd„««Zej.d{d„«Zedtd„«Zej.d|d„«Zed}d„«Zej.d~d„«Zdd„Zdqd„Ze    d€                            dd„«Zed‚d„«Zee jBd¬««dƒd„«Z"ee jBd¬««dzd „«Z#edƒd!„«Z$edzd"„«Z%eedtd#„««Z&ee jBd$¬««d„d%„«Z'edyd&„«Z(e(j.d…d'„«Z(d†d(„Z)d‡d)„Z*edxd*„«Z+e+j.d{d+„«Z+edxd,„«Z,e,j.dˆd-„«Z,ed‰d.„«Z-    dŠ                    d‹d0„Z.ee jBd1¬««dŒd|d2„«Z/edtd3„«Z0e0j.ed|d4„««Z0edtd5„«Z1e1j.d|d6„«Z1edtd7„«Z2e2j.d|d8„«Z2edtd9„«Z3e3j.d|d:„«Z3edtd;„«Z4e4j.d|d<„«Z4edxd=„«Z5edxd>„«Z6edyd?„«Z7edyd@„«Z8e8j.ddA„«Z8edxdB„«Z9    dŠ                    dŽdC„Z:eddD„«Z;e;j.ddE„«Z;eddF„«Z<e<j.ddG„«Z<eeddH„««Z=edqdI„«Z>edqdJ„«Z?dqdK„Z@edqdL„«ZAeAZBdMeCdN<ddO„ZDd‘d’dP„ZEedtdQ„«ZFed“d”dR„«ZGedqdS„«ZHe                            d•                                                            d–dT„«ZIed—dU„«ZJedqdV„«ZK            d˜                            d™dW„ZLe        dŠ                    dšdX„«ZMee jBdY¬««d›dZ„«ZNedœd[„«ZOeOj.d›d\„«ZOe                d                                            džd]„«ZPe                    dŸ                                                    d d^„«ZQed¡d_„«ZRe            d¢                                            d£d`„«ZSe                        d¤da„«ZTed¥db„«ZUed¦dc„«ZVed§d¨dd„«ZWed©de„«ZXed†df„«ZYedªdg„«ZZed©dh„«Z[ed©di„«Z\e                                        d«                                                                                    d¬dj„«Z]e                        d­dk„«Z^e            d®                                            d¯dl„«Z_e                        d°dm„«Z`e                                        d±dn„«Zae                        d°do„«Zbedtdp„«Zcy/)²ÚMySQLConnectionAbstractz8Abstract class for classes connecting to a MySQL server.có¼—d|_    d|_d|_d|_t    j
«|_d|_d|_d|_    d|_
d|_ i|_ d|_ d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_i|_t2d|_d|_d|_d|_d|_d|_d|_ d|_!d|_"d|_#t2d    |_$t2d
|_%t2d |_&d|_'d|_(d|_)d|_*d|_+t2d |_,t2d |_-d|_.i|_/d|_0d|_1d|_2d|_3d|_4d|_5d|_6d|_7d|_8d|_9tu«|_;d|_<    d|_=y)Ú
InitializeNTFÚz    127.0.0.1iê rÚ ssl_disabledÚconnect_timeoutÚ read_timeoutÚ write_timeoutÚallow_local_infileÚallow_local_infile_in_path)>Ú$_MySQLConnectionAbstract__charset_idÚ_tracerÚ_spanÚotel_context_propagationr*Ú get_defaultÚ _client_flagsÚ    _sql_modeÚ
_time_zoneÚ _autocommitÚ_server_versionÚ
_handshakeÚ _conn_attrsÚ_userÚ    _passwordÚ
_password1Ú
_password2Ú
_password3Ú    _databaseÚ_hostÚ_portÚ _unix_socketÚ _client_hostÚ _client_portÚ_sslr"Ú _ssl_disabledÚ _force_ipv6Ú_oci_config_fileÚ_oci_config_profileÚ_webauthn_callbackÚ_krb_service_principalÚ_openid_token_fileÚ _use_unicodeÚ _get_warningsÚ_raise_on_warningsÚ_connection_timeoutÚ _read_timeoutÚ_write_timeoutÚ    _bufferedÚ_unread_resultÚ_have_next_resultÚ_rawÚ_in_transactionÚ_allow_local_infileÚ_allow_local_infile_in_pathÚ_prepared_statementsÚ _query_attrsÚ _ssl_activeÚ _auth_pluginÚ_auth_plugin_classÚ_pool_config_versionÚ    converterÚ_converter_classÚ_converter_str_fallbackÚ    _compressÚ_consume_resultsÚ _init_commandr)Ú_character_setÚ_local_infile_filenamesÚ_query©Úselfs rSÚ__init__z MySQLConnectionAbstract.__init__¹s€ð,0ˆÔð     ð!ˆŒ ؈Œ
Ø.2ˆÔ%ä",×"8Ñ"8Ó":ˆÔØ(,ˆŒØ)-ˆŒØ!&ˆÔØ:>ˆÔØ37ˆŒØ+-ˆÔàˆŒ
Ø ˆŒØ!ˆŒØ!ˆŒØ!ˆŒØ ˆŒØ%ˆŒ
؈Œ
Ø+/ˆÔØ!#ˆÔØ!"ˆÔØFHˆŒ    Ü#8¸Ñ#HˆÔØ!&ˆÔØ/3ˆÔØ26ˆÔ ØOSˆÔØ59ˆÔ#Ø15ˆÔà"&ˆÔØ#(ˆÔØ(-ˆÔÜ2GØ ñ3
ˆÔ ô-BÀ.Ñ,QˆÔÜ-BÀ?Ñ-SˆÔØ$ˆŒØ$)ˆÔØ',ˆÔ؈Œ    Ø%*ˆÔÜ)>Ð?SÑ)TˆÔ Ü:OØ (ñ;
ˆÔ(ð*.ˆÔ!Ø;=ˆÔà!&ˆÔØ+/ˆÔØ15ˆÔØ)-ˆÔ!Ø37ˆŒØ@DˆÔØ-2ˆÔ$Ø$ˆŒà&+ˆÔØ,0ˆÔÜ,8«NˆÔà=AˆÔ$ð    (ð(,ˆŒ Ø(rRcó—|S©NrQršs rSÚ    __enter__z!MySQLConnectionAbstract.__enter__ ó€Øˆ rRcó$—|j«yrž©Úclose©r›Úexc_typeÚ    exc_valueÚ    tracebacks    rSÚ__exit__z MySQLConnectionAbstract.__exit__ó €ð      
‰
 rRcó—|S)zŽReturns self for `weakref.proxy`.
 
        This method is used when the original object is needed when using
        `weakref.proxy`.
        rQršs rSÚget_selfz MySQLConnectionAbstract.get_selfs    €ð ˆ rRcód—|jxs#|jduxrtjdk(S)z)Returns `True` if is a secure connection.NÚposix)rrsÚosÚnameršs rSÚ    is_securez!MySQLConnectionAbstract.is_secure s3€ð×Ñò
Ø × Ñ  TÐ )Ò @¬b¯g©g¸Ñ.@ð    
rRcó—|jS)zReturns If have next result.)r†ršs rSÚhave_next_resultz(MySQLConnectionAbstract.have_next_result's€ð×%Ñ%Ð%rRcóH—t|jj««S)zReturns query attributes list.)ÚlistrŒÚitemsršs rSÚ query_attrsz#MySQLConnectionAbstract.query_attrs,s€ôD×%Ñ%×+Ñ+Ó-Ó.Ð.rRcóJ—|\}}||jvr||j|<yy)aAdds element to the query attributes list on the connector's side.
 
        If an element in the query attributes list already matches
        the attribute name provided, the new element will NOT be added.
 
        Args:
            value: key-value as a 2-tuple.
        N©rŒ)r›ÚvalueÚ    attr_nameÚ
attr_values    rSÚquery_attrs_appendz*MySQLConnectionAbstract.query_attrs_append1s1€ð!&ш    :Ø ˜D×-Ñ-Ñ -Ø+5ˆD× Ñ ˜iÒ (ð .rRcó:—|jj|d«S)z×Removes element by name from the query attributes list on the connector's side.
 
        If no match, `None` is returned, else the corresponding value is returned.
 
        Args:
            name: key name.
        N)rŒÚpop©r›r¯s  rSÚquery_attrs_removez*MySQLConnectionAbstract.query_attrs_remove>s€ð× Ñ ×$Ñ$ T¨4Ó0Ð0rRcó—i|_y)z5Clears query attributes list on the connector's side.Nr¸ršs rSÚquery_attrs_clearz)MySQLConnectionAbstract.query_attrs_clearHs
€àˆÕrRcóü—g}|jd}t|t«rŒ|jd«r|j    d«st d|›d«‚|ddj d«}|s t d    «‚|D]4}|j«j«}|sŒ$|j|«Œ6n8t|ttf«r|Dcgc]}|sŒ|‘Œ    }}nt d
|›d«‚|jjd d «€    td d n|jd d d }|jd ¬«|d}ggg}i}g}    td tj|«dzD]2}
|j!t"|
«|    j%t&|
«Œ4|D]µ} d| vr9| |    vr5| t&dvr|dj| «Œ+|dj| «Œ@| |vrd|| } | |vr t t(j+d| ¬««‚| t"dvr|dj|| «Œ|dj|| «Œ¨t d| ›d«‚|ds|ds t d«‚|dD]*} | t,dj/«vsŒt1d| ›d«‚|dD]*} | t,dj/«vsŒt1d| ›d«‚dj3|d«dj3|d«g|jd<y cc}w)z&Validates the tls_ciphersuites option.Útls_ciphersuitesú[ú]z)tls_ciphersuites must be a list, found: 'ú'r éÿÿÿÿú,z6No valid cipher suite found in 'tls_ciphersuites' listzItls_ciphersuites should be a list with one or more ciphersuites. Found: 'Ú tls_versionsNT)Úreverserú-úTLSv1.3©r´r¹z The value 'z1' in tls_ciphersuites is not a valid cipher suitez:No valid cipher suite found in the 'tls_ciphersuites' listzTLSv1.2zCipher z( when used with TLSv1.2 is unacceptable.z( when used with TLSv1.3 is unacceptable.ú:)rvÚ
isinstanceÚstrÚ
startswithÚendswithÚAttributeErrorÚsplitÚstripÚupperÚappendr´ÚsetÚgetr(ÚsortÚindexÚupdater'Úextendr&ÚDUPLICATED_IN_LIST_ERRORÚformatr<Úvaluesr0Újoin)r›rÄÚtls_csÚtls_cssÚ_tls_csrÊÚ newer_tls_verÚtranslated_namesÚiani_cipher_suites_namesÚossl_cipher_suites_namesÚtls_verr¯Útranslated_nameÚcipher_as_ossls              rSÚ_validate_tls_ciphersuitesz2MySQLConnectionAbstract._validate_tls_ciphersuitesLsš€àÐØ—‘Ð-Ñ.ˆä fœcÔ "Ø×%Ñ% cÔ*¨v¯©¸sÔ/CÜ$Ø?À¸xÀqÐIóðð˜Q˜rl×(Ñ(¨Ó-ˆGÙÜ$ØLóðð#ò 5Ø Ÿ,™,›.×.Ñ.Ó0ÚØ$×+Ñ+¨GÕ4ñ 5ô
˜¤¤s  Ô ,Ø5;ÖF¨6ºv¢ÐFÐ ÑFä ð)Ø)/¨°ð3óð ðy‰y}‰}˜^¨TÓ2Ð:ô ™‰Oà—‘˜>Ñ*©1Ð-ð    ð    ×Ñ $ÐÔ'Ø$ Q™ˆ ð.0°¨HÐØ#%РØ.0Рô$Ð$K¤l×&8Ñ&8¸Ó&GÈ!Ñ&KÐLò    GˆGØ $× +Ñ +Ô,=¸gÑ,FÔ GØ $× +Ñ +Ô,<¸WÑ,EÕ Fð    Gð%ò    ˆDؐd‰{˜tÐ'?Ñ?ØÔ+¨IÑ6Ñ6Ø$ QÑ'×.Ñ.¨tÕ4à$ QÑ'×.Ñ.¨tÕ4ØÐ1Ñ1Ø":¸4Ñ"@Ø"Ð&6Ñ6Ü(Ü0×7Ñ7Ø!3¸?ð8óóðð
Ô,¨YÑ7Ñ7Ø$ QÑ'×.Ñ.Ð/GÈÑ/MÕNà$ QÑ'×.Ñ.Ð/GÈÑ/MÕNä$Ø! $ ð(#ð#óðð'    ð.  Ò"Ð+;¸AÒ+>Ü ØLóð ð
/¨qÑ1ò    ˆNØÔ!>¸yÑ!I×!PÑ!PÓ!RÒRÜ'ؘnÐ-Ð-UÐVóðð    ð
/¨qÑ1ò    ˆNØÔ!>¸yÑ!I×!PÑ!PÓ!RÒRÜ'ؘnÐ-Ð-UÐVóðð    ð H‰HÐ% aÑ(Ó )Ø H‰HÐ% aÑ(Ó )ð)
ˆ    ‰    Ð$Ò%ùòK Gs ÃK9ÃK9cóô—g}|jd}t|t«rÆ|jd«r|j    d«st d|›d«‚|ddj d«}|D]M}|j«}|d    k(rŒ||vr t tjd|¬
««‚|j|«ŒO|d gk(rÑtsËt tj|t««‚t|t«rJ|s t d «‚|D]7}||vr t tjd|¬
««‚|j|«Œ9nNt|t«r|D]}|j|«Œn%t d dj!t«›d|›d«‚|s t d«‚g}g}g}|D]F}|tvr|j|«|t"vr|j|«Œ6|j|«ŒH|r?|d gk(r)ts#t%tj|t««‚||jd<y|r#t%t&j|t««‚|r#t t(jt««‚y)z"Validates the tls_versions option.rÊrÅrÆz%tls_versions must be a list, found: 'rÇr rÈrÉrXrÎrÍzJAt least one TLS protocol version must be specified in 'tls_versions' listz>tls_versions should be a list with one or more of versions in z, z
. found: 'zdAt least one TLS protocol version must be specified in 'tls_versions' list when this option is givenN)rvrÐrÑrÒrÓrÔrÕrÖrßràrØÚTLS_V1_3_SUPPORTEDÚTLS_VER_NO_SUPPORTEDr(r´rÙrâr=r0ÚTLS_VERSION_UNACCEPTABLE_ERRORÚTLS_VERSION_ERROR)r›rÊÚ tls_versionÚtls_versrêÚuse_tls_versionsÚunacceptable_tls_versionsÚinvalid_tls_versionss        rSÚ_validate_tls_versionsz.MySQLConnectionAbstract._validate_tls_versions«s¾€àˆ Ø—i‘i Ñ/ˆ ä k¤3Ô 'Ø×*Ñ*¨3Ô/°K×4HÑ4HÈÔ4MÜ$Ø;¸K¸=ÈÐJóðð# 1 RÐ(×.Ñ.¨sÓ3ˆHØ#ò
1Ø%Ÿm™m›o Ø "Ò$ØØ ,Ñ.Ü(Ü0×7Ñ7Ø!/°{ð8óóðð
×#Ñ# KÕ0ð
1ð˜I˜;Ò&Õ/AÜ$Ü(×/Ñ/° ¼\ÓJóðô˜ ¤TÔ *ÙÜ$ð*óðð'ò -Ø˜lÑ*Ü(Ü0×7Ñ7Ø!/°wð8óóðð
×#Ñ# GÕ,ñ -ô˜ ¤SÔ )Ø&ò -Ø×#Ñ# GÕ,ñ -ô!ðØ—i‘i¤ Ó-Ð.¨j¸¸ÀaðIóð ñ
Ü ðCóð ð
ÐØ$&Ð!Ø!ÐØ#ò    5ˆGØœ,Ñ&Ø ×'Ñ'¨Ô0ØÔ3Ñ3Ø)×0Ñ0°Õ9à$×+Ñ+¨GÕ4ð     5ñ Ø I ;Ò.Õ7IÜ'Ü(×/Ñ/° ¼\ÓJóðð)9ˆDI‰InÒ %Ù &Ü#Ü.×5Ñ5Ø-¬|óóð ñ
"Ü Ô!2×!9Ñ!9¸'Ä<Ó!PÓQÐ Qð"rRcó—|jS)z6The user name used for connecting to the MySQL server.)rkršs rSÚuserzMySQLConnectionAbstract.userüó€ðz‰zÐrRcó—|jS)z MySQL server IP address or name.)rqršs rSÚ server_hostz#MySQLConnectionAbstract.server_hostrûrRcó—|jS)zMySQL server TCP/IP port.)rrršs rSÚ server_portz#MySQLConnectionAbstract.server_portrûrRcó—|jS)z8The Unix socket file for connecting to the MySQL server.)rsršs rSÚ unix_socketz#MySQLConnectionAbstract.unix_socket ó€ðנѠРrRcó—y)zThe current database.NrQršs rSÚdatabasez MySQLConnectionAbstract.databaseórRcó,—|jd|›«y)zSets the current database.zUSE N)Ú    cmd_query©r›r¹s  rSrz MySQLConnectionAbstract.databases€ð     ‰˜˜e˜W~Õ&rRcó—|jS)z#Returns whether to consume results.)r•ršs rSÚcan_consume_resultsz+MySQLConnectionAbstract.can_consume_resultsó€ð×$Ñ$Ð$rRcó6—t|t«sJ‚||_y)zSets if can consume results.N)rÐÚboolr•rs  rSr
z+MySQLConnectionAbstract.can_consume_resultss€ô˜%¤Ô&Ð&Ð&Ø %ˆÕrRcó—|jS)z'Returns the pool configuration version.©rršs rSÚpool_config_versionz+MySQLConnectionAbstract.pool_config_version%s€ð×(Ñ(Ð(rRcó—||_y)z#Sets the pool configuration versionNrrs  rSrz+MySQLConnectionAbstract.pool_config_version*s €ð%*ˆÕ!rRc ó2—|jtd«|_|jtd«|_|j «}d|vr t d«‚tdXi|¤Ž}    |d|_|d=    |d|_
|d=    tj«}|dxs||_ |d=    |drd|_tjg|_ |j!d    t"d    «|_|j!d
t"d
«|_d}|j&r“t(j*j-|j&«}|r>t(j*j/|«rt(j*j1|«rt(j*j3|«r t5d «‚|j$s |j&rtj6g|_ ntj6 g|_     |d sd |_nd|_    |d|_|d=|j:dk(rt=d|j:›d«‚    |d|_gd¢}|D]\}}    ||vr||||<||=Œd|vsd|vr$    |d}    |d=    |d}
|d=|jG|    |
«d|vr|dr
|d|_$    tK|d«|_&|d=d|vr|jd«|_(d|vr |d|_)|d=d } |jU«D]¢\} }     t"| | jWd«r0d} |jXj[| j]dd«| i«ŒQ| jWd«r d} |jXj[| | i«Œ‚d | z}    t_||| ja««Œ¤|jbrt(jdd!k(rd|_(|jPr4|j:d"k(r t=d#«‚|j:d$k(r t=d%«‚| rrd&|jXvrt"d'|jXd&<d(|jXvrt"d)|jXd(<d*|jXvs|jXd*€d|jXd*<tgd+|jXv«tgd,|jXv«k7r t5d-«‚tid.«ti|jX«ksd|jXd+<d|jXd,<n.|jXd+du|jXd,duk7r t5d/«‚|jXj!d0«|jk«|jXj!d1«|jm«|jn€i|_7n÷tq|jntr«s t=d2«‚|jnjU«D]µ\}}|ttvrŒtq|tv«st=d3|›d4|jn›d«‚ty|«d5kDrt=d6|›d7«‚|jWd «r t=d8«‚tq|tv«st=d9|›d:|›d;«‚ty|«d<kDsŒ¥t=d9|›d:|›d=«‚|jztj|zr|j«d>|vry|d>ttq|d>tv«s t=d?«‚|d>j«}|d@k(r&t(jddAk7r t=dB«‚dC|_An|dDk(rdE|_An t=dF«‚dG|vr£|dGž|dG|_Btq|j„tv«st=t†j‰dH¬I««‚|j„dk(rt=t†j‰dJ¬I««‚dK|j„vrt=t†j‰dL¬I««‚|jŠr|jdM|jŠdN«|j!dO«³|dO|_Gtq|jŽtv«st=tj‰dH¬I««‚|jŽdk(rt=tj‰dP¬I««‚t(j*j/|jŽ«st=dQ|jŽ›dR«‚|j!dS«>|dS|_Itq|j’tJ«r|j’dTkr t=dU«‚|j!dV«?|dV|_Jtq|j”tJ«r|j”dTkr t=dW«‚yy#t$rYŒöwxYw#t$rYŒøwxYw#t$rYŒâwxYw#t$rYŒÏwxYw#t$r d |_YŒ®wxYw#t$r d|_YŒ·wxYw#t$rYŒ”t@$r}t5d«|‚d}~wwxYw#t$rYŒ¶wxYw#t$r|jB}    YŒ©wxYw#t$r|jD}
YŒ¼wxYw#t$rYŒtN$r}t=d«|‚d}~wwxYw#t$rt5d| ›d«d‚wxYw#t4$rt_||| «YŒ¥wxYw)YaConfigures the MySQL Connection.
 
        This method allows you to configure the `MySQLConnection`
        instance after it has been instantiated.
 
        Args:
            **kwargs: For a complete list of possible arguments, see [1].
 
        Raises:
            AttributeError: When provided unsupported connection arguments.
            InterfaceError: When the provided connection argument is invalid.
 
        References:
            [1]: https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html
        NÚdsnz!Data source name is not supportedÚ get_warningsÚraise_on_warningsÚ client_flagsÚcompressTr]r^z.allow_local_infile_in_path must be a directoryÚconsume_resultsFÚ auth_pluginrXÚauthentication_webauthn_clientrÇz5' cannot be used as the default authentication pluginÚconverter_classzEConverter class should be a subclass of conversion.MySQLConverterBase))Údbr)Úusernamerú)ÚpasswdÚpassword)rZÚconnection_timeout)Úread_default_fileÚ option_filesrúrÚhostÚportz'TCP/IP port number should be an integerrYÚ init_commandzUnsupported argument 'Ússl_Útls_Ú_r­Úmysql_clear_passwordzEClear password authentication is not supported over insecure channelsÚ$authentication_openid_connect_clientzEOpenID Connect authentication is not supported over insecure channelsÚ verify_certÚssl_verify_certÚverify_identityÚssl_verify_identityÚcaÚkeyÚcertz:ssl_key and ssl_cert need to be both specified, or neither)r0r1z4ssl_key and ssl_cert need to be both set, or neitherrÊrÄzconn_attrs must be of type dictz+Attribute name should be a string, found: 'z' in 'é zAttribute name 'z"' exceeds 32 characters limit sizezNKey names in connection attributes cannot start with '_', found: '{attr_name}'z Attribute 'z
' value: 'z' must be a string typeiz$' exceeds 1024 characters limit sizeÚkerberos_auth_modez('kerberos_auth_mode' must be of type strÚsspiÚntz6'kerberos_auth_mode=SSPI' is only available on WindowsÚMySQLSSPIKerberosAuthPluginÚgssapiÚMySQLKerberosAuthPluginz@Invalid 'kerberos_auth_mode' mode. Please use 'SSPI' or 'GSSAPI'Úkrb_service_principalzis not a string)Úerrorzcan not be an empty stringú/zis incorrectly formattedÚwebauth_callbackr Úopenid_token_filezcannot be an empty stringz
The path 'z1' provided via 'openid_token_file' does not existr[rz.Option read_timeout must be a positive integerr\z/Option write_timeout must be a positive integerrQ)Kr¾r3rar4r`Úcopyr0r;rÚKeyErrorrr*rcrr”ÚCOMPRESSrÚr"r‰rŠr®ÚpathÚabspathÚexistsÚisdirÚislinkrÔÚ LOCAL_FILESr•rŽr/rÚ    TypeErrorrkrlÚ    set_loginrqÚintrrÚ
ValueErrorrwr–rµrÒrvrÝÚreplaceÚsetattrrÖrsr¯r rÙrørírjrÐÚdictr!rÑÚlenrdÚ CONNECT_ARGSÚ_add_default_conn_attrsÚlowerrr|ÚKRB_SERVICE_PRINCIPAL_ERRORràr{Ú_validate_callabler}ÚOPENID_TOKEN_FILE_ERRORr‚rƒ)r›ÚkwargsÚconfigÚdefaultÚinfile_in_pathÚerrÚ
compat_mapÚcompatÚ    translaterúrÚ set_ssl_flagr0r¹Ú    attributerºr»r3s                  rSrVzMySQLConnectionAbstract.config/s €ð"—Z‘Z¤°Ó6ˆŒ
Ø—z‘zÔ"3°TÓ:ˆŒ à—‘“ˆØ F‰?Ü#Ð$GÓHÐ Hô#Ñ, VÑ,ˆð    Ø & ~Ñ 6ˆDÔ Ø~Ð&ð    Ø%+Ð,?Ñ%@ˆDÔ "ØÐ*Ð+ð
    Ü ×,Ñ,Ó.ˆGØ & ~Ñ 6Ò A¸'ˆDÔ Ø~Ð&ð    ØjÒ!Ø!%”Ü%/×%8Ñ%8Ð$9Ô!ð$*§:¡:Ø  Ô"7Ð8LÑ"Mó$
ˆÔ ð,2¯:©:Ø (Ü !Ð">Ñ ?ó,
ˆÔ(ðˆØ × +Ò +ÜŸW™WŸ_™_¨T×-MÑ-MÓNˆNáÜ—G‘G—N‘N >Ô2ÜŸ™Ÿ ™  nÔ5Ü—7‘7—>‘> .Ô1ä$Ð%UÓVÐVØ × #Ò # t×'GÒ'GÜ!+×!7Ñ!7Р8ˆDÕ ä",×"8Ñ"8Ð!8Р9ˆDÔ ð    *ØÐ+Ò,Ø(-Õ%à(,Ô%ð
    #Ø & }Ñ 5ˆDÔ Ø}Ð%ð
× Ñ Р@Ò @ܠؐD×%Ñ%Ð&ð'ðóð ð     Ø#)Ð*;Ñ#<ˆDÔ  ò
ˆ
ð",ò    Ñ ˆFIð Ø FÑ*Ø(.¨v©F˜9Ñ%ؘ6‘Nð        ð VÑ ˜z¨VÑ3ð "ؘf‘~Ø˜6Nð *Ø! *Ñ-Ø˜:Ð&ð N‰N˜4 Ô *ð VÑ   v¢Ø ™ˆDŒJð    UܘV F™^Ó,ˆDŒJؐvð ˜VÑ #Ø!'§¡¨NÓ!;ˆDÔ ð ˜VÑ #Ø!'¨Ñ!7ˆDÔ Ø~Ð&ðˆ Ø Ÿ,™,›.ò    4‰JˆCð PÜ% cÒ*ð~‰~˜fÔ%Ø# Ø—    ‘    × Ñ  #§+¡+¨f°bÓ"9¸5Ð!AÕBØ—‘ Ô'Ø# Ø—    ‘    × Ñ  # u Õ.à #™I    ð4ܘD )¨U¯[©[«]Õ;ð    4ð( × Ò ¤§¡¨GÒ!3Ø!%ˆDÔ à × Ò Ø× Ñ Ð$:Ò:Ü$Ø[óðð× Ñ Ð$JÒJÜ$Ø[óðò Ø D§I¡IÑ-Ü+@ÐARÑ+S—    ‘    ˜-Ñ(Ø ¨¯    ©    Ñ1Ü/DØ)ñ0—    ‘    Ð+Ñ,ð˜4Ÿ9™9Ñ$¨¯    ©    °$©Ð(?Ø"$—    ‘    ˜$‘ܐE˜TŸY™YÐ&Ó'¬4°¸$¿)¹)Ð0CÓ+DÒDÜ$ØPóðôÓ'¬3¨t¯y©y«>Ò9Ø#'—    ‘    ˜%Ñ Ø$(—    ‘    ˜&Ò!Ø—)‘)˜EÑ" dÐ*°·    ±    ¸&Ñ0AÀTÐ0IÒJÜ$ØJóððy‰y}‰}˜^Ó,Ð8Ø×+Ñ+Ô-ày‰y}‰}Ð/Ó0Ð<Ø×/Ñ/Ô1à × Ñ Ð #Ø!ˆDÕ Ü˜D×,Ñ,¬dÔ3Ü Ð!BÓCÐ Cà)-×)9Ñ)9×)?Ñ)?Ó)Aò Ñ%    ˜:ؤ Ñ-Øä! )¬SÔ1Ü(ðØ%˜; f¨T×-=Ñ-=Ð,>¸aðAóðô
y“> BÒ&Ü(Ø*¨9¨+Ð5WÐXóðð×'Ñ'¨Ô,Ü(ð4óðô
" *¬cÔ2Ü(Ø% i [°
¸:¸,ðG+ð+óðô
z“? TÓ)Ü(Ø% i [°
¸:¸,ðG=ð=óðð9 ðB × Ñ ¤
× 7Ñ 7Ò 7Ø × (Ñ (Ô *à  6Ñ )¨fÐ5IÑ.JÐ.VܘfÐ%9Ñ:¼CÔ@Ü$Ð%OÓPÐPØ!'Ð(<Ñ!=×!CÑ!CÓ!EÐ Ø! VÒ+Ü—7‘7˜d’?Ü(ØPóðð+HÕ'Ø# xÒ/Ø*CÕ'ä$ØVóðð
$ vÑ -ØÐ.Ñ/Ð;à*0Ð1HÑ*IˆDÔ 'ܘd×9Ñ9¼3Ô?Ü$Ü/×6Ñ6Ð=NÐ6ÓOóðð×*Ñ*¨bÒ0Ü$Ü/×6Ñ6Ø:ð7óóðð
˜$×5Ñ5Ñ5Ü$Ü/×6Ñ6Ð=WÐ6ÓXóðð × "Ò "Ø × #Ñ #Ð$6¸×8OÑ8OÐQRÔ Sà :‰:Ð)Ó *Ð 6Ø&,Ð-@Ñ&AˆDÔ #ܘd×5Ñ5´sÔ;Ü$Ü+×2Ñ2Ð9JÐ2ÓKóðð×&Ñ&¨"Ò,Ü$Ü+×2Ñ2Ð9TÐ2ÓUóðô—7‘7—>‘> $×"9Ñ"9Ô:Ü$Ø  ×!8Ñ!8Р9ð:%ð%óðð
:‰:nÓ %Ð 1Ø!'¨Ñ!7ˆDÔ Ü˜d×0Ñ0´#Ô6¸$×:LÑ:LÈqÒ:PÜ$Ð%UÓVÐVØ :‰:oÓ &Ð 2Ø"(¨Ñ"9ˆDÔ Ü˜d×1Ñ1´3Ô7¸4×;NÑ;NÐQRÒ;RÜ$Ð%VÓWÐWð<Sð 3øôM    ò    Ú ð    ûô
ò    Ú ð    ûôò    Ú ð    ûôò    Ú ð    ûô<ò    *Ø$)ˆD× !ð    *ûôò    #Ø "ˆD× ð    #ûôò    Ú Üò    Ü ð0óðð ûð    ûô(ò Úð ûôò "Ø—z‘z“ð "ûô
ò *ØŸ>™>“ð *ûôò    Ú Üò    UÜ Ð!JÓKÐQTÐ Tûð    Uûô ò PÜ$Ð'=¸c¸UÀ!Ð%DÓEÈ4ÐOð Pûô&ò4ܘD )¨U×3ð4úsüÁ" eÁ0 e)Á>%e9Â$"f    Ç*fÇ? f0È5
gÉ g/É&g?É/hÊh7Ë7    iÍ8i<å    e&å%e&å)    e6å5e6å9    fæfæ        fæfæf-æ,f-æ0gçgç    g,çg,ç g'ç'g,ç/    g<ç;g<ç?hèhèh4è3h4è7    iéié iéiéi9é<jêjcó—y)z'Adds the default connection attributes.NrQršs rSrPz/MySQLConnectionAbstract._add_default_conn_attrsyrrRcó—t|t«r     t|«}t |«st    d|›d«‚t t|«j«}||k7rt    d|›d|›d|›«‚y#t$r}t    |›«|‚d}~wwxYw)aøValidates if it's a Python callable.
 
         Args:
             option_name (str): Connection option name.
             callback (str or callable): The fully qualified path to the callable or
                                         a callable.
             num_args (int): Number of positional arguments allowed.
 
        Raises:
             ProgrammingError: If `callback` is not valid or wrong number of positional
                               arguments.
 
        .. versionadded:: 8.2.0
        NzExpected a callable for 'rÇz ' requires z4 positional argument, but the callback provided has )    rÐrÑrJrJr1ÚcallablerNr Ú
parameters)Ú option_nameÚcallbackÚnum_argsrYÚ
num_paramss     rSrSz*MySQLConnectionAbstract._validate_callable|sª€ô$ h¤Ô $ð :Ü(¨Ó2ô˜Ô!Ü"Ð%>¸{¸mÈ1Ð#MÓNÐ Nôœ 8Ó,×7Ñ7Ó8ˆ
Ø ˜Ò !Ü"ؐK=  ¨H¨:ð6)Ø)3¨ ð6óð ð "øôò :Ü&¨#¨Ó0°cÐ9ûð :ús’ A/Á/    B
Á8 BÂB
Úserver_versioncó&—t|ttf«r|j«}t    j
d«}|j |«}|s td«‚td„|j«ddD««}|dkrtd|›d«‚|S)    a9Checks the MySQL version.
 
        This method will check the MySQL version and raise an InterfaceError
        when it is not supported or invalid. It will return the version
        as a tuple with major, minor and patch.
 
        Raises InterfaceError if invalid server version.
 
        Returns tuple
        z$^(\d{1,2})\.(\d{1,2})\.(\d{1,3})(.*)zFailed parsing MySQL versionc3ó2K—|]}t|«–—Œy­wrž)rI)Ú.0Úvs  rSú    <genexpr>z@MySQLConnectionAbstract._check_server_version.<locals>.<genexpr>³sèø€Ò< 1œ˜AŸÑ<ùs‚ré)ér zMySQL Version 'z' is not supported)
rÐÚ    bytearrayÚbytesÚdecodeÚreÚcompileÚmatchr/ÚtupleÚgroups)rgÚ    regex_verrtÚversions    rSÚ_check_server_versionz-MySQLConnectionAbstract._check_server_versionŸs€ô n¤y´%Ð&8Ô 9Ø+×2Ñ2Ó4ˆNä—J‘JÐFÓGˆ    Ø—‘ Ó/ˆÙÜ Ð!?Ó@Ð @äÑ<¨¯ © «°q¸Ð(;Ô<Ó<ˆØ VÒ Ü  ?°>Ð2BÐBTÐ!UÓVÐ VàˆrR©Ú property_namecó—|jS)z£Gets the MySQL version.
 
        Returns:
            The MySQL server version as a tuple. If not previously connected, it will
            return `None`.
        ©rhršs rSÚget_server_versionz*MySQLConnectionAbstract.get_server_version¹ó€ð×#Ñ#Ð#rRÚ server_infocó—|jS)z¶Gets the original MySQL version information.
 
        Returns:
            The original MySQL server as text. If not previously connected, it will
            return `None`.
        )r€ršs rSÚget_server_infoz'MySQLConnectionAbstract.get_server_infoÃs€ð×ÑÐrRcó—|jS)zÈGets the MySQL Server version the connector is connected to.
 
        Returns:
            The MySQL server version as a tuple. If not previously connected, it will
            return `None`.
        r}ršs rSrgz&MySQLConnectionAbstract.server_versionÍrrRcóL—    |jdS#ttf$rYywxYw)z½Gets the original MySQL server version information.
 
        Returns:
            The original MySQL server as text. If not previously connected, it will
            return `None`.
        Úserver_version_originalN)rirGr?ršs rSr€z#MySQLConnectionAbstract.server_info×s.€ð    Ø—?‘?Ð#<Ñ=Ð =øÜœ8Ð$ò    Ùð    ús ‚‘#¢#có—y)aMReturns bool to indicate whether a transaction is active for the connection.
 
        The value is `True` regardless of whether you start a transaction using the
        `start_transaction()` API call or by directly executing an SQL statement such
        as START TRANSACTION or BEGIN.
 
        `in_transaction` was added in MySQL Connector/Python 1.1.0.
 
        Examples:
            ```
            >>> cnx.start_transaction()
            >>> cnx.in_transaction
            True
            >>> cnx.commit()
            >>> cnx.in_transaction
            False
            ```
        NrQršs rSÚin_transactionz&MySQLConnectionAbstract.in_transactionärrRrcó(—||_|jS)aÈSets the client flags.
 
        The flags-argument can be either an int or a list (or tuple) of
        ClientFlag-values. If it is an integer, it will set client_flags
        to flags as is.
 
        If flags is a sequence, each item in the sequence sets the flag when the
        value is positive or unsets it when negative (see example below).
 
        Args:
            flags: A list (or tuple), each flag will be set or unset when it's negative.
 
        Returns:
            integer: Client flags.
 
        Raises:
            ProgrammingError: When the flags argument is not a set or an integer
                              bigger than 0.
 
        Examples:
            ```
            For example, to unset `LONG_FLAG` and set the `FOUND_ROWS` flags:
            >>> from mysql.connector.constants import ClientFlag
            >>> cnx.set_client_flags([ClientFlag.FOUND_ROWS, -ClientFlag.LONG_FLAG])
            >>> cnx.reconnect()
            ```
        )r)r›Úflagss  rSÚset_client_flagsz(MySQLConnectionAbstract.set_client_flagsús€ð:"ˆÔØ× Ñ Ð rRcó—|jS)z-Gets the client flags of the current session.©rdršs rSrz$MySQLConnectionAbstract.client_flagss€ð×!Ñ!Ð!rRcó—t|t«r |dkDr||_yt|ttf«rB|D]<}|dkr |xjt |«zc_Œ(|xj|zc_Œ>yt d«‚)aSets the client flags.
 
        The flags-argument can be either an int or a list (or tuple) of
        ClientFlag-values. If it is an integer, it will set client_flags
        to flags as is.
 
        If flags is a sequence, each item in the sequence sets the flag when the
        value is positive or unsets it when negative (see example below).
 
        Args:
            flags: A list (or tuple), each flag will be set or unset when it's negative.
 
        Raises:
            ProgrammingError: When the flags argument is not a set or an integer
                              bigger than 0.
 
        Examples:
            ```
            For example, to unset `LONG_FLAG` and set the `FOUND_ROWS` flags:
            >>> from mysql.connector.constants import ClientFlag
            >>> cnx.client_flags = [ClientFlag.FOUND_ROWS, -ClientFlag.LONG_FLAG]
            >>> cnx.reconnect()
            ```
        rz.client_flags setter expect integer (>0) or setN)rÐrIrdrur´Úabsr1)r›r‰Úflags   rSrz$MySQLConnectionAbstract.client_flagssv€ô4 eœSÔ ! e¨a¢iØ!&ˆDÕ Ü ˜¤¤t˜}Ô -Øò /Ø˜!’8Ø×&Ò&¬3¨t«9¨*Ñ4Ö&à×&Ò&¨$Ñ.Ö&ñ     /ô #Ð#SÓTÐ TrRcó—t‚)akShuts down connection to MySQL Server.
 
        This method closes the socket. It raises no exceptions.
 
        Unlike `disconnect()`, `shutdown()` closes the client connection without
        attempting to send a `QUIT` command to the server first. Thus, it will not
        block if the connection is disrupted for some reason such as network failure.
        )ÚNotImplementedErrorršs rSÚshutdownz MySQLConnectionAbstract.shutdownDs
€ô"Ð!rRcó&—|j|zdkDS)z|Checks if a client flag is set.
 
        Returns:
            `True` if the client flag was set, `False` otherwise.
        rrŒ)r›rs  rSÚisset_client_flagz)MySQLConnectionAbstract.isset_client_flagOs€ð ×"Ñ" TÑ)¨QÑ.Ð.rRcó*—|jd«dS)zGets the current time zone.zSELECT @@session.time_zoner©Ú
info_queryršs rSÚ    time_zonez!MySQLConnectionAbstract.time_zoneWs€ð‰Ð;Ó<Ø ñ
ð    
rRcó<—|jd|›d«||_y)zSets the time zone.zSET @@session.time_zone = 'rÇN)rrfrs  rSr˜z!MySQLConnectionAbstract.time_zone^s!€ð     ‰Ð4°U°G¸1Ð=Ô>؈rRcód—|j€|jd«d|_|jS)zGets the SQL mode.zSELECT @@session.sql_moder)rer—ršs rSÚsql_modez MySQLConnectionAbstract.sql_modeds.€ð >‰>Ð !Ø!Ÿ_™_Ð-HÓIÈ!ÑLˆDŒN؏~‰~ÐrRcóŠ—t|ttf«rdj|«}|j    d|›d«||_y)a³Sets the SQL mode.
 
        This method sets the SQL Mode for the current connection. The value
        argument can be either a string with comma separate mode names, or
        a sequence of mode names.
 
        It is good practice to use the constants class `SQLMode`:
        ```
        >>> from mysql.connector.constants import SQLMode
        >>> cnx.sql_mode = [SQLMode.NO_ZERO_DATE, SQLMode.REAL_AS_FLOAT]
        ```
        rÉzSET @@session.sql_mode = 'rÇN)rÐr´rurârrers  rSr›z MySQLConnectionAbstract.sql_modeks<€ô eœd¤E˜]Ô +Ø—H‘H˜U“OˆEØ ‰Ð3°E°7¸!Ð<Ô=؈rRcó—y)a9Sends a query which only returns 1 row.
 
        Shortcut for:
 
        ```
        cursor = self.cursor(buffered=True)
        cursor.execute(query)
        return cursor.fetchone()
        ```
 
        Args:
            query: Statement to execute.
 
        Returns:
            row: A tuple (RowType).
        NrQ©r›Úquerys  rSr—z"MySQLConnectionAbstract.info_query~rrRNcód—||j«|_nd|_|||_yd|_y)zæSets login information for MySQL.
 
        Sets the username and/or password for the user connecting to the MySQL Server.
 
        Args:
            username: Account's user name.
            password: Account's password.
        NrX)rÖrkrl)r›rrs   rSrHz!MySQLConnectionAbstract.set_login‘s3€ð Ð Ø!Ÿ™Ó)ˆDJàˆDŒJØ Ð Ø%ˆDNàˆDNrRÚ use_unicodecó—||_y©zSets whether we return string fields as unicode or not.
 
        Args:
            value: A boolean - default is `True`.
        N)r¡rs  rSÚ set_unicodez#MySQLConnectionAbstract.set_unicode¥s €ð!ˆÕrRcó—|jS)z7Gets whether we return string fields as unicode or not.)r~ršs rSr¡z#MySQLConnectionAbstract.use_unicode®rrRcó—yr£rQrs  rSr¡z#MySQLConnectionAbstract.use_unicode³rrRcó4—|jd«d}|dk(S)z%Gets whether autocommit is on or off.zSELECT @@session.autocommitrr r–rs  rSÚ
autocommitz"MySQLConnectionAbstract.autocommit¼s"€ð—‘Р=Ó>¸qÑAˆØ˜‰zÐrRcóF—|rdnd}|jd|›«||_y)zToggles autocommit.ÚONÚOFFzSET @@session.autocommit = N)rrg)r›r¹Úswitchs   rSr¨z"MySQLConnectionAbstract.autocommitÂs)€ñ‘ EˆØ ‰Ð4°V°HÐ=Ô>Ø ˆÕrRcó—|jS)zëGets whether this connection retrieves warnings automatically.
 
        This method returns whether this connection retrieves warnings
        automatically.
 
        Returns `True`, or `False` when warnings are not retrieved.
        )rršs rSrz$MySQLConnectionAbstract.get_warningsÉs€ð×!Ñ!Ð!rRcóH—t|t«s td«‚||_y)zúSets whether warnings should be automatically retrieved.
 
        The toggle-argument must be a boolean. When True, cursors for this
        connection will retrieve information about warnings (if any).
 
        Raises `ValueError` on error.
        úExpected a boolean typeN)rÐr rJrrs  rSrz$MySQLConnectionAbstract.get_warningsÔs"€ô˜%¤Ô&ÜÐ6Ó7Ð 7Ø"ˆÕrRcó—|jS)zÒGets whether this connection raises an error on warnings.
 
        This method returns whether this connection will raise errors when
        MySQL reports warnings.
 
        Returns `True` or `False`.
        )r€ršs rSrz)MySQLConnectionAbstract.raise_on_warningsás€ð×&Ñ&Ð&rRcó\—t|t«s td«‚||_|r||_yy)a Sets whether warnings raise an error.
 
        The toggle-argument must be a boolean. When True, cursors for this
        connection will raise an error when MySQL reports warnings.
 
        Raising on warnings implies retrieving warnings automatically. In
        other words: warnings will be set to True. If set to False, warnings
        will be also set to False.
 
        Raises `ValueError` on error.
        r¯N)rÐr rJr€rrs  rSrz)MySQLConnectionAbstract.raise_on_warningsìs2€ô˜%¤Ô&ÜÐ6Ó7Ð 7Ø"'ˆÔá Ø!&ˆDÕ ð rRcó—|jS)zìGets whether there is an unread result.
 
        This method is used by cursors to check whether another cursor still
        needs to retrieve its result set.
 
        Returns `True`, or `False` when there is no unread result.
        )r…ršs rSÚ unread_resultz%MySQLConnectionAbstract.unread_resultó€ð×"Ñ"Ð"rRcóH—t|t«s td«‚||_y)zÚSets whether there is an unread result.
 
        This method is used by cursors to let other cursors know there is
        still a result set that needs to be retrieved.
 
        Raises `ValueError` on errors.
        r¯N)rÐr rJr…rs  rSr³z%MySQLConnectionAbstract.unread_result s"€ô˜%¤Ô&ÜÐ6Ó7Ð 7Ø#ˆÕrRcóR—|jj|j«dS)a Returns the collation for current connection.
 
        This property returns the collation name of the current connection.
        The server is queried when the connection is active. If not connected,
        the configured collation name is returned.
 
        Returns a string.
        é)r—Úget_charset_infoÚ _charset_idršs rSÚ    collationz!MySQLConnectionAbstract.collations&€ð×"Ñ"×3Ñ3°D×4DÑ4DÓEÀaÑHÐHrRcóR—|jj|j«dS)a,Returns the character set for current connection.
 
        This property returns the character set name of the current connection.
        The server is queried when the connection is active. If not connected,
        the configured character set name is returned.
 
        Returns a string.
        r©r—Úget_infor¹ršs rSÚcharsetzMySQLConnectionAbstract.charset$s&€ð×"Ñ"×+Ñ+¨D×,<Ñ,<Ó=¸aÑ@Ð@rRcó—|jS)úThe charset ID utilized during the connection phase.
 
        If the charset ID hasn't been set, the default charset ID is returned.
        )r¹ršs rSÚ
charset_idz"MySQLConnectionAbstract.charset_id0s€ð ×ÑÐrRcó–—|j€2|j€tS|jdkrtnt|_|jS)rÀ)ér)r_rhr$r%ršs rSr¹z#MySQLConnectionAbstract._charset_id8sR€ð × Ñ Ð $Ø×#Ñ#Ð+ô
3Ð2ð×'Ñ'¨&Ò0õ,ä0ð Ô ð נѠРrRcó—||_y)z9Sets the charset ID utilized during the connection phase.N)r_rs  rSr¹z#MySQLConnectionAbstract._charset_idNs €ð"ˆÕrRcó`—|jj|j«d}|dvry|S)azReturns the Python character set for current connection.
 
        This property returns the character set name of the current connection.
        Note that, unlike property charset, this checks if the previously set
        character set is supported by Python and if not, it returns the
        equivalent character set that Python supports.
 
        Returns a string.
        r)Úutf8mb4Úutf8mb3ÚbinaryÚutf8r¼)r›Úencodings  rSÚpython_charsetz&MySQLConnectionAbstract.python_charsetSs6€ð×&Ñ&×/Ñ/°×0@Ñ0@ÓAÀ!ÑDˆØ Ð7Ñ 7ØØˆrRcóú—d}t|ttf«s|t|j    d««‚t|t«s | td«‚|r…t|t«r%|j
j |«\|_}}n§t|t«r&|j
j ||«\|_}}nqt|j    d««‚|r&|j
j |¬«\|_}}n/td}|j
j |d¬«\|_}}|jd|›d|›d«|jr(|jj||j
¬    «yy)
aùSets the character set and collation for the current connection.
 
        This method sets the character set and collation to be used for
        the current connection. The charset argument can be either the
        name of a character set as a string, or the numerical equivalent
        as defined in constants.CharacterSet.
 
        When the collation is not given, the default will be looked up and
        used.
 
        Args:
            charset: Can be either the name of a character set, or the numerical
                     equivalent as defined in `constants.CharacterSet`.
            collation: When collation is `None`, the default collation for the
                       character set is used.
 
        Examples:
            The following will set the collation for the latin1 character set to
            `latin1_general_ci`:
            ```
            >>> cnx = mysql.connector.connect(user='scott')
            >>> cnx.set_charset_collation('latin1', 'latin1_general_ci')
            ```
        z+{} should be either integer, string or NoneNr¾z)collation should be either string or None)rºz SET NAMES 'z ' COLLATE 'rÇ)Ú character_set) rÐrIrÑrJràr—r¸r¹r"Ú_execute_queryr‘Ú set_charset)r›r¾rºÚerr_msgÚ charset_nameÚcollation_names      rSÚset_charset_collationz-MySQLConnectionAbstract.set_charset_collationcsx€ð6@ˆÜ˜'¤C¬ :Ô.°7Ð3FܘWŸ^™^¨IÓ6Ó7Ð 7ܘ)¤SÔ)¨iÐ.CÜÐHÓIÐ Iá ܘ'¤3Ô'ð
×'Ñ'×8Ñ8¸ÓAñ    ØÔ$Ø Ù"ä˜G¤SÔ)ð
×'Ñ'×8Ñ8¸À)ÓLñ    ØÔ$Ø Ù"ô! §¡°    Ó!:Ó;Ð;Ù ð
×#Ñ#×4Ñ4¸yÐ4ÓIñ     ØÔ ØÙô,¨IÑ6ˆGð
×#Ñ#×4Ñ4°WÈÐ4ÓMñ     ØÔ ØØð     ×јk¨,¨°{À>ÐBRÐRSÐTÔUà >Š>Ø N‰N× &Ñ & |À4×CVÑCVÐ &Õ Wð rRcó—|jS)a¸
        Gets the connection context's timeout in seconds for each attempt
        to read any data from the server.
 
        `read_timeout` is number of seconds upto which the connector should wait
        for the server to reply back before raising an ReadTimeoutError. We can set
        this option to None, which would signal the connector to wait indefinitely
        till the read operation is completed or stopped abruptly.
        ©r‚ršs rSr[z$MySQLConnectionAbstract.read_timeout¦ó€ð×!Ñ!Ð!rRcóV—| t|t«r|dkr td«‚||_y)aÕ
        Sets or updates the connection context's timeout in seconds for each attempt
        to read any data from the server.
 
        `read_timeout` is number of seconds upto which the connector should wait
        for the server to reply back before raising an ReadTimeoutError. We can set
        this option to None, which would signal the connector to wait indefinitely
        till the read operation is completed or stopped abruptly.
 
        Args:
            timeout: Accepts a non-negative integer which is the timeout to be set
                     in seconds or None.
        Raises:
            InterfaceError: If a positive integer or None is not passed via the
                            timeout parameter.
        Examples:
            The following will set the read_timeout of the current session to
            5 seconds:
            ```
            >>> cnx = mysql.connector.connect(user='scott')
            >>> cnx.read_timeout = 5
            ```
        Nrú6Option read_timeout must be a positive integer or None©rÐrIr/r‚©r›Útimeouts  rSr[z$MySQLConnectionAbstract.read_timeout³s4€ð2 Рܘg¤sÔ+¨w¸ª{Ü$ØLóðð%ˆÕrRcó—|jS©a°
        Gets the connection context's timeout in seconds for each attempt
        to send data to the server.
 
        `write_timeout` is number of seconds upto which the connector should spend to
        write to the server before raising an WriteTimeoutError. We can set this option
        to None, which would signal the connector to wait indefinitely till the write
        operation is completed or stopped abruptly.
        ©rƒršs rSr\z%MySQLConnectionAbstract.write_timeoutÓó€ð×"Ñ"Ð"rRcóV—| t|t«r|dkr td«‚||_y)aÏ
        Sets or updates the connection context's timeout in seconds for each attempt
        to send data to the server.
 
        `write_timeout` is number of seconds upto which the connector should spend to
        write to the server before raising an WriteTimeoutError. We can set this option
        to None, which would signal the connector to wait indefinitely till the write
        operation is completed or stopped abruptly.
 
        Args:
            timeout: Accepts a non-negative integer which is the timeout to be set in
                     seconds or None.
        Raises:
            InterfaceError: If a positive integer or None is not passed via the
                            timeout parameter.
        Examples:
            The following will set the write_timeout of the current
            session to 5 seconds:
            ```
            >>> cnx = mysql.connector.connect(user='scott')
            >>> cnx.write_timeout = 5
            ```
        Nrú7Option write_timeout must be a positive integer or None©rÐrIr/rƒrÚs  rSr\z%MySQLConnectionAbstract.write_timeoutàs4€ð2 Рܘg¤sÔ+¨w¸ª{Ü$ØMóðð&ˆÕrRcó—y)zMySQL connection ID.NrQršs rSÚ connection_idz%MySQLConnectionAbstract.connection_idrrRcó—y)z>Gathers information of the MySQL server before authentication.NrQršs rSÚ _do_handshakez%MySQLConnectionAbstract._do_handshakerrRcó—y)z)Opens the connection to the MySQL server.NrQršs rSÚ_open_connectionz(MySQLConnectionAbstract._open_connection    rrRcó"—|j|j¬«|j|_|jr|j|_|j r|j |_|jr|j|j«yy)zøExecutes commands after connection has been established.
 
        This method executes commands after the connection has been
        established. Some setting like autocommit, character set, and SQL mode
        are set using this method.
        ©r¾N)
rÓr¹rgr¨rfr˜rer›r–rÎršs rSÚ_post_connectionz(MySQLConnectionAbstract._post_connection sn€ð     ×"Ñ"¨4×+;Ñ+;Ð"Ô<Ø×*Ñ*ˆŒØ ?Š?Ø!Ÿ_™_ˆDŒNØ >Š>Ø ŸN™NˆDŒMØ × Ò Ø × Ñ  × 2Ñ 2Õ 3ð rRcó—y)aDisconnects from the MySQL server.
 
        This method tries to send a `QUIT` command and close the socket. It raises
        no exceptions.
 
        `MySQLConnection.close()` is a synonymous for `MySQLConnection.disconnect()`
        method name and more commonly used.
 
        To shut down the connection without sending a `QUIT` command first,
        use `shutdown()`.
        NrQršs rSr£zMySQLConnectionAbstract.closerrRz5ClassVar[Callable[['MySQLConnectionAbstract'], None]]Ú
disconnectc ól—|r|jd    i|¤Ž|j«|j«|jdd«|jdd«}}|s|r$|jj ||«d|_|jtjzs|j«y    |j|j ¬«y#t$r]|jd|jxs |j›d«|j|j ¬«|jd«YywxYw)
a Connects to the MySQL server.
 
        This method sets up the connection to the MySQL server. If no
        arguments are given, it will use the already configured or default
        values.
 
        Args:
            **kwargs: For a complete list of possible arguments, see [1].
 
        Examples:
            ```
            >>> cnx = MySQLConnection(user='joe', database='test')
            ```
 
        References:
            [1]: https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html
        r¾NrºrrêzSET PASSWORD = 'rÇz)ALTER USER CURRENT_USER() PASSWORD EXPIRErQ)rVrírèr¾r—r¸r¹rdr*ÚCAN_HANDLE_EXPIRED_PASSWORDSrërÓr-rrmrl)r›rUr¾rºs    rSÚconnectzMySQLConnectionAbstract.connect-s€ñ& Ø ˆDK‰KÑ !˜&Ò !à ‰ÔØ ×ÑÔð J‰Jy $Ó 'Ø J‰J{ DÓ )ðˆñ ‘iØ#×2Ñ2×CÑCÀGÈYÓWØñ ˆDÔ ð×!Ñ!¤J×$KÑ$KÒKØ × !Ñ !Õ #ð LØ×*Ñ*°4×3CÑ3CÐ*ÕDøÜ ò     Lð—‘Ð!1°$·/±/Ò2SÀTÇ^Á^Ð1TÐTUÐVÔWð×*Ñ*°4×3CÑ3CÐ*ÔDð—‘ÐJÖKð     LúsÂ0C à A#D3Ä2D3cóf—d}d}|jr9|jjttjj
¬«}    ||k7rN|dz}    |j «|j«|j«rn    |dkDr t|«||k7rŒN||_trt||j"«yy#ttf$r#}||k(rd|›d|›}t|«|‚Yd}~Œhd}~wwxYw#t$r/}tr#t||«t||«t!|«‚d}~wwxYw)a£Attempts to reconnect to the MySQL server.
 
        The argument `attempts` should be the number of times a reconnect
        is tried. The `delay` argument is the number of seconds to wait between
        each retry.
 
        You may want to set the number of attempts higher and use delay when
        you expect the MySQL server to be down for maintenance or when you
        expect the network to be temporary unavailable.
 
        Args:
            attempts: Number of attempts to make when reconnecting.
            delay: Use it (defined in seconds) if you want to wait between each retry.
 
        Raises:
            InterfaceError: When reconnection fails.
        rN)r¯Úkindr z!Can not reconnect to MySQL after z  attempt(s): )r`Ú
start_spanr2r9ÚSpanKindÚCLIENTrírðÚ is_connectedr.ÚIOErrorr/r r5r8r7r6ra)r›ÚattemptsÚdelayÚcounterÚspanrYÚmsgÚ interface_errs        rSÚ    reconnectz!MySQLConnectionAbstract.reconnectcs9€ð$ˆØˆà <Š<à—<‘<×*Ñ*Ü)´·±×0EÑ0Eð+óˆDð    Ø˜XÒ%Ø! A™+ð ;Ø—O‘OÔ%Ø—L‘L”NØ×(Ñ(Ô*Øð+ð˜1’9ܘ%”Lð˜XÓ%ð.ˆŒ
Ý Ü % d¨D¯J©JÕ 7ð øô#œwÐ'ò;Ø (Ò*à?À¸zðJ+Ø+.¨%ð1ðô-¨SÓ1°sÐ:ô +ûð;ûôò    ÝÜ)¨$°Ô5Ü& t¨]Ô;ܘ”Ø ûð     úsBÁ
C8Á0CÂC8ÃC5ÃC0Ã+C8Ã0C5Ã5C8Ã8    D0Ä*D+Ä+D0có—y)aReports whether the connection to MySQL Server is available or not.
 
        Checks whether the connection to MySQL is available using the `ping()` method,
        but unlike `ping()`, `is_connected()` returns `True` when the connection is
        available, `False` otherwise
        NrQršs rSröz$MySQLConnectionAbstract.is_connectedšrrRcó—y)aÅChecks availability of the MySQL server.
 
        When reconnect is set to `True`, one or more attempts are made to try
        to reconnect to the MySQL server using the reconnect()-method.
 
        `delay` is the number of seconds to wait between each retry.
 
        When the connection is not available, an InterfaceError is raised.
 
        Args:
            reconnect: If True, one or more `attempts` are made to try to reconnect
                       to the MySQL server, and these options are forwarded to the
                       `reconnect()` method.
            attempts: Number of attempts to make when reconnecting.
            delay: Use it (defined in seconds) if you want to wait between each retry.
 
        Raises:
            InterfaceError: When the connection is not available. Use the
                            `is_connected()` method if you just want to check the
                            connection without raising an error.
        NrQ)r›rþrørùs    rSÚpingzMySQLConnectionAbstract.ping£rrRcó—y)a…Commits current transaction.
 
        This method is part of PEP 249 - Python Database API Specification v2.0.
 
        This method sends a COMMIT statement to the MySQL server, committing the
        current transaction. Since by default Connector/Python does not autocommit.
 
        It is important to call this method after every transaction that modifies
        data for tables that use transactional storage engines.
 
        Examples:
            ```
            >>> stmt = "INSERT INTO employees (first_name) VALUES (%s), (%s)"
            >>> cursor.execute(stmt, ('Jane', 'Mary'))
            >>> cnx.commit()
            ```
        NrQršs rSÚcommitzMySQLConnectionAbstract.commit»rrRcó—y)a^    Instantiates and returns a cursor.
 
        By default, `MySQLCursor` or `CMySQLCursor` is returned. Depending on the
        options while connecting, a buffered and/or raw cursor is instantiated
        instead. Also depending upon the cursor options, rows can be returned as
        a dictionary or a tuple.
 
        Dictionary based cursors are available with buffered output
        but not raw.
 
        It is possible to also give a custom cursor through the `cursor_class`
        parameter, but it needs to be a subclass of `mysql.connector.cursor.MySQLCursor`
        or `mysql.connector.cursor_cext.CMySQLCursor` according to the type of
        connection that's being used.
 
        **NOTE: The parameters read and write timeouts in cursors are unsupported for
        C-Extension.**
 
        Args:
            buffered: If `True`, the cursor fetches all rows from the server after an
                      operation is executed. This is useful when queries return small
                      result sets.
            raw: If `True`, the cursor skips the conversion from MySQL data types to
                 Python types when fetching rows. A raw cursor is usually used to get
                 better performance or when you want to do the conversion yourself.
            prepared: If `True`, the cursor is used for executing prepared statements.
            cursor_class: It can be used to pass a class to use for instantiating a
                          new cursor. It must be a subclass of `cursor.MySQLCursor`
                          or `cursor_cext.CMySQLCursor` according to the type of
                          connection that's being used.
            dictionary: If `True`, the cursor returns rows as dictionaries.
            read_timeout: A positive integer representing timeout in seconds for each
                          attempt to read any data from the server.
            write_timeout: A positive integer representing timeout in seconds for each
                           attempt to send any data to the server.
 
        Returns:
            cursor: A cursor object.
 
        Raises:
            ProgrammingError: When `cursor_class` is not a subclass of
                              `MySQLCursorAbstract`.
            ValueError: When cursor is not available.
            InterfaceError: When read_timeout or write_timeout is not a positive integer.
        NrQ)r›ÚbufferedÚrawÚpreparedÚ cursor_classÚ
dictionaryr[r\s        rSÚcursorzMySQLConnectionAbstract.cursorÏrrRcó—y)zExecutes a query.NrQržs  rSrÎz&MySQLConnectionAbstract._execute_queryrrRcó—y)aRollbacks current transaction.
 
        Sends a ROLLBACK statement to the MySQL server, undoing all data changes
        from the current transaction. By default, Connector/Python does not
        autocommit, so it is possible to cancel transactions when using
        transactional storage engines such as `InnoDB`.
 
        Examples:
            ```
            >>> stmt = "INSERT INTO employees (first_name) VALUES (%s), (%s)"
            >>> cursor.execute(stmt, ('Jane', 'Mary'))
            >>> cnx.rollback()
            ```
        NrQršs rSÚrollbackz MySQLConnectionAbstract.rollback rrRcó¦—|jr td«‚|rY|j«jdd«j    «}gd¢}||vrt d|›d«‚|j d|›«|C|jd    krt d
|j›d «‚|rd }nd }|j d|›«d}|r|dz }|j|«y)anStarts a transaction.
 
        This method explicitly starts a transaction sending the
        START TRANSACTION statement to the MySQL server. You can optionally
        set whether there should be a consistent snapshot, which
        isolation level you need or which access mode i.e. READ ONLY or
        READ WRITE.
 
        Args:
            consistent_snapshot: If `True`, Connector/Python sends WITH CONSISTENT
                                 SNAPSHOT with the statement. MySQL ignores this for
                                 isolation levels for which that option does not apply.
            isolation_level: Permitted values are 'READ UNCOMMITTED', 'READ COMMITTED',
                             'REPEATABLE READ', and 'SERIALIZABLE'. If the value is
                             `None`, no isolation level is sent, so the default level
                             applies.
            readonly: Can be `True` to start the transaction in READ ONLY mode or
                      `False` to start it in READ WRITE mode. If readonly is omitted,
                      the server's default access mode is used.
 
        Raises:
            ProgrammingError: When a transaction is already in progress
                              and when `ValueError` when `isolation_level`
                              specifies an Unknown level.
 
        Examples:
            For example, to start a transaction with isolation level `SERIALIZABLE`,
            you would do the following:
            ```
            >>> cnx = mysql.connector.connect(...)
            >>> cnx.start_transaction(isolation_level='SERIALIZABLE')
            ```
        zTransaction already in progressrÌú )zREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READÚ SERIALIZABLEzUnknown isolation level "ú"z SET TRANSACTION ISOLATION LEVEL N)éérzMySQL server version z does not support this featurez    READ ONLYz
READ WRITEzSET TRANSACTION zSTART TRANSACTIONz WITH CONSISTENT SNAPSHOT)    r‡r1rÖrKr×rJrÎrhr)r›Úconsistent_snapshotÚisolation_levelÚreadonlyÚlevelÚlevelsÚ access_moderŸs        rSÚstart_transactionz)MySQLConnectionAbstract.start_transactionsü€ðN × Ò Ü"Ð#DÓEÐ Eá Ø#×)Ñ)Ó+×3Ñ3°C¸Ó=×CÑCÓEˆEòˆFð˜FÑ"Ü Ð#<¸_Ð<MÈQÐ!OÓPÐPà × Ñ Ð"BÀ5À'РJÔ Kà Ð Ø×#Ñ# iÒ/Ü Ø+¨D×,@Ñ,@Ð+AðB+ð+óðñ
Ø)‘ à* Ø × Ñ Ð"2°;°-Р@Ô Aà#ˆÙ Ø Ð0Ñ 0ˆEØ ‰uÕrRcó—y)aïClears the current active session.
 
        This method resets the session state, if the MySQL server is 5.7.3
        or later active session will be reset without re-authenticating.
        For other server versions session will be reset by re-authenticating.
 
        It is possible to provide a sequence of variables and their values to
        be set after clearing the session. This is possible for both user
        defined variables and session variables.
 
        Args:
            user_variables: User variables map.
            session_variables: System variables map.
 
        Raises:
            OperationalError: If not connected.
            InternalError: If there are unread results and InterfaceError on errors.
 
        Examples:
            ```
            >>> user_variables = {'var1': '1', 'var2': '10'}
            >>> session_variables = {'wait_timeout': 100000, 'sql_mode': 'TRADITIONAL'}
            >>> cnx.reset_session(user_variables, session_variables)
            ```
        NrQ)r›Úuser_variablesÚsession_variabless   rSÚ reset_sessionz%MySQLConnectionAbstract.reset_sessiongrrRrcó—||_y)úÅ
        Sets the converter class to be used.
 
        Args:
            convclass: Should be a class overloading methods and members of
                       `conversion.MySQLConverter`.
        N)r)r›Ú    convclasss  rSÚset_converter_classz+MySQLConnectionAbstract.set_converter_class‡s €ð )ˆÕrRcó—|jS)z5Gets the converter class set for the current session.)r’ršs rSrz'MySQLConnectionAbstract.converter_class’r rRcó—|rst|t«rc|jj|j«d}||_|||j «|_|j|j_    ytd«‚)r rzFConverter class should be a subclass of conversion.MySQLConverterBase.N) Ú
issubclassr,r—r½r¹r’r¡r‘r“Ú str_fallbackrG)r›r!rÑs   rSrz'MySQLConnectionAbstract.converter_class—sp€ñ œ IÔ/AÔBØ×.Ñ.×7Ñ7¸×8HÑ8HÓIÈ!ÑLˆLØ$-ˆDÔ !Ù& |°T×5EÑ5EÓFˆDŒNØ*.×*FÑ*FˆDN‰NÕ 'äØXóð rRc ó—y)aƒRetrieves the next row of a query result set.
 
        Args:
            binary: If `True`, read as binary result (only meaningful for pure Python
                    connections).
            columns: Field types (only meaningful for pure Python connections and when
                     `binary=True`).
            raw: If `True`, the converter class does not convert the parsed values.
            prep_stmt: Prepared statement object (only meaningful for
                       C-ext connections).
 
        Returns:
            tuple: The row as a tuple (RowType) containing byte objects, or `None` when
                   no more rows are available. (at position 0). EOF packet
                   information as a dictionary containing `status_flag` and
                   `warning_count` (at position 1).
 
        Raises:
            InterfaceError: When all rows have been retrieved.
        NrQ)r›rÈÚcolumnsrÚ    prep_stmtrUs      rSÚget_rowzMySQLConnectionAbstract.get_rowªrrRc ó—y)aGets all rows returned by the MySQL server.
 
        Args:
            count: Used to obtain a given number of rows. If set to `None`, all
                   rows are fetched.
            binary: If `True`, read as binary result (only meaningful for pure Python
                    connections).
            columns: Field types (only meaningful for pure Python connections and when
                     `binary=True`).
            raw: If `True`, the converter class does not convert the parsed values.
            prep_stmt: Prepared statement object (only meaningful for
                       C-ext connections).
 
        Returns:
            tuple: A list of tuples (RowType) containing the row data as byte objects,
                   or an empty list when no rows are available (at position 0).
                   EOF packet information as a dictionary containing `status_flag`
                   and `warning_count` (at position 1).
 
        Raises:
            InterfaceError: When all rows have been retrieved.
        NrQ)r›ÚcountrÈr(rr)rUs       rSÚget_rowsz MySQLConnectionAbstract.get_rowsÈrrRcó—y)a¬Changes the current database.
 
        This method makes specified database the default (current) database.
        In subsequent queries, this database is the default for table references
        that include no explicit database qualifier.
 
        Args:
            database: Database to become the default (current) database.
 
        Returns:
            ok_packet: Dictionary containing the OK packet information.
        NrQ)r›rs  rSÚ cmd_init_dbz#MySQLConnectionAbstract.cmd_init_dbérrRc ó—y)aÐSends a query to the MySQL server.
 
        This method sends the query to the MySQL server and returns the result.
        To **send multiple statements, use the `cmd_query_iter()` method instead**.
 
        The returned dictionary contains information depending on what kind of query
        was executed. If the query is a `SELECT` statement, the result contains
        information about columns. Other statements return a dictionary containing
        OK or EOF packet information.
 
        Errors received from the MySQL server are raised as exceptions.
 
        **Arguments `raw`, `buffered` and `raw_as_string` are only meaningful
        for `C-ext` connections**.
 
        Args:
            query: Statement to be executed.
            raw: If `True`, the cursor skips the conversion from MySQL data types to
                 Python types when fetching rows. A raw cursor is usually used to get
                 better performance or when you want to do the conversion yourself. If
                 not provided, take its value from the MySQL instance.
            buffered: If `True`, the cursor fetches all rows from the server after an
                      operation is executed. This is useful when queries return small
                      result sets.
            raw_as_string: Is a special argument for Python v2 and returns `str`
                           instead of `bytearray`.
 
        Returns:
            dictionary: `Result` or `OK packet` information
        NrQ)r›rŸrrÚ raw_as_stringrUs      rSrz!MySQLConnectionAbstract.cmd_queryørrRc ó—y)aZSends one or more statements to the MySQL server.
 
        Similar to the `cmd_query()` method, but instead returns a generator
        object to iterate through results. It sends the statements to the
        MySQL server and through the iterator you can get the results.
 
        Use `cmd_query_iter()` when sending multiple statements, and separate
        the statements with semicolons.
 
        Args:
            statements: Statements to be executed separated with semicolons.
 
        Returns:
            generator: Generator object with `Result` or `OK packet` information.
 
        Examples:
            The following example shows how to iterate through the results after
            sending multiple statements:
            ```
            >>> statement = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
            >>> for result in cnx.cmd_query_iter(statement):
            >>> if 'columns' in result:
            >>>     columns = result['columns']
            >>>     rows = cnx.get_rows()
            >>> else:
            >>>     # do something useful with INSERT result
            ```
        NrQ)r›Ú
statementsrUs   rSÚcmd_query_iterz&MySQLConnectionAbstract.cmd_query_iter rrRcó—y)a›Send the Refresh command to the MySQL server.
 
        This method sends the Refresh command to the MySQL server. The options
        argument should be a bitwise value using constants.RefreshOption.
 
        Typical usage example:
            ```
           RefreshOption = mysql.connector.RefreshOption
           refresh = RefreshOption.LOG | RefreshOption.INFO
           cnx.cmd_refresh(refresh)
           ```
 
        Args:
            options: Bitmask value constructed using constants from
                     the `constants.RefreshOption` class.
 
        Returns:
            A dictionary representing the OK packet got as response when executing
            the command.
 
        Raises:
            ValueError: If an invalid command `refresh options` is provided.
            DeprecationWarning: If one of the options is deprecated for the server you
                                are connecting to.
        NrQ)r›Úoptionss  rSÚ cmd_refreshz#MySQLConnectionAbstract.cmd_refreshCrrRcó—y)a’Closes the current connection with the server.
 
        This method sends the `QUIT` command to the MySQL server, closing the
        current connection. Since there is no response from the MySQL server,
        the packet that was sent is returned.
 
        Returns:
            packet_sent: `None` when using a C-ext connection,
                         else the actual packet that was sent.
        NrQršs rSÚcmd_quitz MySQLConnectionAbstract.cmd_quit_rrRcó—y)z½Shuts down the MySQL Server.
 
        This method sends the SHUTDOWN command to the MySQL server.
        The `shutdown_type` is not used, and it's kept for backward compatibility.
        NrQ)r›Ú shutdown_types  rSÚ cmd_shutdownz$MySQLConnectionAbstract.cmd_shutdownlrrRcó—y)aSends the statistics command to the MySQL Server.
 
        Returns:
            dict: Stats packet information about the MySQL server including uptime
                  in seconds and the number of running threads, questions, reloads, and
                  open tables.
        NrQršs rSÚcmd_statisticsz&MySQLConnectionAbstract.cmd_statisticstrrRcó—td«‚)a|Get the process list of the MySQL Server.
 
        This method is a placeholder to notify that the PROCESS_INFO command
        is not supported by raising the `NotSupportedError`.
 
        The command
        "SHOW PROCESSLIST" should be send using the cmd_query()-method or
        using the `INFORMATION_SCHEMA` database.
 
        Raises `NotSupportedError` exception.
        z;Not implemented. Use SHOW PROCESSLIST or INFORMATION_SCHEMA)r0rQrRrSÚcmd_process_infoz(MySQLConnectionAbstract.cmd_process_info~s€ô Ø Ió
ð    
rRcó—y)aKills a MySQL process.
 
        Asks the server to kill the thread specified by `mysql_pid`. Although
        still available, it is better to use the KILL SQL statement.
 
        Args:
            mysql_pid: Process ID to be killed.
 
        Returns:
            ok_packet: Dictionary containing the OK packet information.
 
        Examples:
            ```
            >>> cnx.cmd_process_kill(123)  # using cmd_process_kill()
            >>> cnx.cmd_query('KILL 123')  # alternatively (recommended)
            ```
        NrQ)r›Ú    mysql_pids  rSÚcmd_process_killz(MySQLConnectionAbstract.cmd_process_killrrRcó—y)zôInstructs the server to write debugging information to the error log.
 
        The connected user must have the `SUPER` privilege.
 
        Returns:
            ok_packet: Dictionary containing the EOF (end-of-file) packet information.
        NrQršs rSÚ    cmd_debugz!MySQLConnectionAbstract.cmd_debug£rrRcó—y)zýChecks whether the connection to the server is working.
 
        This method is not to be used directly. Use `ping()` or
        `is_connected()` instead.
 
        Returns:
            ok_packet: Dictionary containing the OK packet information.
        NrQršs rSÚcmd_pingz MySQLConnectionAbstract.cmd_ping­rrRc ó—y)aØChanges the current logged in user.
 
        It also causes the specified database to become the default (current)
        database. It is also possible to change the character set using the
        charset argument. The character set passed during initial connection
        is reused if no value of charset is passed via this method.
 
        Args:
            username: New account's username.
            password: New account's password.
            database: Database to become the default (current) database.
            charset: Client charset (see [1]), only the lower 8-bits.
            password1: New account's password factor 1 - it's used instead
                       of `password` if set (higher precedence).
            password2: New account's password factor 2.
            password3: New account's password factor 3.
            oci_config_file: OCI configuration file location (path-like string).
            oci_config_profile: OCI configuration profile location (path-like string).
            openid_token_file: OpenID Connect token file location (path-like string).
 
        Returns:
            ok_packet: Dictionary containing the OK packet information.
 
        Examples:
            ```
            >>> cnx.cmd_change_user(username='', password='', database='', charset=33)
            ```
 
        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_basic_character_set.html#a_protocol_character_set
        NrQ) r›rrrr¾Ú    password1Ú    password2Ú    password3Úoci_config_fileÚoci_config_profiler=s            rSÚcmd_change_userz'MySQLConnectionAbstract.cmd_change_user¸rrRc ó—y)a%Prepares a MySQL statement.
 
        Args:
            statement: statement to prepare.
 
        Returns:
            prepared_stmt: A `Prepared Statement` structure - a dictionary
                           is returned when using a pure Python connection, and a
                           `_mysql_connector.MySQLPrepStmt` object is returned when
                           using a C-ext connection.
 
        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/
                page_protocol_com_stmt_prepare.html
        NrQ)r›Ú    statementrUs   rSÚcmd_stmt_preparez(MySQLConnectionAbstract.cmd_stmt_prepareçrrRc ó—y)aFExecutes a prepared MySQL statement.
 
        Args:
            statement_id: Statement ID found in the dictionary returned by
                          `MySQLConnection.cmd_stmt_prepare` when using a pure Python
                          connection, or a `_mysql_connector.MySQLPrepStmt` instance
                          as returned by `CMySQLConnection.cmd_stmt_prepare` when
                          using a C-ext connection.
            data: Data sequence against which the prepared statement will be executed.
            parameters: Currently unused!
            flags: see [1].
 
        Returns:
            dictionary or tuple: `OK packet` or `Result` information.
 
        Notes:
            The previous method's signature applies to pure Python, the C-ext has
            the following signature:
 
            ```
            def cmd_stmt_execute(
                self, statement_id: CMySQLPrepStmt, *args: Any
            ) -> Optional[Union[Dict[str, Any], Tuple]]:
            ```
 
            You should expect a similar returned value type, however, the input
            is different. In this case `data` must be provided as positional
            arguments instead of a sequence.
 
        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_com_stmt_execute.html
        NrQ)r›Ú statement_idÚdatarbr‰rUs      rSÚcmd_stmt_executez(MySQLConnectionAbstract.cmd_stmt_executeýrrRc ó—y)a»Deallocates a prepared MySQL statement.
 
        Args:
            statement_id: Statement ID found in the dictionary returned by
                          `MySQLConnection.cmd_stmt_prepare` when using a pure Python
                          connection, or a `_mysql_connector.MySQLPrepStmt` instance
                          as returned by `CMySQLConnection.cmd_stmt_prepare` when
                          using a C-ext connection.
        NrQ©r›rSrUs   rSÚcmd_stmt_closez&MySQLConnectionAbstract.cmd_stmt_close(    rrRc ó—y)a?Sends data for a column.
 
        Currently, not implemented for the C-ext.
 
        Args:
            statement_id: Statement ID found in the dictionary returned by
                          `MySQLConnection.cmd_stmt_prepare` when using a pure Python
                          connection, or a `_mysql_connector.MySQLPrepStmt` instance
                          as returned by `CMySQLConnection.cmd_stmt_prepare` when
                          using a C-ext connection.
            param_id: The parameter to supply data to [1].
            data: The actual payload to send [1].
 
        Returns:
            total_sent: The total number of bytes that were sent is returned.
 
        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_com_stmt_send_long_data.html
        NrQ)r›rSÚparam_idrTrUs     rSÚcmd_stmt_send_long_dataz/MySQLConnectionAbstract.cmd_stmt_send_long_data8    rrRc ó—y)aÉResets data for prepared statement sent as long data.
 
        Args:
            statement_id: Statement ID found in the dictionary returned by
                          `MySQLConnection.cmd_stmt_prepare` when using a pure Python
                          connection, or a `_mysql_connector.MySQLPrepStmt` instance
                          as returned by `CMySQLConnection.cmd_stmt_prepare` when
                          using a C-ext connection.
        NrQrWs   rSÚcmd_stmt_resetz&MySQLConnectionAbstract.cmd_stmt_resetU    rrRcó—y)aNResets the session state without re-authenticating.
 
        Reset command only works on MySQL server 5.7.3 or later.
 
        This method permits the session state to be cleared without reauthenticating.
        For MySQL servers older than 5.7.3 (when `COM_RESET_CONNECTION` was introduced)
        , the `reset_session()` method can be used instead - that method resets the
        session state by reauthenticating, which is more expensive.
 
        This method was added in Connector/Python 1.2.1.
 
        Returns:
            `True` for a successful reset otherwise `False`.
        NrQršs rSÚcmd_reset_connectionz,MySQLConnectionAbstract.cmd_reset_connectione    rrR©ÚreturnÚNone)rarU©r¥zType[BaseException]r¦Ú BaseExceptionr§r rarb)rar )raz$List[Tuple[str, BinaryProtocolType]])r¹zTuple[str, BinaryProtocolType]rarb©r¯rÑrar>)rarÑ©rarI©raú Optional[str])r¹rÑrarb)r¹r rarb)rar)r¹rrarb)rUrrarb)r)rcrÑrdzUnion[str, Callable]rerIrarb)rgrGrazTuple[int, ...])razOptional[Tuple[int, ...]])r‰úUnion[int, Sequence[int]]rarI)r‰rirarb)rar)rrIrar )r¹zUnion[str, Sequence[int]]rarb)rŸrÑrazOptional[RowType]©NN)rrhrrhrarb©T)r¹rIrarb)r¾zOptional[Union[int, str]]rºrhrarb©raú Optional[int]©rÛrmrarb)r r)rørIrùrIrarb)Fr r)rþr rørIrùrIrarb)NNNNNNN)rúOptional[bool]rrorrorz%Optional[Type['MySQLCursorAbstract']]r    ror[rmr\rmraz'MySQLCursorAbstract')rŸrÑrarb)FNN)rr rrhrrorarb)rúOptional[Dict[str, Any]]rrprarb)r!úOptional[Type[MySQLConverter]]rarb)rarq)FNNN) rÈr r(úOptional[List[DescriptionType]]rror)úOptional[CMySQLPrepStmt]rUrraz2Tuple[Optional[RowType], Optional[Dict[str, Any]]])NFNNN)r,rmrÈr r(rrrror)rsrUrraz.Tuple[List[RowType], Optional[Dict[str, Any]]])rrÑrarp)FFF) rŸrÑrrorr r1r rUrrarp)r3rÑrUrraz(Generator[Mapping[str, Any], None, None])r6rIrazDict[str, Any])razOptional[bytes]rž)r;rmrarb)rarp)rBrIrarp)
rXrXrXNrXrXrXrXrXrX)rrÑrrÑrrÑr¾rmrIrÑrJrÑrKrÑrLrÑrMrÑr=rÑrarp)rPrprUrraz(Union[Mapping[str, Any], CMySQLPrepStmt])rQrQr) rSúUnion[int, CMySQLPrepStmt]rTzSequence[BinaryProtocolType]rbrr‰rIrUrraz&Optional[Union[Dict[str, Any], Tuple]])rSrtrUrrarb)
rSrtrZrIrTrrUrrarI)drMrNrOrPrœrŸr¨r«Úpropertyr°r²r¶r¼rÀrÂrírørúrýrÿrrrÚsetterr
rrVrPÚ staticmethodrSryr:r#ràr~r‚rgr€r‡rŠrr’r”r˜r›r—rHr¤r¡r¨rrr³rºr¾rÁr¹rËrÓr[r\rärærèrër£ríÚ__annotations__rðrþrörrr
rÎr rrr"rr*r-r/rr4r7r9r<r>r@rCrErGrNrQrUrXr[r]r_rQrRrSrUrU¶s …ÙBóR)óhðà%ðð!ðð!ð    ð
 
ó óðò
óð
ð ò&óð&ðò/óð/ó 6ó1óó]
ó~ORðbòóððòóððòóððò!óð!ðØò$óóð$ð‡__ò'óð'ðò%óð%ð×Ñò&ó ð&ð
ò)óð)ð×Ñò*ó ð*óHXóT
6ðàJKð Øð Ø$8ð ØDGð à     ò óð ðDòóðñ2Ð0Ð)×0Ñ0Ð?OÔPÓQò$óRð$ñÐ0Ð)×0Ñ0¸}ÔMÓNò óOð ðò$óð$ðò
óð
ðØò óóð ñ(Ð0Ð)×0Ñ0¸~ÔNÓOò!óPð!ð>ò"óð"ð×Ñò"Uóð"UóH    "ó/ðò
óð
ð ×Ñò óð ð
òóðð ‡__òóðð$ò óð ð&IMð Ø%ð Ø8Eð à     ó ñ(Ð0Ð)×0Ñ0¸}ÔMÓNó!óOð!ðò!óð!ð×ÑØò óóð ðòóðð
×Ñò!óð!ð ò"óð"ð×Ñò
#óð
#ðò'óð'ð×Ñò'óð'ð&ò#óð#ð×Ñò
$óð
$ðò    Ióð    Iðò    Aóð    Aðò óð ðò!óð!ð*×Ñò"óð"ðò óð ð UYðAXØ0ðAXØDQðAXà     óAXðFò
"óð
"ð×Ñò%óð%ð>ò
#óð
#ð×Ñò&óð&ð>Øò#óóð#ðòMóðMðò8óð8ó4ð ò  óð  ðIN€JÐEÓMó4Lôl58ðnò óð ðó óð ð.ò óð ð&ð$(Ø"Ø#'Ø>BØ%)Ø&*Ø'+ð6 à ð6 ðð6 ð!ð    6 ð
<ð 6 ð #ð 6 ð$ð6 ð%ð6 ð
ò6 óð6 ðpò óð ðò óð ð$%*Ø)-Ø#'ð    Hà!ðHð'ðHð!ð    Hð
 
ó HðTð48Ø6:ð à0ð ð4ð ð
ò     óð ñ>Ð0Ð)×0Ñ0Ð?PÔQÓRò)óSð)ðò%óð%ð×Ñòóðð$ðØ37Ø"Ø.2ð  àð ð1ð ðð     ð
,ð  ð ð  ð
<ò óð ð:ð $ØØ37Ø"Ø.2ð  àð ðð ð1ð     ð
ð  ð ,ð  ðð ð
8ò óð ð@ò  óð  ðð$ØØ#ð % àð% ðð% ðð    % ð
ð % ð ð % ð
"ò% óð% ðNð  àð  ðð  ð
2ò      óð  ðDò óð ð6ò
 óð
 ðó óð ðò óð ðò
óð
ð ò óð ð&ò óð ðò óð ððØØØ!%ØØØØ!Ø"$Ø!#ð, àð, ðð, ðð    , ð
ð , ð ð , ðð, ðð, ðð, ð ð, ðð, ð
"ò, óð, ð\ð àð ðð ð
2ò     óð ð*ð.0Ø!Øð ( à0ð( ð+ð( ðð    ( ð
ð ( ð ð ( ð
0ò( óð( ðTð  à0ð  ðð  ð
ò      óð  ðð à0ð ðð ðð     ð
ð  ð
ò  óð ð8ð  à0ð  ðð  ð
ò      óð  ðò óñ rRrUcó„—eZdZdZ            d$                            d%d„Zd&d„Z                                d'd„Zed(d„«Zejd)d„«Zed(d„«Z
e
jd)d    „«Z
e     d*                    d+d
„«Z e d,d „«Z e         d-                            d.d „«Ze                         d/d „«Ze d0d„«Ze d1d2d„«Ze d3d„«Z        d4d„Ze d5d„«Ze d6d„«Zd7d„Zd8d9d„Zd:d;d„Zed<d„«Zed=d„«Zed(d„«Zed>d„«Zed=d„«Zed?d„«Zee jBd¬««d>d„«Z"d@d „Z#dAd!„Z$dBd"„Z%d,d#„Z&y)CÚMySQLCursorAbstractz˜Abstract cursor class
 
    Abstract class defining cursor class with method and members
    required by the Python Database API Specification v2.0.
    Ncóp—||_|6t|t«s td¬«‚t    j
|«|_d|_d|_d|_d|_    d|_
d|_ g|_ g|_ d|_d|_d|_d|_||_||_d|_d|_d|_y)    z#Defines the MySQL cursor interface.Ni)ÚerrnorÈrr Frj)Ú _connectionrÐrUr/ÚweakrefÚproxyÚ _descriptionÚ    _rowcountÚ_last_insert_idÚ    _warningsÚ_warning_countÚ    _executedÚ_executed_listÚ_stored_resultsÚ    arraysizeÚ_binaryr‡Ú_nextrowr‚rƒÚ_stmt_partitionsÚ_stmt_partitionÚ_stmt_map_results)r›Ú
connectionr[r\s    rSrœzMySQLCursorAbstract.__init__~    sˀð?IˆÔØ Ð !ܘjÔ*AÔBÜ$¨4Ô0Ð0Ü&Ÿ}™}¨ZÓ8ˆDÔ à=AˆÔØ ˆŒØ.2ˆÔØ6:ˆŒØ#$ˆÔØ*.ˆŒØ+-ˆÔØ:<ˆÔ؈ŒØ"ˆŒ ؈Œ    ð
ð     Œ ð -9ˆÔØ-:ˆÔð ð     Ôð@DˆÔØ',ˆÕrRcó—|SržrQršs rSrŸzMySQLCursorAbstract.__enter__§    r rRcó$—|j«yržr¢r¤s    rSr¨zMySQLCursorAbstract.__exit__ª    r©rRcó—|jS)a´
        Gets the cursor context's timeout in seconds for each attempt
        to read any data from the server.
 
        `read_timeout` is number of seconds upto which the connector should wait
        for the server to reply back before raising an ReadTimeoutError. We can set
        this option to None, which would signal the connector to wait indefinitely
        till the read operation is completed or stopped abruptly.
        rÕršs rSr[z MySQLCursorAbstract.read_timeout²    rÖrRcóV—| t|t«r|dkr td«‚||_y)aô
        Sets or updates the cursor context's timeout in seconds for each attempt
        to read any data from the server.
 
        `read_timeout` is number of seconds upto which the connector should wait
        for the server to reply back before raising an ReadTimeoutError. We can set
        this option to None, which would signal the connector to wait indefinitely
        till the read operation is completed or stopped abruptly.
 
        Args:
            timeout: Accepts a non-negative integer which is the timeout to be set
                     in seconds or None.
        Raises:
            InterfaceError: If a positive integer or None is not passed via the
                            timeout parameter.
        Examples:
            The following will set the read_timeout of the current session to
            5 seconds:
            ```
            >>> cnx = mysql.connector.connect(user='scott')
            >>> cur = cnx.cursor()
            >>> cur.read_timeout = 5
            ```
        NrrØrÙrÚs  rSr[z MySQLCursorAbstract.read_timeout¿    s4€ð4 Рܘg¤sÔ+¨w¸ª{Ü$ØLóðð%ˆÕrRcó—|jSrÝrÞršs rSr\z!MySQLCursorAbstract.write_timeoutà    rßrRcóV—| t|t«r|dkr td«‚||_y)aò
        Sets or updates the connection context's timeout in seconds for each attempt
        to send data to the server.
 
        `write_timeout` is number of seconds upto which the connector should spend to
        write to the server before raising an WriteTimeoutError. We can set this option
        to None, which would signal the connector to wait indefinitely till the write
        operation is completed or stopped abruptly.
 
        Args:
            timeout: Accepts a non-negative integer which is the timeout to be set in
                     seconds or None.
        Raises:
            InterfaceError: If a positive integer or None is not passed via the
                            timeout parameter.
        Examples:
            The following will set the write_timeout of the current
            session to 5 seconds:
            ```
            >>> cnx = mysql.connector.connect(user='scott')
            >>> cur = cnx.cursor()
            >>> cur.write_timeout = 5
            ```
        NrrárârÚs  rSr\z!MySQLCursorAbstract.write_timeoutí    s4€ð4 Рܘg¤sÔ+¨w¸ª{Ü$ØMóðð&ˆÕrRcó—y)aæCalls a stored procedure with the given arguments.
 
        The arguments will be set during this session, meaning they will be called like
        _<procname>__arg<nr> where <nr> is an enumeration (+1) of the arguments.
 
        Args:
            procname: The stored procedure name.
            args: Sequence of parameters - it must contain one entry for each argument
                  that the procedure expects.
 
        Returns:
            Does not return a value, but a result set will be available when the
            CALL-statement executes successfully.
 
            `callproc()` returns a modified copy of the input sequence. `Input`
            parameters are left untouched. `Output` and `input/output` parameters may
            be replaced with new values.
 
            Result sets produced by the stored procedure are automatically fetched and
            stored as `MySQLCursorBuffered` instances.
 
            The value returned (if any) is a `Dict` when cursor's subclass is
            `MySQLCursorDict`, else a `Tuple` (RowType).
 
        Raises:
            InterfaceError: When something is wrong
 
        Examples:
            1) Defining the Stored Routine in MySQL:
            ```
            CREATE PROCEDURE multiply(IN pFac1 INT, IN pFac2 INT, OUT pProd INT)
            BEGIN
            SET pProd := pFac1 * pFac2;
            END;
            ```
 
            2) Executing in Python:
            ```
            >>> args = (5, 6, 0) # 0 is to hold value of the OUT parameter pProd
            >>> cursor.callproc('multiply', args)
            ('5', '6', 30L)
            ```
 
        References:
            [1]: https://dev.mysql.com/doc/connector-python/en/                connector-python-api-mysqlcursor-callproc.html
        NrQ)r›ÚprocnameÚargss   rSÚcallproczMySQLCursorAbstract.callproc
rrRcó—y)a=Close the cursor.
 
        Use close() when you are done using a cursor. This method closes the cursor,
        resets all results, and ensures that the cursor object has no reference to its
        original connection object.
 
        This method is part of PEP 249 - Python Database API Specification v2.0.
        NrQršs rSr£zMySQLCursorAbstract.closeB
rrRcó—y)a>Executes the given operation (a MySQL script) substituting any markers
        with the given parameters.
 
        For example, getting all rows where id is 5:
        ```
        cursor.execute("SELECT * FROM t1 WHERE id = %s", (5,))
        ```
 
        If you want each single statement in the script to be related
        to its corresponding result set, you should enable the `map_results`
        switch - see workflow example below.
 
        If the given script uses `DELIMITER` statements (which are not recognized
        by MySQL Server), the connector will parse such statements to remove them
        from the script and substitute delimiters as needed. This pre-processing
        may cause a performance hit when using long scripts. Note that when enabling
        `map_results`, the script is expected to use `DELIMITER` statements in order
        to split the script into multiple query strings.
 
        The following characters are currently not supported by the connector in
        `DELIMITER` statements: `"`, `'`, #`, `/*` and `*/`.
 
        If warnings were generated, and `connection.get_warnings` is
        `True`, then `self.warnings` will be a list containing these
        warnings.
 
        Args:
            operation: Operation to be executed - it can be a single or a
                       multi statement.
            params: The parameters found in the tuple or dictionary params are bound
                    to the variables in the operation. Specify variables using `%s` or
                    `%(name)s` parameter style (that is, using format or pyformat style).
            map_results: It is `False` by default. If `True`, it allows you to know what
                        statement caused what result set - see workflow example below.
                        Only relevant when working with multi statements.
 
        Returns:
            `None`.
 
        Example (basic usage):
            The following example runs many single statements in a
            single go and loads the corresponding result sets
            sequentially:
 
            ```
            sql_operation = '''
            SET @a=1, @b='2024-02-01';
            SELECT @a, LENGTH('hello'), @b;
            SELECT @@version;
            '''
            with cnx.cursor() as cur:
                cur.execute(sql_operation)
 
                result_set = cur.fetchall()
                # do something with result set
                ...
 
                while cur.nextset():
                    result_set = cur.fetchall()
                    # do something with result set
                    ...
            ```
 
            In case the operation is a single statement, you may skip the
            looping section as no more result sets are to be expected.
 
        Example (statement-result mapping):
            The following example runs many single statements in a
            single go and loads the corresponding result sets
            sequentially. Additionally, each result set gets related
            to the statement that caused it:
 
            ```
            sql_operation = '''
            SET @a=1, @b='2024-02-01';
            SELECT @a, LENGTH('hello'), @b;
            SELECT @@version;
            '''
            with cnx.cursor() as cur:
                cur.execute(sql_operation, map_results=True)
 
                # statement 1 is `SET @a=1, @b='2024-02-01'`,
                # result set from statement 1 is `[]` - aka, an empty set.
                result_set, statement = cur.fetchall(), cur.statement
                # do something with result set
                ...
 
                # 1st call to `nextset()` will laod the result set from statement 2,
                # statement 2 is `SELECT @a, LENGTH('hello'), @b`,
                # result set from statement 2 is `[(1, 5, '2024-02-01')]`.
                #
                # 2nd call to `nextset()` will laod the result set from statement 3,
                # statement 3 is `SELECT @@version`,
                # result set from statement 3 is `[('9.0.0-labs-mrs-8',)]`.
                #
                # 3rd call to `nextset()` will return `None` as there are no more sets,
                # leading to the end of the consumption process of result sets.
                while cur.nextset():
                    result_set, statement = cur.fetchall(), cur.statement
                    # do something with result set
                    ...
            ```
 
            In case the mapping is disabled (`map_results=False`), all result
            sets get related to the same statement, which is the one provided
            when calling `execute()`. In other words, the property `statement`
            will not change as result sets are consumed, which contrasts with
            the case in which the mapping is enabled. Note that we offer a
            new fetch-related API command which can be leveraged as a shortcut
            for consuming result sets - it is equivalent to the previous
            workflow.
 
            ```
            sql_operation = '''
            SET @a=1, @b='2024-02-01';
            SELECT @a, LENGTH('hello'), @b;
            SELECT @@version;
            '''
            with cnx.cursor() as cur:
                cur.execute(sql_operation, map_results=True)
                for statement, result_set in cur.fetchsets():
                    # do something with result set
            ```
        NrQ)r›Ú    operationÚparamsÚ map_resultss    rSÚexecutezMySQLCursorAbstract.executeM
rrRcó—y)aŠExecutes the given operation multiple times.
 
        The `executemany()` method will execute the operation iterating
        over the list of parameters in `seq_params`.
 
        `INSERT` statements are optimized by batching the data, that is
        using the MySQL multiple rows syntax.
 
        Args:
            operation: Operation to be executed.
            seq_params: Parameters to be used when executing the operation.
 
        Returns:
            Results are discarded. If they are needed, consider looping over data
            using the `execute()` method.
 
        Examples:
            An optimization is applied for inserts: The data values given by the
            parameter sequences are batched using multiple-row syntax. The following
            example inserts three records:
 
            ```
            >>> data = [
            >>> ('Jane', date(2005, 2, 12)),
            >>> ('Joe', date(2006, 5, 23)),
            >>> ('John', date(2010, 10, 3)),
            >>> ]
            >>> stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
            >>> cursor.executemany(stmt, data)
            ```
 
            For the preceding example, the INSERT statement sent to MySQL is:
            ```
            >>> INSERT INTO employees (first_name, hire_date)
            >>> VALUES ('Jane', '2005-02-12'), ('Joe', '2006-05-23'), ('John', '2010-10-03')
            ```
        NrQ)r›r›Ú
seq_paramss   rSÚ executemanyzMySQLCursorAbstract.executemanyÓ
rrRcó—y)aRetrieves next row of a query result set
 
        Returns:
            If the cursor's subclass is `MySQLCursorDict`, a dictionaries is
            returned, otherwise a tuple (RowType). `None` is returned when there aren't
            results to be read.
 
        Examples:
            ```
            >>> cursor.execute("SELECT * FROM employees")
            >>> row = cursor.fetchone()
            >>> while row is not None:
            >>>     print(row)
            >>>     row = cursor.fetchone()
            ```
        NrQršs rSÚfetchonezMySQLCursorAbstract.fetchone rrRcó—y)a´Fetches the next set of rows of a query result.
 
        Args:
            size: The number of rows returned can be specified using the size
                  argument, which is one by default.
 
        Returns:
            If the cursor's subclass is `MySQLCursorDict`, a list of dictionaries is
            returned, otherwise a list of tuples (RowType). When no more rows are
            available, it returns an empty list.
        NrQ)r›Úsizes  rSÚ    fetchmanyzMySQLCursorAbstract.fetchmany rrRcó—y)aËFetches all (or all remaining) rows of a query result set.
 
        Returns:
            If the cursor's subclass is `MySQLCursorDict`, a list of dictionaries is
            returned, otherwise a list of tuples (RowType).
 
        Examples:
            ```
            >>> cursor.execute("SELECT * FROM employees ORDER BY emp_no")
            >>> head_rows = cursor.fetchmany(size=2)
            >>> remaining_rows = cursor.fetchall()
            ```
        NrQršs rSÚfetchallzMySQLCursorAbstract.fetchall" rrRc#ó„K—d}|js |j}    |j«}|jr |jn||f–—|j    «rA    |j«}|jr |jn||f–—|j    «rŒ@yy#t$rg}YŒ}wxYw#t$rg}YŒOwxYw­w)aýGenerates the result sets stream caused by the last `execute*()`.
 
        Returns:
            A 2-tuple; the first element is the statement that caused the
            result set, and the second is the result set itself.
 
            This method is used as part of the multi statement
            execution workflow - see example below.
 
        Example:
            Consider the following example where multiple statements are executed in one
            go:
 
            ```
                sql_operation = '''
                SET @a=1, @b='2024-02-01';
                SELECT @a, LENGTH('hello'), @b;
                SELECT @@version;
                '''
                with cnx.cursor() as cur:
                    cur.execute(sql_operation, map_results=True)
 
                    result_set, statement = cur.fetchall(), cur.statement
                    # do something with result set
                    ...
 
                    while cur.nextset():
                        result_set, statement = cur.fetchall(), cur.statement
                        # do something with result set
                        ...
            ```
 
            In this case, as an alternative to loading the result sets with `nextset()`
            in combination with a `while` loop, you can use `fetchsets()` which is
            equivalent to the previous approach:
 
            ```
                sql_operation = '''
                SET @a=1, @b='2024-02-01';
                SELECT @a, LENGTH('hello'), @b;
                SELECT @@version;
                '''
                with cnx.cursor() as cur:
                    cur.execute(sql_operation)
                    for statement, result_set in cur.fetchsets():
                        # do something with result set
            ```
        N)rrPr¨r/Únextset)r›Ústatement_cachedÚ
result_sets   rSÚ    fetchsetszMySQLCursorAbstract.fetchsets2 sÄèø€ðr ÐØ×%Ò%Ø#Ÿ~™~Ð ð    ØŸ™›ˆJð#×4Ò4ˆDNŠNÐ:JØ ðò    ðl‰lŒnð  Ø!Ÿ]™]›_
ð#'×"8Ò"8—’Ð>NØðò ð l‰lnøô ò    ØŠJð    ûô"ò  Ø’
ð  üsQ‚CžB®.CÁB/Á-.CÂCÂ B,Â)CÂ+B,Â,CÂ/ B=Â:CÂ<B=Â=Ccó—y)aReturns an iterator (of MySQLCursorAbstract subclass instances) for stored results.
 
        This method returns an iterator over results which are stored when
        callproc() is called. The iterator will provide `MySQLCursorBuffered`
        instances.
 
        Examples:
            ```
            >>> cursor.callproc('myproc')
            ()
            >>> for result in cursor.stored_results():
            ...     print result.fetchall()
            ...
            [(1,)]
            [(2,)]
            ```
        NrQršs rSÚstored_resultsz"MySQLCursorAbstract.stored_results rrRcó—y)aMakes the cursor skip to the next available set, discarding
        any remaining rows from the current set.
 
        This method is used as part of the multi statement
        execution workflow - see example below.
 
        Returns:
            It returns `None` if there are no more sets. Otherwise, it returns
            `True` and subsequent calls to the `fetch*()` methods will return
            rows from the next result set.
 
        Example:
            The following example runs many single statements in a
            single go and loads the corresponding result sets
            sequentially:
 
            ```
            sql_operation = '''
            SET @a=1, @b='2024-02-01';
            SELECT @a, LENGTH('hello'), @b;
            SELECT @@version;
            '''
            with cnx.cursor() as cur:
                cur.execute(sql_operation)
 
                result_set = cur.fetchall()
                # do something with result set
                ...
 
                while cur.nextset():
                    result_set = cur.fetchall()
                    # do something with result set
                    ...
            ```
 
            In case the operation is a single statement, you may skip the
            looping section as no more result sets are to be expected.
        NrQršs rSrªzMySQLCursorAbstract.nextset“ rrRcó—y©zNot Implemented.NrQ)r›Úsizess  rSÚ setinputsizesz!MySQLCursorAbstract.setinputsizes¼ rrRcó—yr²rQ)r›r¥Úcolumns   rSÚ setoutputsizez!MySQLCursorAbstract.setoutputsize¿ rrRcó—y)zResets the cursor to defaultNrQ)r›Úfrees  rSÚresetzMySQLCursorAbstract.reset rrRcó—|jS)a^This read-only property returns a list of tuples describing the columns in a
        result set.
 
        A tuple is described as follows::
        ```
        (column_name,
            type,
            None,
            None,
            None,
            None,
            null_ok,
            column_flags)  # Addition to PEP-249 specs
        ```
 
        See [1] for more details and examples.
 
        Returns:
            A list of tuples.
 
        References:
            [1]: https://dev.mysql.com/doc/connector-python/en/                connector-python-api-mysqlcursor-description.html
        )r€ršs rSÚ descriptionzMySQLCursorAbstract.descriptionÅ s€ð4נѠРrRcó—|jS)aReturns the number of rows produced or affected.
 
        This property returns the number of rows produced by queries
        such as `SELECT`, or affected rows when executing DML statements
        like `INSERT` or `UPDATE`.
 
        Note that for non-buffered cursors it is impossible to know the
        number of rows produced before having fetched them all. For those,
        the number of rows will be -1 right after execution, and
        incremented when fetching rows.
 
        Returns an integer.
        )rršs rSÚrowcountzMySQLCursorAbstract.rowcountá ó€ð~‰~ÐrRcó—|jS)aReturns the value generated for an AUTO_INCREMENT column.
 
        Returns the value generated for an AUTO_INCREMENT column by
        the previous INSERT or UPDATE statement or `None` when there is
        no such a value available.
 
        Returns a long value or `None`.
        )r‚ršs rSÚ    lastrowidzMySQLCursorAbstract.lastrowidò s€ð×#Ñ#Ð#rRcó—|jS)a¤Gets a list of tuples (WarningType) containing warnings generated
        by the previously executed operation.
 
        Examples:
            ```
            >>> cnx.get_warnings = True
            >>> cursor.execute("SELECT 'a'+1")
            >>> cursor.fetchall()
            [(1.0,)]
            >>> cursor.warnings
            [(u'Warning', 1292, u"Truncated incorrect DOUBLE value: 'a'")]
            ```
        ©rƒršs rSÚwarningszMySQLCursorAbstract.warningsþ r¿rRcó—|jS)z¹Returns the number of warnings.
 
        This property returns the number of warnings generated by the
        previously executed operation.
 
        Returns an integer value.
        )r„ršs rSÚ warning_countz!MySQLCursorAbstract.warning_count r´rRcóê—|j€y    |jj«jd«S#ttf$r+t t |jj««cYSwxYw)aŸReturns the latest executed statement.
 
        When a multiple statement is executed, the value of `statement`
        corresponds to the one that caused the current result set, provided
        the statement-result mapping was enabled. Otherwise, the value of
        `statement` matches the statement just as provided when calling
        `execute()` and it does not change as result sets are traversed.
        Nzutf-8)r…rÖrqrÔÚUnicodeDecodeErrorrrÑršs rSrPzMySQLCursorAbstract.statement sc€ð >‰>Ð !Øð    5Ø—>‘>×'Ñ'Ó)×0Ñ0°Ó9Ð 9øÜÔ 2Ð3ò    5Üœ˜TŸ^™^×1Ñ1Ó3Ó4Ò 4ð    5ús(8¸7A2Á1A2rÄrzcó—|jS)a®Returns a list of tuples (WarningType) containing warnings generated by
        the previously executed operation.
 
        Examples:
            ```
            >>> cnx.get_warnings = True
            >>> cursor.execute("SELECT 'a'+1")
            >>> cursor.fetchall()
            [(1.0,)]
            >>> cursor.fetchwarnings()
            [(u'Warning', 1292, u"Truncated incorrect DOUBLE value: 'a'")]
            ```
        rÃršs rSÚ fetchwarningsz!MySQLCursorAbstract.fetchwarnings+ r¿rRcóH—t|d«r|jjSy)z„Gets a list of query attributes from the connector's side.
 
        Returns:
            List of existing query attributes.
        r}N)Úhasattrr}r¶ršs rSÚget_attributesz"MySQLCursorAbstract.get_attributes< s#€ô 4˜Ô 'Ø×#Ñ#×/Ñ/Ð /ØrRcóЗt|t«s td«‚|t|t«std|›d«‚t    |d«r|j
j ||f«yy)aAdds a query attribute and its value into the connector's query attributes list.
 
        Query attributes must be enabled on the server - they are disabled by default. A
        warning is logged when setting query attributes for a server connection
        that does not support them.
 
        Args:
            name: Key name used to identify the attribute.
            value: A value converted to the MySQL Binary Protocol.
 
        Raises:
            ProgrammingError: If the value's conversion fails.
        ú&Parameter `name` must be a string typeNzObject z$ cannot be converted to a MySQL typer})rÐrÑr1ÚMYSQL_PY_TYPESrÌr}r¼)r›r¯r¹s   rSÚ add_attributez!MySQLCursorAbstract.add_attributeF sl€ô˜$¤Ô$Ü"Ð#KÓLÐ LØ Ð ¤Z°´~Ô%FÜ"ؘ%˜РDÐEóð ô 4˜Ô 'Ø × Ñ × /Ñ /°°u° Õ >ð (rRcóˆ—t|t«s td«‚t|d«r|jj |«Sy)a,Removes a query attribute by name from the connector's query attributes list.
 
        If no match, `None` is returned, else the corresponding value is returned.
 
        Args:
            name: Key name used to identify the attribute.
 
        Returns:
            value: Attribute's value.
        rÏr}N)rÐrÑr1rÌr}rÀr¿s  rSÚremove_attributez$MySQLCursorAbstract.remove_attribute] s>€ô˜$¤Ô$Ü"Ð#KÓLÐ LÜ 4˜Ô 'Ø×#Ñ#×6Ñ6°tÓ<Ð <ØrRcóR—t|d«r|jj«yy)z<Clears the list of query attributes on the connector's side.r}N)rÌr}rÂršs rSÚclear_attributesz$MySQLCursorAbstract.clear_attributesn s#€ä 4˜Ô 'Ø × Ñ × .Ñ .Õ 0ð (rR)NNN)rŽz!Optional[MySQLConnectionAbstract]r[rmr\rmrarb)rarzrcrlrn)rQ)r–rÑr—rraz0Optional[Union[Dict[str, RowItemType], RowType]]r`)rQF)r›rÑrœzFUnion[Sequence[MySQLConvertibleType], Dict[str, MySQLConvertibleType]]rr rarb)r›rÑr zPSequence[Union[Sequence[MySQLConvertibleType], Dict[str, MySQLConvertibleType]]]rarb)raz0Optional[Union[RowType, Dict[str, RowItemType]]])r )r¥rIraú,List[Union[RowType, Dict[str, RowItemType]]])rarÖ)razYGenerator[tuple[Optional[str], list[Union[RowType, Dict[str, RowItemType]]]], None, None])razIterator[MySQLCursorAbstract])raro)r³rrarrž)r¥rr¶rrarrk)r¹r rarb)rarrrf)razOptional[List[WarningType]]rg)raz.Optional[List[Tuple[str, BinaryProtocolType]]])r¯rÑr¹r>rarbre)'rMrNrOrPrœrŸr¨rur[rvr\rr˜r£ržr¡r£r¦r¨r­r¯rªr´r·rºr¼r¾rÁrÄrÆrPr:r#ràrÊrÍrÑrÓrÕrQrRrSrzrzw    sÅ„ñð9=Ø&*Ø'+ð    '-à5ð'-ð$ð'-ð%ð    '-ð
 
ó '-óRðà%ðð!ðð!ð    ð
 
ó ðò
"óð
"ð×Ñò%óð%ð@ò
#óð
#ð×Ñò&óð&ð@à.0ð1 Øð1 Ø#+ð1 à    9ò1 óð1 ðfò óð ðð Ø!ð C àðC ð
ðC ð ð C ð
òC óðC ðJð+ àð+ ð
ð+ ð
ò + óð+ ðZò óð ð$ó  óð  ðò  óð  ðKð
óKðZò óð ð&ò& óð& óPôô+ðò!óð!ð6òóðð ò    $óð    $ðòóðð ò#óð#ðò5óð5ñ Ð0Ð)×0Ñ0¸zÔJÓKòóLðó ó?ó.ô"1rRrz)lrPÚ
__future__rr®rrr~Úabcrrrrrr    Údecimalr
Úinspectr r Útypesr ÚtypingrrrrrrrrrrrrrrrrrrïÚsslrÌrÚ ImportErrorÚ    constantsr!r"r#r$r%r&r'r(r)r*Ú
conversionr+r,Úerrorsr-r.r/r0r1Úopentelemetry.constantsr2r3r4r5Úopentelemetry.instrumentationr6r7r8r9Ú _decoratingr:Ú optionfilesr;Ú tls_ciphersr<r=r>r?r@rArBrCrDrErFrGrHÚutilsrIrJrßròrñrðrRrTrpÚfloatrIrÑrÐrLrUrzrQrRrSú<module>résgðñ>2å"ã    Û    Ûç#ß4Ó4ÝÝÝÝ÷÷÷÷õð(Ðð    ÛáˆsMÔ" s§¢Ø!Ð÷
÷ ÷ ÷;÷õ÷óñ÷óõ$Ý*ßQ÷ ÷ ÷ ñ ÷1ððð 2ðð Oðð
Pðð
:ðð#ðð  Ø    ØØ Ø    ØØØØ ð
€ô^ôô~" ˜cô~" ôBFz 1˜#õz 1øðaIò    áð    úsÁ*D<Ä<EÅE