[tracker/wip/carlosg/sparql1.1: 151/201] libtracker-data: Implement TTL file loading in tracker-data-update.c



commit c1663206bb07b041e3dad6217206f0ae760c81c7
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Jul 9 11:13:02 2019 +0200

    libtracker-data: Implement TTL file loading in tracker-data-update.c
    
    And move this piece of logic out of TrackerTurtleReader, since the logic
    starts getting outside of the "reading TTL file" context. This also
    works around vala not dealing correctly with GBytes, which we use as the
    object argument in tracker_data_*_statement() now.

 src/libtracker-data/libtracker-data.vapi       | 10 ++--
 src/libtracker-data/tracker-data-update.c      | 64 +++++++++++++++++++++++++-
 src/libtracker-data/tracker-turtle-reader.vala | 24 ----------
 tests/libtracker-data/tracker-backup-test.c    |  2 +-
 tests/libtracker-data/tracker-ontology-test.c  |  2 +-
 tests/libtracker-data/tracker-sparql-test.c    |  2 +-
 6 files changed, 70 insertions(+), 34 deletions(-)
---
diff --git a/src/libtracker-data/libtracker-data.vapi b/src/libtracker-data/libtracker-data.vapi
index 4327be918..5f0c98391 100644
--- a/src/libtracker-data/libtracker-data.vapi
+++ b/src/libtracker-data/libtracker-data.vapi
@@ -191,11 +191,11 @@ namespace Tracker {
                public void update_sparql (string update) throws Sparql.Error;
                public GLib.Variant update_sparql_blank (string update) throws Sparql.Error;
                public void load_turtle_file (GLib.File file) throws Sparql.Error;
-               public void delete_statement (string? graph, string subject, string predicate, string object) 
throws Sparql.Error, DateError;
-               public void update_statement (string? graph, string subject, string predicate, string? 
object) throws Sparql.Error, DateError;
-               public void insert_statement (string? graph, string subject, string predicate, string object) 
throws Sparql.Error, DateError;
-               public void insert_statement_with_uri (string? graph, string subject, string predicate, 
string object) throws Sparql.Error;
-               public void insert_statement_with_string (string? graph, string subject, string predicate, 
string object) throws Sparql.Error, DateError;
+               public void delete_statement (string? graph, string subject, string predicate, GLib.Bytes 
object) throws Sparql.Error, DateError;
+               public void update_statement (string? graph, string subject, string predicate, GLib.Bytes? 
object) throws Sparql.Error, DateError;
+               public void insert_statement (string? graph, string subject, string predicate, GLib.Bytes 
object) throws Sparql.Error, DateError;
+               public void insert_statement_with_uri (string? graph, string subject, string predicate, 
GLib.Bytes object) throws Sparql.Error;
+               public void insert_statement_with_string (string? graph, string subject, string predicate, 
GLib.Bytes object) throws Sparql.Error, DateError;
                public void update_buffer_flush () throws DBInterfaceError;
                public void update_buffer_might_flush () throws DBInterfaceError;
                public void sync ();
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index 9a3bb1fce..632336d5d 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -3099,9 +3099,69 @@ tracker_data_load_turtle_file (TrackerData  *data,
                                const gchar  *graph,
                                GError      **error)
 {
-       g_return_if_fail (G_IS_FILE (file));
+       TrackerTurtleReader *reader = NULL;
+       GError *inner_error = NULL;
+       gboolean in_transaction = FALSE;
+
+       tracker_data_begin_transaction (data, &inner_error);
+       if (inner_error)
+               goto failed;
+
+       in_transaction = TRUE;
+       reader = tracker_turtle_reader_new (file, &inner_error);
+       if (inner_error)
+               goto failed;
+
+       while (tracker_turtle_reader_next (reader, &inner_error)) {
+               const gchar *object_str;
+               GBytes *object;
+
+               object_str = tracker_turtle_reader_get_object (reader);
+               object = g_bytes_new (object_str, strlen (object_str) + 1);
+
+               if (tracker_turtle_reader_get_object_is_uri (reader)) {
+                       tracker_data_insert_statement_with_uri (data, graph,
+                                                               tracker_turtle_reader_get_subject (reader),
+                                                               tracker_turtle_reader_get_predicate (reader),
+                                                               object,
+                                                               &inner_error);
+               } else {
+                       tracker_data_insert_statement_with_string (data, graph,
+                                                                  tracker_turtle_reader_get_subject (reader),
+                                                                  tracker_turtle_reader_get_predicate 
(reader),
+                                                                  object,
+                                                                  &inner_error);
+               }
+
+               g_bytes_unref (object);
+
+               if (inner_error)
+                       goto failed;
+
+               tracker_data_update_buffer_might_flush (data, &inner_error);
+
+               if (inner_error)
+                       goto failed;
+       }
+
+       if (inner_error)
+               goto failed;
+
+       tracker_data_commit_transaction (data, &inner_error);
+       if (inner_error)
+               goto failed;
+
+       g_clear_object (&reader);
+
+       return;
+
+failed:
+       if (in_transaction)
+               tracker_data_rollback_transaction (data);
+
+       g_clear_object (&reader);
 
-       tracker_turtle_reader_load (file, data, graph, error);
+       g_propagate_error (error, inner_error);
 }
 
 gint
diff --git a/src/libtracker-data/tracker-turtle-reader.vala b/src/libtracker-data/tracker-turtle-reader.vala
index 198467418..788eb571d 100644
--- a/src/libtracker-data/tracker-turtle-reader.vala
+++ b/src/libtracker-data/tracker-turtle-reader.vala
@@ -381,30 +381,6 @@ public class Tracker.TurtleReader : Object {
                }
        }
 
