Path: blob/main/singlestoredb/mysql/tests/test_SSCursor.py
469 views
# type: ignore1import sys23try:4import singlestoredb.mysql as sv5from singlestoredb.mysql.tests import base6import singlestoredb.mysql.cursors as cursors7from singlestoredb.mysql.constants import CLIENT8except Exception:9# For local testing from top-level directory, without installing10sys.path.append('../../..')11import singlestoredb.mysql as sv # noqa: F40112from singlestoredb.mysql.tests import base13import singlestoredb.mysql.cursors as cursors14from singlestoredb.mysql.constants import CLIENT151617class TestSSCursor(base.PyMySQLTestCase):1819def test_SSCursor(self):20# affected_rows = 1844674407370955161521affected_rows = -12223conn = self.connect(24client_flag=CLIENT.MULTI_STATEMENTS,25cursorclass=cursors.SSCursor,26)27data = [28('America', '', 'America/Jamaica'),29('America', '', 'America/Los_Angeles'),30('America', '', 'America/Lima'),31('America', '', 'America/New_York'),32('America', '', 'America/Menominee'),33('America', '', 'America/Havana'),34('America', '', 'America/El_Salvador'),35('America', '', 'America/Costa_Rica'),36('America', '', 'America/Denver'),37('America', '', 'America/Detroit'),38]3940cursor = conn.cursor()4142cursor.execute('DROP TABLE IF EXISTS tz_data')4344# Create table45cursor.execute(46'CREATE TABLE tz_data ('47'region VARCHAR(64),'48'zone VARCHAR(64),'49'name VARCHAR(64))',50)5152conn.begin()53# Test INSERT54for i in data:55cursor.execute('INSERT INTO tz_data VALUES (%s, %s, %s)', i)56self.assertEqual(conn.affected_rows(), 1, 'affected_rows does not match')57conn.commit()5859# Test fetchone()60iter = 061cursor.execute('SELECT * FROM tz_data')62while True:63row = cursor.fetchone()64if row is None:65break66iter += 16768# Test cursor.rowcount69self.assertEqual(70cursor.rowcount,71affected_rows,72'cursor.rowcount != %s' % (str(affected_rows)),73)7475# Test cursor.rownumber76self.assertEqual(77cursor.rownumber, iter, 'cursor.rowcount != %s' % (str(iter)),78)7980# Test row came out the same as it went in81self.assertEqual((row in data), True, 'Row not found in source data')8283# Test fetchall84cursor.execute('SELECT * FROM tz_data')85self.assertEqual(86len(cursor.fetchall()),87len(data),88'fetchall failed. Number of rows does not match',89)9091# Test fetchmany92cursor.execute('SELECT * FROM tz_data')93self.assertEqual(94len(cursor.fetchmany(2)),952,96'fetchmany failed. Number of rows does not match',97)9899# So MySQLdb won't throw "Commands out of sync"100while True:101res = cursor.fetchone()102if res is None:103break104105# Test update, affected_rows()106cursor.execute('UPDATE tz_data SET zone = %s', ['Foo'])107conn.commit()108self.assertEqual(109cursor.rowcount,110len(data),111'Update failed. affected_rows != %s' % (str(len(data))),112)113114# Test executemany115cursor.executemany('INSERT INTO tz_data VALUES (%s, %s, %s)', data)116self.assertEqual(117cursor.rowcount,118len(data),119'executemany failed. cursor.rowcount != %s' % (str(len(data))),120)121122# Test multiple datasets123cursor.execute('SELECT 1; SELECT 2; SELECT 3')124self.assertListEqual(list(cursor), [(1,)])125self.assertTrue(cursor.nextset())126self.assertListEqual(list(cursor), [(2,)])127self.assertTrue(cursor.nextset())128self.assertListEqual(list(cursor), [(3,)])129self.assertFalse(cursor.nextset())130131cursor.execute('DROP TABLE IF EXISTS tz_data')132cursor.close()133134135__all__ = ['TestSSCursor']136137if __name__ == '__main__':138import unittest139140unittest.main()141142143