[tracker/wip/carlosg/sparql1.1: 115/201] libtracker-data: Refactor string builder creation into separate function
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/sparql1.1: 115/201] libtracker-data: Refactor string builder creation into separate function
- Date: Mon, 9 Sep 2019 22:28:28 +0000 (UTC)
commit 169eb9f19f947dbb79f1ea86f6f4822442028ba5
Author: Carlos Garnacho <carlosg gnome org>
Date: Thu Jun 13 13:53:58 2019 +0200
libtracker-data: Refactor string builder creation into separate function
This is done in several places, so do it centrally. Also, we now make the
Query body go into a separate substring, in order to ensure _prepend_string()
during query parsing doesn't end up with strings being prepended before the
set of WITH clauses.
src/libtracker-data/tracker-sparql.c | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index d04e25bd6..3dc4f175c 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -1387,6 +1387,22 @@ tracker_sparql_apply_quad (TrackerSparql *sparql,
return TRUE;
}
+static void
+tracker_sparql_init_string_builder (TrackerSparql *sparql)
+{
+ TrackerStringBuilder *str;
+
+ g_clear_pointer (&sparql->sql, tracker_string_builder_free);
+ sparql->sql = sparql->current_state.sql = tracker_string_builder_new ();
+ sparql->current_state.with_clauses = _prepend_placeholder (sparql);
+
+ /* Ensure the select clause goes to a different substring than the
+ * WITH clauses, so _prepend_string() works as expected.
+ */
+ str = _append_placeholder (sparql);
+ tracker_sparql_swap_builder (sparql, str);
+}
+
static TrackerParserNode *
_skip_rule (TrackerSparql *sparql,
guint named_rule)
@@ -3125,10 +3141,7 @@ get_solution_for_pattern (TrackerSparql *sparql,
sparql->current_state.select_context = sparql->context;
tracker_sparql_push_context (sparql, sparql->context);
- g_clear_pointer (&sparql->sql, tracker_string_builder_free);
- sparql->sql = tracker_string_builder_new ();
- tracker_sparql_swap_builder (sparql, sparql->sql);
- sparql->current_state.with_clauses = _prepend_placeholder (sparql);
+ tracker_sparql_init_string_builder (sparql);
retval = prepare_solution_select (sparql, pattern, error);
tracker_sparql_pop_context (sparql, FALSE);
@@ -7406,11 +7419,8 @@ tracker_sparql_new (TrackerDataManager *manager,
&sparql->parser_error);
if (tree) {
sparql->tree = tree;
- sparql->sql = tracker_string_builder_new ();
-
sparql->current_state.node = tracker_node_tree_get_root (sparql->tree);
- sparql->current_state.sql = sparql->sql;
- sparql->current_state.with_clauses = _prepend_placeholder (sparql);
+ tracker_sparql_init_string_builder (sparql);
}
return sparql;
@@ -7584,11 +7594,8 @@ tracker_sparql_new_update (TrackerDataManager *manager,
if (tree) {
sparql->tree = tree;
- sparql->sql = tracker_string_builder_new ();
-
sparql->current_state.node = tracker_node_tree_get_root (sparql->tree);
- sparql->current_state.sql = sparql->sql;
- sparql->current_state.with_clauses = _prepend_placeholder (sparql);
+ tracker_sparql_init_string_builder (sparql);
}
return sparql;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]