[tracker/wip/carlosg/rowid-type: 5/7] libtracker-data: Store graph IDs as TrackerRowid




commit 85064638967f6261165dd9a71b60c966b58ff0f5
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Jan 16 16:20:22 2022 +0100

    libtracker-data: Store graph IDs as TrackerRowid
    
    This was stored and used as ints in various places, move them to
    TrackerRowid.

 src/libtracker-data/tracker-data-manager.c | 25 ++++++++++---------
 src/libtracker-data/tracker-data-manager.h |  2 +-
 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, ", '\"', ' ') || '\"*'");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]