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
U
£ý°dþ‹ã@sèUdZddlZddlZddlmZmZddlmZmZm    Z    m
Z
m Z m Z m Z ddlmZddlmZddlmZmZmZmZmZdd    lmZmZmZmZdd
lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(d Z)e*e+d <Gd d„dƒZ,dS)z,Implements the MySQL Client/Server protocol.éN)ÚDecimalÚDecimalException)ÚAnyÚDictÚListÚOptionalÚSequenceÚTupleÚUnioné)Úutils)Úget_auth_plugin)ÚPARAMETER_COUNT_AVAILABLEÚ
ClientFlagÚ    FieldFlagÚ    FieldTypeÚ    ServerCmd)Ú DatabaseErrorÚInterfaceErrorÚProgrammingErrorÚ get_exception) Ú ConnAttrsTypeÚDescriptionTypeÚ EofPacketTypeÚ HandShakeTypeÚ OkPacketTypeÚ%ParseValueFromBinaryResultPacketTypesÚ QueryAttrTypeÚ
SocketTypeÚStatsPacketTypeÚ
StrOrBytesÚ!SupportedMysqlBinaryProtocolTypesé
ÚPROTOCOL_VERSIONc@seZdZdZeeeeedœdd„ƒZ    eeee
eeeeeeeee edœ    dd„ƒZ d_ee ee
eeeeeeee eeeeeeed œ dd„Zeeedœdd„ƒZed`eeeedœdd„ƒZedaeeeedœdd„ƒZedbeeedœdd„ƒZdce ee
eeeeeee eeeeeeedœ dd„Zeee d œd!d"„ƒZeeeeefd œd#d$„ƒZeeed œd%d&„ƒZeeeed œd'd(„ƒZeddeeed*œd+d,„ƒZeed œd-d.„Zedeee e d0œd1d2„ƒZ!dfe"eed3feee#eeed3feefd4œd5d6„Z$eeeeeefd7œd8d9„ƒZ%eeeeee&fd7œd:d;„ƒZ'edgeeeee(fd=œd>d?„ƒZ)eeeeeee*e+j,e+j+ffd@œdAdB„ƒZ-eeeee+j.fd œdCdD„ƒZ/dhe#eeeee0d3fdEœdFdG„Z1die"e#eeeee#ee0d3feefdHœdIdJ„Z2eee3eefd œdKdL„ƒZ4eeeeeefdMœdNdO„ƒZ5ee*e+j,e+j+feeefdMœdPdQ„ƒZ6ee*e+j.e+j7feeefdMœdRdS„ƒZ8eeeeedTœdUdV„ƒZ9djee:e;e:e<eee3eee feee=e edXœ    dYdZ„Z>eeeeefd œd[d\„ƒZ?eeed œd]d^„ƒZ@dS)kÚ MySQLProtocolzRImplements MySQL client/server protocol
 
    Create and parses MySQL packets.
    )Ú client_flagsÚdatabaseÚreturncCs |tj@r|r| d¡dSdS)z.Prepare database string for handshake responseÚutf8ó)rZCONNECT_WITH_DBÚencode)r%r&©r+úOd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\mysql/connector/protocol.pyÚ_connect_with_dbHszMySQLProtocol._connect_with_db)    r%ÚusernameÚpasswordr&Úauth_plugin_classÚ auth_pluginÚ    auth_dataÚ ssl_enabledr'c
Cs”|sdSz$t||ƒ|||||d}| ¡}    Wn6ttfk
rb}
ztd|
›ƒ|
‚W5d}
~
XYnX|tj@rˆt|    ƒ} t d| ¡|    } n|    d} | S)z#Prepare the authentication responser))r.r/r&r3zFailed authentication: Nú<B)    r Ú auth_responseÚ    TypeErrorrrÚSECURE_CONNECTIONÚlenÚstructÚpack) r%r.r/r&r0r1r2r3ÚauthZplugin_auth_responseÚerrZresplenr5r+r+r,Ú_auth_responseOs$ û "
zMySQLProtocol._auth_responseNé-ré@F) Ú    handshaker.r/r&Úcharsetr%Úmax_allowed_packetr3r1Ú
conn_attrsr0r'c  Cs*|dkr i}z|d} |    p |d}    Wn8ttfk
r\} ztd| ›dƒd‚W5d} ~ XYnX|sfd}z| d¡}Wntk
rŒ|}YnXd}t|ƒ}t d    |›|›d
||||¡}|| ||||| |    | |¡7}||     ||¡7}|t
j @r||     d¡d 7}|t
j @r&|
dk    r&||  |
¡7}|S) z"Make a MySQL Authentication packetNr2r1ú&Handshake misses authentication info (ú)ór(Zxxxxxxxxxxxxxxxxxxxxxxz<IIHÚsxr))r6ÚKeyErrorrr*ÚAttributeErrorr8r9r:r=r-rÚ PLUGIN_AUTHÚ CONNECT_ARGSÚmake_conn_attrs)Úselfr@r.r/r&rAr%rBr3r1rCr0r2r<Úusername_bytesZfillerÚ username_lenÚpacketr+r+r,Ú    make_authtsT
ÿþ
ûø  zMySQLProtocol.make_auth)rCr'cs²ˆD]}ˆ|dkrdˆ|<qt‡fdd„ˆDƒƒtˆ ¡ƒtˆ ¡ƒ}t d|¡}ˆD]P}|t dt|ƒ¡7}|| d¡7}|t dtˆ|ƒ¡7}|ˆ| d¡7}q\|S)z Encode the connection attributesNÚc3s"|]}t|ƒtˆ|ƒVqdS)N)r8)Ú.0Úx©rCr+r,Ú    <genexpr>¼sz0MySQLProtocol.make_conn_attrs.<locals>.<genexpr>r4r()Úsumr8ÚkeysÚvaluesr9r:r*)rCÚ    attr_nameZconn_attrs_lenZconn_attrs_packetr+rUr,rLµs  
 
ÿ
þÿ zMySQLProtocol.make_conn_attrs)rAr%rBr'cCs"t |¡t |¡t |¡dS)z Make a SSL authentication packets©r Ú    int4storeÚ    int2store)rAr%rBr+r+r,Ú make_auth_sslÉsÿþýÿzMySQLProtocol.make_auth_ssl)ÚcommandÚargumentr'cCst |¡}|dk    r||7}|S)z(Make a MySQL packet containing a commandN)r Ú    int1store)r_r`Údatar+r+r,Ú make_commandÕs
zMySQLProtocol.make_commandr )Ú statement_idÚrowsr'cCst |¡t |¡S)z0Make a MySQL packet with Fetch Statement command)r r\)rdrer+r+r,Úmake_stmt_fetchÝszMySQLProtocol.make_stmt_fetch) r@r.r/r&rAr%r3r1rCr0r'c  Cs"z|d} |p|d}Wn8ttfk
rP} ztd| ›dƒd‚W5d} ~ XYnX|sZd}z| d¡} Wntk
r€|} YnXt| ƒ}t d|›d    tj    | ¡}|| 
|||||
|| |¡7}||  ||¡7}|t d
|¡7}|t j @rú|| d¡d 7}|t j@r|    dk    r|| |    ¡7}|S) z0Make a MySQL packet with the Change User commandr2r1rDrENrFr(r4rGú<Hr))r6rHrr*rIr8r9r:rZ CHANGE_USERr=r-rrJrKrL)rMr@r.r/r&rAr%r3r1rCr0r2r<rNrOrPr+r+r,Úmake_change_userâsL
ÿþ
 
