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')}) assert len(values) == 2, values assert values[0]['e'] == values[1]['e'], values assert values[0]['p'] != values[1]['p'], values values = self.tdb.Select( tabname, ['d', 'a'], conditions={'a': dbtables.LikeCond('%aardvark%')}) assert len(values) == 1, values assert values[0]['d'] == "is for dog", values assert 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 }) assert len(values) == 1, values assert values[0]['d'] == "is for dog", values assert 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')}) assert 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" }) assert 0 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('-') }) assert 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" }) assert 0 except dbtables.TableDBError: pass try: self.tdb.Select(tabname, [], conditions={'foo': '123'}) assert 0 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() # this should return two rows values = self.tdb.Select(tabname, ['b', 'a', 'd'], conditions={ 'e': re.compile('wuzzy').search, 'a': re.compile('^[0-9]+$').match }) assert len(values) == 2 # now lets delete one of them and try again self.tdb.Delete(tabname, conditions={'b': dbtables.ExactCond('good')}) values = self.tdb.Select( tabname, ['a', 'd', 'b'], conditions={'e': dbtables.PrefixCond('Fuzzy')}) assert len(values) == 1 assert values[0]['d'] == None values = self.tdb.Select(tabname, ['b'], conditions={'c': lambda c: c == 'meep'}) assert len(values) == 1 assert values[0]['b'] == "bad"