mirror of
https://github.com/python/cpython.git
synced 2025-08-03 08:34:29 +00:00
Fixes bug 477182 on pybsddb.sf.net. DB objects now load the flags and
pay attention to them when opening an existing database. This means that d[] behaves properly even on databases previously created with DB_DUP or DB_DUPSORT flags to allow duplicate keys. http://sourceforge.net/tracker/index.php?func=detail&aid=477182&group_id=13900&atid=113900 Do not backport, this bugfix could be considered an API change.
This commit is contained in:
parent
9c466baa01
commit
ec10a4a402
3 changed files with 34 additions and 15 deletions
|
@ -90,6 +90,30 @@ class MiscTestCase(unittest.TestCase):
|
|||
db1.close()
|
||||
os.unlink(self.filename)
|
||||
|
||||
def test_DB_set_flags_persists(self):
|
||||
try:
|
||||
db1 = db.DB()
|
||||
db1.set_flags(db.DB_DUPSORT)
|
||||
db1.open(self.filename, db.DB_HASH, db.DB_CREATE)
|
||||
db1['a'] = 'eh'
|
||||
db1['a'] = 'A'
|
||||
self.assertEqual([('a', 'A')], db1.items())
|
||||
db1.put('a', 'Aa')
|
||||
self.assertEqual([('a', 'A'), ('a', 'Aa')], db1.items())
|
||||
db1.close()
|
||||
db1 = db.DB()
|
||||
# no set_flags call, we're testing that it reads and obeys
|
||||
# the flags on open.
|
||||
db1.open(self.filename, db.DB_HASH)
|
||||
self.assertEqual([('a', 'A'), ('a', 'Aa')], db1.items())
|
||||
# if it read the flags right this will replace all values
|
||||
# for key 'a' instead of adding a new one. (as a dict should)
|
||||
db1['a'] = 'new A'
|
||||
self.assertEqual([('a', 'new A')], db1.items())
|
||||
finally:
|
||||
db1.close()
|
||||
os.unlink(self.filename)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue