mirror of https://github.com/djcb/mu.git
* mu-query-xapian: fix some error cases (exceptions)
This commit is contained in:
parent
3f169f72aa
commit
107852b79d
|
@ -29,9 +29,13 @@
|
||||||
#include "mu-msg-xapian-priv.hh"
|
#include "mu-msg-xapian-priv.hh"
|
||||||
|
|
||||||
struct _MuQueryXapian {
|
struct _MuQueryXapian {
|
||||||
Xapian::Database *_db;
|
|
||||||
Xapian::QueryParser _qparser;
|
_MuQueryXapian (const char *path) :
|
||||||
Xapian::Sorter* _sorters[MU_MSG_FIELD_TYPE_NUM];
|
_db(Xapian::Database(path)) {}
|
||||||
|
|
||||||
|
const Xapian::Database& _db;
|
||||||
|
Xapian::QueryParser _qparser;
|
||||||
|
Xapian::Sorter* _sorters[MU_MSG_FIELD_TYPE_NUM];
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -64,37 +68,36 @@ mu_query_xapian_new (const char* path, GError **err)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
self = 0;
|
||||||
self = new MuQueryXapian;
|
|
||||||
|
|
||||||
self->_db = new Xapian::Database(path);
|
try {
|
||||||
self->_qparser.set_database(*self->_db);
|
self = new MuQueryXapian (path);
|
||||||
|
|
||||||
|
self->_qparser.set_database(self->_db);
|
||||||
self->_qparser.set_default_op(Xapian::Query::OP_OR);
|
self->_qparser.set_default_op(Xapian::Query::OP_OR);
|
||||||
self->_qparser.set_stemming_strategy
|
self->_qparser.set_stemming_strategy
|
||||||
(Xapian::QueryParser::STEM_SOME);
|
(Xapian::QueryParser::STEM_SOME);
|
||||||
|
|
||||||
memset (self->_sorters, 0, sizeof(self->_sorters));
|
|
||||||
|
|
||||||
mu_msg_field_foreach ((MuMsgFieldForEachFunc)add_prefix,
|
|
||||||
(gconstpointer)&self->_qparser);
|
|
||||||
|
|
||||||
return self;
|
|
||||||
|
|
||||||
} catch (const Xapian::Error &ex) {
|
} catch (const Xapian::Error &ex) {
|
||||||
g_set_error (err, 0, 0,"%s: caught xapian exception '%s' (%s)",
|
g_set_error (err, 0, 0,"%s: caught xapian exception '%s' (%s)",
|
||||||
__FUNCTION__, ex.get_msg().c_str(),
|
__FUNCTION__, ex.get_msg().c_str(),
|
||||||
ex.get_error_string());
|
ex.get_error_string());
|
||||||
|
delete self;
|
||||||
|
self = 0;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
delete self->_db;
|
|
||||||
g_set_error (err, 0, 0,"%s: caught exception", __FUNCTION__);
|
g_set_error (err, 0, 0,"%s: caught exception", __FUNCTION__);
|
||||||
|
delete self;
|
||||||
|
self = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self) {
|
if (self) {
|
||||||
delete self->_db;
|
memset (self->_sorters, 0, sizeof(self->_sorters));
|
||||||
delete self;
|
|
||||||
|
mu_msg_field_foreach ((MuMsgFieldForEachFunc)add_prefix,
|
||||||
|
(gconstpointer)&self->_qparser);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return self ? self: NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -110,7 +113,6 @@ mu_query_xapian_destroy (MuQueryXapian *self)
|
||||||
self->_sorters[i] = 0;
|
self->_sorters[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete self->_db;
|
|
||||||
delete self;
|
delete self;
|
||||||
|
|
||||||
} catch (const Xapian::Error &err) {
|
} catch (const Xapian::Error &err) {
|
||||||
|
@ -147,7 +149,7 @@ mu_query_xapian_run (MuQueryXapian *self, const char* searchexpr,
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Xapian::Query q(get_query(self, searchexpr));
|
Xapian::Query q(get_query(self, searchexpr));
|
||||||
Xapian::Enquire enq (*self->_db);
|
Xapian::Enquire enq (self->_db);
|
||||||
|
|
||||||
if (sortfield)
|
if (sortfield)
|
||||||
enq.set_sort_by_value (
|
enq.set_sort_by_value (
|
||||||
|
|
Loading…
Reference in New Issue