ýø 
zMySQLProtocol.make_change_user)rPr'c        Cs’i}t d|dd…¡d|d<|dtkrDtd|d›dt›ƒ‚tj|dd…dd    \}|d
<t d |dd …¡\|d <}}|d<|d<}}|d
 ¡|d
<|d d…}t ||¡}d}|tj    @r|rÜt
d|dƒnd}|d|…}||d…}|ddkr|dd…}|tj @rrd|krH|d
  d¡rHd|}|d<ntj|dd    \}|d<|d d¡|d<nd|d<|||d<||d<|S)zParse a MySQL Handshake-packetú<xxxxBréÚprotocolz$Protocol mismatch; server version = z, client version = Nr)©ÚendZserver_version_originalz<I8sx2sBH2sBxxxxxxxxxxéZserver_threadidrAZ server_statusrFé ééÿÿÿÿz5.5.8r1úutf-8Zmysql_native_passwordr2Ú capabilities) r9Úunpackr#rr Ú read_stringÚdecodeZintreadrr7ÚminrJÚ
startswith)    rPÚresZ
auth_data1Z capabilities1Z capabilities2Zauth_data_lengthrsZ
auth_data2Úsizer+r+r,Úparse_handshakesP ÿ
ÿ ø      ÿ zMySQLProtocol.parse_handshakecCs@t |d¡\}}|dkr tdƒ‚tj|dd\}}|| d¡fS)z$Parse a MySQL AuthNextFactor packet.r éz.Failed parsing AuthNextFactor packet (invalid)r)rlrr)r Úread_intrrurv)rPÚstatusr1r+r+r,Úparse_auth_next_factorSs
z$MySQLProtocol.parse_auth_next_factorc
Csê|ddkstdƒ‚i}z t d|dd…¡d|d<t |dd…¡\}|d<t |¡\}|d    <t d
|dd…¡\|d <|d <|dd…}|r¶t |¡\}|d <|d  d¡|d <Wn,tk
rä}ztdƒ|‚W5d}~XYnX|S)zParse a MySQL OK-packetérz#Failed parsing OK packet (invalid).rirjZ field_countNZ affected_rowsZ    insert_idz<HHÚ status_flagÚ warning_countZinfo_msgrrzFailed parsing OK packet.)rr9rtr Ú read_lc_intÚread_lc_stringrvÚ
ValueError)rPZ    ok_packetr<r+r+r,Úparse_ok\s$ ý zMySQLProtocol.parse_okc
CsTzt |dd…¡d}|WStjtfk
rN}ztdƒ|‚W5d}~XYnXdS)z=Parse a MySQL packet with the number of columns in result setr€Nr zFailed parsing column count)r rƒr9Úerrorr…r)rPÚcountr<r+r+r,Úparse_column_countss
z MySQLProtocol.parse_column_countrr)rPÚencodingr'c    Cs¼t |dd…¡\}}t |¡\}}t |¡\}}t |¡\}}t |¡\}}t |¡\}}zt d|¡\}}}}}Wn tjk
r–tdƒd‚YnX| |¡|dddd|tj@||f    S)zParse a MySQL column-packetr€Nz    <xHIBHBxxz!Failed parsing column information)    r r„r9rtr‡rrvrZNOT_NULL)rPrŠÚ_ÚnamerAZ column_typeÚflagsr+r+r,Ú parse_column|s6
úû
÷zMySQLProtocol.parse_columnc
Csš|ddkr| |¡Sd}i}zt d|¡}Wn.tjk
r\}zt|ƒ|‚W5d}~XYnX|ddkrvt|ƒdks~t|ƒ‚|d    |d
<|d |d <|S) zParse a MySQL EOF-packetr€rzFailed parsing EOF packet.z<xxxBBHHNr éþé    r|r‚ér)r†r9rtr‡rr8)rMrPÚerr_msgryÚunpackedr<r+r+r,Ú    parse_eofs 
  zMySQLProtocol.parse_eofT)rPÚ with_headerr'c    Cs d}i}dg}d}|r*|dd… d¡}n
