diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-11-13 03:27:38 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-11-13 11:17:31 +0100 |
commit | c58f7aa419e2c3a69fa7fe583a1fd5e0b9bd0839 (patch) | |
tree | 09d57e876ddc7cbf835d6247b5154b191f2e7252 | |
parent | 15784105df51cb02d3df5c6527119565762ee650 (diff) | |
download | tracker-c58f7aa419e2c3a69fa7fe583a1fd5e0b9bd0839.tar.gz |
libtracker-sparql: Avoid implicitly relying on hashtable iteration order
Recent GLib changed the hashtable hashing, thus changing the order in which
the contents are iterated by a GHashTableIter. Avoid doing that in the one
place we used to (also used to happen in previous vala code).
-rw-r--r-- | src/libtracker-data/tracker-sparql.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index 1ff98e0f7..01e4e6d06 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -2910,9 +2910,13 @@ translate_InsertClause (TrackerSparql *sparql, * Clause may start with: * 'INSERT' ('OR' 'REPLACE')? ('SILENT')? ('INTO' iri)? */ - sparql->current_state.blank_node_map = - g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, g_free); + if (sparql->blank_nodes) { + g_variant_builder_open (sparql->blank_nodes, G_VARIANT_TYPE ("a{ss}")); + sparql->current_state.blank_node_map = + g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, g_free); + } + old_graph = sparql->current_state.graph; sparql->current_state.type = TRACKER_SPARQL_TYPE_INSERT; @@ -2939,15 +2943,6 @@ translate_InsertClause (TrackerSparql *sparql, sparql->current_state.graph = old_graph; if (sparql->blank_nodes) { - GHashTableIter iter; - gpointer key, value; - - g_hash_table_iter_init (&iter, sparql->current_state.blank_node_map); - g_variant_builder_open (sparql->blank_nodes, G_VARIANT_TYPE ("a{ss}")); - - while (g_hash_table_iter_next (&iter, &key, &value)) - g_variant_builder_add (sparql->blank_nodes, "{ss}", key, value); - g_variant_builder_close (sparql->blank_nodes); } @@ -6174,6 +6169,7 @@ translate_BlankNode (TrackerSparql *sparql, bnode_id = tracker_data_query_unused_uuid (sparql->data_manager, iface); g_hash_table_insert (sparql->current_state.blank_node_map, g_strdup (str), bnode_id); + g_variant_builder_add (sparql->blank_nodes, "{ss}", str, bnode_id); } tracker_token_literal_init (sparql->current_state.token, bnode_id); |