[tracker/tracker-store] tracker-indexer: Build SPARQL query continuously



commit c346251050b0f240ce8fb82e715ef86df8156ebc
Author: Jürg Billeter <j bitron ch>
Date:   Tue Jun 23 16:17:08 2009 +0200

    tracker-indexer: Build SPARQL query continuously

 src/tracker-indexer/tracker-module-metadata.c |   35 ++++++++++--------------
 1 files changed, 15 insertions(+), 20 deletions(-)
---
diff --git a/src/tracker-indexer/tracker-module-metadata.c b/src/tracker-indexer/tracker-module-metadata.c
index deffca7..ea6c439 100644
--- a/src/tracker-indexer/tracker-module-metadata.c
+++ b/src/tracker-indexer/tracker-module-metadata.c
@@ -36,6 +36,8 @@ struct _Statement {
 
 struct TrackerModuleMetadata {
 	GObject parent_instance;
+	TrackerSparqlBuilder *sparql;
+	gboolean sparql_closed;
 	GArray *statements;
 };
 
@@ -60,6 +62,9 @@ tracker_module_metadata_class_init (TrackerModuleMetadataClass *klass)
 static void
 tracker_module_metadata_init (TrackerModuleMetadata *metadata)
 {
+	metadata->sparql = tracker_sparql_builder_new_update ();
+	tracker_sparql_builder_insert_open (metadata->sparql);
+
 	metadata->statements = g_array_new (FALSE, TRUE, sizeof (Statement));
 }
 
@@ -71,6 +76,8 @@ tracker_module_metadata_finalize (GObject *object)
 
 	metadata = TRACKER_MODULE_METADATA (object);
 
+	g_object_unref (metadata->sparql);
+
 	for (i = 0; i < metadata->statements->len; i++) {
 		Statement *stmt;
 
@@ -119,6 +126,10 @@ tracker_module_metadata_add_take_string (TrackerModuleMetadata *metadata,
 		return FALSE;
 	}
 
+	tracker_sparql_builder_subject_iri (metadata->sparql, subject);
+	tracker_sparql_builder_predicate_iri (metadata->sparql, predicate);
+	tracker_sparql_builder_object_string (metadata->sparql, value);
+
 	stmt.subject = g_strdup (subject);
 	stmt.predicate = g_strdup (predicate);
 	stmt.object = value;
@@ -313,30 +324,14 @@ gchar *
 tracker_module_metadata_get_sparql (TrackerModuleMetadata        *metadata)
 {
 	TrackerSparqlBuilder *sparql;
-	gint     i;
 	gchar *result;
 
-	sparql = tracker_sparql_builder_new_update ();
-	tracker_sparql_builder_insert_open (sparql);
-
-	for (i = 0; i < metadata->statements->len; i++) {
-		Statement *stmt;
-		gchar     *object;
-
-		stmt = &g_array_index (metadata->statements, Statement, i);
-
-		tracker_sparql_builder_subject_iri (sparql, stmt->subject);
-		tracker_sparql_builder_predicate_iri (sparql, stmt->predicate);
-		tracker_sparql_builder_object_string (sparql, stmt->object);
+	if (!metadata->sparql_closed) {
+		tracker_sparql_builder_insert_close (metadata->sparql);
+		metadata->sparql_closed = TRUE;
 	}
 
-	tracker_sparql_builder_insert_close (sparql);
-
-	result = g_strdup (tracker_sparql_builder_get_result (sparql));
-
-	g_object_unref (sparql);
-
-	return result;
+	return g_strdup (tracker_sparql_builder_get_result (metadata->sparql));
 }
 
 /**



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