[tracker/wip/carlosg/insert-perf: 6/13] libtracker-data: Unify the code assigning IDs to resources




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]