* src/GrampsDb/_GrampsDbBase.py: Move _update_reference_map into

_commite_base.
* src/GrampsDb/_GrampsBSDDB.py: Move _update_reference_map into
_commite_base.


svn: r5811
This commit is contained in:
Alex Roitman 2006-01-20 21:52:26 +00:00
parent ee7ad60fa8
commit 868b662213
3 changed files with 25 additions and 30 deletions

View File

@ -10,6 +10,10 @@
transaction_commit): disable secondary index removal/rebuilding transaction_commit): disable secondary index removal/rebuilding
due to bugs in bsddb; (_update_reference_map): explicitly check due to bugs in bsddb; (_update_reference_map): explicitly check
for addition versus update. for addition versus update.
* src/GrampsDb/_GrampsDbBase.py: Move _update_reference_map into
_commite_base.
* src/GrampsDb/_GrampsBSDDB.py: Move _update_reference_map into
_commite_base.
2006-01-20 Don Allingham <don@gramps-project.org> 2006-01-20 Don Allingham <don@gramps-project.org>
* src/PageView.py: add ellipsize, better dirty/clean management, * src/PageView.py: add ellipsize, better dirty/clean management,

View File

@ -603,19 +603,18 @@ class GrampsBSDDB(GrampsDbBase):
primary_cur.close() primary_cur.close()
def _update_reference_map(self, obj, transaction, update=True): def _update_reference_map(self, obj, transaction, txn=None):
""" """
If update = True old references are cleaned up and only new references are added If txn is given, then changes are written right away using txn.
if update = False then it is assumed that the object is not already referenced.
""" """
# Add references to the reference_map for all primary object referenced # Add references to the reference_map for all primary object referenced
# from the primary object 'obj' or any of its secondary objects. # from the primary object 'obj' or any of its secondary objects.
handle = obj.get_handle() handle = obj.get_handle()
do_update = self.reference_map_primary_map.has_key(str(handle)) update = self.reference_map_primary_map.has_key(str(handle))
if do_update: if update:
# FIXME: this needs to be properly integrated into the transaction # FIXME: this needs to be properly integrated into the transaction
# framework so that the reference_map changes are part of the # framework so that the reference_map changes are part of the
# transaction # transaction
@ -674,31 +673,33 @@ class GrampsBSDDB(GrampsDbBase):
for (ref_class_name,ref_handle) in new_references: for (ref_class_name,ref_handle) in new_references:
data = ((CLASS_TO_KEY_MAP[obj.__class__.__name__],handle), data = ((CLASS_TO_KEY_MAP[obj.__class__.__name__],handle),
(CLASS_TO_KEY_MAP[ref_class_name],ref_handle),) (CLASS_TO_KEY_MAP[ref_class_name],ref_handle),)
self._add_reference((handle,ref_handle),data,transaction) self._add_reference((handle,ref_handle),data,transaction,txn)
if do_update: if update:
# handle deletion of old references # handle deletion of old references
if len(no_longer_required_references) > 0: if len(no_longer_required_references) > 0:
for (ref_class_name,ref_handle) in no_longer_required_references: for (ref_class_name,ref_handle) in no_longer_required_references:
try: try:
self._remove_reference((handle,ref_handle),transaction) self._remove_reference((handle,ref_handle),transaction,txn)
#self.reference_map.delete(str((handle,ref_handle),), #self.reference_map.delete(str((handle,ref_handle),),
# txn=self.txn) # txn=self.txn)
except: # ignore missing old reference except: # ignore missing old reference
pass pass
def _remove_reference(self,key,transaction): def _remove_reference(self,key,transaction,txn=None):
""" """
Removes the reference specified by the key, Removes the reference specified by the key,
preserving the change in the passed transaction. preserving the change in the passed transaction.
""" """
if not self.readonly: if not self.readonly:
old_data = self.reference_map.get(str(main_key),txn=self.txn) if transaction.batch:
if not transaction.batch: self.reference_map.delete(str(key),txn=txn)#=the_txn)
else:
old_data = self.reference_map.get(str(key),txn=self.txn)
transaction.add(REFERENCE_KEY,str(key),old_data,None) transaction.add(REFERENCE_KEY,str(key),old_data,None)
transaction.reference_del.append(str(key)) transaction.reference_del.append(str(key))
def _add_reference(self,key,data,transaction): def _add_reference(self,key,data,transaction,txn=None):
""" """
Adds the reference specified by the key and the data, Adds the reference specified by the key and the data,
preserving the change in the passed transaction. preserving the change in the passed transaction.
@ -708,9 +709,9 @@ class GrampsBSDDB(GrampsDbBase):
return return
if transaction.batch: if transaction.batch:
the_txn = self.env.txn_begin() #the_txn = self.env.txn_begin()
self.reference_map.put(str(key),data,txn=the_txn) self.reference_map.put(str(key),data,txn=txn)#=the_txn)
the_txn.commit() #the_txn.commit()
else: else:
transaction.add(REFERENCE_KEY,str(key),None,data) transaction.add(REFERENCE_KEY,str(key),None,data)
transaction.reference_add.append((str(key),data)) transaction.reference_add.append((str(key),data))
@ -941,10 +942,12 @@ class GrampsBSDDB(GrampsDbBase):
if transaction.batch: if transaction.batch:
the_txn = self.env.txn_begin() the_txn = self.env.txn_begin()
self._update_reference_map(obj,transaction,txn=the_txn)
data_map.put(handle,obj.serialize(),txn=the_txn) data_map.put(handle,obj.serialize(),txn=the_txn)
the_txn.commit() the_txn.commit()
old_data = None old_data = None
else: else:
self._update_reference_map(obj,transaction)
old_data = data_map.get(handle,txn=self.txn) old_data = data_map.get(handle,txn=self.txn)
new_data = obj.serialize() new_data = obj.serialize()
transaction.add(key,handle,old_data,new_data) transaction.add(key,handle,old_data,new_data)

