Path: blob/main/singlestoredb/mysql/tests/test_nextset.py
469 views
# type: ignore1import pytest23import singlestoredb.mysql as sv4from singlestoredb.mysql.constants import CLIENT5from singlestoredb.mysql.tests import base678class TestNextset(base.PyMySQLTestCase):910def test_nextset(self):11con = self.connect(12init_command='SELECT "bar"; SELECT "baz"',13client_flag=CLIENT.MULTI_STATEMENTS,14)15cur = con.cursor()16cur.execute('SELECT 1; SELECT 2;')17self.assertEqual([(1,)], list(cur))1819r = cur.nextset()20self.assertTrue(r)2122self.assertEqual([(2,)], list(cur))23self.assertIsNone(cur.nextset())2425def test_skip_nextset(self):26cur = self.connect(client_flag=CLIENT.MULTI_STATEMENTS).cursor()27cur.execute('SELECT 1; SELECT 2;')28self.assertEqual([(1,)], list(cur))2930cur.execute('SELECT 42')31self.assertEqual([(42,)], list(cur))3233def test_nextset_error(self):34con = self.connect(client_flag=CLIENT.MULTI_STATEMENTS)35cur = con.cursor()3637if type(cur).__name__.startswith('SS'):38self.skipTest('nextset in unbuffered cursor closes connection')3940for i in range(3):41cur.execute('SELECT %s; xyzzy;', (i,))42self.assertEqual([(i,)], list(cur))43with self.assertRaises(sv.ProgrammingError):44cur.nextset()45self.assertEqual((), cur.fetchall())4647def test_ok_and_next(self):48cur = self.connect(client_flag=CLIENT.MULTI_STATEMENTS).cursor()49cur.execute('SELECT 1; commit; SELECT 2;')50self.assertEqual([(1,)], list(cur))51self.assertTrue(cur.nextset())52self.assertTrue(cur.nextset())53self.assertEqual([(2,)], list(cur))54self.assertFalse(bool(cur.nextset()))5556@pytest.mark.xfail57def test_multi_cursor(self):58con = self.connect(client_flag=CLIENT.MULTI_STATEMENTS)59cur1 = con.cursor()60cur2 = con.cursor()6162cur1.execute('SELECT 1; SELECT 2;')63cur2.execute('SELECT 42')6465self.assertEqual([(1,)], list(cur1))66self.assertEqual([(42,)], list(cur2))6768r = cur1.nextset()69self.assertTrue(r)7071self.assertEqual([(2,)], list(cur1))72self.assertIsNone(cur1.nextset())7374def test_multi_statement_warnings(self):75con = self.connect(76init_command='SELECT "bar"; SELECT "baz"',77client_flag=CLIENT.MULTI_STATEMENTS,78)79cursor = con.cursor()8081try:82cursor.execute('DROP TABLE IF EXISTS a; ' 'DROP TABLE IF EXISTS b;')83except TypeError:84self.fail()8586# TODO: How about SSCursor and nextset?87# It's very hard to implement correctly...888990