[tracker/wip/carlosg/sparql1.1: 178/201] libtracker-data: Create fts5/fts_view tables per database



commit 57acbeb56e9a7f4a6215667ecf99752771f969d1
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Jul 28 17:30:29 2019 +0200

    libtracker-data: Create fts5/fts_view tables per database

 src/libtracker-data/tracker-data-manager.c        | 62 +++++++++++++++-----
 src/libtracker-data/tracker-data-update.c         |  8 ++-
 src/libtracker-data/tracker-db-interface-sqlite.c | 37 ++++++++----
 src/libtracker-data/tracker-db-interface-sqlite.h | 15 +++--
 src/libtracker-fts/tracker-fts.c                  | 71 ++++++++++++-----------
 src/libtracker-fts/tracker-fts.h                  | 24 ++++----
 6 files changed, 140 insertions(+), 77 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index c0d12cbbc..9b918eb90 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -134,7 +134,8 @@ enum {
 #if HAVE_TRACKER_FTS
 static gboolean tracker_data_manager_fts_changed (TrackerDataManager *manager);
 static void tracker_data_manager_update_fts (TrackerDataManager *manager,
-                                             TrackerDBInterface *iface);
+                                             TrackerDBInterface *iface,
+                                            const gchar        *database);
 #endif
 
 static void tracker_data_manager_initable_iface_init (GInitableIface *iface);
@@ -3854,24 +3855,33 @@ static void
 rebuild_fts_tokens (TrackerDataManager *manager,
                     TrackerDBInterface *iface)
 {
+       GHashTableIter iter;
+       gchar *graph;
+
        g_debug ("Rebuilding FTS tokens, this may take a moment...");
-       tracker_db_interface_sqlite_fts_rebuild_tokens (iface);
-       g_debug ("FTS tokens rebuilt");
+       tracker_db_interface_sqlite_fts_rebuild_tokens (iface, "main");
+
+       g_hash_table_iter_init (&iter, manager->graphs);
+       while (g_hash_table_iter_next (&iter, (gpointer*) &graph, NULL))
+               tracker_db_interface_sqlite_fts_rebuild_tokens (iface, graph);
 
+       g_debug ("FTS tokens rebuilt");
        /* Update the stamp file */
        tracker_db_manager_tokenizer_update (manager->db_manager);
 }
 
 static gboolean
