def test_Delete(self): tabname = 'test_Delete' self.tdb.CreateTable(tabname, ['x', 'y', 'z']) self.tdb.Insert(tabname, {'x': 'X1', 'y': 'Y1'}) self.tdb.Insert(tabname, {'x': 'X2', 'y': 'Y2', 'z': 'Z2'}) self.tdb.Delete(tabname, conditions={'x': dbtables.PrefixCond('X')}) values = self.tdb.Select(tabname, ['y'], conditions={'x': dbtables.PrefixCond('X')}) self.assertEqual(len(values), 0)
def test_CondObjs(self): tabname = "test_CondObjs" self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e', 'p']) self.tdb.Insert(tabname, { 'a': "the letter A", 'b': "the letter B", 'c': "is for cookie" }) self.tdb.Insert( tabname, { 'a': "is for aardvark", 'e': "the letter E", 'c': "is for cookie", 'd': "is for dog" }) self.tdb.Insert( tabname, { 'a': "the letter A", 'e': "the letter E", 'c': "is for cookie", 'p': "is for Python" }) values = self.tdb.Select( tabname, ['p', 'e'], conditions={'e': dbtables.PrefixCond('the l')}) self.assertEqual(len(values), 2, values) self.assertEqual(values[0]['e'], values[1]['e'], values) self.assertNotEqual(values[0]['p'], values[1]['p'], values) values = self.tdb.Select( tabname, ['d', 'a'], conditions={'a': dbtables.LikeCond('%aardvark%')}) self.assertEqual(len(values), 1, values) self.assertEqual(values[0]['d'], "is for dog", values) self.assertEqual(values[0]['a'], "is for aardvark", values) values = self.tdb.Select( tabname, None, { 'b': dbtables.Cond(), 'e': dbtables.LikeCond('%letter%'), 'a': dbtables.PrefixCond('is'), 'd': dbtables.ExactCond('is for dog'), 'c': dbtables.PrefixCond('is for'), 'p': lambda s: not s }) self.assertEqual(len(values), 1, values) self.assertEqual(values[0]['d'], "is for dog", values) self.assertEqual(values[0]['a'], "is for aardvark", values)
def test_Delete(self): tabname = "test_Delete" self.tdb.CreateTable(tabname, ['x', 'y', 'z']) # prior to 2001-05-09 there was a bug where Delete() would # fail if it encountered any rows that did not have values in # every column. # Hunted and Squashed by <Donwulff> (Jukka Santala - [email protected]) self.tdb.Insert(tabname, {'x': 'X1', 'y': 'Y1'}) self.tdb.Insert(tabname, {'x': 'X2', 'y': 'Y2', 'z': 'Z2'}) self.tdb.Delete(tabname, conditions={'x': dbtables.PrefixCond('X')}) values = self.tdb.Select(tabname, ['y'], conditions={'x': dbtables.PrefixCond('X')}) self.assertEqual(len(values), 0)
def test04_MultiCondSelect(self): tabname = "test04_MultiCondSelect" try: self.tdb.Drop(tabname) except dbtables.TableDBError: pass self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e']) try: self.tdb.Insert(tabname, { 'a': "", 'e': pickle.dumps([{ 4: 5, 6: 7 }, 'foo'], 1), 'f': "Zero" }) self.fail('Expected an exception') except dbtables.TableDBError: pass self.tdb.Insert(tabname, { 'a': "A", 'b': "B", 'c': "C", 'd': "D", 'e': "E" }) self.tdb.Insert(tabname, { 'a': "-A", 'b': "-B", 'c': "-C", 'd': "-D", 'e': "-E" }) self.tdb.Insert(tabname, { 'a': "A-", 'b': "B-", 'c': "C-", 'd': "D-", 'e': "E-" }) if verbose: self.tdb._db_print() # This select should return 0 rows. it is designed to test # the bug identified and fixed in sourceforge bug # 590449 # (Big Thanks to "Rob Tillotson (n9mtb)" for tracking this down # and supplying a fix!! This one caused many headaches to say # the least...) values = self.tdb.Select(tabname, ['b', 'a', 'd'], conditions={ 'e': dbtables.ExactCond('E'), 'a': dbtables.ExactCond('A'), 'd': dbtables.PrefixCond('-') }) self.assertEqual(len(values), 0, values)
def test04_MultiCondSelect(self): tabname = 'test04_MultiCondSelect' try: self.tdb.Drop(tabname) except dbtables.TableDBError: pass self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e']) try: self.tdb.Insert(tabname, { 'a': '', 'e': pickle.dumps([{ 4: 5, 6: 7 }, 'foo'], 1), 'f': 'Zero' }) self.fail('Expected an exception') except dbtables.TableDBError: pass self.tdb.Insert(tabname, { 'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D', 'e': 'E' }) self.tdb.Insert(tabname, { 'a': '-A', 'b': '-B', 'c': '-C', 'd': '-D', 'e': '-E' }) self.tdb.Insert(tabname, { 'a': 'A-', 'b': 'B-', 'c': 'C-', 'd': 'D-', 'e': 'E-' }) if verbose: self.tdb._db_print() values = self.tdb.Select(tabname, ['b', 'a', 'd'], conditions={ 'e': dbtables.ExactCond('E'), 'a': dbtables.ExactCond('A'), 'd': dbtables.PrefixCond('-') }) self.assertEqual(len(values), 0, values)
def test03(self): tabname = 'test03' try: self.tdb.Drop(tabname) except dbtables.TableDBError: pass if verbose: print '...before CreateTable...' self.tdb._db_print() self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e']) if verbose: print '...after CreateTable...' self.tdb._db_print() self.tdb.Drop(tabname) if verbose: print '...after Drop...' self.tdb._db_print() self.tdb.CreateTable(tabname, ['a', 'b', 'c', 'd', 'e']) try: self.tdb.Insert(tabname, { 'a': '', 'e': pickle.dumps([{ 4: 5, 6: 7 }, 'foo'], 1), 'f': 'Zero' }) self.fail('Expected an exception') except dbtables.TableDBError: pass try: self.tdb.Select(tabname, [], conditions={'foo': '123'}) self.fail('Expected an exception') except dbtables.TableDBError: pass self.tdb.Insert(tabname, { 'a': '42', 'b': 'bad', 'c': 'meep', 'e': 'Fuzzy wuzzy was a bear' }) self.tdb.Insert( tabname, { 'a': '581750', 'b': 'good', 'd': 'bla', 'c': 'black', 'e': 'fuzzy was here' }) self.tdb.Insert( tabname, { 'a': '800000', 'b': 'good', 'd': 'bla', 'c': 'black', 'e': 'Fuzzy wuzzy is a bear' }) if verbose: self.tdb._db_print() values = self.tdb.Select(tabname, ['b', 'a', 'd'], conditions={ 'e': re.compile('wuzzy').search, 'a': re.compile('^[0-9]+$').match }) self.assertEqual(len(values), 2) self.tdb.Delete(tabname, conditions={'b': dbtables.ExactCond('good')}) values = self.tdb.Select( tabname, ['a', 'd', 'b'], conditions={'e': dbtables.PrefixCond('Fuzzy')}) self.assertEqual(len(values), 1) self.assertEqual(values[0]['d'], None) values = self.tdb.Select(tabname, ['b'], conditions={'c': lambda c: c == 'meep'}) self.assertEqual(len(values), 1) self.assertEqual(values[0]['b'], 'bad') return