Path: blob/main/singlestoredb/tests/test_results.py
469 views
#!/usr/bin/env python1# type: ignore2"""Test SingleStoreDB results."""3import os4import unittest56import pandas as pd78import singlestoredb as s29from singlestoredb.tests import utils10# import traceback111213class TestResults(unittest.TestCase):1415dbname: str = ''16dbexisted: bool = False1718@classmethod19def setUpClass(cls):20sql_file = os.path.join(os.path.dirname(__file__), 'test.sql')21cls.dbname, cls.dbexisted = utils.load_sql(sql_file)2223@classmethod24def tearDownClass(cls):25if not cls.dbexisted:26utils.drop_database(cls.dbname)2728def setUp(self):29self.conn = s2.connect(database=type(self).dbname)30self.cur = self.conn.cursor()3132def tearDown(self):33try:34if self.cur is not None:35self.cur.close()36except Exception:37# traceback.print_exc()38pass3940try:41if self.conn is not None:42self.conn.close()43except Exception:44# traceback.print_exc()45pass4647def test_tuples(self):48with s2.options(('results.type', 'tuples')):49with s2.connect(database=type(self).dbname) as conn:50with conn.cursor() as cur:51cur.execute('select * from data')52out = cur.fetchone()53assert type(out) is tuple, type(out)54assert len(out) == 3, len(out)55cur.fetchall()5657cur.execute('select * from data')58out = cur.fetchall()59assert len(out) == 5, len(out)60assert len(out[0]) == 3, len(out[0])61assert type(out[0]) is tuple, type(out[0])62assert sorted(out) == sorted([63('a', 'antelopes', 2),64('b', 'bears', 2),65('c', 'cats', 5),66('d', 'dogs', 4),67('e', 'elephants', 0),68]), out6970out = cur.fetchall()71assert len(out) == 0, len(out)7273def test_namedtuples(self):74with s2.options(('results.type', 'namedtuples')):75with s2.connect(database=type(self).dbname) as conn:76with conn.cursor() as cur:77cur.execute('select * from data')78out = cur.fetchone()79assert isinstance(out, tuple), type(out)80assert len(out) == 3, len(out)81assert type(out).__name__ == 'Row', type(out).__name__82assert hasattr(out, 'id')83assert hasattr(out, 'name')84assert hasattr(out, 'value')85cur.fetchall()8687cur.execute('select * from data')88out = cur.fetchall()89assert len(out) == 5, len(out)90assert len(out[0]) == 3, len(out[0])91assert isinstance(out[0], tuple), type(out[0])92assert type(out[0]).__name__ == 'Row', type(out[0]).__name__93assert hasattr(out[0], 'id')94assert hasattr(out[0], 'name')95assert hasattr(out[0], 'value')96assert sorted(out) == sorted([97('a', 'antelopes', 2),98('b', 'bears', 2),99('c', 'cats', 5),100('d', 'dogs', 4),101('e', 'elephants', 0),102]), out103104out = cur.fetchall()105assert len(out) == 0, len(out)106107def test_dict(self):108with s2.options(('results.type', 'dicts')):109with s2.connect(database=type(self).dbname) as conn:110with conn.cursor() as cur:111cur.execute('select * from data')112out = cur.fetchone()113assert type(out) is dict, type(out)114assert len(out) == 3, len(out)115cur.fetchall()116117cur.execute('select * from data')118out = cur.fetchall()119assert type(out[0]) is dict, type(out[0])120assert len(out) == 5, len(out)121assert len(out[0]) == 3, len(out[0])122assert sorted(out, key=lambda x: x['id']) == sorted(123[124dict(id='a', name='antelopes', value=2),125dict(id='b', name='bears', value=2),126dict(id='c', name='cats', value=5),127dict(id='d', name='dogs', value=4),128dict(id='e', name='elephants', value=0),129], key=lambda x: x['id'],130)131132out = cur.fetchall()133assert len(out) == 0, len(out)134135def _test_dataframe(self):136with s2.options(('results.type', 'dataframe')):137with s2.connect(database=type(self).dbname) as conn:138with conn.cursor() as cur:139cur.execute('select * from data')140out = cur.fetchone()141assert type(out) is pd.DataFrame, type(out)142assert len(out) == 1, len(out)143cur.fetchall()144145cur.execute('select * from data')146out = cur.fetchall()147assert type(out) is pd.DataFrame, type(out)148assert len(out) == 5, len(out)149out = out.sort_values('id').reset_index(drop=True)150exp = pd.DataFrame(151data=[152('a', 'antelopes', 2),153('b', 'bears', 2),154('c', 'cats', 5),155('d', 'dogs', 4),156('e', 'elephants', 0),157], columns=['id', 'name', 'value'],158).sort_values('id').reset_index(drop=True)159assert list(out.columns) == list(exp.columns), list(out.columns)160assert [list(x) for x in list(out.values)] == \161[list(x) for x in list(exp.values)], \162[list(x) for x in list(out.values)]163164out = cur.fetchall()165assert len(out) == 0, len(out)166167168if __name__ == '__main__':169import nose2170nose2.main()171172173