| d¡}|D]â}zdd„| dd    ¡Dƒ\}}Wn,tk
r†}zt|ƒ|‚W5d}~XYnX| d
¡}zt|ƒ||<Wq8ttfk
rzt| d
¡ƒ||<WnDtk
r}z$t|›d |›d t|ƒ›d ƒ|‚W5d}~XYnXYq8Xq8|S)zParse the statistics packetz)Failed getting COM_STATISTICS informationrFr€Ns  cSsg|] }| ¡‘qSr+)Ústrip)rSÚvr+r+r,Ú
<listcomp>¿sz2MySQLProtocol.parse_statistics.<locals>.<listcomp>ó:r|rrz (ú:rE)    Úsplitr…rrvÚintrHrrÚrepr)    rPr•ÚerrmsgryÚpairsZlblÚpairÚvalr<r+r+r,Úparse_statistics±s*
 
:zMySQLProtocol.parse_statistics.)ÚsockÚversionrˆr'c Cs"|}g}d}d}d}|s ||kr$q| ¡}    |     d¡rš|    dd…g}
| ¡}    |     d¡rr|
 |    dd…¡| ¡}    qL|
 |    dd…¡t tdƒ |
¡¡}n>|    ddkrÂ|    ddkrÂ| |    ¡}d}nd}t |    dd…¡}|dkrô|dk    rô| |¡n|dkr|dkrt|    ƒ‚|d7}q||fS)    z¶Read MySQL text result
 
        Reads all or given number of rows from the socket.
 
        Returns a tuple with 2 elements: a list with all rows and
        the EOF packet.
        Nrsÿÿÿr€rFrér )    ÚrecvrxÚappendr Zread_lc_string_listÚ    bytearrayÚjoinr”r) rMr£r¤rˆr‹reÚeofZrowdataÚirPZdatasr+r+r,Úread_text_resultÎs6  
 
 
 
 
