[geary/geary-0.11] Add some FTS table management methods to Geary.ImapDB.Database.



commit 358afb70f31eae18c2194ec74b55c0c137edf95e
Author: Michael James Gratton <mike vee net>
Date:   Fri Oct 14 19:23:30 2016 +1100

    Add some FTS table management methods to Geary.ImapDB.Database.

 src/engine/imap-db/imap-db-database.vala |   46 +++++++++++++++++++++++++++++-
 1 files changed, 45 insertions(+), 1 deletions(-)
---
diff --git a/src/engine/imap-db/imap-db-database.vala b/src/engine/imap-db/imap-db-database.vala
index 8fff480..889d165 100644
--- a/src/engine/imap-db/imap-db-database.vala
+++ b/src/engine/imap-db/imap-db-database.vala
@@ -554,7 +554,51 @@ private class Geary.ImapDB.Database : Geary.Db.VersionedDatabase {
             error("Error creating tokenizer table: %s", e.message);
         }
     }
-    
+
+    /**
+     * Determines if the database's FTS table indexes are valid.
+     */
+    public bool fts_integrity_check() throws Error {
+        Db.Statement stmt = prepare("""
+            INSERT INTO MessageSearchTable(MessageSearchTable)
+                VALUES('integrity-check')
+        """);
+        bool passed = true;
+        try {
+            stmt.exec();
+        } catch (DatabaseError.CORRUPT err) {
+            passed = false;
+        }
+        return passed;
+    }
+
+    /**
+     * Rebuilds the database's FTS table index.
+     *
+     * This can be used to recover from corrupt indexs, as indicated
+     * by fts_integrity_check() returning false.
+     */
+    public void fts_rebuild() throws Error {
+        Db.Statement stmt = prepare("""
+            INSERT INTO MessageSearchTable(MessageSearchTable)
+                VALUES('rebuild')
+        """);
+        stmt.exec();
+    }
+
+    /**
+     * Optimises the database's FTS table index.
+     *
+     * This is an expensive call, as much as performing a VACCUM.
+     */
+    public void fts_optimize() throws Error {
+        Db.Statement stmt = prepare("""
+            INSERT INTO MessageSearchTable(MessageSearchTable)
+                VALUES('optimize')
+        """);
+        stmt.exec();
+    }
+
     private void on_prepare_database_connection(Db.Connection cx) throws Error {
         cx.set_busy_timeout_msec(Db.Connection.RECOMMENDED_BUSY_TIMEOUT_MSEC);
         cx.set_foreign_keys(true);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]