[rygel] tracker: Use Property functions rather than optionals
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] tracker: Use Property functions rather than optionals
- Date: Tue, 6 Jul 2010 22:01:14 +0000 (UTC)
commit 227dc963edb1e89cd8890b559f4b9bebf348e3bf
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date: Tue Jul 6 16:58:38 2010 +0300
tracker: Use Property functions rather than optionals
Make use of property functions to avoid use of optional tripplets as they
are very slow.
.../tracker/rygel-tracker-insertion-query.vala | 25 +++----
.../tracker/rygel-tracker-metadata-values.vala | 29 +++----
.../tracker/rygel-tracker-query-triplet.vala | 20 +-----
src/plugins/tracker/rygel-tracker-query.vala | 18 +----
.../tracker/rygel-tracker-search-container.vala | 78 +++++--------------
.../tracker/rygel-tracker-selection-query.vala | 8 +-
6 files changed, 53 insertions(+), 125 deletions(-)
---
diff --git a/src/plugins/tracker/rygel-tracker-insertion-query.vala b/src/plugins/tracker/rygel-tracker-insertion-query.vala
index f6d05b5..cafd506 100644
--- a/src/plugins/tracker/rygel-tracker-insertion-query.vala
+++ b/src/plugins/tracker/rygel-tracker-insertion-query.vala
@@ -35,32 +35,27 @@ public class Rygel.TrackerInsertionQuery : Rygel.TrackerQuery {
var triplets = new TrackerQueryTriplets ();
triplets.add (new TrackerQueryTriplet (QUERY_ID,
"a",
- category,
- false));
+ category));
triplets.add (new TrackerQueryTriplet (QUERY_ID,
"a",
- "nie:DataObject",
- false));
+ "nie:DataObject"));
triplets.add (new TrackerQueryTriplet (QUERY_ID,
"a",
- "nfo:FileDataObject",
- false));
+ "nfo:FileDataObject"));
triplets.add (new TrackerQueryTriplet (QUERY_ID,
"nie:mimeType",
- "\"" + item.mime_type + "\"",
- false));
+ "\"" + item.mime_type + "\""));
triplets.add (new TrackerQueryTriplet (QUERY_ID,
"nie:url",
- "\"" + item.uris[0] + "\"",
- false));
+ "\"" + item.uris[0] + "\""));
var now = TimeVal ();
- triplets.add (new TrackerQueryTriplet (QUERY_ID,
- "nfo:fileLastModified",
- "\"" + now.to_iso8601 () + "\"",
- false));
+ triplets.add (new TrackerQueryTriplet (
+ QUERY_ID,
+ "nfo:fileLastModified",
+ "\"" + now.to_iso8601 () + "\""));
- base (triplets, null);
+ base (triplets);
}
public override async void execute (TrackerResourcesIface resources)
diff --git a/src/plugins/tracker/rygel-tracker-metadata-values.vala b/src/plugins/tracker/rygel-tracker-metadata-values.vala
index f3f31d4..7b30875 100644
--- a/src/plugins/tracker/rygel-tracker-metadata-values.vala
+++ b/src/plugins/tracker/rygel-tracker-metadata-values.vala
@@ -87,7 +87,7 @@ public class Rygel.TrackerMetadataValues : Rygel.SimpleContainer {
this.clear ();
int i;
- var mandatory = new TrackerQueryTriplets ();
+ var triplets = new TrackerQueryTriplets ();
// All variables used in the query
var num_keys = this.key_chain.length - 1;
@@ -102,17 +102,15 @@ public class Rygel.TrackerMetadataValues : Rygel.SimpleContainer {
subject = variables[i - 1];
}
- mandatory.add (new TrackerQueryTriplet (subject,
- this.key_chain[i],
- variables[i],
- false));
+ triplets.add (new TrackerQueryTriplet (subject,
+ this.key_chain[i],
+ variables[i]));
}
- mandatory.insert (0, new TrackerQueryTriplet (
+ triplets.insert (0, new TrackerQueryTriplet (
ITEM_VARIABLE,
"a",
- this.item_factory.category,
- false));
+ this.item_factory.category));
// Variables to select from query
var selected = new ArrayList<string> ();
@@ -121,8 +119,7 @@ public class Rygel.TrackerMetadataValues : Rygel.SimpleContainer {
selected.add ("DISTINCT " + last_variable);
var query = new TrackerSelectionQuery (selected,
- mandatory,
- null,
+ triplets,
null,
last_variable);
@@ -151,20 +148,20 @@ public class Rygel.TrackerMetadataValues : Rygel.SimpleContainer {
var title = this.title_func (value);
- // The child container can use the same mandatory triplets we used
- // in our query.
- var child_mandatory = new TrackerQueryTriplets.clone (mandatory);
+ // The child container can use the same triplets we used in our
+ // query.
+ var child_triplets = new TrackerQueryTriplets.clone (triplets);
- // However we constrain the object of our last mandatory triplet.
+ // However we constrain the object of our last triplet.
var filters = new ArrayList<string> ();
- var filter = this.filter_func (child_mandatory.last ().obj, value);
+ var filter = this.filter_func (child_triplets.last ().obj, value);
filters.add (filter);
var container = new TrackerSearchContainer (id,
this,
title,
this.item_factory,
- child_mandatory,
+ child_triplets,
filters);
this.add_child (container);
diff --git a/src/plugins/tracker/rygel-tracker-query-triplet.vala b/src/plugins/tracker/rygel-tracker-query-triplet.vala
index eef4871..5186478 100644
--- a/src/plugins/tracker/rygel-tracker-query-triplet.vala
+++ b/src/plugins/tracker/rygel-tracker-query-triplet.vala
@@ -30,34 +30,27 @@ public class Rygel.TrackerQueryTriplet {
public string predicate;
public string obj;
- public bool optional;
-
public TrackerQueryTriplet next;
public TrackerQueryTriplet (string? subject,
string predicate,
- string obj,
- bool optional = true) {
+ string obj) {
this.subject = subject;
this.predicate = predicate;
this.obj = obj;
- this.optional = optional;
}
public TrackerQueryTriplet.chain (string? subject,
string predicate,
- TrackerQueryTriplet next,
- bool optional = true) {
+ TrackerQueryTriplet next) {
this.subject = subject;
this.predicate = predicate;
this.next = next;
- this.optional = optional;
}
public TrackerQueryTriplet.clone (TrackerQueryTriplet triplet) {
this.subject = triplet.subject;
this.predicate = triplet.predicate;
- this.optional = triplet.optional;
if (triplet.next != null) {
this.next = triplet.next;
@@ -79,17 +72,12 @@ public class Rygel.TrackerQueryTriplet {
return a.subject == b.subject &&
a.obj == b.obj &&
a.predicate == b.predicate &&
- a.optional == b.optional &&
chain_equal;
}
public string to_string () {
string str = "";
- if (this.optional) {
- str += "OPTIONAL {";
- }
-
if (this.subject != null) {
str += " " + subject;
}
@@ -102,10 +90,6 @@ public class Rygel.TrackerQueryTriplet {
str += " " + this.obj;
}
- if (this.optional) {
- str += " }";
- }
-
return str;
}
}
diff --git a/src/plugins/tracker/rygel-tracker-query.vala b/src/plugins/tracker/rygel-tracker-query.vala
index b230139..1b3edfd 100644
--- a/src/plugins/tracker/rygel-tracker-query.vala
+++ b/src/plugins/tracker/rygel-tracker-query.vala
@@ -26,18 +26,10 @@ using Gee;
* Represents Tracker SPARQL query
*/
public abstract class Rygel.TrackerQuery {
- public TrackerQueryTriplets mandatory;
- public TrackerQueryTriplets optional;
+ public TrackerQueryTriplets triplets;
- public TrackerQuery (TrackerQueryTriplets mandatory,
- TrackerQueryTriplets? optional) {
- this.mandatory = mandatory;
-
- if (optional != null) {
- this.optional = optional;
- } else {
- this.optional = new TrackerQueryTriplets ();
- }
+ public TrackerQuery (TrackerQueryTriplets triplets) {
+ this.triplets = triplets;
}
public abstract async void execute (TrackerResourcesIface resources)
@@ -46,9 +38,7 @@ public abstract class Rygel.TrackerQuery {
// Deriving classes should override this method and complete it by
// adding the first part of the query
public virtual string to_string () {
- return this.serialize_triplets (this.mandatory) +
- " . " +
- this.serialize_triplets (this.optional);
+ return this.serialize_triplets (this.triplets);
}
private string serialize_triplets (TrackerQueryTriplets triplets) {
diff --git a/src/plugins/tracker/rygel-tracker-search-container.vala b/src/plugins/tracker/rygel-tracker-search-container.vala
index 48bc2c9..e296ce1 100644
--- a/src/plugins/tracker/rygel-tracker-search-container.vala
+++ b/src/plugins/tracker/rygel-tracker-search-container.vala
@@ -48,7 +48,7 @@ public class Rygel.TrackerSearchContainer : Rygel.MediaContainer {
MediaContainer parent,
string title,
TrackerItemFactory item_factory,
- TrackerQueryTriplets? mandatory = null,
+ TrackerQueryTriplets? triplets = null,
ArrayList<string>? filters = null) {
base (id, parent, title, 0);
@@ -58,45 +58,35 @@ public class Rygel.TrackerSearchContainer : Rygel.MediaContainer {
variables.add (ITEM_VARIABLE);
variables.add (URL_VARIABLE);
- TrackerQueryTriplets our_mandatory;
- if (mandatory != null) {
- our_mandatory = mandatory;
+ TrackerQueryTriplets our_triplets;
+ if (triplets != null) {
+ our_triplets = triplets;
} else {
- our_mandatory = new TrackerQueryTriplets ();
+ our_triplets = new TrackerQueryTriplets ();
}
- our_mandatory.add (new TrackerQueryTriplet (ITEM_VARIABLE,
- "a",
- item_factory.category,
- false));
- our_mandatory.add (new TrackerQueryTriplet (ITEM_VARIABLE,
- MODIFIED_PREDICATE,
- MODIFIED_VARIABLE,
- false));
- our_mandatory.add (new TrackerQueryTriplet (ITEM_VARIABLE,
- URL_PREDICATE,
- URL_VARIABLE,
- false));
-
- var optional = new TrackerQueryTriplets ();
- foreach (var chain in this.item_factory.key_chains) {
- var key = chain.last ();
- var variable = "?" + key.replace (":", "_");
-
- variables.add (variable);
+ our_triplets.add (new TrackerQueryTriplet (ITEM_VARIABLE,
+ "a",
+ item_factory.category));
+ our_triplets.add (new TrackerQueryTriplet (ITEM_VARIABLE,
+ MODIFIED_PREDICATE,
+ MODIFIED_VARIABLE));
+ our_triplets.add (new TrackerQueryTriplet (ITEM_VARIABLE,
+ URL_PREDICATE,
+ URL_VARIABLE));
- var triplet = this.triplet_from_chain (chain,
- variable,
- ITEM_VARIABLE);
+ foreach (var chain in this.item_factory.key_chains) {
+ var variable = ITEM_VARIABLE;
- if (!our_mandatory.contains (triplet)) {
- optional.add (triplet);
+ foreach (var key in chain) {
+ variable = key + "(" + variable + ")";
}
+
+ variables.add (variable);
}
this.query = new TrackerSelectionQuery (variables,
- our_mandatory,
- optional,
+ our_triplets,
filters,
MODIFIED_VARIABLE);
@@ -168,38 +158,12 @@ public class Rygel.TrackerSearchContainer : Rygel.MediaContainer {
return this.id + ":" + urn;
}
- private TrackerQueryTriplet triplet_from_chain (
- Gee.List<string> chain,
- string? variable = null,
- string? subject = null) {
- var key = chain.first ();
-
- TrackerQueryTriplet triplet;
-
- if (chain.size == 1) {
- triplet = new TrackerQueryTriplet (subject,
- key,
- variable,
- subject != null);
- } else {
- var child_chain = chain.slice (chain.index_of (key) + 1,
- chain.size);
-
- var child = this.triplet_from_chain (child_chain, variable);
-
- triplet = new TrackerQueryTriplet.chain (subject, key, child);
- }
-
- return triplet;
- }
-
private async void get_children_count () {
try {
var query = new TrackerSelectionQuery.clone (this.query);
query.variables = new ArrayList<string> ();
query.variables.add ("COUNT(" + ITEM_VARIABLE + ") AS x");
- query.optional = new TrackerQueryTriplets ();
yield query.execute (this.resources);
diff --git a/src/plugins/tracker/rygel-tracker-selection-query.vala b/src/plugins/tracker/rygel-tracker-selection-query.vala
index beb0563..5dfb7c8 100644
--- a/src/plugins/tracker/rygel-tracker-selection-query.vala
+++ b/src/plugins/tracker/rygel-tracker-selection-query.vala
@@ -36,13 +36,12 @@ public class Rygel.TrackerSelectionQuery : Rygel.TrackerQuery {
public string[,] result;
public TrackerSelectionQuery (ArrayList<string> variables,
- TrackerQueryTriplets mandatory,
- TrackerQueryTriplets? optional,
+ TrackerQueryTriplets triplets,
ArrayList<string>? filters,
string? order_by = null,
int offset = 0,
int max_count = -1) {
- base (mandatory, optional);
+ base (triplets);
if (filters != null) {
this.filters = filters;
@@ -58,8 +57,7 @@ public class Rygel.TrackerSelectionQuery : Rygel.TrackerQuery {
public TrackerSelectionQuery.clone (TrackerSelectionQuery query) {
this (copy_str_list (query.variables),
- new TrackerQueryTriplets.clone (query.mandatory),
- new TrackerQueryTriplets.clone (query.optional),
+ new TrackerQueryTriplets.clone (query.triplets),
copy_str_list (query.filters),
query.order_by,
query.offset,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]