diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index 039bc95..f75d38f 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -737,6 +737,8 @@ tracker_data_delete_statement (const gchar *subject, types = tracker_data_query_rdf_type (subject_id); if (object && g_strcmp0 (predicate, RDF_PREFIX "type") == 0) { + gboolean remove_fts; + class = tracker_ontology_get_class_by_uri (object); if (class != NULL) { TrackerDBInterface *iface; @@ -779,14 +781,23 @@ tracker_data_delete_statement (const gchar *subject, tracker_db_statement_execute (stmt, NULL); g_object_unref (stmt); - if (strcmp (tracker_class_get_name (class), "rdfs:Resource") == 0) { - stmt = tracker_db_interface_create_statement (iface, "DELETE FROM \"fts\" WHERE rowid = ?"); - tracker_db_statement_bind_int (stmt, 0, subject_id); - tracker_db_statement_execute (stmt, NULL); - g_object_unref (stmt); - } + remove_fts = (strcmp (tracker_class_get_name (class), "rdfs:Resource") == 0); for (prop = properties; *prop; prop++) { + + if (remove_fts && tracker_property_get_domain (*prop) != class) { + + if (tracker_property_get_fulltext_indexed (*prop)) { + stmt = tracker_db_interface_create_statement (iface, + "UPDATE \"fts\" SET \"%s\" = ?, \"fts\" = -1 WHERE rowid = ?", + tracker_property_get_name (*prop)); + tracker_db_statement_bind_text (stmt, 0, object); + tracker_db_statement_bind_int (stmt, 1, subject_id); + tracker_db_statement_execute (stmt, NULL); + g_object_unref (stmt); + } + } + if (tracker_property_get_domain (*prop) != class || !tracker_property_get_multiple_values (*prop)) { continue;