[tracker/cuesheets-0.12] tracker-miner-fs: Delete any associated logical resources when removing a file



commit 38551d6f8e28395733e749087c0d61dbb46f16df
Author: Sam Thursfield <sam thursfield codethink co uk>
Date:   Thu Sep 22 19:02:41 2011 +0100

    tracker-miner-fs: Delete any associated logical resources when removing a file
    
    With the cuesheets support it's now possible to have multiple
    nie:InformationElement resources stored in one file resource. The miner must
    make sure these are correctly deleted when the file resource is removed,
    either due to the file being deleted or it being on a stale removable volume.

 src/libtracker-miner/tracker-miner-fs.c      |    6 +++-
 src/libtracker-miner/tracker-sparql-buffer.c |   28 +++++++++++++++++--------
 src/libtracker-miner/tracker-sparql-buffer.h |    3 +-
 src/miners/fs/tracker-miner-files.c          |   10 ++++++--
 4 files changed, 32 insertions(+), 15 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index c648923..9fc0cf1 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -2063,10 +2063,12 @@ item_remove (TrackerMinerFS *fs,
 	/* Add new task to processing pool */
 	task = tracker_sparql_task_new_bulk (file,
 	                                     "DELETE { "
-	                                     "  ?f a rdfs:Resource "
+	                                     "  ?f a rdfs:Resource . "
+	                                     "  ?ie a rdfs:Resource "
 	                                     "}",
 	                                     TRACKER_BULK_MATCH_EQUALS |
-	                                     TRACKER_BULK_MATCH_CHILDREN);
+	                                     TRACKER_BULK_MATCH_CHILDREN |
+	                                     TRACKER_BULK_MATCH_LOGICAL_RESOURCES);
 
 	tracker_sparql_buffer_push (fs->priv->sparql_buffer,
 	                            task,
diff --git a/src/libtracker-miner/tracker-sparql-buffer.c b/src/libtracker-miner/tracker-sparql-buffer.c
index a6d4e2d..1f6ba20 100644
--- a/src/libtracker-miner/tracker-sparql-buffer.c
+++ b/src/libtracker-miner/tracker-sparql-buffer.c
@@ -340,6 +340,7 @@ bulk_operation_merge_finish (BulkOperationMerge *merge)
 	if (merge->bulk_operation && merge->tasks) {
 		GString *equals_string = NULL, *children_string = NULL, *sparql;
 		guint n_equals = 0;
+		gboolean include_logical_resources = FALSE;
 		GList *l;
 
 		for (l = merge->tasks; l; l = l->next) {
@@ -371,6 +372,10 @@ bulk_operation_merge_finish (BulkOperationMerge *merge)
 				g_string_append_printf (children_string, "\"%s\"", uri);
 			}
 
+			if (task_data->data.bulk.flags & TRACKER_BULK_MATCH_LOGICAL_RESOURCES) {
+				include_logical_resources = TRUE;
+			}
+
 			g_free (uri);
 		}
 
@@ -378,23 +383,24 @@ bulk_operation_merge_finish (BulkOperationMerge *merge)
 
 		if (equals_string) {
 			g_string_append (sparql, merge->bulk_operation);
+			g_string_append_printf (sparql, " WHERE { ");
 
 			if (n_equals == 1) {
 				g_string_append_printf (sparql,
-				                        " WHERE { "
-				                        "  ?f nie:url %s"
-				                        "} ",
+				                        "  ?f nie:url %s .",
 				                        equals_string->str);
 			} else {
 				g_string_append_printf (sparql,
-				                        " WHERE { "
 				                        "  ?f nie:url ?u ."
-				                        "  FILTER (?u IN (%s))"
-				                        "} ",
+				                        "  FILTER (?u IN (%s))",
 				                        equals_string->str);
 			}
-
 			g_string_free (equals_string, TRUE);
+
+			if (include_logical_resources) {
+				g_string_append (sparql, "  ?ie nie:isStoredAs ?f .");
+			}
+			g_string_append_printf (sparql, " } ");
 		}
 
 		if (children_string) {
@@ -402,10 +408,14 @@ bulk_operation_merge_finish (BulkOperationMerge *merge)
 			g_string_append_printf (sparql,
 			                        " WHERE { "
 			                        "  ?f nie:url ?u ."
-			                        "  FILTER (tracker:uri-is-descendant (%s, ?u))"
-			                        "} ",
+			                        "  FILTER (tracker:uri-is-descendant (%s, ?u))",
 			                        children_string->str);
 			g_string_free (children_string, TRUE);
+
+			if (include_logical_resources) {
+				g_string_append (sparql, "  ?ie nie:isStoredAs ?f .");
+			}
+			g_string_append_printf (sparql, "} ");
 		}
 
 		merge->sparql = g_string_free (sparql, FALSE);
diff --git a/src/libtracker-miner/tracker-sparql-buffer.h b/src/libtracker-miner/tracker-sparql-buffer.h
index d56a9ea..7cb5f0b 100644
--- a/src/libtracker-miner/tracker-sparql-buffer.h
+++ b/src/libtracker-miner/tracker-sparql-buffer.h
@@ -44,7 +44,8 @@ typedef struct _TrackerSparqlBufferClass TrackerSparqlBufferClass;
 
 typedef enum {
 	TRACKER_BULK_MATCH_EQUALS   = 1 << 0,
-	TRACKER_BULK_MATCH_CHILDREN = 1 << 1
+	TRACKER_BULK_MATCH_CHILDREN = 1 << 1,
+	TRACKER_BULK_MATCH_LOGICAL_RESOURCES = 1 << 2
 } TrackerBulkTaskFlags;
 
 struct _TrackerSparqlBuffer
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index 344746e..5977904 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -2800,12 +2800,14 @@ miner_files_in_removable_media_remove_by_type (TrackerMinerFiles  *miner,
 		 * of the given type */
 		g_string_append_printf (queries,
 		                        "DELETE { "
-		                        "  ?f a rdfs:Resource "
+		                        "  ?f a rdfs:Resource . "
+		                        "  ?ie a rdfs:Resource "
 		                        "} WHERE { "
 		                        "  ?v a tracker:Volume ; "
 		                        "     tracker:isRemovable %s ; "
 		                        "     tracker:isOptical %s . "
-		                        "  ?f nie:dataSource ?v "
+		                        "  ?f nie:dataSource ?v . "
+		                        "  ?ie nie:isStoredAs ?f "
 		                        "}",
 		                        removable ? "true" : "false",
 		                        optical ? "true" : "false");
@@ -2841,13 +2843,15 @@ miner_files_in_removable_media_remove_by_date (TrackerMinerFiles  *miner,
 	 * which was last unmounted before the given date */
 	g_string_append_printf (queries,
 	                        "DELETE { "
-	                        "  ?f a rdfs:Resource "
+	                        "  ?f a rdfs:Resource . "
+	                        "  ?ie a rdfs:Resource "
 	                        "} WHERE { "
 	                        "  ?v a tracker:Volume ; "
 	                        "     tracker:isRemovable true ; "
 	                        "     tracker:isMounted false ; "
 	                        "     tracker:unmountDate ?d . "
 	                        "  ?f nie:dataSource ?v . "
+	                        "  ?ie nie:isStoredAs ?f "
 	                        "  FILTER ( ?d < \"%s\") "
 	                        "}",
 	                        date);



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