dumbdbm bug fixed

Amos Newcombe anewcombe at earthlink.net
Sat Dec 9 22:11:53 CET 2000


In dumbdbm.py (v 2.0) it says

>- seems to contain a bug when updating...

The bug I found was that the length of an item in the index (.dir) 
file doesn't get updated when the record in the .dat file does.

The fix is simple. Just call self._commit() at the end of 
_Database.__setitem__(), so it looks like this.

	def __setitem__(self, key, val):
		if not type(key) == type('') == type(val):
			raise TypeError, "keys and values must be strings"
		if not self._index.has_key(key):
			(pos, siz) = self._addval(val)
			self._addkey(key, (pos, siz))
		else:
			pos, siz = self._index[key]
			oldblocks = (siz + _BLOCKSIZE - 1) / _BLOCKSIZE
			newblocks = (len(val) + _BLOCKSIZE - 1) / _BLOCKSIZE
			if newblocks <= oldblocks:
				pos, siz = self._setval(pos, val)
				self._index[key] = pos, siz
			else:
				pos, siz = self._addval(val)
				self._index[key] = pos, siz
			self._commit()

Note that in the other branch of the main if...else statement, 
self._addkey() takes care of updating the index.

Amos Newcombe
-- 
The difference between theory and practice is that, in theory, there 
is no difference between theory and practice. 




More information about the Python-list mailing list