diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-09-02 11:01:30 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-11-13 11:17:31 +0100 |
commit | eefc6bcf8956ece86e3d731f27d4fd9030031d9b (patch) | |
tree | 9064dca92994176be10b70b8a73c670e9ca9a81e | |
parent | ee26c9eb4cc422fb229d083c122aa3323145fc0f (diff) | |
download | tracker-eefc6bcf8956ece86e3d731f27d4fd9030031d9b.tar.gz |
libtracker-data: Add 'INSERT OR REPLACE' SPARQL extension back
This is syntax traditionally allowed by Tracker.
-rw-r--r-- | src/libtracker-data/tracker-sparql-grammar.h | 8 | ||||
-rw-r--r-- | src/libtracker-data/tracker-sparql.c | 12 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/libtracker-data/tracker-sparql-grammar.h b/src/libtracker-data/tracker-sparql-grammar.h index 2ade748de..28698af98 100644 --- a/src/libtracker-data/tracker-sparql-grammar.h +++ b/src/libtracker-data/tracker-sparql-grammar.h @@ -1225,8 +1225,14 @@ static const TrackerGrammarRule helper_UsingClause_or[] = { R(iri), S(helper_Usi static const TrackerGrammarRule rule_UsingClause[] = { L(USING), OR(helper_UsingClause_or), NIL }; /* InsertClause ::= 'INSERT' QuadPattern + * + * TRACKER EXTENSION: + * Clause may start with: + * 'INSERT' ('OR' 'REPLACE')? */ -static const TrackerGrammarRule rule_InsertClause[] = { L(INSERT), R(QuadPattern), NIL }; +static const TrackerGrammarRule helper_InsertClause_seq_1[] = { L(OR), L(REPLACE), NIL }; +static const TrackerGrammarRule helper_InsertClause_opt_1[] = { S(helper_InsertClause_seq_1), NIL }; +static const TrackerGrammarRule rule_InsertClause[] = { L(INSERT), OPT(helper_InsertClause_opt_1), R(QuadPattern), NIL }; /* DeleteClause ::= 'DELETE' QuadPattern */ diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index a7eac02e2..68b4b7bc4 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -2772,6 +2772,10 @@ translate_InsertClause (TrackerSparql *sparql, GError **error) { /* InsertClause ::= 'INSERT' QuadPattern + * + * TRACKER EXTENSION: + * Clause may start with: + * 'INSERT' ('OR' 'REPLACE')? */ sparql->current_state.blank_node_map = g_hash_table_new_full (g_str_hash, g_str_equal, @@ -2779,6 +2783,14 @@ translate_InsertClause (TrackerSparql *sparql, sparql->current_state.type = TRACKER_SPARQL_TYPE_INSERT; _expect (sparql, RULE_TYPE_LITERAL, LITERAL_INSERT); + + if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_OR)) { + _expect (sparql, RULE_TYPE_LITERAL, LITERAL_REPLACE); + sparql->current_state.type = TRACKER_SPARQL_TYPE_UPDATE; + } else { + sparql->current_state.type = TRACKER_SPARQL_TYPE_INSERT; + } + _call_rule (sparql, NAMED_RULE_QuadPattern, error); if (sparql->blank_nodes) { |