diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2004-06-28 04:06:49 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2004-06-28 04:06:49 (GMT) |
commit | 19699a93513e5b011170123b0740bd9b7d714a53 (patch) | |
tree | 5df1f7df1da32893c0a7f2e2d3bc49c5bf39779e /Lib/bsddb | |
parent | 31c50659eaf189e2498558895272053b2f66a25e (diff) | |
download | cpython-19699a93513e5b011170123b0740bd9b7d714a53.zip cpython-19699a93513e5b011170123b0740bd9b7d714a53.tar.gz cpython-19699a93513e5b011170123b0740bd9b7d714a53.tar.bz2 |
Adds support for DB.pget and DBCursor.pget methods.
Based on a patch supplied by Ian Ward <ian@arevco.ca> on the pybsddb
mailing list 2004-03-26.
Diffstat (limited to 'Lib/bsddb')
-rw-r--r-- | Lib/bsddb/dbobj.py | 2 | ||||
-rw-r--r-- | Lib/bsddb/test/test_associate.py | 25 |
2 files changed, 27 insertions, 0 deletions
diff --git a/Lib/bsddb/dbobj.py b/Lib/bsddb/dbobj.py index abda657..3bafafa 100644 --- a/Lib/bsddb/dbobj.py +++ b/Lib/bsddb/dbobj.py @@ -134,6 +134,8 @@ class DB(DictMixin): return apply(self._cobj.fd, args, kwargs) def get(self, *args, **kwargs): return apply(self._cobj.get, args, kwargs) + def pget(self, *args, **kwargs): + return apply(self._cobj.pget, args, kwargs) def get_both(self, *args, **kwargs): return apply(self._cobj.get_both, args, kwargs) def get_byteswapped(self, *args, **kwargs): diff --git a/Lib/bsddb/test/test_associate.py b/Lib/bsddb/test/test_associate.py index fc92c22..7be5ba0 100644 --- a/Lib/bsddb/test/test_associate.py +++ b/Lib/bsddb/test/test_associate.py @@ -83,6 +83,7 @@ musicdata = { 52: ("David Lanz", "Cristofori's Dream", "New Age"), 53: ("David Lanz", "Heartsounds", "New Age"), 54: ("David Lanz", "Leaves on the Seine", "New Age"), +99: ("unknown artist", "Unnamed song", "Unknown"), } #---------------------------------------------------------------------- @@ -117,6 +118,7 @@ class AssociateTestCase(unittest.TestCase): def createDB(self): self.primary = db.DB(self.env) + self.primary.set_get_returns_none(2) self.primary.open(self.filename, "primary", self.dbtype, db.DB_CREATE | db.DB_THREAD) @@ -136,6 +138,7 @@ class AssociateTestCase(unittest.TestCase): secDB = db.DB(self.env) secDB.set_flags(db.DB_DUP) + secDB.set_get_returns_none(2) secDB.open(self.filename, "secondary", db.DB_BTREE, db.DB_CREATE | db.DB_THREAD) self.getDB().associate(secDB, self.getGenre) @@ -166,6 +169,16 @@ class AssociateTestCase(unittest.TestCase): def finish_test(self, secDB): + # 'Blues' should not be in the secondary database + vals = secDB.pget('Blues') + assert vals == None, vals + + vals = secDB.pget('Unknown') + assert vals[0] == 99 or vals[0] == '99', vals + vals[1].index('Unknown') + vals[1].index('Unnamed') + vals[1].index('unknown') + if verbose: print "Primary key traversal:" c = self.getDB().cursor() @@ -187,6 +200,18 @@ class AssociateTestCase(unittest.TestCase): print "Secondary key traversal:" c = secDB.cursor() count = 0 + + # test cursor pget + vals = c.pget('Unknown', flags=db.DB_LAST) + assert vals[1] == 99 or vals[1] == '99', vals + assert vals[0] == 'Unknown' + vals[2].index('Unknown') + vals[2].index('Unnamed') + vals[2].index('unknown') + + vals = c.pget('Unknown', data='wrong value', flags=db.DB_GET_BOTH) + assert vals == None, vals + rec = c.first() assert rec[0] == "Jazz" while rec is not None: |