diff options
Diffstat (limited to 'src/libtracker-sparql/tracker-serializer-turtle.c')
-rw-r--r-- | src/libtracker-sparql/tracker-serializer-turtle.c | 69 |
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); |