static MuQuery* get_query_obj (MuStore *store, GError **err) { MuQuery *mquery; unsigned count; count = mu_store_count (store, err); if (count == (unsigned)-1) return NULL; if (count == 0) { g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN_IS_EMPTY, "the database is empty"); return NULL; } if (!mu_store_versions_match (store)) { g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN_VERSION_MISMATCH, "the database needs a rebuild"); return NULL; } mquery = mu_query_new (store, err); if (!mquery) return NULL; return mquery; }
static gboolean mu_guile_init_instance (const char *muhome) { MuStore *store; MuQuery *query; GError *err; setlocale (LC_ALL, ""); if (!mu_runtime_init (muhome, "guile")) return FALSE; store = mu_store_new_read_only (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB), &err); if (!store) { mu_guile_g_error (__FUNCTION__, err); g_clear_error (&err); return FALSE; } query = mu_query_new (store, &err); mu_store_unref (store); if (!query) { mu_guile_g_error (__FUNCTION__, err); g_clear_error (&err); return FALSE; } _singleton = g_new0 (MuGuile, 1); _singleton->query = query; return TRUE; }
static MuQuery* get_query_obj (MuStore *store, GError **err) { MuQuery *mquery; unsigned count; count = mu_store_count (store, err); if (count == (unsigned)-1) return NULL; if (count == 0) { g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN_IS_EMPTY, "the database is empty"); return NULL; } if (mu_store_needs_upgrade (store)) { g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_XAPIAN_NOT_UP_TO_DATE, "the database is not up-to-date"); return NULL; } mquery = mu_query_new (store, err); if (!mquery) return NULL; return mquery; }
MuError mu_cmd_server (MuStore *store, MuConfig *opts/*unused*/, GError **err) { ServerContext ctx; gboolean do_quit; g_return_val_if_fail (store, MU_ERROR_INTERNAL); ctx.store = store; ctx.query = mu_query_new (store, err); if (!ctx.query) return MU_G_ERROR_CODE (err); srand (time(NULL)*getpid()); install_sig_handler (); g_print (";; welcome to " PACKAGE_STRING "\n"); /* the main REPL */ do_quit = FALSE; while (!MU_TERMINATE && !do_quit) { GHashTable *args; GError *my_err; /* args will receive a the command as a list of * strings. returning NULL indicates an error */ my_err = NULL; args = read_command_line (&my_err); if (!args) { if (feof(stdin)) break; if (my_err) print_and_clear_g_error (&my_err); continue; } switch (handle_args (&ctx, args, &my_err)) { case MU_OK: break; case MU_STOP: do_quit = TRUE; break; default: /* some error occurred */ print_and_clear_g_error (&my_err); } g_hash_table_destroy (args); } mu_store_flush (ctx.store); mu_query_destroy (ctx.query); return MU_OK; }
static MuMsgIter * run_query (const char *xpath, const char *query, MugMsgListView * self) { GError *err; MuQuery *xapian; MuMsgIter *iter; MuStore *store; MuQueryFlags qflags; err = NULL; if (! (store = mu_store_new_read_only (xpath, &err)) || ! (xapian = mu_query_new (store, &err))) { if (store) mu_store_unref (store); g_warning ("Error: %s", err->message); g_signal_emit (G_OBJECT (self), signals[MUG_ERROR_OCCURED], 0, mu_result_to_mug_error (err->code)); g_error_free (err); return NULL; } mu_store_unref (store); qflags = MU_QUERY_FLAG_DESCENDING | MU_QUERY_FLAG_SKIP_UNREADABLE | MU_QUERY_FLAG_SKIP_DUPS | MU_QUERY_FLAG_THREADS; iter = mu_query_run (xapian, query, MU_MSG_FIELD_ID_DATE, -1, qflags, &err); mu_query_destroy (xapian); if (!iter) { g_warning ("Error: %s", err->message); g_signal_emit (G_OBJECT (self), signals[MUG_ERROR_OCCURED], 0, mu_result_to_mug_error (err->code)); g_error_free (err); return NULL; } return iter; }