1 message in org.python.python-bugs-list[ python-Bugs-788421 ] bsddb btree se...
FromSent OnAttachments
SourceForge.netMar 16, 2004 2:59 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:[ python-Bugs-788421 ] bsddb btree set_location() semantics changedActions...
From:SourceForge.net (nore@sourceforge.net)
Date:Mar 16, 2004 2:59:24 am
List:org.python.python-bugs-list

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.

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