zMySQLProtocol.read_text_result)rPÚfieldr'cCsž|dtjkrd}d}nL|dtjkr0d}d}n4|dtjtjfkrNd}d}n|dtjkrdd}d}|d    tj@rz| ¡}||d
…t     
||d |…¡d fS) z%Parse an integer from a binary packetr ú<bú<hr|ú<ir€ú<qrpr¥Nr) rÚTINYÚSHORTÚINT24ÚLONGÚLONGLONGrZUNSIGNEDÚupperr9rt)rPr­Úformat_Úlengthr+r+r,Ú_parse_binary_integer÷sz#MySQLProtocol._parse_binary_integercCsD|dtjkrd}d}nd}d}||d…t ||d|…¡dfS)z)Parse a float/double from a binary packetr rpú<dr€z<fNr)rÚDOUBLEr9rt)rPr­r¹r¸r+r+r,Ú_parse_binary_floats z!MySQLProtocol._parse_binary_floatr()rPrAr'cCs t |¡\}}|t| |¡ƒfS)z(Parse a New Decimal from a binary packet)r r„rrv)rPrAÚvaluer+r+r,Ú_parse_binary_new_decimalsz'MySQLProtocol._parse_binary_new_decimal)rPÚ
field_typer'c    Csô|d}d}|dkrpt d|dd…¡d}|d}|d}|tjtjfkr^tj|||d}qàtj|||d}np|dkràd}|d    kr t d
|d |d…¡d}tjt d|dd…¡d|d|d|d |d |d|d}||dd…|fS)z&Parse a timestamp from a binary packetrNr€rgr r‘)ÚyearÚmonthÚdayr¥é ú<Irprjé)rÁrÂrÃÚhourÚminuteÚsecondÚ microsecond)r9rtrÚDATETIMEÚ    TIMESTAMPÚdatetimeÚdate)rPrÀr¹r¾rÁrÂrÃÚmcsr+r+r,Ú_parse_binary_timestamp$s.ù
z%MySQLProtocol._parse_binary_timestampcCs´|d}|s |dd…t ¡fS|d|d…}d}|dkrTt d|dd…¡d}t d|dd…¡d}|ddkr€|d9}tj||d||d    |dd
}||dd…|fS) z'Parse a time value from a binary packetrr NrprÅrjrqr¥rÆ)ÚdaysÚsecondsÚ microsecondsÚminutesÚhours)rÍÚ    timedeltar9rt)rPr¹rbrÏrÑÚtmpr+r+r,Ú_parse_binary_timeDs$ ûz MySQLProtocol._parse_binary_time)ÚfieldsrPrAr'c
    CsÐt|ƒddd}dd„|d|…Dƒ}||d…}g}d}t|ƒD]~\}}    |t|ddƒd|dd>@r€| d¡qF|    dtjtjtjtjtj    fkr¼| 
||    ¡\}}| |¡qF|    dtj tj fkrì|  ||    ¡\}}| |¡qF|    dtjtjfkr| ||¡\}}| |¡qF|    dtjtjtjfkrX| ||    d¡\}}| |¡qF|    dtjkr‚| |¡\}}| |¡qFt |¡\}}z| | |¡¡WqFtk
rÄ| |¡YqFXqFt|ƒS)    z(Parse values from a binary result packetr¥r|rpcSsg|] }t|ƒ‘qSr+)rœ)rSr«r+r+r,r˜csz6MySQLProtocol._parse_binary_values.<locals>.<listcomp>rNr )r8Ú    enumeraterœr§rr²r³r´rµr¶rºr¼ÚFLOATr½ÚDECIMALZ
NEWDECIMALr¿rËÚDATErÌrÐÚTIMErØr r„rvÚUnicodeDecodeErrorÚtuple)
rMrÙrPrAZnull_bitmap_lengthÚ null_bitmaprYr¾Úposr­r+r+r,Ú_parse_binary_values[sP $
û   ý  z"MySQLProtocol._parse_binary_values)r£ÚcolumnsrˆrAr'c
Cs´g}d}d}d}|dk    rq¬||kr$q¬| ¡}    |    ddkrH| |    ¡}d}n&|    ddkrnd}| ||    dd…|¡}|dkrŠ|dk    rŠ| |¡n|dkr¢|dkr¢t|    ƒ‚|d7}q||fS)zwRead MySQL binary protocol result
 
        Reads all or given number of binary resultset rows from the socket.
        Nrr€rrjr )r¦r”rãr§r)
