summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-08-29 13:48:07 +0200
committerCarlos Garnacho <carlosg@gnome.org>2018-08-30 00:34:42 +0200
commitf68c1b024521964a83b7109516230ca367a54c4e (patch)
tree7feda06d6e77426594e9c1e84a8c00d46101dd2f
parentad11bc56c651316fa33da887d249b98cd73a85c1 (diff)
downloadtracker-f68c1b024521964a83b7109516230ca367a54c4e.tar.gz
libtracker-data: Update nao:lastModified after creating new database
It used to happen only right after ontology checks, which left branch new databases with an unset ontology modification date. This really didn't have ill effects, on the second run ontologies would be checked, but no real change would happen except the nao:lastModified change. Still better to do it at once, instead of waiting for the next run.
-rw-r--r--src/libtracker-data/tracker-data-manager.c57
1 files changed, 43 insertions, 14 deletions
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 38f8f7793..da6b2da47 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -3998,6 +3998,32 @@ tracker_data_manager_new (TrackerDBManagerFlags flags,
return manager;
}
+static void
+update_ontology_last_modified (TrackerDataManager *manager,
+ TrackerDBInterface *iface,
+ TrackerOntology *ontology,
+ GError **error)
+{
+ TrackerDBStatement *stmt;
+ const gchar *ontology_uri;
+ time_t last_mod;
+
+ ontology_uri = tracker_ontology_get_uri (ontology);
+ last_mod = tracker_ontology_get_last_modified (ontology);
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, error,
+ "UPDATE \"rdfs:Resource\" SET \"nao:lastModified\"= ? "
+ "WHERE \"rdfs:Resource\".ID = "
+ "(SELECT Resource.ID FROM Resource INNER JOIN \"rdfs:Resource\" "
+ "ON \"rdfs:Resource\".ID = Resource.ID WHERE "
+ "Resource.Uri = ?)");
+ if (stmt) {
+ tracker_db_statement_bind_int (stmt, 0, last_mod);
+ tracker_db_statement_bind_text (stmt, 1, ontology_uri);
+ tracker_db_statement_execute (stmt, error);
+ g_object_unref (stmt);
+ }
+}
+
static gboolean
tracker_data_manager_initable_init (GInitable *initable,
GCancellable *cancellable,
@@ -4545,20 +4571,7 @@ tracker_data_manager_initable_init (GInitable *initable,
g_hash_table_unref (multivalued);
#endif
- /* Update the nao:lastModified in the database */
- stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &n_error,
- "UPDATE \"rdfs:Resource\" SET \"nao:lastModified\"= ? "
- "WHERE \"rdfs:Resource\".ID = "
- "(SELECT Resource.ID FROM Resource INNER JOIN \"rdfs:Resource\" "
- "ON \"rdfs:Resource\".ID = Resource.ID WHERE "
- "Resource.Uri = ?)");
-
- if (stmt) {
- tracker_db_statement_bind_int (stmt, 0, last_mod);
- tracker_db_statement_bind_text (stmt, 1, ontology_uri);
- tracker_db_statement_execute (stmt, &n_error);
- g_object_unref (stmt);
- }
+ update_ontology_last_modified (manager, iface, ontology, &n_error);
if (n_error) {
g_critical ("%s", n_error->message);
@@ -4655,6 +4668,22 @@ tracker_data_manager_initable_init (GInitable *initable,
g_hash_table_unref (ontos_table);
g_list_free_full (ontos, g_object_unref);
+ } else if (is_first_time_index && !read_only) {
+ TrackerOntology **ontologies;
+ guint n_ontologies, i;
+
+ ontologies = tracker_ontologies_get_ontologies (manager->ontologies, &n_ontologies);
+
+ for (i = 0; i < n_ontologies; i++) {
+ GError *n_error = NULL;
+
+ update_ontology_last_modified (manager, iface, ontologies[i], &n_error);
+
+ if (n_error) {
+ g_critical ("%s", n_error->message);
+ g_clear_error (&n_error);
+ }
+ }
}
skip_ontology_check: