From 0eba140466f9ad58dcb996094d1bbe2f518d3244 Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Mon, 4 Jan 2016 06:16:31 +0900 Subject: [PATCH] fix protocol out of sync when error happens while load local infile. --- pymysql/connections.py | 8 ++++++-- pymysql/tests/test_load_local.py | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pymysql/connections.py b/pymysql/connections.py index e036ac1..2c95014 100644 --- a/pymysql/connections.py +++ b/pymysql/connections.py @@ -1327,7 +1327,11 @@ class MySQLResult(object): def _read_load_local_packet(self, first_packet): load_packet = LoadLocalPacketWrapper(first_packet) sender = LoadLocalFile(load_packet.filename, self.connection) - sender.send_data() + try: + sender.send_data() + except: + self.connection._read_packet() # skip ok packet + raise ok_packet = self.connection._read_packet() if not ok_packet.is_ok_packet(): # pragma: no cover - upstream induced protocol error @@ -1448,7 +1452,7 @@ class LoadLocalFile(object): try: with open(self.filename, 'rb') as open_file: - chunk_size = self.connection.max_allowed_packet + chunk_size = conn.max_allowed_packet packet = b"" while True: diff --git a/pymysql/tests/test_load_local.py b/pymysql/tests/test_load_local.py index 1115bb3..601b77c 100644 --- a/pymysql/tests/test_load_local.py +++ b/pymysql/tests/test_load_local.py @@ -61,6 +61,7 @@ class TestLoadLocal(base.PyMySQLTestCase): self.assertTrue("Incorrect integer value" in str(w[-1].message)) finally: c.execute("DROP TABLE test_load_local") + c.close() if __name__ == "__main__":