![]() |
![]() |
![]() |
![]() |
First, a TrackerSparqlConnection
object must be acquired with
tracker_sparql_connection_get
.
Then, a query can be launched either synchronously (tracker_sparql_connection_query
)
or asynchronously (tracker_sparql_connection_query_async
).
If launched asynchronously, the results of the query can be obtained with
tracker_sparql_connection_query_finish
.
If the query was successful, a TrackerSparqlCursor
will be available. You can now iterate the results of the query both synchronously (with
tracker_sparql_cursor_next
) or
asynchronously (with
tracker_sparql_cursor_next_async
and
tracker_sparql_cursor_next_finish
)
Once you end up with the query, remember to call g_object_unref
for the TrackerSparqlCursor. And the same applies to the
TrackerSparqlConnection when no longer needed.
The following program shows how Read-Only queries can be done to the store in a synchronous way:
#include <tracker-sparql.h> int main (int argc, const char **argv) { GError *error = NULL; TrackerSparqlConnection *connection; TrackerSparqlCursor *cursor; const gchar *query = "SELECT nie:url(?u) WHERE { ?u a nfo:FileDataObject }"; connection =tracker_sparql_connection_get
(NULL, &error); if (!connection) { g_printerr ("Couldn't obtain a connection to the Tracker store: %s", error ? error->message : "unknown error"); g_clear_error (&error); return 1; } /* Make a synchronous query to the store */ cursor =tracker_sparql_connection_query
(connection, query, NULL, &error); if (error) { /* Some error happened performing the query, not good */ g_printerr ("Couldn't query the Tracker Store: '%s'", error ? error->message : "unknown error"); g_clear_error (&error); return 1; } /* Check results... */ if (!cursor) { g_print ("No results found :-/\n"); } else { gint i = 0; /* Iterate, synchronously, the results... */ while (tracker_sparql_cursor_next
(cursor, NULL, &error)) { g_print ("Result [%d]: %s\n", i++,tracker_sparql_cursor_get_string
(cursor, 0, NULL)); } g_print ("A total of '%d' results were found\n", i); g_object_unref (cursor); } g_object_unref (connection); return 0; }