summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-09-02 14:05:31 +0200
committerCarlos Garnacho <carlosg@gnome.org>2018-11-13 11:17:31 +0100
commit3a33d543825615da004ff768d9c6585788165b9a (patch)
tree3d3fd570f365d0ee6f287564aa322832ceb4fef7
parentbadcb1167edfec889df3057de6f2bc89b929a92c (diff)
downloadtracker-3a33d543825615da004ff768d9c6585788165b9a.tar.gz
libtracker-sparql: Allow non bracketted expressions in OrderClause
This is a Tracker SPARQL extension present in the previous parser.
-rw-r--r--src/libtracker-data/tracker-sparql-grammar.h6
-rw-r--r--src/libtracker-data/tracker-sparql.c11
2 files changed, 12 insertions, 5 deletions
diff --git a/src/libtracker-data/tracker-sparql-grammar.h b/src/libtracker-data/tracker-sparql-grammar.h
index 3dcffff4c..caf54b8d5 100644
--- a/src/libtracker-data/tracker-sparql-grammar.h
+++ b/src/libtracker-data/tracker-sparql-grammar.h
@@ -1339,9 +1339,13 @@ static const TrackerGrammarRule rule_LimitOffsetClauses[] = { OR(helper_LimitOff
/* OrderCondition ::= ( ( 'ASC' | 'DESC' ) BrackettedExpression )
* | ( Constraint | Var )
+ *
+ * TRACKER EXTENSION:
+ * The first rule is turned into the more generic:
+ * ( ( 'ASC' | 'DESC' ) Expression )
*/
static const TrackerGrammarRule helper_OrderCondition_or_1[] = { L(ASC), L(DESC), NIL };
-static const TrackerGrammarRule helper_OrderCondition_seq[] = { OR(helper_OrderCondition_or_1), R(BrackettedExpression), NIL };
+static const TrackerGrammarRule helper_OrderCondition_seq[] = { OR(helper_OrderCondition_or_1), R(Expression), NIL };
static const TrackerGrammarRule helper_OrderCondition_or_2[] = { S(helper_OrderCondition_seq), R(Constraint), R(Var), NIL };
static const TrackerGrammarRule rule_OrderCondition[] = { OR(helper_OrderCondition_or_2), NIL };
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index 3e3dc5b48..db8d74222 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -2274,12 +2274,16 @@ translate_OrderCondition (TrackerSparql *sparql,
/* OrderCondition ::= ( ( 'ASC' | 'DESC' ) BrackettedExpression )
* | ( Constraint | Var )
+ *
+ * TRACKER EXTENSION:
+ * plain Expression is also accepted, the last group is:
+ * ( Constraint | Var | Expression )
*/
if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_ASC)) {
- _call_rule (sparql, NAMED_RULE_BrackettedExpression, error);
+ _call_rule (sparql, NAMED_RULE_Expression, error);
order_str = "ASC ";
} else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_DESC)) {
- _call_rule (sparql, NAMED_RULE_BrackettedExpression, error);
+ _call_rule (sparql, NAMED_RULE_Expression, error);
order_str = "DESC ";
} else if (_check_in_rule (sparql, NAMED_RULE_Constraint)) {
_call_rule (sparql, NAMED_RULE_Constraint, error);
@@ -2656,8 +2660,7 @@ iterate_solution (TrackerSparql *sparql,
sparql->solution_var_map = tracker_solution_get_bindings (solution);
retval = _postprocess_rule (sparql, node, NULL, error);
- g_clear_pointer (&sparql->solution_var_map,
- (GDestroyNotify) g_hash_table_unref);
+ g_clear_pointer (&sparql->solution_var_map, g_hash_table_unref);
tracker_data_update_buffer_might_flush (tracker_data_manager_get_data (sparql->data_manager),
&flush_error);