Fixed problem with SSCursor not working with multiple result sets.
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user