![]() |
![]() |
![]() |
![]() |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#include <libtracker-sparql/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_bus_new ("org.freedesktop.Tracker3.Miner.Files", NULL, 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; } |