View File

@ -368,6 +368,8 @@ class GrampsDbBase(GrampsDBCallback):
obj.change = int(time.time()) obj.change = int(time.time())
handle = str(obj.handle) handle = str(obj.handle)
self._update_reference_map(obj,transaction)
if transaction.batch: if transaction.batch:
data_map[handle] = obj.serialize() data_map[handle] = obj.serialize()
old_data = None old_data = None
@ -387,8 +389,6 @@ class GrampsDbBase(GrampsDBCallback):
as part of the transaction. as part of the transaction.
""" """
self._update_reference_map(person,transaction)
old_data = self._commit_base( old_data = self._commit_base(
person, self.person_map, PERSON_KEY, transaction.person_update, person, self.person_map, PERSON_KEY, transaction.person_update,
transaction.person_add, transaction, change_time) transaction.person_add, transaction, change_time)
@ -412,8 +412,6 @@ class GrampsDbBase(GrampsDBCallback):
as part of the transaction. as part of the transaction.
""" """
self._update_reference_map(obj,transaction)
self._commit_base(obj, self.media_map, MEDIA_KEY, self._commit_base(obj, self.media_map, MEDIA_KEY,
transaction.media_update, transaction.media_add, transaction.media_update, transaction.media_add,
transaction, change_time) transaction, change_time)
@ -424,8 +422,6 @@ class GrampsDbBase(GrampsDBCallback):
as part of the transaction. as part of the transaction.
""" """
self._update_reference_map(source,transaction)
self._commit_base(source, self.source_map, SOURCE_KEY, self._commit_base(source, self.source_map, SOURCE_KEY,
transaction.source_update, transaction.source_add, transaction.source_update, transaction.source_add,
transaction, change_time) transaction, change_time)
@ -436,8 +432,6 @@ class GrampsDbBase(GrampsDBCallback):
as part of the transaction. as part of the transaction.
""" """
self._update_reference_map(place,transaction)
self._commit_base(place, self.place_map, PLACE_KEY, self._commit_base(place, self.place_map, PLACE_KEY,
transaction.place_update, transaction.place_add, transaction.place_update, transaction.place_add,
transaction, change_time) transaction, change_time)
@ -458,8 +452,6 @@ class GrampsDbBase(GrampsDBCallback):
as part of the transaction. as part of the transaction.
""" """
self._update_reference_map(event,transaction)
self._commit_base(event, self.event_map, EVENT_KEY, self._commit_base(event, self.event_map, EVENT_KEY,
transaction.event_update, transaction.event_add, transaction.event_update, transaction.event_add,
transaction, change_time) transaction, change_time)
@ -470,8 +462,6 @@ class GrampsDbBase(GrampsDBCallback):
as part of the transaction. as part of the transaction.
""" """
self._update_reference_map(family,transaction)
self._commit_base(family, self.family_map, FAMILY_KEY, self._commit_base(family, self.family_map, FAMILY_KEY,
transaction.family_update, transaction.family_add, transaction.family_update, transaction.family_add,
transaction, change_time) transaction, change_time)
@ -485,8 +475,6 @@ class GrampsDbBase(GrampsDBCallback):
as part of the transaction. as part of the transaction.
""" """
self._update_reference_map(repository,transaction)
self._commit_base(repository, self.repository_map, REPOSITORY_KEY, self._commit_base(repository, self.repository_map, REPOSITORY_KEY,
transaction.repository_update, transaction.repository_add, transaction.repository_update, transaction.repository_add,
transaction, change_time) transaction, change_time)