Fixed problem with SSCursor not working with multiple result sets.

This commit is contained in:
mathieu longtin
2014-11-06 14:41:02 -05:00
parent 926b4bc061
commit ed23ff7c36
3 changed files with 19 additions and 4 deletions

View File

@@ -714,8 +714,8 @@ class Connection(object):
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
return self._affected_rows
def next_result(self):
self._affected_rows = self._read_query_result()
def next_result(self, unbuffered=False):
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
return self._affected_rows
def affected_rows(self):

View File

@@ -79,7 +79,7 @@ class Cursor(object):
def setoutputsizes(self, *args):
"""Does nothing, required by DB API."""
def nextset(self):
def _nextset(self, unbuffered=False):
"""Get the next query set"""
conn = self._get_db()
current_result = self._result
@@ -87,10 +87,13 @@ class Cursor(object):
return None
if not current_result.has_next:
return None
conn.next_result()
conn.next_result(unbuffered=unbuffered)
self._do_get_result()
return True
def nextset(self):
return self._nextset(False)
def _escape_args(self, args, conn):
if isinstance(args, (tuple, list)):
return tuple(conn.escape(arg) for arg in args)
@@ -366,6 +369,9 @@ class SSCursor(Cursor):
self._do_get_result()
return self.rowcount
def nextset(self):
return self._nextset(unbuffered=True)
def read_next(self):
""" Read next row """
return self._conv_row(self._result._read_rowdata_packet_unbuffered())

View File

@@ -89,6 +89,15 @@ class TestSSCursor(base.PyMySQLTestCase):
self.assertEqual(cursor.rowcount, len(data),
'executemany failed. cursor.rowcount != %s' % (str(len(data))))
# Test multiple datasets
cursor.execute('SELECT 1; SELECT 2; SELECT 3')
self.assertListEqual(list(cursor), [(1, )])
self.assertTrue(cursor.nextset())
self.assertListEqual(list(cursor), [(2, )])
self.assertTrue(cursor.nextset())
self.assertListEqual(list(cursor), [(3, )])
self.assertFalse(cursor.nextset())
finally:
cursor.execute('DROP TABLE tz_data')
cursor.close()