[tracker/tracker-store-batch] tracker-indexer: Use D-Bus to query resource existence
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker/tracker-store-batch] tracker-indexer: Use D-Bus to query resource existence
- Date: Tue, 19 May 2009 03:43:29 -0400 (EDT)
commit 5d1bfa4e7cb8c263e24fd192b5835fd3d83cf294
Author: Jürg Billeter <j bitron ch>
Date: Tue May 19 09:42:09 2009 +0200
tracker-indexer: Use D-Bus to query resource existence
Database may be locked by tracker-store which makes direct access by
tracker-indexer deadlock.
---
src/tracker-indexer/tracker-indexer.c | 44 +++++++++++++++++++++------------
1 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/src/tracker-indexer/tracker-indexer.c b/src/tracker-indexer/tracker-indexer.c
index e79ceb7..8a78fbd 100644
--- a/src/tracker-indexer/tracker-indexer.c
+++ b/src/tracker-indexer/tracker-indexer.c
@@ -963,6 +963,27 @@ add_directory (TrackerIndexer *indexer,
check_started (indexer);
}
+static gboolean
+query_resource_exists (TrackerIndexer *indexer,
+ const gchar *uri)
+{
+ gboolean result;
+ gchar *sparql;
+ GPtrArray *sparql_result;
+
+ sparql = g_strdup_printf ("SELECT ?s WHERE { ?s a rdfs:Resource . FILTER (?s = <%s>) }",
+ uri);
+
+ sparql_result = tracker_resources_sparql_query (indexer->private->client, sparql, NULL);
+
+ result = (sparql_result && sparql_result->len == 1);
+
+ tracker_dbus_results_ptr_array_free (&sparql_result);
+ g_free (sparql);
+
+ return result;
+}
+
static gchar *
query_property_value (TrackerIndexer *indexer,
const gchar *subject,
@@ -1035,20 +1056,16 @@ item_add_to_datasource (TrackerIndexer *indexer,
removable_device_urn = g_strdup_printf (TRACKER_DATASOURCE_URN_PREFIX "%s",
removable_device_udi);
- if (!tracker_data_query_resource_exists (removable_device_urn, NULL)) {
- tracker_module_metadata_add_string (metadata, removable_device_urn,
- RDF_TYPE, TRACKER_DATASOURCE);
- }
+ tracker_module_metadata_add_string (metadata, removable_device_urn,
+ RDF_TYPE, TRACKER_DATASOURCE);
tracker_module_metadata_add_string (metadata, uri, NIE_DATASOURCE_P,
removable_device_urn);
g_free (removable_device_urn);
} else {
- if (!tracker_data_query_resource_exists (TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN, NULL)) {
- tracker_module_metadata_add_string (metadata, TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN,
- RDF_TYPE, TRACKER_DATASOURCE);
- }
+ tracker_module_metadata_add_string (metadata, TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN,
+ RDF_TYPE, TRACKER_DATASOURCE);
tracker_module_metadata_add_string (metadata, uri, NIE_DATASOURCE_P,
TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN);
@@ -1068,7 +1085,7 @@ item_add_or_update (TrackerIndexer *indexer,
start_transaction (indexer);
}
- if (tracker_data_query_resource_exists (uri, NULL)) {
+ if (query_resource_exists (indexer, uri)) {
gchar *full_sparql;
if (tracker_module_file_get_flags (info->module_file) & TRACKER_FILE_CONTENTS_STATIC) {
@@ -1190,7 +1207,6 @@ item_move (TrackerIndexer *indexer,
PathInfo *info,
const gchar *source_uri)
{
- guint32 service_id;
gchar *uri, *escaped_filename;
GFileInfo *file_info;
GString *sparql;
@@ -1201,8 +1217,7 @@ item_move (TrackerIndexer *indexer,
uri = g_file_get_uri (info->file);
/* Get 'source' ID */
- if (!tracker_data_query_resource_exists (source_uri,
- &service_id)) {
+ if (!query_resource_exists (indexer, source_uri)) {
gboolean res;
g_message ("Source file '%s' not found in database to move, indexing '%s' from scratch", source_uri, uri);
@@ -1276,7 +1291,6 @@ item_remove (TrackerIndexer *indexer,
{
gchar *mount_point = NULL;
gchar *mime_type;
- guint service_id;
gchar *sparql;
g_debug ("Removing item: '%s' (no metadata was given by module)",
@@ -1286,9 +1300,7 @@ item_remove (TrackerIndexer *indexer,
start_transaction (indexer);
}
- tracker_data_query_resource_exists (uri, &service_id);
-
- if (service_id < 1) {
+ if (!query_resource_exists (indexer, uri)) {
g_debug (" File does not exist anyway "
"(uri:'%s')",
uri);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]