![]() |
![]() |
![]() |
Xesam GLib Reference Manual |
---|
Building and executing a queryBuilding and executing a query — This example builds and executes an XML query, retrieving the hit count |
This example demonstrates how to build a query using an XML query builder, pass it to a search and retrieve the hit count.
#include <stdio.h> #include <glib.h> #include <glib-object.h> #include <xesam-glib.h> /* Print out the number of found hits and exit */ static void search_done_cb (XesamGSearch *search, gpointer userdata) { GMainLoop *loop; g_printf ("Search done with %d hits\n", xesam_g_search_get_num_found (search)); loop = (GMainLoop*) userdata; g_main_loop_quit (loop); } int main (int argc, char *argv[]) { XesamGQueryBuilder *builder; GMainLoop *mainloop; XesamGSearcher *searcher; XesamGSession *session; XesamGSearch *search; XesamGQuery *query; GError *error; g_type_init (); builder = XESAM_G_QUERY_BUILDER (xesam_g_xml_query_builder_new ()); mainloop = g_main_loop_new (NULL,FALSE); searcher = XESAM_G_SEARCHER(xesam_g_dbus_searcher_new_default ()); session = xesam_g_session_new (searcher); /* Build a query * This query will match all documents in any achieve (.zip, .tgz etc.) * which contain "hendrix" in the title or subject */ xesam_g_query_builder_start_query (builder, XESAM_G_QUERY_TOKEN_QUERY, "xesam:Document", "xesam:ArchivedFile", NULL); xesam_g_query_builder_add_clause (builder, XESAM_G_QUERY_TOKEN_CONTAINS, NULL, NULL, NULL, NULL, NULL); xesam_g_query_builder_add_field (builder, XESAM_G_QUERY_TOKEN_FIELD, "xesam:title", NULL); xesam_g_query_builder_add_field (builder, XESAM_G_QUERY_TOKEN_FIELD, "xesam:subject", NULL); xesam_g_query_builder_add_value (builder, XESAM_G_QUERY_TOKEN_STRING, "hendrix", NULL, NULL, NULL); xesam_g_query_builder_close_clause (builder, NULL); xesam_g_query_builder_close_query (builder, NULL); query = xesam_g_xml_query_builder_get_query ( XESAM_G_XML_QUERY_BUILDER(builder)); search = xesam_g_session_new_search (session, query); /* The query is a GInitiallyUnowned and will be owned by the search now, * so no need to unref it */ /* Connect to signals before we start the search. We will simply exit, printing * the hit count, when the 'done' signal is received */ g_signal_connect (search, "done", G_CALLBACK(search_done_cb), mainloop); xesam_g_search_start (search); g_main_loop_run (mainloop); g_printf ("Bye.\n"); }