From dbb1644136618e11467de4090caa78b9d8dbb8c4 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Tue, 11 Aug 2015 12:24:46 -0400 Subject: [PATCH] 8823: New items in generic databases don't not get next gramps_id, but start from 0 --- gramps/gen/db/generic.py | 80 +++++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 29 deletions(-) diff --git a/gramps/gen/db/generic.py b/gramps/gen/db/generic.py index dd9c21a94..2b7c50056 100644 --- a/gramps/gen/db/generic.py +++ b/gramps/gen/db/generic.py @@ -638,15 +638,6 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): self.set_note_id_prefix('N%04d') # ---------------------------------- self.undodb = None - self.id_trans = DbGenericTxn("ID Transaction", self) - self.fid_trans = DbGenericTxn("FID Transaction", self) - self.pid_trans = DbGenericTxn("PID Transaction", self) - self.cid_trans = DbGenericTxn("CID Transaction", self) - self.sid_trans = DbGenericTxn("SID Transaction", self) - self.oid_trans = DbGenericTxn("OID Transaction", self) - self.rid_trans = DbGenericTxn("RID Transaction", self) - self.nid_trans = DbGenericTxn("NID Transaction", self) - self.eid_trans = DbGenericTxn("EID Transaction", self) self.cmap_index = 0 self.smap_index = 0 self.emap_index = 0 @@ -776,6 +767,17 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): gstats = self.get_gender_stats() self.genderStats = GenderStats(gstats) + # Indexes: + self.cmap_index = self.get_metadata('cmap_index', 0) + self.smap_index = self.get_metadata('smap_index', 0) + self.emap_index = self.get_metadata('emap_index', 0) + self.pmap_index = self.get_metadata('pmap_index', 0) + self.fmap_index = self.get_metadata('fmap_index', 0) + self.lmap_index = self.get_metadata('lmap_index', 0) + self.omap_index = self.get_metadata('omap_index', 0) + self.rmap_index = self.get_metadata('rmap_index', 0) + self.nmap_index = self.get_metadata('nmap_index', 0) + def version_supported(self): """Return True when the file has a supported version.""" return True @@ -961,12 +963,12 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): self.note_prefix = self._validated_id_prefix(val, "N") self.nid2user_format = self.__id2user_format(self.note_prefix) - def __find_next_gramps_id(self, prefix, map_index, trans): + def _find_next_gramps_id(self, prefix, map_index, map): """ Helper function for find_next__gramps_id methods """ index = prefix % map_index - while trans.get(str(index), txn=self.txn) is not None: + while map.get(str(index)) is not None: map_index += 1 index = prefix % map_index map_index += 1 @@ -977,8 +979,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): Return the next available GRAMPS' ID for a Person object based off the person ID prefix. """ - self.pmap_index, gid = self.__find_next_gramps_id(self.person_prefix, - self.pmap_index, self.id_trans) + self.pmap_index, gid = self._find_next_gramps_id(self.person_prefix, + self.pmap_index, + self.person_id_map) return gid def find_next_place_gramps_id(self): @@ -986,8 +989,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): Return the next available GRAMPS' ID for a Place object based off the place ID prefix. """ - self.lmap_index, gid = self.__find_next_gramps_id(self.place_prefix, - self.lmap_index, self.pid_trans) + self.lmap_index, gid = self._find_next_gramps_id(self.place_prefix, + self.lmap_index, + self.place_id_map) return gid def find_next_event_gramps_id(self): @@ -995,8 +999,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): Return the next available GRAMPS' ID for a Event object based off the event ID prefix. """ - self.emap_index, gid = self.__find_next_gramps_id(self.event_prefix, - self.emap_index, self.eid_trans) + self.emap_index, gid = self._find_next_gramps_id(self.event_prefix, + self.emap_index, + self.event_id_map) return gid def find_next_object_gramps_id(self): @@ -1004,8 +1009,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): Return the next available GRAMPS' ID for a MediaObject object based off the media object ID prefix. """ - self.omap_index, gid = self.__find_next_gramps_id(self.mediaobject_prefix, - self.omap_index, self.oid_trans) + self.omap_index, gid = self._find_next_gramps_id(self.mediaobject_prefix, + self.omap_index, + self.media_id_map) return gid def find_next_citation_gramps_id(self): @@ -1013,8 +1019,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): Return the next available GRAMPS' ID for a Citation object based off the citation ID prefix. """ - self.cmap_index, gid = self.__find_next_gramps_id(self.citation_prefix, - self.cmap_index, self.cid_trans) + self.cmap_index, gid = self._find_next_gramps_id(self.citation_prefix, + self.cmap_index, + self.citation_id_map) return gid def find_next_source_gramps_id(self): @@ -1022,8 +1029,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): Return the next available GRAMPS' ID for a Source object based off the source ID prefix. """ - self.smap_index, gid = self.__find_next_gramps_id(self.source_prefix, - self.smap_index, self.sid_trans) + self.smap_index, gid = self._find_next_gramps_id(self.source_prefix, + self.smap_index, + self.source_id_map) return gid def find_next_family_gramps_id(self): @@ -1031,8 +1039,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): Return the next available GRAMPS' ID for a Family object based off the family ID prefix. """ - self.fmap_index, gid = self.__find_next_gramps_id(self.family_prefix, - self.fmap_index, self.fid_trans) + self.fmap_index, gid = self._find_next_gramps_id(self.family_prefix, + self.fmap_index, + self.family_id_map) return gid def find_next_repository_gramps_id(self): @@ -1040,8 +1049,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): Return the next available GRAMPS' ID for a Respository object based off the repository ID prefix. """ - self.rmap_index, gid = self.__find_next_gramps_id(self.repository_prefix, - self.rmap_index, self.rid_trans) + self.rmap_index, gid = self._find_next_gramps_id(self.repository_prefix, + self.rmap_index, + self.repository_id_map) return gid def find_next_note_gramps_id(self): @@ -1049,8 +1059,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): Return the next available GRAMPS' ID for a Note object based off the note ID prefix. """ - self.nmap_index, gid = self.__find_next_gramps_id(self.note_prefix, - self.nmap_index, self.nid_trans) + self.nmap_index, gid = self._find_next_gramps_id(self.note_prefix, + self.nmap_index, + self.note_id_map) return gid def get_mediapath(self): @@ -1656,6 +1667,17 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback): # Save misc items: self.save_surname_list() self.save_gender_stats(self.genderStats) + + # Indexes: + self.set_metadata('cmap_index', self.cmap_index) + self.set_metadata('smap_index', self.smap_index) + self.set_metadata('emap_index', self.emap_index) + self.set_metadata('pmap_index', self.pmap_index) + self.set_metadata('fmap_index', self.fmap_index) + self.set_metadata('lmap_index', self.lmap_index) + self.set_metadata('omap_index', self.omap_index) + self.set_metadata('rmap_index', self.rmap_index) + self.set_metadata('nmap_index', self.nmap_index) self.close_backend()