summaryrefslogtreecommitdiff
path: root/src/libtracker-sparql/tracker-serializer-turtle.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtracker-sparql/tracker-serializer-turtle.c')
-rw-r--r--src/libtracker-sparql/tracker-serializer-turtle.c69
1 files changed, 33 insertions, 36 deletions
diff --git a/src/libtracker-sparql/tracker-serializer-turtle.c b/src/libtracker-sparql/tracker-serializer-turtle.c
index fc60f2325..2202c9c1b 100644
--- a/src/libtracker-sparql/tracker-serializer-turtle.c
+++ b/src/libtracker-sparql/tracker-serializer-turtle.c
@@ -41,7 +41,7 @@ struct _TrackerTriple
struct _TrackerSerializerTurtle
{
TrackerSerializer parent_instance;
- TrackerTriple *last_triple;
+ TrackerTriple last_triple;
GString *data;
guint stream_closed : 1;
guint cursor_started : 1;
@@ -61,15 +61,10 @@ typedef enum
TRACKER_TRIPLE_BREAK_OBJECT,
} TrackerTripleBreak;
-static TrackerTriple *
-tracker_triple_new_from_cursor (TrackerSparqlCursor *cursor)
+static void
+tracker_triple_init_from_cursor (TrackerTriple *triple,
+ TrackerSparqlCursor *cursor)
{
- TrackerTriple *triple;
-
- if (tracker_sparql_cursor_get_n_columns (cursor) < 3)
- return NULL;
-
- triple = g_new0 (TrackerTriple, 1);
triple->subject_type = tracker_sparql_cursor_get_value_type (cursor, 0);
triple->object_type = tracker_sparql_cursor_get_value_type (cursor, 2);
triple->subject = g_strdup (tracker_sparql_cursor_get_string (cursor, 0, NULL));
@@ -89,24 +84,21 @@ tracker_triple_new_from_cursor (TrackerSparqlCursor *cursor)
triple->object_type = TRACKER_SPARQL_VALUE_TYPE_BLANK_NODE;
}
}
-
- return triple;
}
static void
-tracker_triple_free (TrackerTriple *triple)
+tracker_triple_clear (TrackerTriple *triple)
{
- g_free (triple->subject);
- g_free (triple->predicate);
- g_free (triple->object);
- g_free (triple);
+ g_clear_pointer (&triple->subject, g_free);
+ g_clear_pointer (&triple->predicate, g_free);
+ g_clear_pointer (&triple->object, g_free);
}
static TrackerTripleBreak
tracker_triple_get_break (TrackerTriple *last,
TrackerTriple *cur)
{
- if (!last)
+ if (!last->subject)
return TRACKER_TRIPLE_BREAK_NONE;
if (g_strcmp0 (last->subject, cur->subject) != 0)
@@ -139,9 +131,11 @@ print_value (GString *str,
shortname = tracker_namespace_manager_compress_uri (namespaces, value);
if (shortname) {
- g_string_append_printf (str, "%s", shortname);
+ g_string_append (str, shortname);
} else {
- g_string_append_printf (str, "<%s>", value);
+ g_string_append_c (str, '<');
+ g_string_append (str, value);
+ g_string_append_c (str, '>');
}
g_free (shortname);
@@ -151,7 +145,8 @@ print_value (GString *str,
gchar *bnode_label;
bnode_label = g_strdelimit (g_strdup (value), ":", '_');
- g_string_append_printf (str, "_:%s", bnode_label);
+ g_string_append (str, "_:");
+ g_string_append (str, bnode_label);
g_free (bnode_label);
break;
}
@@ -160,8 +155,9 @@ print_value (GString *str,
gchar *escaped;
escaped = tracker_sparql_escape_string (value);
- g_string_append_printf (str, "\"%s\"",
- escaped);
+ g_string_append_c (str, '"');
+ g_string_append (str, escaped);
+ g_string_append_c (str, '"');
g_free (escaped);
break;
}
@@ -181,14 +177,14 @@ print_value (GString *str,
static gboolean
serialize_up_to_size (TrackerSerializerTurtle *serializer_ttl,
- gsize size,
- GCancellable *cancellable,
- GError **error)
+ gsize size,
+ GCancellable *cancellable,
+ GError **error)
{
TrackerSparqlCursor *cursor;
TrackerNamespaceManager *namespaces;
GError *inner_error = NULL;
- TrackerTriple *cur;
+ TrackerTriple cur;
if (!serializer_ttl->data)
serializer_ttl->data = g_string_new (NULL);
@@ -201,7 +197,8 @@ serialize_up_to_size (TrackerSerializerTurtle *serializer_ttl,
str = tracker_namespace_manager_print_turtle (namespaces);
- g_string_append_printf (serializer_ttl->data, "%s\n", str);
+ g_string_append (serializer_ttl->data, str);
+ g_string_append_c (serializer_ttl->data, '\n');
g_free (str);
serializer_ttl->head_printed = TRUE;
}
@@ -222,9 +219,9 @@ serialize_up_to_size (TrackerSerializerTurtle *serializer_ttl,
serializer_ttl->cursor_started = TRUE;
}
- cur = tracker_triple_new_from_cursor (cursor);
+ tracker_triple_init_from_cursor (&cur, cursor);
- if (!cur) {
+ if (!cur.subject || !cur.predicate || !cur.object) {
g_set_error (error,
TRACKER_SPARQL_ERROR,
TRACKER_SPARQL_ERROR_INTERNAL,
@@ -232,12 +229,12 @@ serialize_up_to_size (TrackerSerializerTurtle *serializer_ttl,
return FALSE;
}
- br = tracker_triple_get_break (serializer_ttl->last_triple, cur);
+ br = tracker_triple_get_break (&serializer_ttl->last_triple, &cur);
if (br <= TRACKER_TRIPLE_BREAK_SUBJECT) {
if (br == TRACKER_TRIPLE_BREAK_SUBJECT)
g_string_append (serializer_ttl->data, " .\n\n");
- print_value (serializer_ttl->data, cur->subject, cur->subject_type, namespaces);
+ print_value (serializer_ttl->data, cur.subject, cur.subject_type, namespaces);
}
if (br <= TRACKER_TRIPLE_BREAK_PREDICATE) {
@@ -246,7 +243,7 @@ serialize_up_to_size (TrackerSerializerTurtle *serializer_ttl,
else
g_string_append_c (serializer_ttl->data, ' ');
- print_value (serializer_ttl->data, cur->predicate,
+ print_value (serializer_ttl->data, cur.predicate,
TRACKER_SPARQL_VALUE_TYPE_URI, namespaces);
}
@@ -255,12 +252,12 @@ serialize_up_to_size (TrackerSerializerTurtle *serializer_ttl,
g_string_append (serializer_ttl->data, ",");
g_string_append_c (serializer_ttl->data, ' ');
- print_value (serializer_ttl->data, cur->object, cur->object_type, namespaces);
+ print_value (serializer_ttl->data, cur.object, cur.object_type, namespaces);
}
serializer_ttl->has_triples = TRUE;
- g_clear_pointer (&serializer_ttl->last_triple, tracker_triple_free);
- serializer_ttl->last_triple = cur;
+ tracker_triple_clear (&serializer_ttl->last_triple);
+ memcpy (&serializer_ttl->last_triple, &cur, sizeof (TrackerTriple));
}
/* Print dot for the last triple */
@@ -309,7 +306,7 @@ tracker_serializer_turtle_close (GInputStream *istream,
{
TrackerSerializerTurtle *serializer_ttl = TRACKER_SERIALIZER_TURTLE (istream);
- g_clear_pointer (&serializer_ttl->last_triple, tracker_triple_free);
+ tracker_triple_clear (&serializer_ttl->last_triple);
if (serializer_ttl->data) {
g_string_free (serializer_ttl->data, TRUE);