[rygel] tracker: Result of query is kept in the instance



commit 6231294699e846a631b9fe3e834ed1a9690cb3ec
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Sat Feb 6 14:40:56 2010 +0200

    tracker: Result of query is kept in the instance
    
    Don't return the result of query from execute() method but keep it in an
    instance field since it can be different for differnt types of queries.

 .../tracker/rygel-tracker-metadata-values.vala     |    7 +++----
 src/plugins/tracker/rygel-tracker-query.vala       |    9 ++-------
 .../tracker/rygel-tracker-search-container.vala    |   12 ++++++------
 .../tracker/rygel-tracker-selection-query.vala     |   11 +++++++++++
 4 files changed, 22 insertions(+), 17 deletions(-)
---
diff --git a/src/plugins/tracker/rygel-tracker-metadata-values.vala b/src/plugins/tracker/rygel-tracker-metadata-values.vala
index 64d1ba9..941a693 100644
--- a/src/plugins/tracker/rygel-tracker-metadata-values.vala
+++ b/src/plugins/tracker/rygel-tracker-metadata-values.vala
@@ -127,9 +127,8 @@ public class Rygel.TrackerMetadataValues : Rygel.SimpleContainer {
                                                null,
                                                last_variable);
 
-        string[,] values;
         try {
-            values = yield query.execute (this.resources);
+            yield query.execute (this.resources);
         } catch (DBus.Error error) {
             critical ("error getting all values for '%s': %s",
                       string.joinv (" -> ", this.key_chain),
@@ -139,8 +138,8 @@ public class Rygel.TrackerMetadataValues : Rygel.SimpleContainer {
         }
 
         /* Iterate through all the values */
-        for (i = 0; i < values.length[0]; i++) {
-            string value = values[i, 0];
+        for (i = 0; i < query.result.length[0]; i++) {
+            string value = query.result[i, 0];
 
             if (value == "") {
                 continue;
diff --git a/src/plugins/tracker/rygel-tracker-query.vala b/src/plugins/tracker/rygel-tracker-query.vala
index 19ccdb8..b230139 100644
--- a/src/plugins/tracker/rygel-tracker-query.vala
+++ b/src/plugins/tracker/rygel-tracker-query.vala
@@ -40,13 +40,8 @@ public abstract class Rygel.TrackerQuery {
         }
     }
 
-    public async string[,] execute (TrackerResourcesIface resources)
-                                    throws DBus.Error {
-        var str = this.to_string ();
-
-        debug ("Executing SPARQL query: %s", str);
-        return yield resources.sparql_query (str);
-    }
+    public abstract async void execute (TrackerResourcesIface resources)
+                                        throws DBus.Error;
 
     // Deriving classes should override this method and complete it by
     // adding the first part of the query
diff --git a/src/plugins/tracker/rygel-tracker-search-container.vala b/src/plugins/tracker/rygel-tracker-search-container.vala
index 1e8823f..b9dc6ef 100644
--- a/src/plugins/tracker/rygel-tracker-search-container.vala
+++ b/src/plugins/tracker/rygel-tracker-search-container.vala
@@ -142,12 +142,12 @@ public class Rygel.TrackerSearchContainer : Rygel.MediaContainer {
             return results;
         }
 
-        var search_result = yield query.execute (this.resources);
+        yield query.execute (this.resources);
 
         /* Iterate through all items */
-        for (uint i = 0; i < search_result.length[0]; i++) {
-            string uri = search_result[i, 0];
-            string[] metadata = this.slice_strvv_tail (search_result, i, 1);
+        for (uint i = 0; i < query.result.length[0]; i++) {
+            string uri = query.result[i, 0];
+            string[] metadata = this.slice_strvv_tail (query.result, i, 1);
             var id = this.id + ":" + uri;
 
             var item = this.item_factory.create (id, uri, this, metadata);
@@ -192,9 +192,9 @@ public class Rygel.TrackerSearchContainer : Rygel.MediaContainer {
             query.variables.add ("COUNT(" + ITEM_VARIABLE + ") AS x");
             query.optional = new TrackerQueryTriplets ();
 
-            var result = yield query.execute (this.resources);
+            yield query.execute (this.resources);
 
-            this.child_count = result[0,0].to_int ();
+            this.child_count = query.result[0,0].to_int ();
             this.updated ();
         } catch (GLib.Error error) {
             critical ("error getting item count under category '%s': %s",
diff --git a/src/plugins/tracker/rygel-tracker-selection-query.vala b/src/plugins/tracker/rygel-tracker-selection-query.vala
index dd2ccba..3e9825b 100644
--- a/src/plugins/tracker/rygel-tracker-selection-query.vala
+++ b/src/plugins/tracker/rygel-tracker-selection-query.vala
@@ -33,6 +33,8 @@ public class Rygel.TrackerSelectionQuery : Rygel.TrackerQuery {
     public int offset;
     public int max_count;
 
+    public string[,] result;
+
     public TrackerSelectionQuery (ArrayList<string>     variables,
                                   TrackerQueryTriplets  mandatory,
                                   TrackerQueryTriplets? optional,
@@ -64,6 +66,15 @@ public class Rygel.TrackerSelectionQuery : Rygel.TrackerQuery {
               query.max_count);
     }
 
+    public override async void execute (TrackerResourcesIface resources)
+                                        throws DBus.Error {
+        var str = this.to_string ();
+
+        debug ("Executing SPARQL query: %s", str);
+
+        result = yield resources.sparql_query (str);
+    }
+
     public override string to_string () {
         var query = "SELECT ";
 



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