File tree 4 files changed +22
-13
lines changed
4 files changed +22
-13
lines changed Original file line number Diff line number Diff line change @@ -765,8 +765,6 @@ def _read_packet(self, packet_type=MysqlPacket):
765
765
dump_packet (recv_data )
766
766
buff += recv_data
767
767
# https://dev.mysql.com/doc/internals/en/sending-more-than-16mbyte.html
768
- if bytes_to_read == 0xFFFFFF :
769
- continue
770
768
if bytes_to_read < MAX_PACKET_LEN :
771
769
break
772
770
Original file line number Diff line number Diff line change @@ -136,7 +136,14 @@ def _map_error(exc, *errors):
136
136
137
137
def raise_mysql_exception (data ):
138
138
errno = struct .unpack ("<h" , data [1 :3 ])[0 ]
139
- errval = data [9 :].decode ("utf-8" , "replace" )
139
+ # https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_basic_err_packet.html
140
+ # Error packet has optional sqlstate that is 5 bytes and starts with '#'.
141
+ if data [3 ] == 0x23 : # '#'
142
+ # sqlstate = data[4:9].decode()
143
+ # TODO: Append (sqlstate) in the error message. This will be come in next minor release.
144
+ errval = data [9 :].decode ("utf-8" , "replace" )
145
+ else :
146
+ errval = data [3 :].decode ("utf-8" , "replace" )
140
147
errorclass = error_map .get (errno )
141
148
if errorclass is None :
142
149
errorclass = InternalError if errno < 1000 else OperationalError
Original file line number Diff line number Diff line change 1
- import unittest
2
-
1
+ import pytest
3
2
from pymysql import err
4
3
5
4
6
- __all__ = ["TestRaiseException" ]
7
-
5
+ def test_raise_mysql_exception ():
6
+ data = b"\xff \x15 \x04 #28000Access denied"
7
+ with pytest .raises (err .OperationalError ) as cm :
8
+ err .raise_mysql_exception (data )
9
+ assert cm .type == err .OperationalError
10
+ assert cm .value .args == (1045 , "Access denied" )
8
11
9
- class TestRaiseException (unittest .TestCase ):
10
- def test_raise_mysql_exception (self ):
11
- data = b"\xff \x15 \x04 #28000Access denied"
12
- with self .assertRaises (err .OperationalError ) as cm :
13
- err .raise_mysql_exception (data )
14
- self .assertEqual (cm .exception .args , (1045 , "Access denied" ))
12
+ data = b"\xff \x10 \x04 Too many connections"
13
+ with pytest .raises (err .OperationalError ) as cm :
14
+ err .raise_mysql_exception (data )
15
+ assert cm .type == err .OperationalError
16
+ assert cm .value .args == (1040 , "Too many connections" )
Original file line number Diff line number Diff line change @@ -56,6 +56,8 @@ version = {attr = "pymysql.VERSION_STRING"}
56
56
exclude = [
57
57
" pymysql/tests/thirdparty" ,
58
58
]
59
+
60
+ [tool .ruff .lint ]
59
61
ignore = [" E721" ]
60
62
61
63
[tool .pdm .dev-dependencies ]
You can’t perform that action at this time.
0 commit comments