From a2531af5c656e5c00eae07b9a3c77013e28c9e1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Sat, 26 Dec 2015 12:04:40 +0100 Subject: [PATCH] Fix for MySQL Bug #79780 --- lib/mysql/connector/cursor_cext.py | 5 ++++- tests/cext/test_cext_cursor.py | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/mysql/connector/cursor_cext.py b/lib/mysql/connector/cursor_cext.py index 4dd6e9a..3f23a8f 100644 --- a/lib/mysql/connector/cursor_cext.py +++ b/lib/mysql/connector/cursor_cext.py @@ -204,7 +204,10 @@ def _execute_iter(self): if exc.errno != CR_NO_RESULT_SET: raise i += 1 - self._executed = executed_list[i].strip() + try: + self._executed = executed_list[i].strip() + except IndexError: + self._executed = executed_list[0] yield self return diff --git a/tests/cext/test_cext_cursor.py b/tests/cext/test_cext_cursor.py index 2584c57..c22edbc 100644 --- a/tests/cext/test_cext_cursor.py +++ b/tests/cext/test_cext_cursor.py @@ -29,6 +29,7 @@ import unittest from mysql.connector import errors, errorcode +from .. import PY2 import tests @@ -142,6 +143,28 @@ def test_execute(self): cur.close() + cur = self._get_cursor(self.cnx) + cur.execute("DROP PROCEDURE IF EXISTS multi_results") + procedure = ( + "CREATE PROCEDURE multi_results () " + "BEGIN SELECT 1; SELECT 'ham'; END" + ) + cur.execute(procedure) + exp_stmt = "CALL multi_results()" + if not PY2: + exp_stmt = b"CALL multi_results()" + exp_result = [[(1,)], [(u'ham',)]] + results = [] + for result in cur.execute(exp_stmt, multi=True): + if result.with_rows: + self.assertEqual(exp_stmt, result._executed) + results.append(result.fetchall()) + + self.assertEqual(exp_result, results) + cur.execute("DROP PROCEDURE multi_results") + + cur.close() + def test_executemany__errors(self): self.cnx.get_warnings = True cur = self._get_cursor(self.cnx)