[ python-Bugs-788421 ] bsddb btree set_location() semantics changed

SourceForge.net noreply at sourceforge.net
Tue Mar 16 02:59:33 EST 2004


Bugs item #788421, was opened at 2003-08-13 16:21
Message generated for change (Comment added) made by greg
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=788421&group_id=5470

Category: Extension Modules
Group: Python 2.3
Status: Closed
Resolution: Fixed
Priority: 5
Submitted By: Gregory P. Smith (greg)
Assigned to: Gregory P. Smith (greg)
Summary: bsddb btree set_location() semantics changed

Initial Comment:
In the old bsddb module a bsddb.btopen(..) database
would return the next available key+value on a
set_location(key) call when key did not exist in the
database.  In python 2.3 (pybsddb) it raises an
exception and leaves the cursor at an unknown position
in the database.

[reported by Anthony McDonaly on comp.lang.python]

>>> import os
>>> import bsddb
>>> os.chdir('/tmp')
>>> my_data = bsddb.btopen('testing', 'c')
>>> for i in range(10):
...   if i == 5:
...     pass
...   else:
...     my_data['%d'%i] = '%d'%(i*i)
...
>>> my_data.keys()
['0', '1', '2', '3', '4', '6', '7', '8', '9']
>>> my_data.sync()
>>> my_data.set_location('5')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File
"/space/python-2.3/lib/python2.3/bsddb/__init__.py",
line 117, in set_location
    return self.dbc.set(key)
_bsddb.DBNotFoundError: (-30991, &#039;DB_NOTFOUND: No
matching key/data pair found&#039;)

Correct behaviour would have been to return (&#039;6&#039;, &#039;36&#039;)


----------------------------------------------------------------------

>Comment By: Gregory P. Smith (greg)
Date: 2004-03-15 23:59

Message:
Logged In: YES 
user_id=413

committed fix to head and release23-maint along with an associated fix for set_range where it could free() memory that it doesn't own on non B-Tree databases.

----------------------------------------------------------------------

Comment By: Gregory P. Smith (greg)
Date: 2004-02-26 02:11

Message:
Logged In: YES 
user_id=413

Yes this is a bug.  The set_location() method should have been calling set_range() rather than set() internally.

Fixing that exposed another bug: set_range() would crash when looking up a key that exists in hash or rn databases.

Both bugs have been fixed to fix this one in python 2.4 & pybsddb CVS.

This bugfix should go into python 2.3.4.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=788421&group_id=5470



More information about the Python-bugs-list mailing list