int xapian_dbw_is_indexed(xapian_dbw_t *dbw, const char *cyrusid) { std::string key = "cyrusid." + std::string(cyrusid); /* indexed in the current DB? */ if (!dbw->database->get_metadata(key).empty()) return 1; /* indexed in other DBs? */ for (int i = 0; i < dbw->otherdbs.count; i++) { Xapian::Database *database = (Xapian::Database *)ptrarray_nth(&dbw->otherdbs, i); if (!database->get_metadata(key).empty()) return 1; } /* nup */ return 0; }
static jmap_msg_t *find_message(const char *name) { jmap_msg_t *mp = NULL; int i; for (i = 0; i < messages.count; i++) { mp = (jmap_msg_t*) ptrarray_nth(&messages, i); if (!strcmp(mp->name, name)) { break; } } if (i == messages.count) { mp = NULL; } return mp; }
EXPORTED void search_query_free(search_query_t *query) { int i; if (!query) return; free_hash_table(&query->subs_by_folder, subquery_free); free_hash_table(&query->subs_by_indexed, subquery_free); search_expr_free(query->global_sub.expr); ptrarray_fini(&query->folders_by_id); free_hash_table(&query->folders_by_name, folder_free); ptrarray_fini(&query->merged_msgdata); /* free pending MsgData arrays */ for (i = 0 ; i < query->saved_msgdata.count ; i++) { struct search_saved_msgdata *saved = ptrarray_nth(&query->saved_msgdata, i); index_msgdata_free(saved->msgdata, saved->n); free(saved); } ptrarray_fini(&query->saved_msgdata); free(query); }
void xapian_dbw_close(xapian_dbw_t *dbw) { if (!dbw) return; try { delete dbw->database; delete dbw->term_generator; delete dbw->stemmer; delete dbw->stopper; delete dbw->document; for (int i = 0; i < dbw->otherdbs.count; i++) { Xapian::Database *database = (Xapian::Database *)ptrarray_nth(&dbw->otherdbs, i); delete database; } ptrarray_fini(&dbw->otherdbs); if (dbw->cyrusid) free(dbw->cyrusid); free(dbw); } catch (const Xapian::Error &err) { syslog(LOG_ERR, "IOERROR: Xapian: caught exception: %s: %s", err.get_context().c_str(), err.get_description().c_str()); } }