diff options
author | fosero <fosero@users.noreply.github.com> | 2016-01-27 11:06:38 +0100 |
---|---|---|
committer | Victor Toso <me@victortoso.com> | 2016-02-26 11:14:20 +0100 |
commit | 6027a46574f6b3954d3bec62098555d44e9f6981 (patch) | |
tree | 0bcbc3a9938673422081647fb9361c4d74f3d01f | |
parent | 8a201734b4276845a59c20a91d34c2aec7fe513b (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.c | 23 | ||||
-rw-r--r-- | src/tracker/grl-tracker-utils.h | 1 |
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; |