diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2022-01-16 16:20:22 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2022-02-10 23:36:58 +0100 |
commit | 85064638967f6261165dd9a71b60c966b58ff0f5 (patch) | |
tree | f0205aeb71a1be9d0c2ff5c429b7e2899177431c | |
parent | e312cb33bd513bf463c8bde5a055b5e6463ef0aa (diff) | |
download | tracker-85064638967f6261165dd9a71b60c966b58ff0f5.tar.gz |
libtracker-data: Store graph IDs as TrackerRowid
This was stored and used as ints in various places, move them to
TrackerRowid.
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 25 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-manager.h | 2 | ||||
-rw-r--r-- | src/libtracker-data/tracker-sparql.c | 39 |
3 files changed, 38 insertions, 28 deletions
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 640f1de87..1fbd45bac 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -172,7 +172,7 @@ tracker_data_manager_initialize_graphs (TrackerDataManager *manager, graphs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, - NULL); + (GDestroyNotify) tracker_rowid_free); stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_NONE, error, "SELECT ID, Uri FROM Resource WHERE ID IN (SELECT ID FROM Graph)"); @@ -191,13 +191,13 @@ tracker_data_manager_initialize_graphs (TrackerDataManager *manager, while (tracker_db_cursor_iter_next (cursor, NULL, NULL)) { const gchar *name; - gint id; + TrackerRowid id; id = tracker_db_cursor_get_int (cursor, 0); name = tracker_db_cursor_get_string (cursor, 1, NULL); g_hash_table_insert (graphs, g_strdup (name), - GINT_TO_POINTER (id)); + tracker_rowid_copy (&id)); } g_object_unref (cursor); @@ -4057,14 +4057,17 @@ update_attached_databases (TrackerDBInterface *iface, g_hash_table_remove (data_manager->graphs, name); *changed = TRUE; } else if (tracker_db_cursor_get_int (cursor, 2)) { + TrackerRowid id; + if (!tracker_db_manager_attach_database (data_manager->db_manager, iface, name, FALSE, error)) { retval = FALSE; break; } + id = tracker_db_cursor_get_int (cursor, 3); g_hash_table_insert (data_manager->graphs, g_strdup (name), - GINT_TO_POINTER (tracker_db_cursor_get_int (cursor, 3))); + tracker_rowid_copy (&id)); *changed = TRUE; } } @@ -5058,11 +5061,11 @@ copy_graphs (GHashTable *graphs) copy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, - NULL); + (GDestroyNotify) tracker_rowid_free); g_hash_table_iter_init (&iter, graphs); while (g_hash_table_iter_next (&iter, &key, &value)) - g_hash_table_insert (copy, g_strdup (key), value); + g_hash_table_insert (copy, g_strdup (key), tracker_rowid_copy (value)); return copy; } @@ -5073,8 +5076,7 @@ tracker_data_manager_create_graph (TrackerDataManager *manager, GError **error) { TrackerDBInterface *iface; - gint id; - + TrackerRowid id; iface = tracker_db_manager_get_writable_db_interface (manager->db_manager); @@ -5096,7 +5098,8 @@ tracker_data_manager_create_graph (TrackerDataManager *manager, if (!manager->transaction_graphs) manager->transaction_graphs = copy_graphs (manager->graphs); - g_hash_table_insert (manager->transaction_graphs, g_strdup (name), GINT_TO_POINTER (id)); + g_hash_table_insert (manager->transaction_graphs, g_strdup (name), + tracker_rowid_copy (&id)); return TRUE; @@ -5137,13 +5140,13 @@ tracker_data_manager_drop_graph (TrackerDataManager *manager, return TRUE; } -gint +TrackerRowid tracker_data_manager_find_graph (TrackerDataManager *manager, const gchar *name, gboolean in_transaction) { GHashTable *graphs; - gint graph_id; + TrackerRowid graph_id; graphs = tracker_data_manager_get_graphs (manager, in_transaction); graph_id = GPOINTER_TO_UINT (g_hash_table_lookup (graphs, name)); diff --git a/src/libtracker-data/tracker-data-manager.h b/src/libtracker-data/tracker-data-manager.h index 130695421..c132f2b0c 100644 --- a/src/libtracker-data/tracker-data-manager.h +++ b/src/libtracker-data/tracker-data-manager.h @@ -99,7 +99,7 @@ gboolean tracker_data_manager_copy_graph (TrackerDataManager *mana GHashTable * tracker_data_manager_get_graphs (TrackerDataManager *manager, gboolean in_transaction); -gint tracker_data_manager_find_graph (TrackerDataManager *manager, +TrackerRowid tracker_data_manager_find_graph (TrackerDataManager *manager, const gchar *name, gboolean in_transaction); diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index 2931c18d7..d02686360 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -716,7 +716,7 @@ tracker_sparql_get_effective_graphs (TrackerSparql *sparql) g_hash_table_new_full (g_str_hash, g_str_equal, g_free, - NULL); + (GDestroyNotify) tracker_rowid_free); for (i = 0; i < sparql->policy.graphs->len; i++) { gpointer key, value; @@ -725,7 +725,8 @@ tracker_sparql_get_effective_graphs (TrackerSparql *sparql) g_ptr_array_index (sparql->policy.graphs, i), &key, &value)) { g_hash_table_insert (sparql->policy.filtered_graphs, - g_strdup (key), value); + g_strdup (key), + tracker_rowid_copy (value)); } } } @@ -761,7 +762,7 @@ _append_union_graph_with_clause (TrackerSparql *sparql, const gchar *properties, gint n_properties) { - gpointer graph_name, graph_id; + gpointer graph_name, value; GHashTable *graphs; GHashTableIter iter; @@ -779,11 +780,13 @@ _append_union_graph_with_clause (TrackerSparql *sparql, } g_hash_table_iter_init (&iter, graphs); - while (g_hash_table_iter_next (&iter, &graph_name, &graph_id)) { + while (g_hash_table_iter_next (&iter, &graph_name, &value)) { + TrackerRowid *graph_id = value; + _append_string_printf (sparql, - "UNION ALL SELECT ID, %s %d AS graph FROM \"%s\".\"%s\" ", + "UNION ALL SELECT ID, %s %" G_GINT64_FORMAT " AS graph FROM \"%s\".\"%s\" ", properties, - GPOINTER_TO_INT (graph_id), + *graph_id, (gchar *) graph_name, table_name); } @@ -854,7 +857,7 @@ static void tracker_sparql_add_union_graph_subquery_for_named_graphs (TrackerSparql *sparql) { TrackerStringBuilder *old; - gpointer graph_id; + gpointer value; GHashTable *graphs; GHashTableIter iter; gboolean first = TRUE; @@ -875,13 +878,15 @@ tracker_sparql_add_union_graph_subquery_for_named_graphs (TrackerSparql *sparql) _append_string (sparql, "\"unionGraph_graphs\"(graph) AS ("); g_hash_table_iter_init (&iter, graphs); - while (g_hash_table_iter_next (&iter, NULL, &graph_id)) { + while (g_hash_table_iter_next (&iter, NULL, &value)) { + TrackerRowid *graph_id = value; + if (first) _append_string (sparql, "VALUES "); else _append_string (sparql, ", "); - _append_string_printf (sparql, "(%d) ", GPOINTER_TO_INT (graph_id)); + _append_string_printf (sparql, "(%" G_GINT64_FORMAT ") ", *graph_id); first = FALSE; } @@ -894,7 +899,7 @@ tracker_sparql_add_union_graph_subquery_for_named_graphs (TrackerSparql *sparql) g_hash_table_unref (graphs); } -static gint +static TrackerRowid tracker_sparql_find_graph (TrackerSparql *sparql, const gchar *name) { @@ -947,7 +952,7 @@ _prepend_path_element (TrackerSparql *sparql, TRACKER_PROPERTY_TYPE_RESOURCE, TRACKER_PROPERTY_TYPE_RESOURCE); } else if (tracker_sparql_find_graph (sparql, graph)) { - zero_length_match = g_strdup_printf ("SELECT ID, ID, %d, %d, %d " + zero_length_match = g_strdup_printf ("SELECT ID, ID, %" G_GINT64_FORMAT ", %d, %d " "FROM \"%s\".\"rdfs:Resource\"", tracker_sparql_find_graph (sparql, graph), TRACKER_PROPERTY_TYPE_RESOURCE, @@ -981,7 +986,7 @@ _prepend_path_element (TrackerSparql *sparql, if (tracker_sparql_find_graph (sparql, graph)) { table_name = g_strdup_printf ("\"%s\".\"%s\"", graph, tracker_property_get_table_name (path_elem->data.property)); - graph_column = g_strdup_printf ("%d", + graph_column = g_strdup_printf ("%" G_GINT64_FORMAT, tracker_sparql_find_graph (sparql, graph)); } else { /* Graph does not exist, ensure to come back empty */ @@ -1588,7 +1593,7 @@ tracker_sparql_add_fts_subquery (TrackerSparql *sparql, _append_empty_select (sparql, n_properties); } } else { - gpointer graph_name, graph_id; + gpointer graph_name, value; GHashTable *graphs; GHashTableIter iter; @@ -1606,13 +1611,15 @@ tracker_sparql_add_fts_subquery (TrackerSparql *sparql, graphs = tracker_sparql_get_effective_graphs (sparql); g_hash_table_iter_init (&iter, graphs); - while (g_hash_table_iter_next (&iter, &graph_name, &graph_id)) { + while (g_hash_table_iter_next (&iter, &graph_name, &value)) { + TrackerRowid *graph_id = value; + _append_string_printf (sparql, - "UNION ALL %s, %d AS graph " + "UNION ALL %s, %" G_GINT64_FORMAT " AS graph " "FROM \"%s\".\"fts5\" " "WHERE fts5 = '\"' || REPLACE (", select_items->str, - GPOINTER_TO_INT (graph_id), + *graph_id, (gchar *) graph_name); _append_literal_sql (sparql, binding); _append_string (sparql, ", '\"', ' ') || '\"*'"); |