* fix DBCursor.pget() bug with keyword argument names when no data= is
supplied [SF pybsddb bug #1477863]
This commit is contained in:
parent
1cb75a5e0d
commit
372b583a6b
|
@ -70,6 +70,7 @@ def suite():
|
|||
'test_recno',
|
||||
'test_thread',
|
||||
'test_sequence',
|
||||
'test_cursor_pget_bug',
|
||||
]
|
||||
|
||||
alltests = unittest.TestSuite()
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
import unittest
|
||||
import sys, os, glob
|
||||
|
||||
try:
|
||||
# For Pythons w/distutils pybsddb
|
||||
from bsddb3 import db
|
||||
except ImportError:
|
||||
# For Python 2.3
|
||||
from bsddb import db
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class pget_bugTestCase(unittest.TestCase):
|
||||
"""Verify that cursor.pget works properly"""
|
||||
db_name = 'test-cursor_pget.db'
|
||||
|
||||
def setUp(self):
|
||||
self.homeDir = os.path.join(os.path.dirname(sys.argv[0]), 'db_home')
|
||||
try:
|
||||
os.mkdir(self.homeDir)
|
||||
except os.error:
|
||||
pass
|
||||
self.env = db.DBEnv()
|
||||
self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL)
|
||||
self.primary_db = db.DB(self.env)
|
||||
self.primary_db.open(self.db_name, 'primary', db.DB_BTREE, db.DB_CREATE)
|
||||
self.secondary_db = db.DB(self.env)
|
||||
self.secondary_db.set_flags(db.DB_DUP)
|
||||
self.secondary_db.open(self.db_name, 'secondary', db.DB_BTREE, db.DB_CREATE)
|
||||
self.primary_db.associate(self.secondary_db, lambda key, data: data)
|
||||
self.primary_db.put('salad', 'eggs')
|
||||
self.primary_db.put('spam', 'ham')
|
||||
self.primary_db.put('omelet', 'eggs')
|
||||
|
||||
|
||||
def tearDown(self):
|
||||
self.secondary_db.close()
|
||||
self.primary_db.close()
|
||||
self.env.close()
|
||||
del self.secondary_db
|
||||
del self.primary_db
|
||||
del self.env
|
||||
for file in glob.glob(os.path.join(self.homeDir, '*')):
|
||||
os.remove(file)
|
||||
os.removedirs(self.homeDir)
|
||||
|
||||
def test_pget(self):
|
||||
cursor = self.secondary_db.cursor()
|
||||
|
||||
self.assertEquals(('eggs', 'salad', 'eggs'), cursor.pget(key='eggs', flags=db.DB_SET))
|
||||
self.assertEquals(('eggs', 'omelet', 'eggs'), cursor.pget(db.DB_NEXT_DUP))
|
||||
self.assertEquals(None, cursor.pget(db.DB_NEXT_DUP))
|
||||
|
||||
self.assertEquals(('ham', 'spam', 'ham'), cursor.pget('ham', 'spam', flags=db.DB_SET))
|
||||
self.assertEquals(None, cursor.pget(db.DB_NEXT_DUP))
|
||||
|
||||
cursor.close()
|
||||
|
||||
|
||||
def test_suite():
|
||||
return unittest.makeSuite(pget_bugTestCase)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main(defaultTest='test_suite')
|
|
@ -45,6 +45,7 @@ def suite():
|
|||
'test_recno',
|
||||
'test_thread',
|
||||
'test_sequence',
|
||||
'test_cursor_pget_bug',
|
||||
]
|
||||
|
||||
alltests = unittest.TestSuite()
|
||||
|
|
|
@ -109,9 +109,13 @@ Extension Modules
|
|||
assuming BerkeleyDB >= 4.0 and 4.4 respectively. [pybsddb project SF
|
||||
patch numbers 1494885 and 1494902]
|
||||
|
||||
- bsddb: added an interface for the BerkeleyDB >= 4.3 DBSequence class
|
||||
- bsddb: added an interface for the BerkeleyDB >= 4.3 DBSequence class.
|
||||
[pybsddb project SF patch number 1466734]
|
||||
|
||||
- bsddb: fix DBCursor.pget() bug with keyword argument names when no data
|
||||
parameter is supplied. [SF pybsddb bug #1477863]
|
||||
|
||||
|
||||
Library
|
||||
-------
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@
|
|||
#error "eek! DBVER can't handle minor versions > 9"
|
||||
#endif
|
||||
|
||||
#define PY_BSDDB_VERSION "4.4.2"
|
||||
#define PY_BSDDB_VERSION "4.4.4"
|
||||
static char *rcs_id = "$Id$";
|
||||
|
||||
|
||||
|
@ -3194,8 +3194,8 @@ DBC_pget(DBCursorObject* self, PyObject* args, PyObject *kwargs)
|
|||
int dlen = -1;
|
||||
int doff = -1;
|
||||
DBT key, pkey, data;
|
||||
static char* kwnames[] = { "key","data", "flags", "dlen", "doff",
|
||||
NULL };
|
||||
static char* kwnames_keyOnly[] = { "key", "flags", "dlen", "doff", NULL };
|
||||
static char* kwnames[] = { "key", "data", "flags", "dlen", "doff", NULL };
|
||||
|
||||
CLEAR_DBT(key);
|
||||
CLEAR_DBT(data);
|
||||
|
@ -3204,7 +3204,7 @@ DBC_pget(DBCursorObject* self, PyObject* args, PyObject *kwargs)
|
|||
{
|
||||
PyErr_Clear();
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi|ii:pget",
|
||||
&kwnames[1],
|
||||
kwnames_keyOnly,
|
||||
&keyobj, &flags, &dlen, &doff))
|
||||
{
|
||||
PyErr_Clear();
|
||||
|
|
Loading…
Reference in New Issue