From 7013ac658d146f27657323dd05eef578231d6285 Mon Sep 17 00:00:00 2001 From: ppd0705 Date: Tue, 3 Sep 2019 23:35:27 +0800 Subject: [PATCH 1/4] set unbuffered_active = False before error raise --- pymysql/connections.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pymysql/connections.py b/pymysql/connections.py index d9ade9a2..4b321bd8 100644 --- a/pymysql/connections.py +++ b/pymysql/connections.py @@ -668,6 +668,8 @@ def _read_packet(self, packet_type=MysqlPacket): break packet = packet_type(bytes(buff), self.encoding) + if packet.is_error_packet() and self._result.unbuffered_active is True: + self._result.unbuffered_active = False packet.check_error() return packet From 07d76906f7baea907551201d7407eaca07447add Mon Sep 17 00:00:00 2001 From: ppd0705 Date: Wed, 4 Sep 2019 00:15:08 +0800 Subject: [PATCH 2/4] simplify --- pymysql/connections.py | 7 ++++--- pymysql/protocol.py | 13 ++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/pymysql/connections.py b/pymysql/connections.py index 4b321bd8..3cd6067d 100644 --- a/pymysql/connections.py +++ b/pymysql/connections.py @@ -668,9 +668,10 @@ def _read_packet(self, packet_type=MysqlPacket): break packet = packet_type(bytes(buff), self.encoding) - if packet.is_error_packet() and self._result.unbuffered_active is True: - self._result.unbuffered_active = False - packet.check_error() + if packet.is_error_packet(): + if self._result.unbuffered_active is True: + self._result.unbuffered_active = False + packet.raise_error() return packet def _read_bytes(self, num_bytes): diff --git a/pymysql/protocol.py b/pymysql/protocol.py index 8ccf7c4d..22c4285c 100644 --- a/pymysql/protocol.py +++ b/pymysql/protocol.py @@ -213,11 +213,14 @@ def is_error_packet(self): def check_error(self): if self.is_error_packet(): - self.rewind() - self.advance(1) # field_count == error (we already know that) - errno = self.read_uint16() - if DEBUG: print("errno =", errno) - err.raise_mysql_exception(self._data) + self.raise_error() + + def raise_error(self): + self.rewind() + self.advance(1) # field_count == error (we already know that) + errno = self.read_uint16() + if DEBUG: print("errno =", errno) + err.raise_mysql_exception(self._data) def dump(self): dump_packet(self._data) From d8fec893eadf1f052ae5559cb9b642adf627fde8 Mon Sep 17 00:00:00 2001 From: ppd0705 Date: Wed, 4 Sep 2019 02:12:52 +0800 Subject: [PATCH 3/4] skip None result --- pymysql/connections.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymysql/connections.py b/pymysql/connections.py index 3cd6067d..f1d0254b 100644 --- a/pymysql/connections.py +++ b/pymysql/connections.py @@ -669,7 +669,7 @@ def _read_packet(self, packet_type=MysqlPacket): packet = packet_type(bytes(buff), self.encoding) if packet.is_error_packet(): - if self._result.unbuffered_active is True: + if self._result is not None and self._result.unbuffered_active is True: self._result.unbuffered_active = False packet.raise_error() return packet From e652466b5538f208d9e698dd8da8c567f8777c3c Mon Sep 17 00:00:00 2001 From: ppd0705 Date: Thu, 12 Sep 2019 22:27:08 +0800 Subject: [PATCH 4/4] improve naming --- pymysql/connections.py | 2 +- pymysql/protocol.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pymysql/connections.py b/pymysql/connections.py index f1d0254b..93efd9be 100644 --- a/pymysql/connections.py +++ b/pymysql/connections.py @@ -671,7 +671,7 @@ def _read_packet(self, packet_type=MysqlPacket): if packet.is_error_packet(): if self._result is not None and self._result.unbuffered_active is True: self._result.unbuffered_active = False - packet.raise_error() + packet.raise_for_error() return packet def _read_bytes(self, num_bytes): diff --git a/pymysql/protocol.py b/pymysql/protocol.py index 22c4285c..e302edab 100644 --- a/pymysql/protocol.py +++ b/pymysql/protocol.py @@ -213,9 +213,9 @@ def is_error_packet(self): def check_error(self): if self.is_error_packet(): - self.raise_error() + self.raise_for_error() - def raise_error(self): + def raise_for_error(self): self.rewind() self.advance(1) # field_count == error (we already know that) errno = self.read_uint16()