-       public static void load (File file, Data.Update data, string? graph) throws Error, FileError, 
Sparql.Error, DateError, DBInterfaceError {
-               try {
-                       data.begin_transaction ();
-
-                       var reader = new TurtleReader (file);
-                       while (reader.next ()) {
-                               if (reader.object_is_uri) {
-                                       data.insert_statement_with_uri (graph, reader.subject, 
reader.predicate, reader.object);
-                               } else {
-                                       data.insert_statement_with_string (graph, reader.subject, 
reader.predicate, reader.object);
-                               }
-                               data.update_buffer_might_flush ();
-                       }
-
-                       data.commit_transaction ();
-               } catch (Sparql.Error e) {
-                       data.rollback_transaction ();
-                       throw e;
-               } catch (DBInterfaceError e) {
-                       data.rollback_transaction ();
-                       throw e;
-               }
-       }
-
        [CCode (cname = "uuid_generate")]
        public extern static void uuid_generate ([CCode (array_length = false)] uchar[] uuid);
 }
diff --git a/tests/libtracker-data/tracker-backup-test.c b/tests/libtracker-data/tracker-backup-test.c
index 0079f9c0a..a14549680 100644
--- a/tests/libtracker-data/tracker-backup-test.c
+++ b/tests/libtracker-data/tracker-backup-test.c
@@ -134,7 +134,7 @@ test_backup_and_restore_helper (const gchar *db_location,
        if (g_file_test (data_filename, G_FILE_TEST_IS_REGULAR)) {
                GFile *file = g_file_new_for_path (data_filename);
                data_update = tracker_data_manager_get_data (manager);
-               tracker_turtle_reader_load (file, data_update, NULL, &error);
+               tracker_data_load_turtle_file (data_update, file, NULL, &error);
                g_assert_no_error (error);
                g_object_unref (file);
        } else {
diff --git a/tests/libtracker-data/tracker-ontology-test.c b/tests/libtracker-data/tracker-ontology-test.c
index 897e97170..11a0e5eaa 100644
--- a/tests/libtracker-data/tracker-ontology-test.c
+++ b/tests/libtracker-data/tracker-ontology-test.c
@@ -239,7 +239,7 @@ test_query (TestInfo      *test_info,
        data_filename = g_strconcat (data_prefix, ".ttl", NULL);
        file = g_file_new_for_path (data_filename);
        data_update = tracker_data_manager_get_data (manager);
-       tracker_turtle_reader_load (file, data_update, NULL, &error);
+       tracker_data_load_turtle_file (data_update, file, NULL, &error);
        g_assert_no_error (error);
        g_object_unref (file);
 
diff --git a/tests/libtracker-data/tracker-sparql-test.c b/tests/libtracker-data/tracker-sparql-test.c
index cd04119af..69dcbeeb3 100644
--- a/tests/libtracker-data/tracker-sparql-test.c
+++ b/tests/libtracker-data/tracker-sparql-test.c
@@ -312,7 +312,7 @@ test_sparql_query (TestInfo      *test_info,
        data_filename = g_strconcat (data_prefix, ".ttl", NULL);
        if (g_file_test (data_filename, G_FILE_TEST_IS_REGULAR)) {
                GFile *file = g_file_new_for_path (data_filename);
-               tracker_turtle_reader_load (file, data_update, NULL, &error);
+               tracker_data_load_turtle_file (data_update, file, NULL, &error);
                g_assert_no_error (error);
                g_object_unref (file);
        } else {


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