-tracker_data_manager_init_fts (TrackerDBInterface *iface,
+tracker_data_manager_init_fts (TrackerDataManager *manager,
+                               TrackerDBInterface *iface,
+                               const gchar        *database,
                                gboolean            create)
 {
        GHashTable *fts_props, *multivalued;
-       TrackerDataManager *manager;
 
-       manager = tracker_db_interface_get_user_data (iface);
        ontology_get_fts_properties (manager, &fts_props, &multivalued);
-       tracker_db_interface_sqlite_fts_init (iface, fts_props,
+       tracker_db_interface_sqlite_fts_init (iface,
+                                             database,
+                                             fts_props,
                                              multivalued, create);
        g_hash_table_unref (fts_props);
        g_hash_table_unref (multivalued);
@@ -3880,12 +3890,15 @@ tracker_data_manager_init_fts (TrackerDBInterface *iface,
 
 static void
 tracker_data_manager_update_fts (TrackerDataManager *manager,
-                                 TrackerDBInterface *iface)
+                                 TrackerDBInterface *iface,
+                                 const gchar        *database)
 {
        GHashTable *fts_properties, *multivalued;
 
        ontology_get_fts_properties (manager, &fts_properties, &multivalued);
-       tracker_db_interface_sqlite_fts_alter_table (iface, fts_properties, multivalued);
+       tracker_db_interface_sqlite_fts_alter_table (iface, database,
+                                                    fts_properties,
+                                                    multivalued);
        g_hash_table_unref (fts_properties);
        g_hash_table_unref (multivalued);
 }
@@ -4076,11 +4089,11 @@ tracker_data_manager_update_union_views (TrackerDataManager  *manager,
                str = g_string_new (NULL);
                g_string_append (str,
                                 "CREATE VIEW temp.\"unionGraph_fts5\" AS "
-                                "SELECT 0 AS graph, ROWID, *, fts5, rank, tracker_offsets(fts5) AS offsets 
FROM \"main\".\"fts5\" ");
+                                "SELECT 0 AS graph, ROWID, *, fts5, rank FROM \"main\".\"fts5\" ");
 
                g_hash_table_iter_init (&iter, graphs);
                while (g_hash_table_iter_next (&iter, &graph_name, &graph_id)) {
-                       g_string_append_printf (str, "UNION ALL SELECT %d AS graph, ROWID, *, fts5, rank, 
tracker_offsets(fts5) AS offsets FROM \"%s\".\"fts5\" ",
+                       g_string_append_printf (str, "UNION ALL SELECT %d AS graph, ROWID, *, fts5, rank FROM 
\"%s\".\"fts5\" ",
                                                GPOINTER_TO_INT (graph_id),
                                                (gchar *) graph_name);
                }
@@ -4223,11 +4236,15 @@ tracker_data_manager_initialize_iface (TrackerDataManager  *data_manager,
                                                                 error)) {
                                return FALSE;
                        }
+
+#if HAVE_TRACKER_FTS
+                       tracker_data_manager_init_fts (data_manager, iface, value, FALSE);
+#endif
                }
        }
 
 #if HAVE_TRACKER_FTS
-       tracker_data_manager_init_fts (iface, FALSE);
+       tracker_data_manager_init_fts (data_manager, iface, "main", FALSE);
 #endif
 
        return TRUE;
@@ -4531,7 +4548,7 @@ tracker_data_manager_initable_init (GInitable     *initable,
                }
 
 #if HAVE_TRACKER_FTS
-               tracker_data_manager_init_fts (iface, TRUE);
+               tracker_data_manager_init_fts (manager, iface, "main", TRUE);
 #endif
 
                tracker_data_manager_initialize_iface (manager, iface, &internal_error);
@@ -4879,7 +4896,7 @@ tracker_data_manager_initable_init (GInitable     *initable,
                                update_fts = tracker_data_manager_fts_changed (manager);
 
                                if (update_fts)
-                                       tracker_db_interface_sqlite_fts_delete_table (iface);
+                                       tracker_db_interface_sqlite_fts_delete_table (iface, "main");
 #endif
 
                                tracker_data_ontology_setup_db (manager, iface, "main", TRUE,
@@ -4894,19 +4911,30 @@ tracker_data_manager_initable_init (GInitable     *initable,
                                        g_hash_table_iter_init (&iter, graphs);
 
                                        while (g_hash_table_iter_next (&iter, &value, NULL)) {
+                                               if (update_fts)
+                                                       tracker_db_interface_sqlite_fts_delete_table (iface, 
value);
+
                                                tracker_data_ontology_setup_db (manager, iface, value, TRUE,
                                                                                &ontology_error);
                                                if (ontology_error)
                                                        break;
+
+#if HAVE_TRACKER_FTS
+                                               if (update_fts) {
+                                                       tracker_data_manager_update_fts (manager, iface, 
value);
+                                               } else {
+                                                       tracker_data_manager_init_fts (manager, iface, value, 
FALSE);
+                                               }
+#endif
                                        }
                                }
 
                                if (!ontology_error) {
 #if HAVE_TRACKER_FTS
                                        if (update_fts) {
-                                               tracker_data_manager_update_fts (manager, iface);
+                                               tracker_data_manager_update_fts (manager, iface, "main");
                                        } else {
-                                               tracker_data_manager_init_fts (iface, FALSE);
+                                               tracker_data_manager_init_fts (manager, iface, "main", FALSE);
                                        }
 #endif
                                }
@@ -5267,6 +5295,8 @@ tracker_data_manager_create_graph (TrackerDataManager  *manager,
                                             FALSE, error))
                goto detach;
 
+       tracker_data_manager_init_fts (manager, iface, name, TRUE);
+
        id = tracker_data_ensure_graph (manager->data_update, name, error);
        if (id == 0)
                goto detach;
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index ff3380fbd..86679cea5 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -996,6 +996,7 @@ tracker_data_resource_buffer_flush (TrackerData                      *data,
                        g_ptr_array_add (text, NULL);
 
                        tracker_db_interface_sqlite_fts_update_text (iface,
+                                                                    database,
                                                                     resource->id,
                                                                     (const gchar **) properties->pdata,
                                                                     (const gchar **) text->pdata);
@@ -1367,6 +1368,10 @@ get_old_property_values (TrackerData      *data,
                          GError          **error)
 {
        GArray *old_values;
+       const gchar *database;
+
+       database = data->resource_buffer->graph->graph ?
+               data->resource_buffer->graph->graph : "main";
 
        /* read existing property values */
        old_values = g_hash_table_lookup (data->resource_buffer->predicates, property);
@@ -1419,6 +1424,7 @@ get_old_property_values (TrackerData      *data,
                                                }
 
                                                tracker_db_interface_sqlite_fts_delete_text (iface,
+                                                                                            database,
                                                                                             
data->resource_buffer->id,
                                                                                             property_name,
                                                                                             str->str);
@@ -1909,7 +1915,7 @@ cache_delete_resource_type_full (TrackerData  *data,
                if (strcmp (tracker_class_get_uri (class), TRACKER_PREFIX_RDFS "Resource") == 0 &&
                    g_hash_table_size (data->resource_buffer->tables) == 0) {
 #if HAVE_TRACKER_FTS
-                       tracker_db_interface_sqlite_fts_delete_id (iface, data->resource_buffer->id);
+                       tracker_db_interface_sqlite_fts_delete_id (iface, database, 
data->resource_buffer->id);
 #endif
                        /* skip subclass query when deleting whole resource
                           to improve performance */
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c 
b/src/libtracker-data/tracker-db-interface-sqlite.c
index 0c40a23ba..a789fe963 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -2080,6 +2080,7 @@ _fts_create_properties (GHashTable *properties)
 
 void
 tracker_db_interface_sqlite_fts_init (TrackerDBInterface  *db_interface,
+                                      const gchar         *database,
                                       GHashTable          *properties,
                                       GHashTable          *multivalued,
                                       gboolean             create)
@@ -2090,7 +2091,7 @@ tracker_db_interface_sqlite_fts_init (TrackerDBInterface  *db_interface,
        tracker_fts_init_db (db_interface->db, db_interface, properties);
 
        if (create &&
-           !tracker_fts_create_table (db_interface->db, "fts5",
+           !tracker_fts_create_table (db_interface->db, database, "fts5",
                                       properties, multivalued)) {
                g_warning ("FTS tables creation failed");
        }
@@ -2119,32 +2120,36 @@ tracker_db_interface_sqlite_fts_init (TrackerDBInterface  *db_interface,
 #if HAVE_TRACKER_FTS
 
 void
-tracker_db_interface_sqlite_fts_delete_table (TrackerDBInterface  *db_interface)
+tracker_db_interface_sqlite_fts_delete_table (TrackerDBInterface *db_interface,
+                                              const gchar        *database)
 {
-       if (!tracker_fts_delete_table (db_interface->db, "fts5")) {
+       if (!tracker_fts_delete_table (db_interface->db, database, "fts5")) {
                g_critical ("Failed to delete FTS table");
        }
 }
 
 void
 tracker_db_interface_sqlite_fts_alter_table (TrackerDBInterface  *db_interface,
-                                            GHashTable          *properties,
-                                            GHashTable          *multivalued)
+                                             const gchar         *database,
+                                             GHashTable          *properties,
+                                             GHashTable          *multivalued)
 {
-       if (!tracker_fts_alter_table (db_interface->db, "fts5", properties, multivalued)) {
+       if (!tracker_fts_alter_table (db_interface->db, database, "fts5", properties, multivalued)) {
                g_critical ("Failed to update FTS columns");
        }
 }
 
 static gchar *
 tracker_db_interface_sqlite_fts_create_query (TrackerDBInterface  *db_interface,
+                                              const gchar         *database,
                                               gboolean             delete,
                                               const gchar        **properties)
 {
        GString *insert_str, *values_str;
        gint i;
 
-       insert_str = g_string_new ("INSERT INTO fts5 (");
+       insert_str = g_string_new (NULL);
+       g_string_append_printf (insert_str, "INSERT INTO \"%s\".fts5 (", database);
        values_str = g_string_new (NULL);
 
        if (delete) {
@@ -2167,15 +2172,17 @@ tracker_db_interface_sqlite_fts_create_query (TrackerDBInterface  *db_interface,
 }
 
 static gchar *
-tracker_db_interface_sqlite_fts_create_delete_all_query (TrackerDBInterface *db_interface)
+tracker_db_interface_sqlite_fts_create_delete_all_query (TrackerDBInterface *db_interface,
+                                                         const gchar        *database)
 {
        GString *insert_str;
 
        insert_str = g_string_new (NULL);
        g_string_append_printf (insert_str,
-                               "INSERT INTO fts5 (fts5, rowid %s) "
+                               "INSERT INTO \"%s\".fts5 (fts5, rowid %s) "
                                "SELECT 'delete', rowid %s FROM fts_view "
                                "WHERE rowid = ?",
+                               database,
                                db_interface->fts_properties,
                                db_interface->fts_properties);
        return g_string_free (insert_str, FALSE);
@@ -2183,6 +2190,7 @@ tracker_db_interface_sqlite_fts_create_delete_all_query (TrackerDBInterface *db_
 
 gboolean
 tracker_db_interface_sqlite_fts_update_text (TrackerDBInterface  *db_interface,
+                                             const gchar         *database,
                                              int                  id,
                                              const gchar        **properties,
                                              const gchar        **text)
@@ -2193,6 +2201,7 @@ tracker_db_interface_sqlite_fts_update_text (TrackerDBInterface  *db_interface,
        gint i;
 
        query = tracker_db_interface_sqlite_fts_create_query (db_interface,
+                                                             database,
                                                              FALSE, properties);
        stmt = tracker_db_interface_create_statement (db_interface,
                                                      TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE,
@@ -2228,6 +2237,7 @@ tracker_db_interface_sqlite_fts_update_text (TrackerDBInterface  *db_interface,
 
 gboolean
 tracker_db_interface_sqlite_fts_delete_text (TrackerDBInterface  *db_interface,
+                                             const gchar         *database,
                                              int                  rowid,
                                              const gchar         *property,
                                              const gchar         *old_text)
@@ -2238,6 +2248,7 @@ tracker_db_interface_sqlite_fts_delete_text (TrackerDBInterface  *db_interface,
        gchar *query;
 
        query = tracker_db_interface_sqlite_fts_create_query (db_interface,
+                                                             database,
                                                              TRUE, properties);
        stmt = tracker_db_interface_create_statement (db_interface,
                                                      TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE,
@@ -2268,13 +2279,14 @@ tracker_db_interface_sqlite_fts_delete_text (TrackerDBInterface  *db_interface,
 
 gboolean
 tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *db_interface,
+                                           const gchar        *database,
                                            int                 id)
 {
        TrackerDBStatement *stmt;
        GError *error = NULL;
        gchar *query;
 
-       query = tracker_db_interface_sqlite_fts_create_delete_all_query (db_interface);
+       query = tracker_db_interface_sqlite_fts_create_delete_all_query (db_interface, database);
        stmt = tracker_db_interface_create_statement (db_interface,
                                                      TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE,
                                                      &error,
@@ -2304,9 +2316,10 @@ tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *db_interface,
 }
 
 void
-tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface)
+tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface,
+                                                const gchar        *database)
 {
-       tracker_fts_rebuild_tokens (interface->db, "fts5");
+       tracker_fts_rebuild_tokens (interface->db, database, "fts5");
 }
 
 #endif
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.h 
b/src/libtracker-data/tracker-db-interface-sqlite.h
index 1715d30ef..81127539a 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.h
+++ b/src/libtracker-data/tracker-db-interface-sqlite.h
@@ -48,6 +48,7 @@ TrackerDBInterface *tracker_db_interface_sqlite_new                    (const gc
 gint64              tracker_db_interface_sqlite_get_last_insert_id     (TrackerDBInterface       *interface);
 void                tracker_db_interface_sqlite_enable_shared_cache    (void);
 void                tracker_db_interface_sqlite_fts_init               (TrackerDBInterface       *interface,
+                                                                        const gchar              *database,
                                                                         GHashTable               *properties,
                                                                         GHashTable               
*multivalued,
                                                                         gboolean                  create);
@@ -62,26 +63,34 @@ gboolean            tracker_db_interface_init_vtabs                    (TrackerD
                                                                         TrackerOntologies        
*ontologies);
 
 #if HAVE_TRACKER_FTS
-void                tracker_db_interface_sqlite_fts_delete_table       (TrackerDBInterface       *interface);
+void                tracker_db_interface_sqlite_fts_delete_table       (TrackerDBInterface       *interface,
+                                                                        const gchar              *database);
 
 void                tracker_db_interface_sqlite_fts_alter_table        (TrackerDBInterface       *interface,
+                                                                        const gchar              *database,
                                                                         GHashTable               *properties,
                                                                         GHashTable               
*multivalued);
 gboolean            tracker_db_interface_sqlite_fts_update_text        (TrackerDBInterface       
*db_interface,
+                                                                        const gchar              *database,
                                                                        int                       id,
                                                                         const gchar             **properties,
                                                                         const gchar             **text);
 
 gboolean            tracker_db_interface_sqlite_fts_delete_text        (TrackerDBInterface       *interface,
+                                                                        const gchar              *database,
                                                                         int                       rowid,
                                                                         const gchar              *property,
                                                                         const gchar              *old_text);
 gboolean            tracker_db_interface_sqlite_fts_delete_id          (TrackerDBInterface       *interface,
+                                                                        const gchar              *database,
                                                                         int                       rowid);
 void                tracker_db_interface_sqlite_fts_update_commit      (TrackerDBInterface       *interface);
 void                tracker_db_interface_sqlite_fts_update_rollback    (TrackerDBInterface       *interface);
 
-void                tracker_db_interface_sqlite_fts_rebuild_tokens     (TrackerDBInterface       *interface);
+void                tracker_db_interface_sqlite_fts_rebuild_tokens     (TrackerDBInterface       *interface,
+                                                                        const gchar              *database);
+
+#endif
 
 gboolean            tracker_db_interface_attach_database               (TrackerDBInterface       
*db_interface,
                                                                         GFile                    *file,
@@ -91,8 +100,6 @@ gboolean            tracker_db_interface_detach_database               (TrackerD
                                                                         const gchar              *name,
                                                                         GError                  **error);
 
-#endif
-
 G_END_DECLS
 
 #endif /* __LIBTRACKER_DB_INTERFACE_SQLITE_H__ */
diff --git a/src/libtracker-fts/tracker-fts.c b/src/libtracker-fts/tracker-fts.c
index 19db53987..9d2d40f95 100644
--- a/src/libtracker-fts/tracker-fts.c
+++ b/src/libtracker-fts/tracker-fts.c
@@ -79,10 +79,11 @@ tracker_fts_init_db (sqlite3            *db,
 }
 
 gboolean
-tracker_fts_create_table (sqlite3    *db,
-                          gchar      *table_name,
-                          GHashTable *tables,
-                          GHashTable *grouped_columns)
+tracker_fts_create_table (sqlite3     *db,
+                          const gchar *database,
+                          gchar       *table_name,
+                          GHashTable  *tables,
+                          GHashTable  *grouped_columns)
 {
        GString *str, *from, *fts;
        GHashTableIter iter;
@@ -95,12 +96,14 @@ tracker_fts_create_table (sqlite3    *db,
 
        /* Create view on tables/columns marked as FTS-indexed */
        g_hash_table_iter_init (&iter, tables);
-       str = g_string_new ("CREATE VIEW fts_view AS SELECT Resource.ID as rowid ");
-       from = g_string_new ("FROM Resource ");
+       str = g_string_new ("CREATE VIEW ");
+       g_string_append_printf (str, "\"%s\".fts_view AS SELECT \"rdfs:Resource\".ID as rowid ",
+                               database);
+       from = g_string_new ("FROM \"rdfs:Resource\" ");
 
        fts = g_string_new ("CREATE VIRTUAL TABLE ");
-       g_string_append_printf (fts, "%s USING fts5(content=\"fts_view\", ",
-                               table_name);
+       g_string_append_printf (fts, "\"%s\".%s USING fts5(content=\"fts_view\", ",
+                               database, table_name);
 
        while (g_hash_table_iter_next (&iter, (gpointer *) &index_table,
                                       (gpointer *) &columns)) {
@@ -124,9 +127,9 @@ tracker_fts_create_table (sqlite3    *db,
                        columns = columns->next;
                }
 
-               g_string_append_printf (from, "LEFT OUTER JOIN \"%s\" ON "
-                                       " Resource.ID = \"%s\".ID ",
-                                       index_table, index_table);
+               g_string_append_printf (from, "LEFT OUTER JOIN \"%s\".\"%s\" ON "
+                                       " \"rdfs:Resource\".ID = \"%s\".ID ",
+                                       database, index_table, index_table);
        }
 
        g_string_append (str, from->str);
@@ -158,22 +161,20 @@ tracker_fts_create_table (sqlite3    *db,
 }
 
 gboolean
-tracker_fts_delete_table (sqlite3 *db,
-                          gchar   *table_name)
+tracker_fts_delete_table (sqlite3     *db,
+                         const gchar *database,
+                          gchar       *table_name)
 {
        gchar *query;
        int rc;
 
-       rc = sqlite3_exec (db, "DROP VIEW IF EXISTS unionGraph_fts5", NULL, NULL, NULL);
-
-       if (rc == SQLITE_OK) {
-               query = g_strdup_printf ("DROP VIEW fts_view");
-               rc = sqlite3_exec (db, query, NULL, NULL, NULL);
-               g_free (query);
-       }
+       query = g_strdup_printf ("DROP VIEW fts_view");
+       rc = sqlite3_exec (db, query, NULL, NULL, NULL);
+       g_free (query);
 
        if (rc == SQLITE_OK) {
-               query = g_strdup_printf ("DROP TABLE %s", table_name);
+               query = g_strdup_printf ("DROP TABLE \"%s\".%s",
+                                        database, table_name);
                sqlite3_exec (db, query, NULL, NULL, NULL);
                g_free (query);
        }
@@ -182,23 +183,24 @@ tracker_fts_delete_table (sqlite3 *db,
 }
 
 gboolean
-tracker_fts_alter_table (sqlite3    *db,
-                        gchar      *table_name,
-                        GHashTable *tables,
-                        GHashTable *grouped_columns)
+tracker_fts_alter_table (sqlite3     *db,
+                        const gchar *database,
+                        gchar       *table_name,
+                        GHashTable  *tables,
+                        GHashTable  *grouped_columns)
 {
        gchar *query, *tmp_name;
        int rc;
 
        tmp_name = g_strdup_printf ("%s_TMP", table_name);
 
-       if (!tracker_fts_create_table (db, tmp_name, tables, grouped_columns)) {
+       if (!tracker_fts_create_table (db, database, tmp_name, tables, grouped_columns)) {
                g_free (tmp_name);
                return FALSE;
        }
 
-       query = g_strdup_printf ("INSERT INTO %s (rowid) SELECT rowid FROM fts_view",
-                                tmp_name);
+       query = g_strdup_printf ("INSERT INTO \"%s\".%s (rowid) SELECT rowid FROM fts_view",
+                                database, tmp_name);
        rc = sqlite3_exec (db, query, NULL, NULL, NULL);
        g_free (query);
 
@@ -207,8 +209,8 @@ tracker_fts_alter_table (sqlite3    *db,
                return FALSE;
        }
 
-       query = g_strdup_printf ("INSERT INTO %s(%s) VALUES('rebuild')",
-                                tmp_name, tmp_name);
+       query = g_strdup_printf ("INSERT INTO \"%s\".%s(%s) VALUES('rebuild')",
+                                database, tmp_name, tmp_name);
        rc = sqlite3_exec (db, query, NULL, NULL, NULL);
        g_free (query);
 
@@ -217,8 +219,8 @@ tracker_fts_alter_table (sqlite3    *db,
                return FALSE;
        }
 
-       query = g_strdup_printf ("ALTER TABLE %s RENAME TO %s",
-                                tmp_name, table_name);
+       query = g_strdup_printf ("ALTER TABLE \"%s\".%s RENAME TO %s",
+                                database, tmp_name, table_name);
        rc = sqlite3_exec (db, query, NULL, NULL, NULL);
        g_free (query);
        g_free (tmp_name);
@@ -228,13 +230,14 @@ tracker_fts_alter_table (sqlite3    *db,
 
 void
 tracker_fts_rebuild_tokens (sqlite3     *db,
+                           const gchar *database,
                             const gchar *table_name)
 {
        gchar *query;
 
        /* This special query rebuilds the tokens in the given FTS table */
-       query = g_strdup_printf ("INSERT INTO %s(%s) VALUES('rebuild')",
-                                table_name, table_name);
+       query = g_strdup_printf ("INSERT INTO \"%s\".%s(%s) VALUES('rebuild')",
+                                database, table_name, table_name);
        sqlite3_exec(db, query, NULL, NULL, NULL);
        g_free (query);
 }
diff --git a/src/libtracker-fts/tracker-fts.h b/src/libtracker-fts/tracker-fts.h
index 3bda8cf98..e8d3a91f9 100644
--- a/src/libtracker-fts/tracker-fts.h
+++ b/src/libtracker-fts/tracker-fts.h
@@ -32,17 +32,21 @@ G_BEGIN_DECLS
 gboolean    tracker_fts_init_db          (sqlite3            *db,
                                           TrackerDBInterface *interface,
                                           GHashTable         *tables);
-gboolean    tracker_fts_create_table     (sqlite3    *db,
-                                          gchar      *table_name,
-                                          GHashTable *tables,
-                                          GHashTable *grouped_columns);
-gboolean    tracker_fts_delete_table     (sqlite3    *db,
-                                          gchar      *table_name);
-gboolean    tracker_fts_alter_table      (sqlite3    *db,
-                                          gchar      *table_name,
-                                          GHashTable *tables,
-                                          GHashTable *grouped_columns);
+gboolean    tracker_fts_create_table     (sqlite3     *db,
+                                          const gchar *database,
+                                          gchar       *table_name,
+                                          GHashTable  *tables,
+                                          GHashTable  *grouped_columns);
+gboolean    tracker_fts_delete_table     (sqlite3     *db,
+                                          const gchar *database,
+                                          gchar       *table_name);
+gboolean    tracker_fts_alter_table      (sqlite3     *db,
+                                          const gchar *database,
+                                          gchar       *table_name,
+                                          GHashTable  *tables,
+                                          GHashTable  *grouped_columns);
 void        tracker_fts_rebuild_tokens   (sqlite3     *db,
+                                          const gchar *database,
                                           const gchar *table_name);
 
 G_END_DECLS


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