diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index 48f06660..99d437d6 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -1171,7 +1171,7 @@ void RclMain::startPreview(int docnum, Rcl::Doc doc, int mod) // from a compacted mail folder) // // !! NOTE: there is one case where doing a partial index update - // will not worl: if the search result does not exist in the new + // will not work: if the search result does not exist in the new // version of the file, it won't be purged from the index because // a partial index pass does no purge, so its ref date will stay // the same and you keep getting the message about the index being @@ -1179,11 +1179,15 @@ void RclMain::startPreview(int docnum, Rcl::Doc doc, int mod) // indexing pass. // Also we should re-run the query after updating the index // because the ipaths may be wrong in the current result list - if (!doc.ipath.empty()) { - string udi, sig; + // We only do this for the main index, else jump and prey (cant + // update anyway, even the makesig() call might not make sense for + // our base config) + if (!doc.ipath.empty() && rcldb && rcldb->whatDbIdx(doc) == 0) { + string udi; doc.getmeta(Rcl::Doc::keyudi, &udi); - FileInterner::makesig(doc, sig); - if (rcldb && !udi.empty()) { + if (!udi.empty()) { + string sig; + FileInterner::makesig(doc, sig); if (rcldb->needUpdate(udi, sig)) { int rep = QMessageBox::warning(0, tr("Warning"), diff --git a/src/rcldb/rcldb.cpp b/src/rcldb/rcldb.cpp index e4b91511..c6661c04 100644 --- a/src/rcldb/rcldb.cpp +++ b/src/rcldb/rcldb.cpp @@ -841,6 +841,16 @@ bool Db::rmQueryDb(const string &dir) return adjustdbs(); } +// Determining what index a doc result comes from is based on the +// modulo of the docid against the db count. Ref: +// http://trac.xapian.org/wiki/FAQ/MultiDatabaseDocumentID +size_t Db::whatDbIdx(const Doc& doc) +{ + if (doc.xdocid == 0) + return (size_t)-1; + return doc.xdocid % m_extraDbs.size(); +} + bool Db::testDbDir(const string &dir) { string aerr; diff --git a/src/rcldb/rcldb.h b/src/rcldb/rcldb.h index 4361f518..3038fcd9 100644 --- a/src/rcldb/rcldb.h +++ b/src/rcldb/rcldb.h @@ -197,6 +197,11 @@ class Db { bool addQueryDb(const string &dir); /** Remove extra database. if dir == "", remove all. */ bool rmQueryDb(const string &dir); + /** Look where the doc result comes from. + * @return: 0 main index, (size_t)-1 don't know, + * other: order of database in add_database() sequence. + */ + size_t whatDbIdx(const Doc& doc); /** Tell if directory seems to hold xapian db */ static bool testDbDir(const string &dir);