[tracker/wip/carlosg/property-path-fixes: 2/4] libtracker-data: Honor '*' property path properly
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/property-path-fixes: 2/4] libtracker-data: Honor '*' property path properly
- Date: Mon, 18 May 2020 19:36:42 +0000 (UTC)
commit 8b3a1d29729d65dcaa2cf616260c67eaaa40d161
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun May 17 15:36:29 2020 +0200
libtracker-data: Honor '*' property path properly
Iterations in this recursive property path fall short at the
end, for example queries like:
SELECT ?u {
<file:///some/deep/path> (nfo:belongsToContainer/nie:isStoredAs)* ?u
}
would miss the topmost known element. Rely on a helper to do the
iterative parth, and ensure "self" is returned in the outer query.
src/libtracker-data/tracker-sparql.c | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index 130a7072d..78b0f4499 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -799,18 +799,32 @@ _prepend_path_element (TrackerSparql *sparql,
path_elem->data.composite.child2->name);
break;
case TRACKER_PATH_OPERATOR_ZEROORMORE:
+ _append_string_printf (sparql,
+ "\"%s_helper\" (ID, value, graph, ID_type, value_type) AS "
+ "(SELECT ID, value, graph, ID_type, value_type "
+ "FROM \"%s\" "
+ "UNION "
+ "SELECT a.ID, b.value, b.graph, a.ID_type, b.value_type "
+ "FROM \"%s\" AS a, \"%s_helper\" AS b "
+ "WHERE a.value = b.ID), ",
+ path_elem->name,
+ path_elem->data.composite.child1->name,
+ path_elem->data.composite.child1->name,
+ path_elem->name);
_append_string_printf (sparql,
"\"%s\" (ID, value, graph, ID_type, value_type) AS "
- "(SELECT ID, ID, graph, ID_type, ID_type "
+ "(SELECT ID, value, graph, ID_type, value_type "
+ "FROM \"%s_helper\" "
+ "UNION "
+ "SELECT ID, ID, graph, ID_type, ID_type "
"FROM \"%s\" "
"UNION "
- "SELECT a.ID, b.value, b.graph, a.ID_type, b.value_type "
- "FROM \"%s\" AS a, \"%s\" AS b "
- "WHERE b.ID = a.value) ",
+ "SELECT value, value, graph, value_type, value_type "
+ "FROM \"%s\") ",
+ path_elem->name,
path_elem->name,
path_elem->data.composite.child1->name,
- path_elem->data.composite.child1->name,
- path_elem->name);
+ path_elem->data.composite.child1->name);
break;
case TRACKER_PATH_OPERATOR_ONEORMORE:
_append_string_printf (sparql,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]