[tracker/wip/carlosg/deserialize-api: 2/17] libtracker-sparql: Add internal API to load RDF from a deserializer
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/deserialize-api: 2/17] libtracker-sparql: Add internal API to load RDF from a deserializer
- Date: Thu, 30 Jun 2022 21:57:56 +0000 (UTC)
commit 5f15c513b92af2df0ed4796099c01fe1456ce39f
Author: Carlos Garnacho <carlosg gnome org>
Date: Sat May 7 23:52:22 2022 +0200
libtracker-sparql: Add internal API to load RDF from a deserializer
This API takes a deserializer (really, a cursor), and loads into the
database. The former Turtle oriented API has been rewritten on top
of this.
src/libtracker-sparql/core/tracker-data-update.c | 68 +++++++++++++++---------
src/libtracker-sparql/core/tracker-data-update.h | 8 +++
2 files changed, 51 insertions(+), 25 deletions(-)
---
diff --git a/src/libtracker-sparql/core/tracker-data-update.c
b/src/libtracker-sparql/core/tracker-data-update.c
index 0ada33356..72e9801f6 100644
--- a/src/libtracker-sparql/core/tracker-data-update.c
+++ b/src/libtracker-sparql/core/tracker-data-update.c
@@ -2854,44 +2854,36 @@ tracker_data_update_sparql_blank (TrackerData *data,
return update_sparql (data, update, TRUE, error);
}
-void
-tracker_data_load_turtle_file (TrackerData *data,
- GFile *file,
- const gchar *graph,
- GError **error)
+gboolean
+tracker_data_load_from_deserializer (TrackerData *data,
+ TrackerDeserializer *deserializer,
+ const gchar *graph,
+ const gchar *location,
+ GError **error)
{
- TrackerSparqlCursor *deserializer;
+ TrackerSparqlCursor *cursor = TRACKER_SPARQL_CURSOR (deserializer);
TrackerOntologies *ontologies;
GError *inner_error = NULL;
const gchar *subject_str, *predicate_str, *object_str;
goffset last_parsed_line_no = 0, last_parsed_column_no = 0;
- gchar *ontology_uri;
-
- deserializer = tracker_deserializer_new_for_file (file, NULL, error);
- if (!deserializer)
- return;
ontologies = tracker_data_manager_get_ontologies (data->manager);
- while (tracker_sparql_cursor_next (deserializer, NULL, &inner_error)) {
+ while (tracker_sparql_cursor_next (cursor, NULL, &inner_error)) {
TrackerProperty *predicate;
GValue object = G_VALUE_INIT;
TrackerRowid subject;
- subject_str = tracker_sparql_cursor_get_string (deserializer,
+ subject_str = tracker_sparql_cursor_get_string (cursor,
TRACKER_RDF_COL_SUBJECT,
NULL);
- predicate_str = tracker_sparql_cursor_get_string (deserializer,
+ predicate_str = tracker_sparql_cursor_get_string (cursor,
TRACKER_RDF_COL_PREDICATE,
NULL);
- object_str = tracker_sparql_cursor_get_string (deserializer,
+ object_str = tracker_sparql_cursor_get_string (cursor,
TRACKER_RDF_COL_OBJECT,
NULL);
- tracker_deserializer_get_parser_location (TRACKER_DESERIALIZER (deserializer),
- &last_parsed_line_no,
- &last_parsed_column_no);
-
predicate = tracker_ontologies_get_property_by_uri (ontologies, predicate_str);
if (predicate == NULL) {
g_set_error (&inner_error, TRACKER_SPARQL_ERROR,
@@ -2936,18 +2928,44 @@ tracker_data_load_turtle_file (TrackerData *data,
goto failed;
}
- g_clear_object (&deserializer);
+ if (inner_error)
+ goto failed;
- return;
+ return TRUE;
failed:
- g_clear_object (&deserializer);
+ tracker_deserializer_get_parser_location (deserializer,
+ &last_parsed_line_no,
+ &last_parsed_column_no);
- ontology_uri = g_file_get_uri (file);
g_propagate_prefixed_error (error, inner_error,
"%s:%" G_GOFFSET_FORMAT ":%" G_GOFFSET_FORMAT ": ",
- ontology_uri, last_parsed_line_no, last_parsed_column_no);
- g_free (ontology_uri);
+ location, last_parsed_line_no, last_parsed_column_no);
+
+ return FALSE;
+}
+
+void
+tracker_data_load_turtle_file (TrackerData *data,
+ GFile *file,
+ const gchar *graph,
+ GError **error)
+{
+ TrackerSparqlCursor *deserializer;
+ gchar *uri;
+
+ deserializer = tracker_deserializer_new_for_file (file, NULL, error);
+ if (!deserializer)
+ return;
+
+ uri = g_file_get_uri (file);
+ tracker_data_load_from_deserializer (data,
+ TRACKER_DESERIALIZER (deserializer),
+ graph,
+ uri,
+ error);
+ g_object_unref (deserializer);
+ g_free (uri);
}
TrackerRowid
diff --git a/src/libtracker-sparql/core/tracker-data-update.h
b/src/libtracker-sparql/core/tracker-data-update.h
index f11d227b7..d270e6003 100644
--- a/src/libtracker-sparql/core/tracker-data-update.h
+++ b/src/libtracker-sparql/core/tracker-data-update.h
@@ -32,6 +32,8 @@ typedef struct _TrackerDataClass TrackerDataClass;
#include "tracker-db-interface.h"
#include "tracker-data-manager.h"
+#include <libtracker-sparql/tracker-deserializer.h>
+
#define TRACKER_TYPE_DATA (tracker_data_get_type ())
#define TRACKER_DATA(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TRACKER_TYPE_DATA, TrackerData))
#define TRACKER_DATA_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TRACKER_TYPE_DATA, TrackerDataClass))
@@ -89,6 +91,12 @@ void tracker_data_update_buffer_flush (TrackerData *
GError **error);
void tracker_data_update_buffer_might_flush (TrackerData *data,
GError **error);
+
+gboolean tracker_data_load_from_deserializer (TrackerData *data,
+ TrackerDeserializer *deserializer,
+ const gchar *graph,
+ const gchar *location,
+ GError **error);
void tracker_data_load_turtle_file (TrackerData *data,
GFile *file,
const gchar *graph,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]