diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-09-02 12:13:23 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-11-13 11:17:31 +0100 |
commit | badcb1167edfec889df3057de6f2bc89b929a92c (patch) | |
tree | 0824b8a891b045d814732cb18e51583361e4768c | |
parent | 780287603a1aabe39ab5403ef482e239bd07f1a0 (diff) | |
download | tracker-badcb1167edfec889df3057de6f2bc89b929a92c.tar.gz |
libtracker-data: Add back support for DELETE{}/INSERT{} with no WHERE clause
This is a Tracker extension to SPARQL.
-rw-r--r-- | src/libtracker-data/tracker-sparql-grammar.h | 8 | ||||
-rw-r--r-- | src/libtracker-data/tracker-sparql.c | 18 |
2 files changed, 20 insertions, 6 deletions
diff --git a/src/libtracker-data/tracker-sparql-grammar.h b/src/libtracker-data/tracker-sparql-grammar.h index 8e305b1fc..3dcffff4c 100644 --- a/src/libtracker-data/tracker-sparql-grammar.h +++ b/src/libtracker-data/tracker-sparql-grammar.h @@ -1245,6 +1245,10 @@ static const TrackerGrammarRule helper_DeleteClause_opt_1[] = { L(SILENT), NIL } static const TrackerGrammarRule rule_DeleteClause[] = { L(DELETE), OPT(helper_DeleteClause_opt_1), R(QuadPattern), NIL }; /* Modify ::= ( 'WITH' iri )? ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern + * + * TRACKER EXTENSION: + * Last part of the clause is: + * ('WHERE' GroupGraphPattern)? */ static const TrackerGrammarRule helper_Modify_seq_1[] = { L(WITH), R(iri), NIL }; static const TrackerGrammarRule helper_Modify_opt_1[] = { S(helper_Modify_seq_1), NIL }; @@ -1252,7 +1256,9 @@ static const TrackerGrammarRule helper_Modify_opt_2[] = { R(InsertClause), NIL } static const TrackerGrammarRule helper_Modify_seq_2[] = { R(DeleteClause), OPT(helper_Modify_opt_2), NIL }; static const TrackerGrammarRule helper_Modify_or[] = { S(helper_Modify_seq_2), R(InsertClause), NIL }; static const TrackerGrammarRule helper_Modify_gte0[] = { R(UsingClause), NIL }; -static const TrackerGrammarRule rule_Modify[] = { OPT(helper_Modify_opt_1), OR(helper_Modify_or), GTE0(helper_Modify_gte0), L(WHERE), R(GroupGraphPattern), NIL }; +static const TrackerGrammarRule helper_Modify_seq_3[] = { L(WHERE), R(GroupGraphPattern), NIL }; +static const TrackerGrammarRule helper_Modify_opt_3[] = { S(helper_Modify_seq_3), NIL }; +static const TrackerGrammarRule rule_Modify[] = { OPT(helper_Modify_opt_1), OR(helper_Modify_or), GTE0(helper_Modify_gte0), OPT(helper_Modify_opt_3), NIL }; /* DeleteWhere ::= 'DELETE WHERE' QuadPattern */ diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index 20538e030..3e3dc5b48 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -2706,6 +2706,10 @@ translate_Modify (TrackerSparql *sparql, gboolean retval = TRUE; /* Modify ::= ( 'WITH' iri )? ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern + * + * TRACKER EXTENSION: + * Last part of the clause is: + * ('WHERE' GroupGraphPattern)? */ if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_WITH)) { _call_rule (sparql, NAMED_RULE_iri, error); @@ -2725,11 +2729,15 @@ translate_Modify (TrackerSparql *sparql, _call_rule (sparql, NAMED_RULE_UsingClause, error); } - _expect (sparql, RULE_TYPE_LITERAL, LITERAL_WHERE); - where = _skip_rule (sparql, NAMED_RULE_GroupGraphPattern); - solution = get_solution_for_pattern (sparql, where, error); - if (!solution) - return FALSE; + if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_WHERE)) { + where = _skip_rule (sparql, NAMED_RULE_GroupGraphPattern); + solution = get_solution_for_pattern (sparql, where, error); + if (!solution) + return FALSE; + } else { + solution = tracker_solution_new (1); + tracker_solution_add_value (solution, ""); + } if (delete) { retval = iterate_solution (sparql, solution, delete, error); |