In .:
2006-12-01 Alex Roitman <shura@gramps-project.org> * src/plugins/Makefile.am (pkgdata_PYTHON): Ship new file. * src/plugins/RebuildRefMap.py: Add new plugin. * src/GrampsDb/_GrampsBSDDB.py (reindex_reference_map): Fix reindexing. * src/GrampsDb/_GrampsDbBase.py (reindex_reference_map): Add a placeholder method for anything other than BSDDB. In po: 2006-12-01 Alex Roitman <shura@gramps-project.org> * POTFILES.in: List new file. svn: r7740
This commit is contained in:
parent
abeb0de15b
commit
685c655b80
@ -1,3 +1,10 @@
|
|||||||
|
2006-12-01 Alex Roitman <shura@gramps-project.org>
|
||||||
|
* src/plugins/Makefile.am (pkgdata_PYTHON): Ship new file.
|
||||||
|
* src/plugins/RebuildRefMap.py: Add new plugin.
|
||||||
|
* src/GrampsDb/_GrampsBSDDB.py (reindex_reference_map): Fix reindexing.
|
||||||
|
* src/GrampsDb/_GrampsDbBase.py (reindex_reference_map): Add a
|
||||||
|
placeholder method for anything other than BSDDB.
|
||||||
|
|
||||||
2006-11-30 A Costa <agcosta@gis.net>
|
2006-11-30 A Costa <agcosta@gis.net>
|
||||||
* data/man/gramps.1.in: Typos.
|
* data/man/gramps.1.in: Typos.
|
||||||
|
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
2006-12-01 Alex Roitman <shura@gramps-project.org>
|
||||||
|
* POTFILES.in: List new file.
|
||||||
|
|
||||||
2006-11-30 Alex Roitman <shura@gramps-project.org>
|
2006-11-30 Alex Roitman <shura@gramps-project.org>
|
||||||
* POTFILES.in: List new files.
|
* POTFILES.in: List new files.
|
||||||
|
|
||||||
|
@ -313,6 +313,7 @@ src/plugins/WriteCD.py
|
|||||||
src/plugins/WriteFtree.py
|
src/plugins/WriteFtree.py
|
||||||
src/plugins/WriteGeneWeb.py
|
src/plugins/WriteGeneWeb.py
|
||||||
src/plugins/WritePkg.py
|
src/plugins/WritePkg.py
|
||||||
|
src/plugins/RebuildRefMap.py
|
||||||
|
|
||||||
# PluginUtils package
|
# PluginUtils package
|
||||||
src/PluginUtils/__init__.py
|
src/PluginUtils/__init__.py
|
||||||
|
@ -870,17 +870,34 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
|
|||||||
Reindex all primary records in the database.
|
Reindex all primary records in the database.
|
||||||
This will be a slow process for large databases.
|
This will be a slow process for large databases.
|
||||||
|
|
||||||
At present this method does not clear the reference_map before it
|
|
||||||
reindexes. This is fine when if reindex is run to index new content
|
|
||||||
or when upgrading from a non-reference_map version of the database.
|
|
||||||
But it might be a problem if reindex is used to repair a broken index
|
|
||||||
because any references to primary objects that are no longer in the
|
|
||||||
database will remain in the reference_map index.
|
|
||||||
|
|
||||||
So if you want to reindex for repair purposes you need to
|
|
||||||
clear the reference_map first.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# First, remove the reference map and related tables
|
||||||
|
self.reference_map_referenced_map.close()
|
||||||
|
junk = db.DB(self.env)
|
||||||
|
junk.remove(self.full_name,"reference_map_referenced_map")
|
||||||
|
|
||||||
|
self.reference_map_primary_map.close()
|
||||||
|
junk = db.DB(self.env)
|
||||||
|
junk.remove(self.full_name,"reference_map_primary_map")
|
||||||
|
|
||||||
|
self.reference_map.close()
|
||||||
|
junk = db.DB(self.env)
|
||||||
|
junk.remove(self.full_name,"reference_map")
|
||||||
|
|
||||||
|
# Open reference_map and primapry map
|
||||||
|
self.reference_map = self.open_table(self.full_name, "reference_map",
|
||||||
|
dbtype=db.DB_BTREE)
|
||||||
|
|
||||||
|
open_flags = self.open_flags()
|
||||||
|
self.reference_map_primary_map = db.DB(self.env)
|
||||||
|
self.reference_map_primary_map.set_flags(db.DB_DUP)
|
||||||
|
self.reference_map_primary_map.open(self.full_name,
|
||||||
|
"reference_map_primary_map",
|
||||||
|
db.DB_BTREE, flags=open_flags)
|
||||||
|
self.reference_map.associate(self.reference_map_primary_map,
|
||||||
|
find_primary_handle,
|
||||||
|
open_flags)
|
||||||
|
|
||||||
# Make a dictionary of the functions and classes that we need for
|
# Make a dictionary of the functions and classes that we need for
|
||||||
# each of the primary object tables.
|
# each of the primary object tables.
|
||||||
@ -901,6 +918,8 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
|
|||||||
'class_func': Repository},
|
'class_func': Repository},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
transaction = self.transaction_begin(batch=True,no_magic=True)
|
||||||
|
|
||||||
# Now we use the functions and classes defined above
|
# Now we use the functions and classes defined above
|
||||||
# to loop through each of the primary object tables.
|
# to loop through each of the primary object tables.
|
||||||
for primary_table_name in primary_tables.keys():
|
for primary_table_name in primary_tables.keys():
|
||||||
@ -911,17 +930,33 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
|
|||||||
# Grab the real object class here so that the lookup does
|
# Grab the real object class here so that the lookup does
|
||||||
# not happen inside the cursor loop.
|
# not happen inside the cursor loop.
|
||||||
class_func = primary_tables[primary_table_name]['class_func']
|
class_func = primary_tables[primary_table_name]['class_func']
|
||||||
|
|
||||||
while data:
|
while data:
|
||||||
found_handle,val = data
|
found_handle,val = data
|
||||||
obj = class_func()
|
obj = class_func()
|
||||||
obj.unserialize(val)
|
obj.unserialize(val)
|
||||||
|
|
||||||
self._update_reference_map(obj,transaction)
|
if self.UseTXN:
|
||||||
|
the_txn = self.env.txn_begin()
|
||||||
|
else:
|
||||||
|
the_txn = None
|
||||||
|
self._update_reference_map(obj,transaction,the_txn)
|
||||||
|
if not self.UseTXN:
|
||||||
|
data_map.sync()
|
||||||
|
if the_txn:
|
||||||
|
the_txn.commit()
|
||||||
|
|
||||||
data = cursor.next()
|
data = cursor.next()
|
||||||
|
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
self.transaction_commit(transaction,_("Rebuild reference map"))
|
||||||
|
|
||||||
|
self.reference_map_referenced_map = db.DB(self.env)
|
||||||
|
self.reference_map_referenced_map.set_flags(db.DB_DUP|db.DB_DUPSORT)
|
||||||
|
self.reference_map_referenced_map.open(
|
||||||
|
self.full_name,"reference_map_referenced_map",
|
||||||
|
db.DB_BTREE,flags=open_flags)
|
||||||
|
self.reference_map.associate(self.reference_map_referenced_map,
|
||||||
|
find_referenced_handle,open_flags)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -2044,6 +2044,13 @@ class GrampsDbBase(GrampsDBCallback):
|
|||||||
need to be changed."""
|
need to be changed."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def reindex_reference_map(self):
|
||||||
|
"""
|
||||||
|
Reindex all primary records in the database.
|
||||||
|
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
def find_backlink_handles(self, handle, include_classes=None):
|
def find_backlink_handles(self, handle, include_classes=None):
|
||||||
"""
|
"""
|
||||||
Find all objects that hold a reference to the object handle.
|
Find all objects that hold a reference to the object handle.
|
||||||
|
@ -63,7 +63,8 @@ pkgdata_PYTHON = \
|
|||||||
Checkpoint.py\
|
Checkpoint.py\
|
||||||
MediaManager.py\
|
MediaManager.py\
|
||||||
RemoveUnused.py\
|
RemoveUnused.py\
|
||||||
rel_pl.py
|
rel_pl.py\
|
||||||
|
RebuildRefMap.py
|
||||||
|
|
||||||
pkgpyexecdir = @pkgpyexecdir@/plugins
|
pkgpyexecdir = @pkgpyexecdir@/plugins
|
||||||
pkgpythondir = @pkgpythondir@/plugins
|
pkgpythondir = @pkgpythondir@/plugins
|
||||||
|
117
src/plugins/RebuildRefMap.py
Normal file
117
src/plugins/RebuildRefMap.py
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
#
|
||||||
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
|
#
|
||||||
|
# Copyright (C) 2000-2006 Donald N. Allingham
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
# Written by Alex Roitman
|
||||||
|
|
||||||
|
"Rebuild reference map tables"
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# python modules
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
import os
|
||||||
|
import cStringIO
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Set up logging
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------
|
||||||
|
import logging
|
||||||
|
log = logging.getLogger(".RebuildRefMap")
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# gtk modules
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
import gtk
|
||||||
|
import gtk.glade
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# GRAMPS modules
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
import RelLib
|
||||||
|
import Utils
|
||||||
|
import const
|
||||||
|
from PluginUtils import Tool, register_tool
|
||||||
|
from QuestionDialog import OkDialog
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# runTool
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
class RebuildRefMap(Tool.Tool):
|
||||||
|
|
||||||
|
def __init__(self, dbstate, uistate, options_class, name, callback=None):
|
||||||
|
|
||||||
|
Tool.Tool.__init__(self, dbstate, options_class, name)
|
||||||
|
|
||||||
|
if self.db.readonly:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.db.disable_signals()
|
||||||
|
if uistate:
|
||||||
|
self.db.reindex_reference_map()
|
||||||
|
OkDialog(_("Reference maps rebuilt"),
|
||||||
|
_('All reference maps have been rebuilt.'))
|
||||||
|
else:
|
||||||
|
print "Rebuilding reference maps..."
|
||||||
|
self.db.reindex_reference_map()
|
||||||
|
print "All reference maps have been rebuilt."
|
||||||
|
self.db.enable_signals()
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------
|
||||||
|
class RebuildRefMapOptions(Tool.ToolOptions):
|
||||||
|
"""
|
||||||
|
Defines options and provides handling interface.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self,name,person_id=None):
|
||||||
|
Tool.ToolOptions.__init__(self,name,person_id)
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
register_tool(
|
||||||
|
name = 'rebuild_refmap',
|
||||||
|
category = Tool.TOOL_DBFIX,
|
||||||
|
tool_class = RebuildRefMap,
|
||||||
|
options_class = RebuildRefMapOptions,
|
||||||
|
modes = Tool.MODE_GUI | Tool.MODE_CLI,
|
||||||
|
translated_name = _("Rebuild reference map"),
|
||||||
|
status=(_("Stable")),
|
||||||
|
author_name = "Alex Roitman",
|
||||||
|
author_email = "shura@gramps-project.org",
|
||||||
|
description=_("Rebuilds reference map")
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user