summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfosero <fosero@users.noreply.github.com>2016-01-27 11:06:38 +0100
committerVictor Toso <me@victortoso.com>2016-02-26 11:14:20 +0100
commit6027a46574f6b3954d3bec62098555d44e9f6981 (patch)
tree0bcbc3a9938673422081647fb9361c4d74f3d01f
parent8a201734b4276845a59c20a91d34c2aec7fe513b (diff)
tracker: map key names to SPARQL variables
The Grilo tracker plugin maps grilo key names to SPARQL variables. Key names can contains dashes for multipart key names, SPARQL variables cannot. This adds an extra mapping to the key lookup that converts the dashes to underscores that can be used as SPARQL variable names. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=761168.
-rw-r--r--src/tracker/grl-tracker-utils.c23
-rw-r--r--src/tracker/grl-tracker-utils.h1
2 files changed, 18 insertions, 6 deletions
diff --git a/src/tracker/grl-tracker-utils.c b/src/tracker/grl-tracker-utils.c
index 87cfe30..47dff05 100644
--- a/src/tracker/grl-tracker-utils.c
+++ b/src/tracker/grl-tracker-utils.c
@@ -126,12 +126,13 @@ insert_key_mapping (GrlKeyID grl_key,
GRLKEYID_TO_POINTER (grl_key));
gchar *canon_name = g_strdup (GRL_METADATA_KEY_GET_NAME (grl_key));
- assoc->grl_key = grl_key;
- assoc->sparql_key_name = build_flavored_key (canon_name,
- sparql_key_flavor);
- assoc->sparql_key_attr = sparql_key_attr;
- assoc->sparql_key_attr_call = sparql_key_attr_call;
- assoc->sparql_key_flavor = sparql_key_flavor;
+ assoc->grl_key = grl_key;
+ assoc->sparql_key_name = build_flavored_key (canon_name,
+ sparql_key_flavor);
+ assoc->sparql_key_name_canon = g_strdup (canon_name);
+ assoc->sparql_key_attr = sparql_key_attr;
+ assoc->sparql_key_attr_call = sparql_key_attr_call;
+ assoc->sparql_key_flavor = sparql_key_flavor;
assoc_list = g_list_append (assoc_list, assoc);
@@ -145,6 +146,16 @@ insert_key_mapping (GrlKeyID grl_key,
(gpointer) GRL_METADATA_KEY_GET_NAME (grl_key),
assoc);
+ /* Grilo maps key names to SPARQL variables. Key names can contain dashes,
+ * however SPARQL does not allow dashes in variable names. So use the to
+ * underscores converted canon_name as additional mapping.
+ */
+ if (g_strrstr (assoc->sparql_key_name_canon, "_")) {
+ g_hash_table_insert (sparql_to_grl_mapping,
+ (gpointer) assoc->sparql_key_name_canon,
+ assoc);
+ }
+
g_free (canon_name);
return assoc;
diff --git a/src/tracker/grl-tracker-utils.h b/src/tracker/grl-tracker-utils.h
index 430be88..41bd232 100644
--- a/src/tracker/grl-tracker-utils.h
+++ b/src/tracker/grl-tracker-utils.h
@@ -53,6 +53,7 @@ typedef void (*tracker_grl_sparql_setter_cb_t) (TrackerSparqlCursor *cursor,
typedef struct {
GrlKeyID grl_key;
const gchar *sparql_key_name;
+ const gchar *sparql_key_name_canon;
const gchar *sparql_key_attr;
const gchar *sparql_key_attr_call;
const gchar *sparql_key_flavor;