summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2022-02-11 09:48:14 +0000
committerSam Thursfield <sam@afuera.me.uk>2022-02-11 09:48:14 +0000
commit8249b6786197087f4476db7af21625a5e3430fb9 (patch)
tree27b7fc6f9f99a606fc6655772328b05d1f6f158a
parente0604941a56fe8d5641443fb7203242aa9a666f6 (diff)
parent977d7a69d8d4186d720ddd8af6312097a571b0a8 (diff)
downloadtracker-8249b6786197087f4476db7af21625a5e3430fb9.tar.gz
Merge branch 'wip/carlosg/rowid-type' into 'master'
libtracker-data: Add specific TrackerRowid type Closes #339 See merge request GNOME/tracker!484
-rw-r--r--src/libtracker-data/meson.build1
-rw-r--r--src/libtracker-data/tracker-class.c6
-rw-r--r--src/libtracker-data/tracker-class.h6
-rw-r--r--src/libtracker-data/tracker-data-manager.c45
-rw-r--r--src/libtracker-data/tracker-data-manager.h3
-rw-r--r--src/libtracker-data/tracker-data-query.c10
-rw-r--r--src/libtracker-data/tracker-data-query.h6
-rw-r--r--src/libtracker-data/tracker-data-update.c180
-rw-r--r--src/libtracker-data/tracker-data-update.h26
-rw-r--r--src/libtracker-data/tracker-ontologies.c16
-rw-r--r--src/libtracker-data/tracker-ontologies.h4
-rw-r--r--src/libtracker-data/tracker-property.c6
-rw-r--r--src/libtracker-data/tracker-property.h4
-rw-r--r--src/libtracker-data/tracker-rowid.c39
-rw-r--r--src/libtracker-data/tracker-rowid.h38
-rw-r--r--src/libtracker-data/tracker-sparql.c44
-rw-r--r--src/libtracker-data/tracker-vtab-triples.c27
-rw-r--r--src/libtracker-sparql/direct/tracker-direct-batch.c3
-rw-r--r--src/libtracker-sparql/direct/tracker-direct.c30
19 files changed, 296 insertions, 198 deletions
diff --git a/src/libtracker-data/meson.build b/src/libtracker-data/meson.build
index b367edd12..562c6f735 100644
--- a/src/libtracker-data/meson.build
+++ b/src/libtracker-data/meson.build
@@ -24,6 +24,7 @@ libtracker_data = static_library('tracker-data',
'tracker-ontology.c',
'tracker-ontologies.c',
'tracker-property.c',
+ 'tracker-rowid.c',
'tracker-string-builder.c',
'tracker-sparql-parser.c',
'tracker-sparql-types.c',
diff --git a/src/libtracker-data/tracker-class.c b/src/libtracker-data/tracker-class.c
index c83879f86..3a9eac370 100644
--- a/src/libtracker-data/tracker-class.c
+++ b/src/libtracker-data/tracker-class.c
@@ -34,7 +34,7 @@ typedef struct _TrackerClassPrivate TrackerClassPrivate;
struct _TrackerClassPrivate {
gchar *uri;
gchar *name;
- gint id;
+ TrackerRowid id;
guint is_new : 1;
guint db_schema_changed : 1;
guint notify : 1;
@@ -189,7 +189,7 @@ tracker_class_get_name (TrackerClass *service)
return priv->name;
}
-gint
+TrackerRowid
tracker_class_get_id (TrackerClass *service)
{
TrackerClassPrivate *priv;
@@ -367,7 +367,7 @@ tracker_class_set_uri (TrackerClass *service,
void
tracker_class_set_id (TrackerClass *service,
- gint value)
+ TrackerRowid value)
{
TrackerClassPrivate *priv;
diff --git a/src/libtracker-data/tracker-class.h b/src/libtracker-data/tracker-class.h
index e806c035f..c57631595 100644
--- a/src/libtracker-data/tracker-class.h
+++ b/src/libtracker-data/tracker-class.h
@@ -23,6 +23,8 @@
#include <glib-object.h>
+#include "tracker-rowid.h"
+
G_BEGIN_DECLS
#if !defined (__LIBTRACKER_DATA_INSIDE__) && !defined (TRACKER_COMPILATION)
@@ -53,7 +55,7 @@ GType tracker_class_get_type (void) G_GNUC_CONST;
TrackerClass * tracker_class_new (gboolean use_gvdb);
const gchar * tracker_class_get_uri (TrackerClass *service);
const gchar * tracker_class_get_name (TrackerClass *service);
-gint tracker_class_get_id (TrackerClass *service);
+TrackerRowid tracker_class_get_id (TrackerClass *service);
gboolean tracker_class_get_is_new (TrackerClass *service);
gboolean tracker_class_get_db_schema_changed (TrackerClass *service);
gboolean tracker_class_get_notify (TrackerClass *service);
@@ -78,7 +80,7 @@ void tracker_class_del_domain_index (TrackerClass *ser
void tracker_class_reset_domain_indexes (TrackerClass *service);
void tracker_class_reset_super_classes (TrackerClass *service);
void tracker_class_set_id (TrackerClass *service,
- gint id);
+ TrackerRowid id);
void tracker_class_set_is_new (TrackerClass *service,
gboolean value);
void tracker_class_set_db_schema_changed (TrackerClass *service,
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index ca51c9e4f..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);
@@ -575,7 +575,7 @@ update_property_value (TrackerDataManager *manager,
if (!unsup_onto_err) {
GValue value = G_VALUE_INIT;
- gint64 subject_id = 0;
+ TrackerRowid subject_id = 0;
tracker_data_query_string_to_value (manager,
str, NULL,
@@ -614,7 +614,7 @@ update_property_value (TrackerDataManager *manager,
if (!error && needed && object) {
GValue value = G_VALUE_INIT;
- gint64 subject_id = 0;
+ TrackerRowid subject_id = 0;
tracker_data_query_string_to_value (manager,
object, NULL,
@@ -858,7 +858,7 @@ tracker_data_ontology_load_statement (TrackerDataManager *manager,
if (g_strcmp0 (predicate, RDF_TYPE) == 0) {
if (g_strcmp0 (object, RDFS_CLASS) == 0) {
TrackerClass *class;
- gint subject_id;
+ TrackerRowid subject_id;
class = tracker_ontologies_get_class_by_uri (manager->ontologies, subject);
@@ -903,7 +903,7 @@ tracker_data_ontology_load_statement (TrackerDataManager *manager,
g_object_unref (class);
} else if (g_strcmp0 (object, RDF_PROPERTY) == 0) {
TrackerProperty *property;
- gint subject_id;
+ TrackerRowid subject_id;
property = tracker_ontologies_get_property_by_uri (manager->ontologies, subject);
if (property != NULL) {
@@ -1550,7 +1550,7 @@ check_for_deleted_domain_index (TrackerDataManager *manager,
TrackerProperty *prop = l->data;
const gchar *uri;
GValue value = G_VALUE_INIT;
- gint64 class_id = 0;
+ TrackerRowid class_id = 0;
TRACKER_NOTE (ONTOLOGY_CHANGES,
g_message ("Ontology change: deleting nrl:domainIndex: %s",
@@ -1741,7 +1741,7 @@ check_for_deleted_super_properties (TrackerDataManager *manager,
const gchar *object = tracker_property_get_uri (prop_to_remove);
const gchar *subject = tracker_property_get_uri (property);
GValue value = G_VALUE_INIT;
- gint64 subject_id;
+ TrackerRowid subject_id;
property = tracker_ontologies_get_property_by_uri (ontologies,
TRACKER_PREFIX_RDFS "subPropertyOf");
@@ -2220,7 +2220,7 @@ tracker_data_ontology_process_statement (TrackerDataManager *manager,
{
TrackerProperty *property;
GValue value = G_VALUE_INIT;
- gint64 subject_id = 0;
+ TrackerRowid subject_id = 0;
if (g_strcmp0 (predicate, RDF_TYPE) == 0) {
if (g_strcmp0 (object, RDFS_CLASS) == 0) {
@@ -2599,7 +2599,7 @@ db_get_static_data (TrackerDBInterface *iface,
while (tracker_db_cursor_iter_next (cursor, NULL, &internal_error)) {
TrackerClass *class;
const gchar *uri;
- gint id;
+ TrackerRowid id;
GValue value = { 0 };
gboolean notify;
@@ -2668,7 +2668,7 @@ db_get_static_data (TrackerDBInterface *iface,
const gchar *uri, *domain_uri, *range_uri, *secondary_index_uri;
gboolean multi_valued, indexed, fulltext_indexed;
gboolean is_inverse_functional_property;
- gint id;
+ TrackerRowid id;
property = tracker_property_new (FALSE);
@@ -2775,7 +2775,7 @@ static void
insert_uri_in_resource_table (TrackerDataManager *manager,
TrackerDBInterface *iface,
const gchar *uri,
- gint id,
+ TrackerRowid id,
GError **error)
{
TrackerDBStatement *stmt;
@@ -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 47f8c07f9..c132f2b0c 100644
--- a/src/libtracker-data/tracker-data-manager.h
+++ b/src/libtracker-data/tracker-data-manager.h
@@ -37,6 +37,7 @@ typedef struct _TrackerDataManagerClass TrackerDataManagerClass;
#include <libtracker-common/tracker-common.h>
#include <libtracker-sparql/tracker-ontologies.h>
+#include <libtracker-data/tracker-rowid.h>
#include <libtracker-data/tracker-data-update.h>
#include <libtracker-data/tracker-db-interface.h>
#include <libtracker-data/tracker-db-manager.h>
@@ -98,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-data-query.c b/src/libtracker-data/tracker-data-query.c
index f4a191e6f..09f41961e 100644
--- a/src/libtracker-data/tracker-data-query.c
+++ b/src/libtracker-data/tracker-data-query.c
@@ -36,7 +36,7 @@
GPtrArray*
tracker_data_query_rdf_type (TrackerDataManager *manager,
const gchar *graph,
- gint64 id,
+ TrackerRowid id,
GError **error)
{
TrackerDBCursor *cursor = NULL;
@@ -97,7 +97,7 @@ tracker_data_query_rdf_type (TrackerDataManager *manager,
gchar *
tracker_data_query_resource_urn (TrackerDataManager *manager,
TrackerDBInterface *iface,
- gint64 id)
+ TrackerRowid id)
{
TrackerDBCursor *cursor = NULL;
TrackerDBStatement *stmt;
@@ -125,7 +125,7 @@ tracker_data_query_resource_urn (TrackerDataManager *manager,
return uri;
}
-gint64
+TrackerRowid
tracker_data_query_resource_id (TrackerDataManager *manager,
TrackerDBInterface *iface,
const gchar *uri,
@@ -134,7 +134,7 @@ tracker_data_query_resource_id (TrackerDataManager *manager,
TrackerDBCursor *cursor = NULL;
TrackerDBStatement *stmt;
GError *inner_error = NULL;
- gint64 id = 0;
+ TrackerRowid id = 0;
g_return_val_if_fail (uri != NULL, 0);
@@ -193,7 +193,7 @@ tracker_data_query_string_to_value (TrackerDataManager *manager,
GError **error)
{
TrackerData *data;
- gint64 object_id;
+ TrackerRowid object_id;
gchar *datetime_str;
GDateTime *datetime;
diff --git a/src/libtracker-data/tracker-data-query.h b/src/libtracker-data/tracker-data-query.h
index 9d916e8dc..254ae97ce 100644
--- a/src/libtracker-data/tracker-data-query.h
+++ b/src/libtracker-data/tracker-data-query.h
@@ -36,8 +36,8 @@ G_BEGIN_DECLS
gchar * tracker_data_query_resource_urn (TrackerDataManager *manager,
TrackerDBInterface *iface,
- gint64 id);
-gint64 tracker_data_query_resource_id (TrackerDataManager *manager,
+ TrackerRowid id);
+TrackerRowid tracker_data_query_resource_id (TrackerDataManager *manager,
TrackerDBInterface *iface,
const gchar *uri,
GError **error);
@@ -47,7 +47,7 @@ TrackerDBCursor *tracker_data_query_sparql_cursor (TrackerDataManager *mana
GPtrArray* tracker_data_query_rdf_type (TrackerDataManager *manager,
const gchar *graph,
- gint64 id,
+ TrackerRowid id,
GError **error);
gboolean tracker_data_query_string_to_value (TrackerDataManager *manager,
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index c090f63dc..1934a22e3 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -59,7 +59,7 @@ struct _TrackerDataUpdateBuffer {
struct _TrackerDataUpdateBufferGraph {
gchar *graph;
- gint64 id;
+ TrackerRowid id;
/* string -> TrackerDataUpdateBufferResource */
GHashTable *resources;
@@ -69,7 +69,7 @@ struct _TrackerDataUpdateBufferGraph {
struct _TrackerDataUpdateBufferResource {
const TrackerDataUpdateBufferGraph *graph;
- gint64 id;
+ TrackerRowid id;
gboolean create;
gboolean modified;
/* TrackerProperty -> GArray */
@@ -157,18 +157,18 @@ static gboolean update_resource_single (TrackerData *data,
TrackerResource *resource,
GHashTable *visited,
GHashTable *bnodes,
- gint64 *id,
+ TrackerRowid *id,
GError **error);
void tracker_data_insert_statement_with_uri (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error);
void tracker_data_insert_statement_with_string (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error);
@@ -316,9 +316,9 @@ tracker_data_remove_insert_statement_callback (TrackerData *data,
}
void
-tracker_data_dispatch_insert_statement_callbacks (TrackerData *data,
- gint64 predicate_id,
- gint64 class_id)
+tracker_data_dispatch_insert_statement_callbacks (TrackerData *data,
+ TrackerRowid predicate_id,
+ TrackerRowid class_id)
{
if (data->insert_callbacks) {
guint n;
@@ -377,9 +377,9 @@ tracker_data_remove_delete_statement_callback (TrackerData *data,
}
void
-tracker_data_dispatch_delete_statement_callbacks (TrackerData *data,
- gint64 predicate_id,
- gint64 class_id)
+tracker_data_dispatch_delete_statement_callbacks (TrackerData *data,
+ TrackerRowid predicate_id,
+ TrackerRowid class_id)
{
if (data->delete_callbacks) {
guint n;
@@ -654,13 +654,13 @@ cache_delete_value (TrackerData *data,
g_array_append_val (table->properties, property);
}
-static gint64
+static TrackerRowid
query_resource_id (TrackerData *data,
const gchar *uri,
GError **error)
{
TrackerDBInterface *iface;
- gint64 *value, id;
+ TrackerRowid *value, id;
value = g_hash_table_lookup (data->update_buffer.resource_cache, uri);
@@ -669,9 +669,8 @@ query_resource_id (TrackerData *data,
id = tracker_data_query_resource_id (data->manager, iface, uri, error);
if (id != 0) {
- value = g_new0 (gint64, 1);
- *value = id;
- g_hash_table_insert (data->update_buffer.resource_cache, g_strdup (uri), value);
+ g_hash_table_insert (data->update_buffer.resource_cache, g_strdup (uri),
+ tracker_rowid_copy (&id));
}
return id;
@@ -680,7 +679,7 @@ query_resource_id (TrackerData *data,
return *value;
}
-gint64
+TrackerRowid
tracker_data_update_ensure_resource (TrackerData *data,
const gchar *uri,
GError **error)
@@ -691,7 +690,7 @@ tracker_data_update_ensure_resource (TrackerData *data,
TrackerDBStatement *stmt = NULL;
GError *inner_error = NULL;
gchar *key;
- gint64 *value, id;
+ TrackerRowid *value, id;
value = g_hash_table_lookup (data->update_buffer.resource_cache, uri);
@@ -741,13 +740,11 @@ tracker_data_update_ensure_resource (TrackerData *data,
id = tracker_db_interface_sqlite_get_last_insert_id (iface);
key = g_strdup (uri);
- value = g_new0 (gint64, 1);
- *value = id;
- g_hash_table_insert (data->update_buffer.resource_cache, key, value);
+ g_hash_table_insert (data->update_buffer.resource_cache, key,
+ tracker_rowid_copy (&id));
- value = g_new0 (gint64, 1);
- *value = id;
- g_hash_table_add (data->update_buffer.new_resources, value);
+ g_hash_table_add (data->update_buffer.new_resources,
+ tracker_rowid_copy (&id));
return id;
}
@@ -1065,28 +1062,26 @@ tracker_data_resource_buffer_flush (TrackerData *data,
}
static void
-tracker_data_update_refcount (TrackerData *data,
- gint64 id,
- gint refcount)
+tracker_data_update_refcount (TrackerData *data,
+ TrackerRowid id,
+ gint refcount)
{
const TrackerDataUpdateBufferGraph *graph;
gint old_refcount;
- gint64 *value;
g_assert (data->resource_buffer != NULL);
graph = data->resource_buffer->graph;
old_refcount = GPOINTER_TO_INT (g_hash_table_lookup (graph->refcounts, &id));
- value = g_new0 (gint64, 1);
- *value = id;
- g_hash_table_insert (graph->refcounts, value,
+ g_hash_table_insert (graph->refcounts,
+ tracker_rowid_copy (&id),
GINT_TO_POINTER (old_refcount + refcount));
}
static void
-tracker_data_resource_ref (TrackerData *data,
- gint64 id,
- gboolean multivalued)
+tracker_data_resource_ref (TrackerData *data,
+ TrackerRowid id,
+ gboolean multivalued)
{
if (multivalued)
tracker_data_update_refcount (data, data->resource_buffer->id, 1);
@@ -1095,9 +1090,9 @@ tracker_data_resource_ref (TrackerData *data,
}
static void
-tracker_data_resource_unref (TrackerData *data,
- gint64 id,
- gboolean multivalued)
+tracker_data_resource_unref (TrackerData *data,
+ TrackerRowid id,
+ gboolean multivalued)
{
if (multivalued)
tracker_data_update_refcount (data, data->resource_buffer->id, -1);
@@ -1140,7 +1135,7 @@ tracker_data_flush_graph_refcounts (TrackerData *data,
TrackerDBStatement *stmt;
GHashTableIter iter;
gpointer key, value;
- gint64 id;
+ TrackerRowid id;
gint refcount;
GError *inner_error = NULL;
const gchar *database;
@@ -1161,7 +1156,7 @@ tracker_data_flush_graph_refcounts (TrackerData *data,
g_hash_table_iter_init (&iter, graph->refcounts);
while (g_hash_table_iter_next (&iter, &key, &value)) {
- id = *(gint64*) key;
+ id = *(TrackerRowid *) key;
refcount = GPOINTER_TO_INT (value);
if (refcount > 0) {
@@ -1318,7 +1313,7 @@ cache_create_service_decomposed (TrackerData *data,
TrackerProperty **domain_indexes;
GValue gvalue = { 0 };
guint i;
- gint64 class_id;
+ TrackerRowid class_id;
TrackerOntologies *ontologies;
/* also create instance of all super classes */
@@ -1710,13 +1705,13 @@ get_old_property_values (TrackerData *data,
return old_values;
}
-static gint64
+static TrackerRowid
get_bnode_id (GHashTable *bnodes,
- TrackerData *data,
+ TrackerData *data,
const gchar *str,
GError **error)
{
- gint64 *value, bnode_id;
+ TrackerRowid *value, bnode_id;
value = g_hash_table_lookup (bnodes, str);
if (value)
@@ -1726,14 +1721,13 @@ get_bnode_id (GHashTable *bnodes,
if (bnode_id == 0)
return 0;
- value = g_new0 (gint64, 1);
- *value = bnode_id;
- g_hash_table_insert (bnodes, g_strdup (str), value);
+ g_hash_table_insert (bnodes, g_strdup (str),
+ tracker_rowid_copy (&bnode_id));
return bnode_id;
}
-static gint64
+static TrackerRowid
get_bnode_for_resource (GHashTable *bnodes,
TrackerData *data,
TrackerResource *resource,
@@ -2159,7 +2153,8 @@ ensure_graph_buffer (TrackerDataUpdateBuffer *buffer,
graph_buffer = g_slice_new0 (TrackerDataUpdateBufferGraph);
graph_buffer->refcounts =
- g_hash_table_new_full (g_int64_hash, g_int64_equal, g_free, NULL);
+ g_hash_table_new_full (tracker_rowid_hash, tracker_rowid_equal,
+ (GDestroyNotify) tracker_rowid_free, NULL);
graph_buffer->graph = g_strdup (name);
if (graph_buffer->graph) {
graph_buffer->id = tracker_data_manager_find_graph (data->manager,
@@ -2168,7 +2163,7 @@ ensure_graph_buffer (TrackerDataUpdateBuffer *buffer,
}
graph_buffer->resources =
- g_hash_table_new_full (g_int64_hash, g_int64_equal, NULL,
+ g_hash_table_new_full (tracker_rowid_hash, tracker_rowid_equal, NULL,
(GDestroyNotify) resource_buffer_free);
g_ptr_array_add (buffer->graphs, graph_buffer);
@@ -2176,10 +2171,10 @@ ensure_graph_buffer (TrackerDataUpdateBuffer *buffer,
}
static gboolean
-resource_buffer_switch (TrackerData *data,
- const gchar *graph,
- gint64 subject,
- GError **error)
+resource_buffer_switch (TrackerData *data,
+ const gchar *graph,
+ TrackerRowid subject,
+ GError **error)
{
TrackerDataUpdateBufferGraph *graph_buffer;
GError *inner_error = NULL;
@@ -2250,7 +2245,7 @@ resource_buffer_switch (TrackerData *data,
void
tracker_data_delete_statement (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error)
@@ -2271,7 +2266,7 @@ tracker_data_delete_statement (TrackerData *data,
if (predicate == tracker_ontologies_get_rdf_type (ontologies)) {
const gchar *object_str = NULL;
- gint64 object_id = g_value_get_int64 (object);
+ TrackerRowid object_id = g_value_get_int64 (object);
object_str = tracker_ontologies_get_uri_by_id (ontologies, object_id);
class = tracker_ontologies_get_class_by_uri (ontologies, object_str);
@@ -2284,7 +2279,7 @@ tracker_data_delete_statement (TrackerData *data,
"Class '%s' not found in the ontology", object_str);
}
} else {
- gint64 pred_id;
+ TrackerRowid pred_id;
pred_id = tracker_property_get_id (predicate);
data->has_persistent = TRUE;
@@ -2301,7 +2296,7 @@ tracker_data_delete_statement (TrackerData *data,
static gboolean
delete_all_helper (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *subproperty,
TrackerProperty *property,
GArray *old_values,
@@ -2374,11 +2369,11 @@ delete_all_helper (TrackerData *data,
}
static gboolean
-tracker_data_delete_all (TrackerData *data,
- const gchar *graph,
- gint64 subject,
- const gchar *predicate,
- GError **error)
+tracker_data_delete_all (TrackerData *data,
+ const gchar *graph,
+ TrackerRowid subject,
+ const gchar *predicate,
+ GError **error)
{
TrackerOntologies *ontologies;
TrackerProperty *property;
@@ -2409,12 +2404,12 @@ tracker_data_delete_all (TrackerData *data,
}
static gboolean
-delete_single_valued (TrackerData *data,
- const gchar *graph,
- gint64 subject,
- TrackerProperty *predicate,
- gboolean super_is_single_valued,
- GError **error)
+delete_single_valued (TrackerData *data,
+ const gchar *graph,
+ TrackerRowid subject,
+ TrackerProperty *predicate,
+ gboolean super_is_single_valued,
+ GError **error)
{
TrackerProperty **super_properties;
gboolean multiple_values;
@@ -2469,7 +2464,7 @@ delete_single_valued (TrackerData *data,
void
tracker_data_insert_statement (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error)
@@ -2489,14 +2484,14 @@ tracker_data_insert_statement (TrackerData *data,
void
tracker_data_insert_statement_with_uri (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error)
{
GError *actual_error = NULL;
TrackerClass *class;
- gint64 prop_id = 0;
+ TrackerRowid prop_id = 0;
gboolean change = FALSE;
TrackerOntologies *ontologies;
@@ -2518,7 +2513,7 @@ tracker_data_insert_statement_with_uri (TrackerData *data,
if (predicate == tracker_ontologies_get_rdf_type (ontologies)) {
const gchar *object_str = NULL;
- gint64 object_id;
+ TrackerRowid object_id;
object_id = g_value_get_int64 (object);
object_str = tracker_ontologies_get_uri_by_id (ontologies, object_id);
@@ -2554,14 +2549,14 @@ tracker_data_insert_statement_with_uri (TrackerData *data,
void
tracker_data_insert_statement_with_string (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error)
{
GError *actual_error = NULL;
gboolean change;
- gint64 pred_id = 0;
+ TrackerRowid pred_id = 0;
g_return_if_fail (subject != 0);
g_return_if_fail (predicate != NULL);
@@ -2595,7 +2590,7 @@ tracker_data_insert_statement_with_string (TrackerData *data,
void
tracker_data_update_statement (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error)
@@ -2690,8 +2685,10 @@ tracker_data_begin_transaction (TrackerData *data,
data->has_persistent = FALSE;
if (data->update_buffer.resource_cache == NULL) {
- data->update_buffer.resource_cache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- data->update_buffer.new_resources = g_hash_table_new_full (g_int64_hash, g_int64_equal, g_free, NULL);
+ data->update_buffer.resource_cache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
+ (GDestroyNotify) tracker_rowid_free);
+ data->update_buffer.new_resources = g_hash_table_new_full (tracker_rowid_hash, tracker_rowid_equal,
+ (GDestroyNotify) tracker_rowid_free, NULL);
/* used for normal transactions */
data->update_buffer.graphs = g_ptr_array_new_with_free_func ((GDestroyNotify) graph_buffer_free);
}
@@ -2884,7 +2881,7 @@ tracker_data_load_turtle_file (TrackerData *data,
&inner_error)) {
TrackerProperty *predicate;
GValue object = G_VALUE_INIT;
- gint64 subject;
+ TrackerRowid subject;
predicate = tracker_ontologies_get_property_by_uri (ontologies, predicate_str);
if (predicate == NULL) {
@@ -2951,14 +2948,14 @@ failed:
g_free (ontology_uri);
}
-gint64
+TrackerRowid
tracker_data_ensure_graph (TrackerData *data,
const gchar *uri,
GError **error)
{
TrackerDBInterface *iface;
TrackerDBStatement *stmt;
- gint64 id;
+ TrackerRowid id;
id = tracker_data_update_ensure_resource (data, uri, error);
if (id == 0)
@@ -2984,7 +2981,7 @@ tracker_data_delete_graph (TrackerData *data,
{
TrackerDBInterface *iface;
TrackerDBStatement *stmt;
- gint64 id;
+ TrackerRowid id;
id = query_resource_id (data, uri, error);
if (id == 0)
@@ -3007,7 +3004,7 @@ static gboolean
resource_maybe_reset_property (TrackerData *data,
const gchar *graph,
TrackerResource *resource,
- gint64 subject,
+ TrackerRowid subject,
const gchar *property_uri,
GHashTable *bnodes,
GError **error)
@@ -3038,7 +3035,7 @@ static gboolean
update_resource_property (TrackerData *data,
const gchar *graph_uri,
TrackerResource *resource,
- gint64 subject,
+ TrackerRowid subject,
const gchar *property,
GHashTable *visited,
GHashTable *bnodes,
@@ -3068,7 +3065,7 @@ update_resource_property (TrackerData *data,
for (v = values; v && !inner_error; v = v->next) {
GValue *value, free_me = G_VALUE_INIT;
- gint64 id;
+ TrackerRowid id;
if (G_VALUE_HOLDS (v->data, TRACKER_TYPE_RESOURCE)) {
@@ -3141,13 +3138,13 @@ update_resource_single (TrackerData *data,
TrackerResource *resource,
GHashTable *visited,
GHashTable *bnodes,
- gint64 *id,
+ TrackerRowid *id,
GError **error)
{
GList *properties = NULL, *l;
GError *inner_error = NULL;
const gchar *subject_str;
- gint64 subject;
+ TrackerRowid subject;
gchar *graph_uri = NULL;
gboolean is_bnode = FALSE;
@@ -3261,7 +3258,7 @@ tracker_data_update_resource (TrackerData *data,
if (bnodes)
g_hash_table_ref (bnodes);
else
- bnodes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ bnodes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) tracker_rowid_free);
retval = update_resource_single (data, graph, resource, visited, bnodes, NULL, error);
@@ -3271,14 +3268,14 @@ tracker_data_update_resource (TrackerData *data,
return retval;
}
-gint64
+TrackerRowid
tracker_data_generate_bnode (TrackerData *data,
GError **error)
{
TrackerDBInterface *iface;
TrackerDBStatement *stmt = NULL;
GError *inner_error = NULL;
- gint64 *value, id;
+ TrackerRowid id;
iface = tracker_data_manager_get_writable_db_interface (data->manager);
@@ -3301,9 +3298,8 @@ tracker_data_generate_bnode (TrackerData *data,
}
id = tracker_db_interface_sqlite_get_last_insert_id (iface);
- value = g_new0 (gint64, 1);
- *value = id;
- g_hash_table_add (data->update_buffer.new_resources, value);
+ g_hash_table_add (data->update_buffer.new_resources,
+ tracker_rowid_copy (&id));
return id;
}
diff --git a/src/libtracker-data/tracker-data-update.h b/src/libtracker-data/tracker-data-update.h
index 2c26f3c4d..5954e4721 100644
--- a/src/libtracker-data/tracker-data-update.h
+++ b/src/libtracker-data/tracker-data-update.h
@@ -45,11 +45,11 @@ typedef struct _TrackerDataClass TrackerDataClass;
typedef struct _TrackerData TrackerDataUpdate;
-typedef void (*TrackerStatementCallback) (gint64 graph_id,
+typedef void (*TrackerStatementCallback) (TrackerRowid graph_id,
const gchar *graph,
- gint64 subject_id,
- gint64 predicate_id,
- gint64 object_id,
+ TrackerRowid subject_id,
+ TrackerRowid predicate_id,
+ TrackerRowid object_id,
GPtrArray *rdf_types,
gpointer user_data);
typedef void (*TrackerCommitCallback) (gpointer user_data);
@@ -59,19 +59,19 @@ GQuark tracker_data_error_quark (void);
/* Metadata */
void tracker_data_delete_statement (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error);
void tracker_data_insert_statement (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error);
void tracker_data_update_statement (TrackerData *data,
const gchar *graph,
- gint64 subject,
+ TrackerRowid subject,
TrackerProperty *predicate,
const GValue *object,
GError **error);
@@ -98,7 +98,7 @@ void tracker_data_load_turtle_file (TrackerData *
const gchar *graph,
GError **error);
-gint64 tracker_data_ensure_graph (TrackerData *data,
+TrackerRowid tracker_data_ensure_graph (TrackerData *data,
const gchar *name,
GError **error);
gboolean tracker_data_delete_graph (TrackerData *data,
@@ -137,11 +137,11 @@ gboolean tracker_data_update_resource (TrackerData *data,
GHashTable *bnodes,
GError **error);
-gint64 tracker_data_update_ensure_resource (TrackerData *data,
- const gchar *uri,
- GError **error);
-gint64 tracker_data_generate_bnode (TrackerData *data,
- GError **error);
+TrackerRowid tracker_data_update_ensure_resource (TrackerData *data,
+ const gchar *uri,
+ GError **error);
+TrackerRowid tracker_data_generate_bnode (TrackerData *data,
+ GError **error);
GType tracker_data_get_type (void) G_GNUC_CONST;
TrackerData * tracker_data_new (TrackerDataManager *manager);
diff --git a/src/libtracker-data/tracker-ontologies.c b/src/libtracker-data/tracker-ontologies.c
index ed97bf648..ef0f8306d 100644
--- a/src/libtracker-data/tracker-ontologies.c
+++ b/src/libtracker-data/tracker-ontologies.c
@@ -102,8 +102,8 @@ tracker_ontologies_init (TrackerOntologies *ontologies)
g_free,
g_object_unref);
- priv->id_uri_pairs = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- NULL,
+ priv->id_uri_pairs = g_hash_table_new_full (tracker_rowid_hash, tracker_rowid_equal,
+ (GDestroyNotify) tracker_rowid_free,
g_free);
priv->properties = g_ptr_array_new_with_free_func (g_object_unref);
@@ -174,13 +174,13 @@ tracker_ontologies_get_rdf_type (TrackerOntologies *ontologies)
const gchar*
tracker_ontologies_get_uri_by_id (TrackerOntologies *ontologies,
- gint id)
+ TrackerRowid id)
{
TrackerOntologiesPrivate *priv = tracker_ontologies_get_instance_private (ontologies);
g_return_val_if_fail (id != -1, NULL);
- return g_hash_table_lookup (priv->id_uri_pairs, GINT_TO_POINTER (id));
+ return g_hash_table_lookup (priv->id_uri_pairs, &id);
}
void
@@ -362,13 +362,13 @@ tracker_ontologies_add_property (TrackerOntologies *ontologies,
void
tracker_ontologies_add_id_uri_pair (TrackerOntologies *ontologies,
- gint id,
+ TrackerRowid id,
const gchar *uri)
{
TrackerOntologiesPrivate *priv = tracker_ontologies_get_instance_private (ontologies);
g_hash_table_insert (priv->id_uri_pairs,
- GINT_TO_POINTER (id),
+ tracker_rowid_copy (&id),
g_strdup (uri));
}
@@ -561,7 +561,7 @@ tracker_ontologies_write_gvdb (TrackerOntologies *ontologies,
item = gvdb_hash_table_insert_item (table, root, uri);
- str = g_strdup_printf ("%d", tracker_class_get_id (class));
+ str = g_strdup_printf ("%" G_GINT64_FORMAT, tracker_class_get_id (class));
gvdb_hash_table_insert_statement (table, item, uri, "id", str);
g_free (str);
@@ -593,7 +593,7 @@ tracker_ontologies_write_gvdb (TrackerOntologies *ontologies,
item = gvdb_hash_table_insert_item (table, root, uri);
- str = g_strdup_printf ("%d", tracker_property_get_id (property));
+ str = g_strdup_printf ("%" G_GINT64_FORMAT, tracker_property_get_id (property));
gvdb_hash_table_insert_statement (table, item, uri, "id", str);
g_free (str);
diff --git a/src/libtracker-data/tracker-ontologies.h b/src/libtracker-data/tracker-ontologies.h
index c984b7a2e..529be25fa 100644
--- a/src/libtracker-data/tracker-ontologies.h
+++ b/src/libtracker-data/tracker-ontologies.h
@@ -83,9 +83,9 @@ TrackerNamespace * tracker_ontologies_get_namespace_by_uri (TrackerOntologies *o
TrackerOntology * tracker_ontologies_get_ontology_by_uri (TrackerOntologies *ontologies,
const gchar *namespace_uri);
const gchar* tracker_ontologies_get_uri_by_id (TrackerOntologies *ontologies,
- gint id);
+ TrackerRowid id);
void tracker_ontologies_add_id_uri_pair (TrackerOntologies *ontologies,
- gint id,
+ TrackerRowid id,
const gchar *uri);
gboolean tracker_ontologies_write_gvdb (TrackerOntologies *ontologies,
diff --git a/src/libtracker-data/tracker-property.c b/src/libtracker-data/tracker-property.c
index 7d84a7b35..0bab37b1b 100644
--- a/src/libtracker-data/tracker-property.c
+++ b/src/libtracker-data/tracker-property.c
@@ -71,7 +71,7 @@ struct _TrackerPropertyPrivate {
TrackerClass *domain_index;
TrackerClass *range;
gint weight;
- gint id;
+ TrackerRowid id;
guint use_gvdb : 1;
guint indexed : 1;
guint orig_fulltext_indexed : 1;
@@ -469,7 +469,7 @@ tracker_property_get_weight (TrackerProperty *property)
return priv->weight;
}
-gint
+TrackerRowid
tracker_property_get_id (TrackerProperty *property)
{
TrackerPropertyPrivate *priv;
@@ -879,7 +879,7 @@ tracker_property_set_weight (TrackerProperty *property,
void
tracker_property_set_id (TrackerProperty *property,
- gint value)
+ TrackerRowid value)
{
TrackerPropertyPrivate *priv;
g_return_if_fail (TRACKER_IS_PROPERTY (property));
diff --git a/src/libtracker-data/tracker-property.h b/src/libtracker-data/tracker-property.h
index 6ad6b9fda..84e98b5f5 100644
--- a/src/libtracker-data/tracker-property.h
+++ b/src/libtracker-data/tracker-property.h
@@ -82,7 +82,7 @@ TrackerClass * tracker_property_get_domain (TrackerProperty
TrackerClass * tracker_property_get_range (TrackerProperty *property);
TrackerClass ** tracker_property_get_domain_indexes (TrackerProperty *property);
gint tracker_property_get_weight (TrackerProperty *property);
-gint tracker_property_get_id (TrackerProperty *property);
+TrackerRowid tracker_property_get_id (TrackerProperty *property);
gboolean tracker_property_get_indexed (TrackerProperty *property);
TrackerProperty * tracker_property_get_secondary_index (TrackerProperty *property);
gboolean tracker_property_get_orig_fulltext_indexed(TrackerProperty *property);
@@ -116,7 +116,7 @@ void tracker_property_set_range (TrackerProperty
void tracker_property_set_weight (TrackerProperty *property,
gint value);
void tracker_property_set_id (TrackerProperty *property,
- gint value);
+ TrackerRowid value);
void tracker_property_set_indexed (TrackerProperty *property,
gboolean value);
void tracker_property_set_secondary_index (TrackerProperty *property,
diff --git a/src/libtracker-data/tracker-rowid.c b/src/libtracker-data/tracker-rowid.c
new file mode 100644
index 000000000..fc293f760
--- /dev/null
+++ b/src/libtracker-data/tracker-rowid.c
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2022 Red Hat Inc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * Author: Carlos Garnacho <carlosg@gnome.org>
+ */
+
+#include "config.h"
+
+#include "tracker-rowid.h"
+
+G_DEFINE_BOXED_TYPE (TrackerRowid, tracker_rowid,
+ tracker_rowid_copy, tracker_rowid_free)
+
+TrackerRowid *
+tracker_rowid_copy (TrackerRowid *rowid)
+{
+ return g_slice_dup (TrackerRowid, rowid);
+}
+
+void
+tracker_rowid_free (TrackerRowid *rowid)
+{
+ g_slice_free (TrackerRowid, rowid);
+}
diff --git a/src/libtracker-data/tracker-rowid.h b/src/libtracker-data/tracker-rowid.h
new file mode 100644
index 000000000..135588ecf
--- /dev/null
+++ b/src/libtracker-data/tracker-rowid.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 Red Hat Inc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * Author: Carlos Garnacho <carlosg@gnome.org>
+ */
+
+#ifndef __TRACKER_ROWID_H__
+#define __TRACKER_ROWID_H__
+
+#include <glib-object.h>
+
+typedef gint64 TrackerRowid;
+
+#define TRACKER_ROWID_TYPE (tracker_rowid_get_type ());
+#define tracker_rowid_equal g_int64_equal
+#define tracker_rowid_hash g_int64_hash
+
+GType tracker_rowid_get_type (void) G_GNUC_CONST;
+
+TrackerRowid * tracker_rowid_copy (TrackerRowid *rowid);
+void tracker_rowid_free (TrackerRowid *rowid);
+
+#endif /* __TRACKER_ROWID_H__ */
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index 4a504e939..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 */
@@ -1112,7 +1117,7 @@ _prepend_path_element (TrackerSparql *sparql,
_append_string (sparql, "WHERE ");
}
- _append_string_printf (sparql, "predicate != %d ",
+ _append_string_printf (sparql, "predicate != %" G_GINT64_FORMAT " ",
tracker_property_get_id (path_elem->data.property));
_append_string (sparql, ") ");
break;
@@ -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, ", '\"', ' ') || '\"*'");
@@ -2752,7 +2759,8 @@ translate_Update (TrackerSparql *sparql,
if (!sparql->current_state->blank_node_map) {
sparql->current_state->blank_node_map =
g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_free);
+ g_free,
+ (GDestroyNotify) tracker_rowid_free);
}
if (_check_in_rule (sparql, NAMED_RULE_Update1)) {
diff --git a/src/libtracker-data/tracker-vtab-triples.c b/src/libtracker-data/tracker-vtab-triples.c
index e6316b3a5..469a6f02e 100644
--- a/src/libtracker-data/tracker-vtab-triples.c
+++ b/src/libtracker-data/tracker-vtab-triples.c
@@ -22,6 +22,7 @@
#include "tracker-ontologies.h"
#include "tracker-vtab-triples.h"
+#include "tracker-rowid.h"
/* Avoid casts everywhere. */
#define sqlite3_value_text(x) ((const gchar *) sqlite3_value_text(x))
@@ -325,13 +326,16 @@ collect_graphs (TrackerTriplesCursor *cursor)
if (rc != SQLITE_OK)
return rc;
- cursor->query_graphs = g_hash_table_new_full (NULL, NULL, NULL, g_free);
+ cursor->query_graphs = g_hash_table_new_full (tracker_rowid_hash,
+ tracker_rowid_equal,
+ (GDestroyNotify) tracker_rowid_free,
+ g_free);
while ((rc = sqlite3_step (stmt)) == SQLITE_ROW) {
const gchar *uri;
- gint id;
+ TrackerRowid id;
- id = sqlite3_column_int (stmt, 0);
+ id = sqlite3_column_int64 (stmt, 0);
uri = sqlite3_column_text (stmt, 1);
if (cursor->match.graph) {
@@ -343,7 +347,7 @@ collect_graphs (TrackerTriplesCursor *cursor)
}
g_hash_table_insert (cursor->query_graphs,
- GINT_TO_POINTER (id),
+ tracker_rowid_copy (&id),
g_strdup (uri));
}
@@ -428,9 +432,11 @@ bind_arg (sqlite3_stmt *stmt,
static gboolean
iterate_next_stmt (TrackerTriplesCursor *cursor,
const gchar **graph,
- gint *graph_id,
+ TrackerRowid *graph_id,
TrackerProperty **property)
{
+ TrackerRowid *id;
+
while (cursor->properties && !cursor->graphs) {
/* Iterate to next property, and redo graph list */
cursor->properties = g_list_remove (cursor->properties,
@@ -442,9 +448,10 @@ iterate_next_stmt (TrackerTriplesCursor *cursor,
return FALSE;
*property = cursor->properties->data;
- *graph_id = GPOINTER_TO_INT (cursor->graphs->data);
- *graph = g_hash_table_lookup (cursor->query_graphs,
- cursor->graphs->data);
+
+ id = cursor->graphs->data;
+ *graph_id = *id;
+ *graph = g_hash_table_lookup (cursor->query_graphs, id);
cursor->graphs = g_list_remove (cursor->graphs, cursor->graphs->data);
@@ -456,7 +463,7 @@ init_stmt (TrackerTriplesCursor *cursor)
{
TrackerProperty *property;
const gchar *graph;
- gint graph_id;
+ TrackerRowid graph_id;
GString *sql;
int rc;
@@ -468,7 +475,7 @@ init_stmt (TrackerTriplesCursor *cursor)
sql = g_string_new (NULL);
g_string_append_printf (sql,
- "SELECT %d, t.ID, "
+ "SELECT %" G_GINT64_FORMAT ", t.ID, "
" (SELECT ID From Resource WHERE Uri = \"%s\"), "
" %s, "
" %d "
diff --git a/src/libtracker-sparql/direct/tracker-direct-batch.c b/src/libtracker-sparql/direct/tracker-direct-batch.c
index 748836456..fa3cf324a 100644
--- a/src/libtracker-sparql/direct/tracker-direct-batch.c
+++ b/src/libtracker-sparql/direct/tracker-direct-batch.c
@@ -198,7 +198,8 @@ tracker_direct_batch_update (TrackerDirectBatch *batch,
priv = tracker_direct_batch_get_instance_private (batch);
data = tracker_data_manager_get_data (data_manager);
- bnodes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ bnodes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
+ (GDestroyNotify) tracker_rowid_free);
tracker_data_begin_transaction (data, &inner_error);
if (inner_error)
diff --git a/src/libtracker-sparql/direct/tracker-direct.c b/src/libtracker-sparql/direct/tracker-direct.c
index 8317f40d3..4487749bb 100644
--- a/src/libtracker-sparql/direct/tracker-direct.c
+++ b/src/libtracker-sparql/direct/tracker-direct.c
@@ -535,7 +535,9 @@ get_event_cache_ht (TrackerNotifier *notifier)
events = g_object_get_qdata (G_OBJECT (notifier), tracker_direct_notifier_quark ());
if (!events) {
- events = g_hash_table_new_full (NULL, NULL, NULL,
+ events = g_hash_table_new_full (tracker_rowid_hash,
+ tracker_rowid_equal,
+ (GDestroyNotify) tracker_rowid_free,
(GDestroyNotify) _tracker_notifier_event_cache_free);
g_object_set_qdata_full (G_OBJECT (notifier), tracker_direct_notifier_quark (),
events, (GDestroyNotify) g_hash_table_unref);
@@ -546,18 +548,18 @@ get_event_cache_ht (TrackerNotifier *notifier)
static TrackerNotifierEventCache *
lookup_event_cache (TrackerNotifier *notifier,
- gint graph_id,
+ TrackerRowid graph_id,
const gchar *graph)
{
TrackerNotifierEventCache *cache;
GHashTable *events;
events = get_event_cache_ht (notifier);
- cache = g_hash_table_lookup (events, GINT_TO_POINTER (graph_id));
+ cache = g_hash_table_lookup (events, &graph_id);
if (!cache) {
cache = _tracker_notifier_event_cache_new (notifier, graph);
- g_hash_table_insert (events, GINT_TO_POINTER (graph_id), cache);
+ g_hash_table_insert (events, tracker_rowid_copy (&graph_id), cache);
}
return cache;
@@ -567,11 +569,11 @@ lookup_event_cache (TrackerNotifier *notifier,
* (always the same one though), handle with care.
*/
static void
-insert_statement_cb (gint64 graph_id,
- const gchar *graph,
- gint64 subject_id,
- gint64 predicate_id,
- gint64 object_id,
+insert_statement_cb (TrackerRowid graph_id,
+ const gchar *graph,
+ TrackerRowid subject_id,
+ TrackerRowid predicate_id,
+ TrackerRowid object_id,
GPtrArray *rdf_types,
gpointer user_data)
{
@@ -611,11 +613,11 @@ insert_statement_cb (gint64 graph_id,
}
static void
-delete_statement_cb (gint64 graph_id,
- const gchar *graph,
- gint64 subject_id,
- gint64 predicate_id,
- gint64 object_id,
+delete_statement_cb (TrackerRowid graph_id,
+ const gchar *graph,
+ TrackerRowid subject_id,
+ TrackerRowid predicate_id,
+ TrackerRowid object_id,
GPtrArray *rdf_types,
gpointer user_data)
{