rMr£rärˆrArerªrYr«rPr+r+r,Úread_binary_resultŽs* 
 
z MySQLProtocol.read_binary_resultc
Cs²|ddkstdƒ‚i}zht |dd…d¡\}|d<t |d¡\}|d<t |d¡\}|d    <|d
d…}t |d¡\}|d <Wn,tk
r¬}ztdƒ|‚W5d}~XYnX|S) z'Parse a MySQL Binary Protocol OK packetr€rzFailed parsing Binary OK packetrjNrdr|Z num_columnsZ
num_paramsr r‚)rr r}r…)rPZok_pktr<r+r+r,Úparse_binary_prepare_ok³s  z%MySQLProtocol.parse_binary_prepare_ok)r¾r'cCs´d}d}|dkrX|dkr$d}tj}q¢|dkr8d}tj}q¢|dkrLd}tj}q¢d    }tj}nJd
}|d krpd }tj}n2|d kr„d}tj}n|dkr˜d}tj}n
tj}d}t ||¡||fS)z0Prepare an integer for the MySQL binary protocolNri€ÿÿÿr®i€ÿÿr¯i€r°r±é€éÿr4iÿÿrglÿÿrÅz<Q)rr²r³rµr¶r9r:)r¾rÀrr¸r+r+r,Úprepare_binary_integerÅs6z$MySQLProtocol.prepare_binary_integercCs¼t|tjƒrtj}nt|tjƒr(tj}ntdƒ‚t |j    ¡t 
|j ¡t 
|j ¡}t|tjƒr¢|t 
|j ¡t 
|j¡t 
|j¡}|jdkr¢|t |j¡7}t 
t|ƒ¡|}||fS)aƒPrepare a timestamp object for the MySQL binary protocol
 
        This method prepares a timestamp of type datetime.datetime or
        datetime.date for sending over the MySQL binary protocol.
        A tuple is returned with the prepared value and field type
        as elements.
 
        Raises ValueError when the argument value is of invalid type.
 
        Returns a tuple.
        z2Argument must a datetime.datetime or datetime.dater)Ú
isinstancerÍrrËrÎrÝr…r r]rÁrarÂrÃrÇrÈrÉrÊr\r8)r¾rÀÚpackedr+r+r,Úprepare_binary_timestampçs0  
 
ÿ
þÿ 
ÿ
þ
ýÿ
z&MySQLProtocol.prepare_binary_timestampc    Cst|tjtjfƒstdƒ‚tj}d}d}d}t|tjƒrž|jdkrFd}t|j    dƒ\}}t|dƒ\}}|t
  t |jƒ¡t
  |¡t
  |¡t
  |¡7}|j}n8|t
  d¡t
  |j¡t
  |j¡t
  |j¡7}|j}|rè|t
  |¡7}t
  |¡|}t
  t|ƒ¡|}||fS)aPrepare a time object for the MySQL binary protocol
 
        This method prepares a time object of type datetime.timedelta or
        datetime.time for sending over the MySQL binary protocol.
        A tuple is returned with the prepared value and field type
        as elements.
 
        Raises ValueError when the argument value is of invalid type.
 
        Returns a tuple.
        z3Argument must a datetime.timedelta or datetime.timerNrFr ié<)rêrÍrÖÚtimer…rrÞrÑÚdivmodrÒr r\ÚabsrarÓrÇrÈrÉrÊr8)    r¾rÀÚnegativerÏrërÕÚ    remainderZminsZsecsr+r+r,Úprepare_binary_timesH 
ÿþýÿ
ÿ
þ
ýÿz!MySQLProtocol.prepare_binary_time)Ú    statementÚparamrbr'cCst |¡t |¡|}|S)zMPrepare long data for prepared statements
 
        Returns a string.
        r[)rôrõrbrPr+r+r,Úprepare_stmt_send_long_dataCsz)MySQLProtocol.prepare_stmt_send_long_datar+)    rdrbÚ
