[tracker/wip/carlosg/insert-perf: 6/13] libtracker-data: Unify the code assigning IDs to resources
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/insert-perf: 6/13] libtracker-data: Unify the code assigning IDs to resources
- Date: Tue, 1 Dec 2020 12:24:50 +0000 (UTC)
commit 980e5b995b56dbb361e3cd35033e4e4762b8d41d
Author: Carlos Garnacho <carlosg gnome org>
Date: Sat Nov 28 19:21:51 2020 +0100
libtracker-data: Unify the code assigning IDs to resources
We want to get rid of the distinct IDs for ontology vs regular updates.
Make them unique, so it's all handled in a single place.
src/libtracker-data/tracker-data-manager.c | 70 +++++-------------------------
1 file changed, 12 insertions(+), 58 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index bea674b3e..426fef041 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -706,7 +706,6 @@ tracker_data_ontology_load_statement (TrackerDataManager *manager,
const gchar *subject,
const gchar *predicate,
const gchar *object,
- gint *max_id,
gboolean in_update,
GHashTable *classes,
GHashTable *properties,
@@ -735,8 +734,8 @@ tracker_data_ontology_load_statement (TrackerDataManager *manager,
return;
}
- subject_id = ++(*max_id);
-
+ subject_id = tracker_data_update_ensure_resource (manager->data_update,
+ subject, NULL);
class = tracker_class_new (FALSE);
tracker_class_set_ontologies (class, manager->ontologies);
tracker_class_set_is_new (class, in_update);
@@ -779,8 +778,9 @@ tracker_data_ontology_load_statement (TrackerDataManager *manager,
return;
}
- subject_id = ++(*max_id);
-
+ subject_id = tracker_data_update_ensure_resource (manager->data_update,
+ subject,
+ NULL);
property = tracker_property_new (FALSE);
tracker_property_set_ontologies (property, manager->ontologies);
tracker_property_set_is_new (property, in_update);
@@ -1756,7 +1756,6 @@ tracker_data_ontology_free_seen (GPtrArray *seen)
static void
load_ontology_file (TrackerDataManager *manager,
GFile *file,
- gint *max_id,
gboolean in_update,
GPtrArray *seen_classes,
GPtrArray *seen_properties,
@@ -1786,7 +1785,7 @@ load_ontology_file (TrackerDataManager *manager,
tracker_data_ontology_load_statement (manager, ontology_uri,
subject, predicate, object,
- max_id, in_update, NULL, NULL,
+ in_update, NULL, NULL,
seen_classes, seen_properties, &ontology_error);
if (ontology_error) {
@@ -3539,39 +3538,6 @@ get_ontologies (TrackerDataManager *manager,
return sorted;
}
-
-static gint
-get_new_service_id (TrackerDBInterface *iface)
-{
- TrackerDBCursor *cursor = NULL;
- TrackerDBStatement *stmt;
- gint max_service_id = 0;
- GError *error = NULL;
-
- /* Don't intermix this thing with tracker_data_update_get_new_service_id,
- * if you use this, know what you are doing! */
- stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
- "SELECT MAX(ID) AS A FROM Resource WHERE ID <= %d",
TRACKER_ONTOLOGIES_MAX_ID);
-
- if (stmt) {
- cursor = tracker_db_statement_start_cursor (stmt, &error);
- g_object_unref (stmt);
- }
-
- if (cursor) {
- if (tracker_db_cursor_iter_next (cursor, NULL, &error)) {
- max_service_id = tracker_db_cursor_get_int (cursor, 0);
- }
- g_object_unref (cursor);
- }
-
- if (error) {
- g_error ("Unable to get max ID, aborting: %s", error->message);
- }
-
- return ++max_service_id;
-}
-
static void
tracker_data_manager_update_status (TrackerDataManager *manager,
const gchar *status)
@@ -4021,7 +3987,6 @@ tracker_data_manager_initable_init (GInitable *initable,
GHashTable *ontos_table;
GHashTable *graphs;
GList *sorted = NULL, *l;
- gint max_id = 0;
gboolean read_only;
GError *internal_error = NULL;
@@ -4100,6 +4065,12 @@ tracker_data_manager_initable_init (GInitable *initable,
return FALSE;
}
+ tracker_data_begin_ontology_transaction (manager->data_update, &internal_error);
+ if (internal_error) {
+ g_propagate_error (error, internal_error);
+ return FALSE;
+ }
+
for (l = sorted; l; l = l->next) {
GError *ontology_error = NULL;
GFile *ontology_file = l->data;
@@ -4108,7 +4079,6 @@ tracker_data_manager_initable_init (GInitable *initable,
TRACKER_NOTE (ONTOLOGY_CHANGES, g_message ("Loading ontology %s", uri));
load_ontology_file (manager, ontology_file,
- &max_id,
FALSE,
NULL,
NULL,
@@ -4121,12 +4091,6 @@ tracker_data_manager_initable_init (GInitable *initable,
g_free (uri);
}
- tracker_data_begin_ontology_transaction (manager->data_update, &internal_error);
- if (internal_error) {
- g_propagate_error (error, internal_error);
- return FALSE;
- }
-
if (!create_base_tables (manager, iface, error)) {
return FALSE;
}
@@ -4352,14 +4316,9 @@ tracker_data_manager_initable_init (GInitable *initable,
transaction_started = TRUE;
}
- if (max_id == 0) {
- /* In case of first-time, this wont start at zero */
- max_id = get_new_service_id (iface);
- }
/* load ontology from files into memory, set all new's
* is_new to TRUE */
load_ontology_file (manager, ontology_file,
- &max_id,
TRUE,
seen_classes,
seen_properties,
@@ -4414,14 +4373,9 @@ tracker_data_manager_initable_init (GInitable *initable,
transaction_started = TRUE;
}
- if (max_id == 0) {
- /* In case of first-time, this wont start at zero */
- max_id = get_new_service_id (iface);
- }
/* load ontology from files into memory, set all new's
* is_new to TRUE */
load_ontology_file (manager, ontology_file,
- &max_id,
TRUE,
seen_classes,
seen_properties,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]