diff options
-rw-r--r-- | src/libtracker-sparql/core/tracker-data-manager.c | 31 | ||||
-rw-r--r-- | src/libtracker-sparql/core/tracker-db-manager.c | 26 |
2 files changed, 44 insertions, 13 deletions
diff --git a/src/libtracker-sparql/core/tracker-data-manager.c b/src/libtracker-sparql/core/tracker-data-manager.c index 8eca3d8d9..daa8dfffb 100644 --- a/src/libtracker-sparql/core/tracker-data-manager.c +++ b/src/libtracker-sparql/core/tracker-data-manager.c @@ -4160,6 +4160,35 @@ update_interface_cb (TrackerDBManager *db_manager, } static gboolean +integrity_check_cb (TrackerDBManager *db_manager, + TrackerDBInterface *iface, + TrackerDataManager *data_manager) +{ + GError *internal_error = NULL; + TrackerDBStatement *stmt; + + /* Ensure that database has been initialized earlier + * by checking whether Resource table exists. + */ + stmt = tracker_db_interface_create_statement (iface, + TRACKER_DB_STATEMENT_CACHE_TYPE_NONE, + &internal_error, + "SELECT 1 FROM Resource"); + if (!stmt) { + if (internal_error) { + g_message ("Corrupt database: failed to create resource check statement: %s", internal_error->message); + } + + g_clear_error (&internal_error); + return TRUE; + } + + g_clear_object (&stmt); + + return FALSE; +} + +static gboolean tracker_data_manager_update_from_version (TrackerDataManager *manager, TrackerDBVersion version, GError **error) @@ -4276,6 +4305,8 @@ tracker_data_manager_initable_init (GInitable *initable, G_CALLBACK (setup_interface_cb), manager); g_signal_connect (manager->db_manager, "update-interface", G_CALLBACK (update_interface_cb), manager); + g_signal_connect (manager->db_manager, "integrity-check", + G_CALLBACK (integrity_check_cb), manager); tracker_data_manager_update_status (manager, "Initializing data manager"); diff --git a/src/libtracker-sparql/core/tracker-db-manager.c b/src/libtracker-sparql/core/tracker-db-manager.c index 71a378e52..cb4318727 100644 --- a/src/libtracker-sparql/core/tracker-db-manager.c +++ b/src/libtracker-sparql/core/tracker-db-manager.c @@ -96,6 +96,7 @@ struct _TrackerDBManager { enum { SETUP_INTERFACE, UPDATE_INTERFACE, + INTEGRITY_CHECK, N_SIGNALS }; @@ -448,6 +449,7 @@ db_check_integrity (TrackerDBManager *db_manager) GError *internal_error = NULL; TrackerDBStatement *stmt; TrackerDBCursor *cursor = NULL; + gboolean handled = FALSE; stmt = tracker_db_interface_create_statement (db_manager->db.iface, TRACKER_DB_STATEMENT_CACHE_TYPE_NONE, &internal_error, @@ -478,21 +480,11 @@ db_check_integrity (TrackerDBManager *db_manager) g_object_unref (cursor); } - /* ensure that database has been initialized by an earlier tracker-store start - by checking whether Resource table exists */ - stmt = tracker_db_interface_create_statement (db_manager->db.iface, TRACKER_DB_STATEMENT_CACHE_TYPE_NONE, - &internal_error, - "SELECT 1 FROM Resource"); - if (!stmt) { - if (internal_error) { - g_message ("Corrupt database: failed to create resource check statement: %s", internal_error->message); - } + g_signal_emit (db_manager, signals[INTEGRITY_CHECK], 0, db_manager->db.iface, &handled); - g_clear_error (&internal_error); + /* Someone raised an error */ + if (handled) return FALSE; - } - - g_object_unref (stmt); return TRUE; } @@ -909,6 +901,14 @@ tracker_db_manager_class_init (TrackerDBManagerClass *klass) g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TRACKER_TYPE_DB_INTERFACE); + signals[INTEGRITY_CHECK] = + g_signal_new ("integrity-check", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, + g_signal_accumulator_true_handled, + NULL, NULL, + G_TYPE_BOOLEAN, + 1, TRACKER_TYPE_DB_INTERFACE); } static TrackerDBInterface * |