parametersrÚlong_data_usedrAÚ query_attrsÚconverter_str_fallbackr'c        Csd}    dgt|ƒdd}
g} g} d} t|ƒ}g}|s:|n|t}|dkrNd}|dkrZi}|r”t|ƒ}|D]\}}| |¡qjdgt|ƒdd}
|sž|r*|t|ƒkr²td    ƒ‚t|ƒD]l\}}d}|dkr |
|dd|d>O<|  t tj    ¡t |¡¡qº||kr6||dr,tj
}ntj }nšt |t ƒr`| |¡\} }}|  | ¡npt |tƒr˜| |¡}|  t t|ƒ¡|¡tj}n8t |tƒrÆ|  t t|ƒ¡|¡tj
}n
t |tƒr|  t tt|ƒ |¡ƒ¡t|ƒ |¡¡tj}nÊt |tƒr,|  t d
|¡¡tj}n¤t |tjtjfƒrZ| |¡\} }|  | ¡nvt |tjtjfƒrˆ| |¡\} }|  | ¡nH|r¼t|ƒ |¡}|  t t|ƒ¡|¡tj }nt d |j!j"›d ƒ‚|  t |¡t |¡¡|rº|d|krº|||d |¡}| t t|ƒ¡|¡qºt #|¡t |¡t #|    ¡}|dk    r`|t|ƒ}n|}|r
|dk    r‚|t |¡7}|d $d d„|
Dƒ¡t d¡7}d}| D]H}||7}|dk    rê|d|krâ||||7}n|d7}|d7}q¬| D]}||7}qú|S)z6Make a MySQL packet with the Statement Execute commandr rr¥rprFZutf8mb4r(NzTFailed executing prepared statement: data values does not match number of parametersr»z&MySQL binary protocol can not handle 'z    ' objectscSsg|]}t d|¡‘qS)ÚB)r9r:)rSÚbitr+r+r,r˜¼sz3MySQLProtocol.make_stmt_execute.<locals>.<listcomp>r))%r8rÚlistr§rrÚr rarÚNULLZBLOBÚSTRINGrêrœréÚstrr*Zlc_intZVARCHARÚbytesrrÜÚfloatr9r:r¼rÍrÎrìrÖrîrórÚ    __class__Ú__name__r\r©)rMrdrbr÷rrørArùrúZiteration_countrárYÚtypesrëZdata_lenZquery_attr_namesr‹Zattr_valrâr¾Ú_flagsrÀrŒrPZparameter_countrˆZa_typeZa_valuer+r+r,Úmake_stmt_executeNsÎ   
 ÿ
ÿ
 
 ü 
 
 
  ÿÿ   ÿÿþÿ
 
 ÿþ
  zMySQLProtocol.make_stmt_executecCsX|ddkstdƒ‚tj|dd…dd\}}|rJ|dd    krJ|dd…}| d
¡|fS) z&Parse a MySQL AuthSwitchRequest-packetr€rz'Failed parsing AuthSwitchRequest packetrjNr)rlrqrr()rr rurv)rPZ plugin_namer+r+r,Úparse_auth_switch_requestÑs   z'MySQLProtocol.parse_auth_switch_requestcCs |ddkstdƒ‚|dd…S)z!Parse a MySQL AuthMoreData-packetr€r z"Failed parsing AuthMoreData packetrjN)r)rPr+r+r,Úparse_auth_more_dataÝs z"MySQLProtocol.parse_auth_more_data)
NNNr>rr?FNNN)r>rr?)N)r )    NNNr>rFNNN)rr)T)r )r()rr)r rr)r+r+rNr(NF)ArÚ
__module__Ú __qualname__Ú__doc__Ú staticmethodrœrrrr-r Úboolr=rrrQrLr¨r^rcrfrhr{r    rrr†r‰rrŽrr”rr¢rrr¬rºrr½rr¿r
rÍrÎrÐrÖrØrrãrårrærérìrîrórörr!rrrrr    r+r+r+r,r$Bsj÷'ôó Aÿþ õô =3 ÿ
þ )
þ
þ ÿ
þýü
û 7ûÿÿú %!
þ(
þ2þ ÷ö  r$)-r rÍr9ÚdecimalrrÚtypingrrrrrr    r
rRr Zauthenticationr Ú    constantsrrrrrÚerrorsrrrrrrrrrrrrrrr r!r#rœÚ__annotations__r$r+r+r+r,Ú<module>s$  4