[tracker] miners: Take over the deletion of previous properties from TrackerMinerFS
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] miners: Take over the deletion of previous properties from TrackerMinerFS
- Date: Mon, 23 Nov 2015 13:59:39 +0000 (UTC)
commit ee3f0700b1909fdfaa294e61e7ad7d6176c89d3d
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Nov 20 13:14:25 2015 +0100
miners: Take over the deletion of previous properties from TrackerMinerFS
Performing the deletion inside libtracker-miner takes some assumptions we
shouldn't be doing in a generic library, such as the graph we're deleting
from. It makes more sense to make miners responsible of deleting their
older properties prior to a file update.
Applications/user guides miners could be more specific as to which
properties they're deleting, we'll rely on those not stepping over other
miners' toes at the moment.
https://bugzilla.gnome.org/show_bug.cgi?id=758341
src/libtracker-miner/tracker-miner-fs.c | 44 ++------------------
src/miners/apps/tracker-miner-applications.c | 30 +++++++++++++-
src/miners/fs/tracker-miner-files.c | 35 ++++++++++++++++
src/miners/user-guides/tracker-miner-user-guides.c | 26 ++++++++++++
4 files changed, 94 insertions(+), 41 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index 4732a57..faf2586 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -1373,55 +1373,19 @@ item_add_or_update_continue (TrackerMinerFS *fs,
if (ctxt->urn) {
gboolean attribute_update_only;
+ /* The SPARQL builder will already contain the necessary
+ * DELETE statements for the properties being updated */
attribute_update_only = GPOINTER_TO_INT (g_object_steal_qdata (G_OBJECT (file),
fs->priv->quark_attribute_updated));
g_debug ("Updating item '%s' with urn '%s'%s",
uri,
ctxt->urn,
attribute_update_only ? " (attributes only)" : "");
- if (!attribute_update_only) {
- gchar *full_sparql;
-
- /* Update, delete all statements inserted by miner except:
- * - rdf:type statements as they could cause implicit deletion of user data
- * - nie:contentCreated so it persists across updates
- *
- * Additionally, delete also nie:url as it might have been set by 3rd parties,
- * and it's used to know whether a file is known to tracker or not.
- */
- full_sparql = g_strdup_printf ("DELETE {"
- " GRAPH <%s> {"
- " <%s> ?p ?o"
- " } "
- "} "
- "WHERE {"
- " GRAPH <%s> {"
- " <%s> ?p ?o"
- " FILTER (?p != rdf:type && ?p !=
nie:contentCreated)"
- " } "
- "} "
- "DELETE {"
- " <%s> nie:url ?o"
- "} WHERE {"
- " <%s> nie:url ?o"
- "}"
- "%s",
- TRACKER_OWN_GRAPH_URN, ctxt->urn,
- TRACKER_OWN_GRAPH_URN, ctxt->urn,
- ctxt->urn, ctxt->urn,
- tracker_sparql_builder_get_result
(ctxt->builder));
-
- sparql_task = tracker_sparql_task_new_take_sparql_str (file, full_sparql);
- } else {
- /* Do not drop graph if only updating attributes, the SPARQL builder
- * will already contain the necessary DELETE statements for the properties
- * being updated */
- sparql_task = tracker_sparql_task_new_with_sparql (file, ctxt->builder);
- }
} else {
g_debug ("Creating new item '%s'", uri);
- sparql_task = tracker_sparql_task_new_with_sparql (file, ctxt->builder);
}
+
+ sparql_task = tracker_sparql_task_new_with_sparql (file, ctxt->builder);
}
if (sparql_task) {
diff --git a/src/miners/apps/tracker-miner-applications.c b/src/miners/apps/tracker-miner-applications.c
index a01d3dd..749d3e4 100644
--- a/src/miners/apps/tracker-miner-applications.c
+++ b/src/miners/apps/tracker-miner-applications.c
@@ -741,7 +741,8 @@ process_desktop_file (ProcessApplicationData *data,
}
}
- if (sparql && uri) {
+ if (uri) {
+ gchar *delete_properties_sparql;
gchar *desktop_file_uri;
tracker_sparql_builder_predicate (sparql, "a");
@@ -864,6 +865,33 @@ process_desktop_file (ProcessApplicationData *data,
g_free (desktop_file_uri);
+
+ /* Prepend a delete statement to delete previous properties from
+ * the miner, if any.
+ */
+ delete_properties_sparql =
+ g_strdup_printf ("DELETE {"
+ " GRAPH <%s> {"
+ " <%s> ?p ?o"
+ " } "
+ "} "
+ "WHERE {"
+ " GRAPH <%s> {"
+ " <%s> ?p ?o"
+ " FILTER (?p != rdf:type && ?p != nie:contentCreated)"
+ " } "
+ "} "
+ "DELETE {"
+ " <%s> nie:url ?o"
+ "} WHERE {"
+ " <%s> nie:url ?o"
+ "}",
+ TRACKER_OWN_GRAPH_URN, uri,
+ TRACKER_OWN_GRAPH_URN, uri,
+ uri, uri);
+
+ tracker_sparql_builder_prepend (sparql, delete_properties_sparql);
+ g_free (delete_properties_sparql);
}
if (file_info) {
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index 527c6e5..84ee714 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -2136,6 +2136,41 @@ process_file_cb (GObject *object,
data->mime_type = g_strdup (mime_type);
+ if (is_iri) {
+ gchar *delete_properties_sparql;
+
+ /* Update: delete all statements inserted by miner except:
+ * - rdf:type statements as they could cause implicit deletion of user data
+ * - nie:contentCreated so it persists across updates
+ *
+ * Additionally, delete also nie:url as it might have been set by 3rd parties,
+ * and it's used to know whether a file is known to tracker or not.
+ */
+ delete_properties_sparql =
+ g_strdup_printf ("DELETE {"
+ " GRAPH <%s> {"
+ " <%s> ?p ?o"
+ " } "
+ "} "
+ "WHERE {"
+ " GRAPH <%s> {"
+ " <%s> ?p ?o"
+ " FILTER (?p != rdf:type && ?p != nie:contentCreated)"
+ " } "
+ "} "
+ "DELETE {"
+ " <%s> nie:url ?o"
+ "} WHERE {"
+ " <%s> nie:url ?o"
+ "}",
+ TRACKER_OWN_GRAPH_URN, urn,
+ TRACKER_OWN_GRAPH_URN, urn,
+ urn, urn);
+
+ tracker_sparql_builder_prepend (sparql, delete_properties_sparql);
+ g_free (delete_properties_sparql);
+ }
+
tracker_sparql_builder_insert_silent_open (sparql, NULL);
tracker_sparql_builder_graph_open (sparql, TRACKER_OWN_GRAPH_URN);
diff --git a/src/miners/user-guides/tracker-miner-user-guides.c
b/src/miners/user-guides/tracker-miner-user-guides.c
index 59dfc40..7aa4af1 100644
--- a/src/miners/user-guides/tracker-miner-user-guides.c
+++ b/src/miners/user-guides/tracker-miner-user-guides.c
@@ -437,7 +437,33 @@ process_item (ProcessUserguideData *data,
tracker_sparql_builder_graph_open (sparql, TRACKER_OWN_GRAPH_URN);
if (is_iri) {
+ gchar *delete_properties_sparql;
+
+ delete_properties_sparql =
+ g_strdup_printf ("DELETE {"
+ " GRAPH <%s> {"
+ " <%s> ?p ?o"
+ " } "
+ "} "
+ "WHERE {"
+ " GRAPH <%s> {"
+ " <%s> ?p ?o"
+ " FILTER (?p != rdf:type && ?p != nie:contentCreated)"
+ " } "
+ "} "
+ "DELETE {"
+ " <%s> nie:url ?o"
+ "} WHERE {"
+ " <%s> nie:url ?o"
+ "}",
+ TRACKER_OWN_GRAPH_URN, urn,
+ TRACKER_OWN_GRAPH_URN, urn,
+ urn, urn);
+
+ tracker_sparql_builder_prepend (sparql, delete_properties_sparql);
tracker_sparql_builder_subject_iri (sparql, urn);
+
+ g_free (delete_properties_sparql);
} else {
tracker_sparql_builder_subject (sparql, urn);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]