When storing doc text, always use a metadata entry. Get rid of the code to

store it in the data record. Make storing the default.  Add "fetchtext"
parameter to getDoc() to fetch and store the text in doc.text. Make this
accessible from Python. Misc comments and indents.
This commit is contained in:
Jean-Francois Dockes
2018-01-25 13:20:02 +01:00
parent 2eaefa2b5d
commit 3d4fd3c62e
7 changed files with 233 additions and 292 deletions
+96 -76
View File
@@ -63,7 +63,8 @@ typedef struct {
static void
SearchData_dealloc(recoll_SearchDataObject *self)
{
LOGDEB("SearchData_dealloc. Releasing. Count before: " << (self->sd.use_count()) << "\n" );
LOGDEB("SearchData_dealloc. Releasing. Count before: " <<
self->sd.use_count() << "\n");
self->sd.reset();
Py_TYPE(self)->tp_free((PyObject*)self);
}
@@ -71,7 +72,7 @@ SearchData_dealloc(recoll_SearchDataObject *self)
static PyObject *
SearchData_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
LOGDEB("SearchData_new\n" );
LOGDEB("SearchData_new\n");
recoll_SearchDataObject *self;
self = (recoll_SearchDataObject *)type->tp_alloc(type, 0);
@@ -90,7 +91,7 @@ PyDoc_STRVAR(doc_SearchDataObject,
static int
SearchData_init(recoll_SearchDataObject *self, PyObject *args, PyObject *kwargs)
{
LOGDEB("SearchData_init\n" );
LOGDEB("SearchData_init\n");
static const char* kwlist[] = {"type", "stemlang", NULL};
char *stp = 0;
char *steml = 0;
@@ -180,9 +181,9 @@ static PyObject *
SearchData_addclause(recoll_SearchDataObject* self, PyObject *args,
PyObject *kwargs)
{
LOGDEB0("SearchData_addclause\n" );
LOGDEB0("SearchData_addclause\n");
if (!self->sd) {
LOGERR("SearchData_addclause: not init??\n" );
LOGERR("SearchData_addclause: not init??\n");
PyErr_SetString(PyExc_AttributeError, "sd");
return 0;
}
@@ -294,7 +295,7 @@ SearchData_addclause(recoll_SearchDataObject* self, PyObject *args,
static void
Doc_dealloc(recoll_DocObject *self)
{
LOGDEB("Doc_dealloc\n" );
LOGDEB("Doc_dealloc\n");
if (self->doc)
the_docs.erase(self->doc);
deleteZ(self->doc);
@@ -304,7 +305,7 @@ Doc_dealloc(recoll_DocObject *self)
static PyObject *
Doc_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
LOGDEB("Doc_new\n" );
LOGDEB("Doc_new\n");
recoll_DocObject *self;
self = (recoll_DocObject *)type->tp_alloc(type, 0);
@@ -318,7 +319,7 @@ Doc_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
static int
Doc_init(recoll_DocObject *self, PyObject *, PyObject *)
{
LOGDEB("Doc_init\n" );
LOGDEB("Doc_init\n");
if (self->doc)
the_docs.erase(self->doc);
delete self->doc;
@@ -340,7 +341,7 @@ PyDoc_STRVAR(doc_Doc_getbinurl,
static PyObject *
Doc_getbinurl(recoll_DocObject *self)
{
LOGDEB0("Doc_getbinurl\n" );
LOGDEB0("Doc_getbinurl\n");
if (self->doc == 0 ||
the_docs.find(self->doc) == the_docs.end()) {
PyErr_SetString(PyExc_AttributeError, "doc");
@@ -359,7 +360,7 @@ PyDoc_STRVAR(doc_Doc_setbinurl,
static PyObject *
Doc_setbinurl(recoll_DocObject *self, PyObject *value)
{
LOGDEB0("Doc_setbinurl\n" );
LOGDEB0("Doc_setbinurl\n");
if (self->doc == 0 ||
the_docs.find(self->doc) == the_docs.end()) {
PyErr_SetString(PyExc_AttributeError, "doc??");
@@ -381,7 +382,7 @@ PyDoc_STRVAR(doc_Doc_keys,
static PyObject *
Doc_keys(recoll_DocObject *self)
{
LOGDEB0("Doc_keys\n" );
LOGDEB0("Doc_keys\n");
if (self->doc == 0 ||
the_docs.find(self->doc) == the_docs.end()) {
PyErr_SetString(PyExc_AttributeError, "doc");
@@ -406,7 +407,7 @@ PyDoc_STRVAR(doc_Doc_items,
static PyObject *
Doc_items(recoll_DocObject *self)
{
LOGDEB0("Doc_items\n" );
LOGDEB0("Doc_items\n");
if (self->doc == 0 ||
the_docs.find(self->doc) == the_docs.end()) {
PyErr_SetString(PyExc_AttributeError, "doc");
@@ -516,7 +517,7 @@ PyDoc_STRVAR(doc_Doc_get,
static PyObject *
Doc_get(recoll_DocObject *self, PyObject *args)
{
LOGDEB1("Doc_get\n" );
LOGDEB1("Doc_get\n");
if (self->doc == 0 || the_docs.find(self->doc) == the_docs.end()) {
PyErr_SetString(PyExc_AttributeError, "doc??");
return 0;
@@ -567,7 +568,7 @@ Doc_getattro(recoll_DocObject *self, PyObject *nameobj)
if (PyUnicode_Check(nameobj)) {
PyObject* utf8o = PyUnicode_AsUTF8String(nameobj);
if (utf8o == 0) {
LOGERR("Doc_getattro: encoding name to utf8 failed\n" );
LOGERR("Doc_getattro: encoding name to utf8 failed\n");
PyErr_SetString(PyExc_AttributeError, "name??");
Py_RETURN_NONE;
}
@@ -583,7 +584,7 @@ Doc_getattro(recoll_DocObject *self, PyObject *nameobj)
string key = rclconfig->fieldQCanon(string(name));
string value;
if (idocget(self, key, value)) {
LOGDEB1("Doc_getattro: [" << key << "] -> [" << value << "]\n");
LOGDEB1("Doc_getattro: [" << key << "] -> [" << value << "]\n");
// Return a python unicode object
return PyUnicode_Decode(value.c_str(), value.size(), "utf-8","replace");
}
@@ -621,7 +622,7 @@ Doc_setattr(recoll_DocObject *self, char *name, PyObject *value)
PyObject* putf8 = PyUnicode_AsUTF8String(value);
if (putf8 == 0) {
LOGERR("Doc_setmeta: encoding to utf8 failed\n" );
LOGERR("Doc_setmeta: encoding to utf8 failed\n");
PyErr_SetString(PyExc_AttributeError, "value??");
return -1;
}
@@ -709,7 +710,7 @@ Doc_subscript(recoll_DocObject *self, PyObject *key)
if (PyUnicode_Check(key)) {
PyObject* utf8o = PyUnicode_AsUTF8String(key);
if (utf8o == 0) {
LOGERR("Doc_getitemo: encoding name to utf8 failed\n" );
LOGERR("Doc_getitemo: encoding name to utf8 failed\n");
PyErr_SetString(PyExc_AttributeError, "name??");
Py_RETURN_NONE;
}
@@ -830,6 +831,7 @@ typedef struct {
int ascending;
int arraysize; // Default size for fetchmany
recoll_DbObject* connection;
bool fetchtext;
} recoll_QueryObject;
PyDoc_STRVAR(doc_Query_close,
@@ -838,7 +840,7 @@ PyDoc_STRVAR(doc_Query_close,
static PyObject *
Query_close(recoll_QueryObject *self)
{
LOGDEB("Query_close\n" );
LOGDEB("Query_close\n");
if (self->query) {
the_queries.erase(self->query);
deleteZ(self->query);
@@ -854,7 +856,7 @@ Query_close(recoll_QueryObject *self)
static void
Query_dealloc(recoll_QueryObject *self)
{
LOGDEB("Query_dealloc\n" );
LOGDEB("Query_dealloc\n");
PyObject *ret = Query_close(self);
Py_DECREF(ret);
Py_TYPE(self)->tp_free((PyObject*)self);
@@ -863,7 +865,7 @@ Query_dealloc(recoll_QueryObject *self)
static PyObject *
Query_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
{
LOGDEB("Query_new\n" );
LOGDEB("Query_new\n");
recoll_QueryObject *self;
self = (recoll_QueryObject *)type->tp_alloc(type, 0);
@@ -876,6 +878,7 @@ Query_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
self->ascending = 1;
self->arraysize = 1;
self->connection = 0;
self->fetchtext = false;
return (PyObject *)self;
}
@@ -885,7 +888,7 @@ Query_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
static int
Query_init(recoll_QueryObject *self, PyObject *, PyObject *)
{
LOGDEB("Query_init\n" );
LOGDEB("Query_init\n");
if (self->query)
the_queries.erase(self->query);
@@ -913,7 +916,7 @@ PyDoc_STRVAR(doc_Query_sortby,
static PyObject *
Query_sortby(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
{
LOGDEB0("Query_sortby\n" );
LOGDEB0("Query_sortby\n");
static const char *kwlist[] = {"field", "ascending", NULL};
char *sfield = 0;
PyObject *ascobj = 0;
@@ -936,7 +939,8 @@ Query_sortby(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
}
PyDoc_STRVAR(doc_Query_execute,
"execute(query_string, stemming=1|0, stemlang=\"stemming language\")\n"
"execute(query_string, stemming=1|0, stemlang=\"stemming language\", "
"fetchtext=False)\n"
"\n"
"Starts a search for query_string, a Recoll search language string\n"
"(mostly Xesam-compatible).\n"
@@ -947,20 +951,28 @@ PyDoc_STRVAR(doc_Query_execute,
static PyObject *
Query_execute(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
{
LOGDEB0("Query_execute\n" );
static const char *kwlist[] = {"query_string", "stemming", "stemlang", NULL};
LOGDEB0("Query_execute\n");
static const char *kwlist[] = {"query_string", "stemming", "stemlang",
"fetchtext", NULL};
char *sutf8 = 0; // needs freeing
char *sstemlang = 0;
int dostem = 1;
PyObject *dostemobj = 0;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "es|Oes:Query_execute",
PyObject *fetchtextobj = 0;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "es|OesO:Query_execute",
(char**)kwlist, "utf-8", &sutf8,
&dostemobj,
"utf-8", &sstemlang)) {
"utf-8", &sstemlang, &fetchtextobj)) {
return 0;
}
bool dostem{true};
if (dostemobj != 0 && !PyObject_IsTrue(dostemobj))
dostem = 0;
dostem = false;
if (fetchtextobj != 0 && PyObject_IsTrue(fetchtextobj)) {
self->fetchtext = true;
} else {
self->fetchtext = false;
}
string utf8(sutf8);
PyMem_Free(sutf8);
@@ -970,7 +982,8 @@ Query_execute(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
PyMem_Free(sstemlang);
}
LOGDEB0("Query_execute: [" << (utf8) << "] dostem " << (dostem) << " stemlang [" << (stemlang) << "]\n" );
LOGDEB0("Query_execute: [" << utf8 << "] dostem " << dostem <<
" stemlang [" << stemlang << "]\n");
if (self->query == 0 ||
the_queries.find(self->query) == the_queries.end()) {
@@ -999,7 +1012,7 @@ Query_execute(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
}
PyDoc_STRVAR(doc_Query_executesd,
"executesd(SearchData)\n"
"executesd(SearchData, fetchtext=False)\n"
"\n"
"Starts a search for the query defined by the SearchData object.\n"
);
@@ -1007,12 +1020,13 @@ PyDoc_STRVAR(doc_Query_executesd,
static PyObject *
Query_executesd(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
{
LOGDEB0("Query_executeSD\n" );
static const char *kwlist[] = {"searchdata", NULL};
LOGDEB0("Query_executeSD\n");
static const char *kwlist[] = {"searchdata", "fetchtext", NULL};
recoll_SearchDataObject *pysd = 0;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:Query_execute",
(char **)kwlist,
&recoll_SearchDataType, &pysd)) {
PyObject *fetchtextobj = 0;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!|O:Query_execute",
(char **)kwlist, &recoll_SearchDataType,
&pysd, &fetchtextobj)) {
return 0;
}
if (pysd == 0 || self->query == 0 ||
@@ -1020,6 +1034,11 @@ Query_executesd(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
PyErr_SetString(PyExc_AttributeError, "query");
return 0;
}
if (fetchtextobj != 0 && PyObject_IsTrue(fetchtextobj)) {
self->fetchtext = true;
} else {
self->fetchtext = false;
}
self->query->setSortBy(*self->sortfield, self->ascending);
self->query->setQuery(pysd->sd);
int cnt = self->query->getResCnt();
@@ -1049,7 +1068,7 @@ PyDoc_STRVAR(doc_Query_fetchone,
static PyObject *
Query_fetchone(PyObject *_self)
{
LOGDEB0("Query_fetchone/next\n" );
LOGDEB0("Query_fetchone/next\n");
recoll_QueryObject* self = (recoll_QueryObject*)_self;
if (self->query == 0 ||
@@ -1072,7 +1091,7 @@ Query_fetchone(PyObject *_self)
// We used to check against rowcount here, but this was wrong:
// xapian result count estimate are sometimes wrong, we must go on
// fetching until we fail
if (!self->query->getDoc(self->next, *result->doc)) {
if (!self->query->getDoc(self->next, *result->doc, self->fetchtext)) {
PyErr_SetNone(PyExc_StopIteration);
return 0;
}
@@ -1090,7 +1109,7 @@ PyDoc_STRVAR(doc_Query_fetchmany,
static PyObject *
Query_fetchmany(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
{
LOGDEB0("Query_fetchmany\n" );
LOGDEB0("Query_fetchmany\n");
static const char *kwlist[] = {"size", NULL};
int size = 0;
@@ -1120,7 +1139,7 @@ Query_fetchmany(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
PyErr_SetString(PyExc_EnvironmentError, "doc create failed");
return 0;
}
if (!self->query->getDoc(self->next, *docobj->doc)) {
if (!self->query->getDoc(self->next, *docobj->doc, self->fetchtext)) {
PyErr_SetNone(PyExc_StopIteration);
break;
}
@@ -1140,7 +1159,7 @@ PyDoc_STRVAR(doc_Query_scroll,
static PyObject *
Query_scroll(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
{
LOGDEB0("Query_scroll\n" );
LOGDEB0("Query_scroll\n");
static const char *kwlist[] = {"position", "mode", NULL};
int pos = 0;
char *smode = 0;
@@ -1227,7 +1246,7 @@ public:
static PyObject *
Query_highlight(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
{
LOGDEB0("Query_highlight\n" );
LOGDEB0("Query_highlight\n");
static const char *kwlist[] = {"text", "ishtml", "eolbr", "methods", NULL};
char *sutf8 = 0; // needs freeing
int ishtml = 0;
@@ -1249,7 +1268,7 @@ Query_highlight(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
ishtml = 1;
if (eolbrobj && !PyObject_IsTrue(eolbrobj))
eolbr = 0;
LOGDEB0("Query_highlight: ishtml " << (ishtml) << "\n" );
LOGDEB0("Query_highlight: ishtml " << ishtml << "\n");
if (self->query == 0 ||
the_queries.find(self->query) == the_queries.end()) {
@@ -1287,7 +1306,7 @@ PyDoc_STRVAR(doc_Query_makedocabstract,
static PyObject *
Query_makedocabstract(recoll_QueryObject* self, PyObject *args,PyObject *kwargs)
{
LOGDEB0("Query_makeDocAbstract\n" );
LOGDEB0("Query_makeDocAbstract\n");
static const char *kwlist[] = {"doc", "methods", NULL};
recoll_DocObject *pydoc = 0;
PyObject *hlmethods = 0;
@@ -1299,12 +1318,12 @@ Query_makedocabstract(recoll_QueryObject* self, PyObject *args,PyObject *kwargs)
}
if (pydoc->doc == 0 || the_docs.find(pydoc->doc) == the_docs.end()) {
LOGERR("Query_makeDocAbstract: doc not found " << (pydoc->doc) << "\n" );
LOGERR("Query_makeDocAbstract: doc not found " << pydoc->doc << "\n");
PyErr_SetString(PyExc_AttributeError, "doc");
return 0;
}
if (the_queries.find(self->query) == the_queries.end()) {
LOGERR("Query_makeDocAbstract: query not found " << (self->query) << "\n" );
LOGERR("Query_makeDocAbstract: query not found " << self->query << "\n");
PyErr_SetString(PyExc_AttributeError, "query");
return 0;
}
@@ -1357,7 +1376,7 @@ PyDoc_STRVAR(doc_Query_getxquery,
static PyObject *
Query_getxquery(recoll_QueryObject* self, PyObject *, PyObject *)
{
LOGDEB0("Query_getxquery self->query " << (self->query) << "\n" );
LOGDEB0("Query_getxquery self->query " << self->query << "\n");
if (self->query == 0 ||
the_queries.find(self->query) == the_queries.end()) {
@@ -1385,7 +1404,7 @@ PyDoc_STRVAR(doc_Query_getgroups,
static PyObject *
Query_getgroups(recoll_QueryObject* self, PyObject *, PyObject *)
{
LOGDEB0("Query_getgroups\n" );
LOGDEB0("Query_getgroups\n");
if (self->query == 0 ||
the_queries.find(self->query) == the_queries.end()) {
@@ -1530,7 +1549,7 @@ typedef struct recoll_DbObject {
static PyObject *
Db_close(recoll_DbObject *self)
{
LOGDEB("Db_close. self " << (self) << "\n" );
LOGDEB("Db_close. self " << self << "\n");
if (self->db) {
the_dbs.erase(self->db);
delete self->db;
@@ -1542,7 +1561,7 @@ Db_close(recoll_DbObject *self)
static void
Db_dealloc(recoll_DbObject *self)
{
LOGDEB("Db_dealloc\n" );
LOGDEB("Db_dealloc\n");
PyObject *ret = Db_close(self);
Py_DECREF(ret);
Py_TYPE(self)->tp_free((PyObject*)self);
@@ -1551,7 +1570,7 @@ Db_dealloc(recoll_DbObject *self)
static PyObject *
Db_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
LOGDEB2("Db_new\n" );
LOGDEB2("Db_new\n");
recoll_DbObject *self;
self = (recoll_DbObject *)type->tp_alloc(type, 0);
@@ -1583,7 +1602,7 @@ Db_init(recoll_DbObject *self, PyObject *args, PyObject *kwargs)
} else {
rclconfig = recollinit(0, 0, reason, 0);
}
LOGDEB("Db_init\n" );
LOGDEB("Db_init\n");
if (rclconfig == 0) {
PyErr_SetString(PyExc_EnvironmentError, reason.c_str());
@@ -1599,7 +1618,7 @@ Db_init(recoll_DbObject *self, PyObject *args, PyObject *kwargs)
delete self->db;
self->db = new Rcl::Db(rclconfig);
if (!self->db->open(writable ? Rcl::Db::DbUpd : Rcl::Db::DbRO)) {
LOGERR("Db_init: db open error\n" );
LOGERR("Db_init: db open error\n");
PyErr_SetString(PyExc_EnvironmentError, "Can't open index");
return -1;
}
@@ -1642,9 +1661,9 @@ Db_init(recoll_DbObject *self, PyObject *args, PyObject *kwargs)
static PyObject *
Db_query(recoll_DbObject* self)
{
LOGDEB("Db_query\n" );
LOGDEB("Db_query\n");
if (self->db == 0 || the_dbs.find(self->db) == the_dbs.end()) {
LOGERR("Db_query: db not found " << (self->db) << "\n" );
LOGERR("Db_query: db not found " << self->db << "\n");
PyErr_SetString(PyExc_AttributeError, "db");
return 0;
}
@@ -1663,18 +1682,19 @@ Db_query(recoll_DbObject* self)
static PyObject *
Db_setAbstractParams(recoll_DbObject *self, PyObject *args, PyObject *kwargs)
{
LOGDEB0("Db_setAbstractParams\n" );
LOGDEB0("Db_setAbstractParams\n");
static const char *kwlist[] = {"maxchars", "contextwords", NULL};
int ctxwords = -1, maxchars = -1;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii", (char**)kwlist,
&maxchars, &ctxwords))
return 0;
if (self->db == 0 || the_dbs.find(self->db) == the_dbs.end()) {
LOGERR("Db_query: db not found " << (self->db) << "\n" );
LOGERR("Db_query: db not found " << self->db << "\n");
PyErr_SetString(PyExc_AttributeError, "db id not found");
return 0;
}
LOGDEB0("Db_setAbstractParams: mxchrs " << (maxchars) << ", ctxwrds " << (ctxwords) << "\n" );
LOGDEB0("Db_setAbstractParams: mxchrs " << maxchars << ", ctxwrds " <<
ctxwords << "\n");
self->db->setAbstractParams(-1, maxchars, ctxwords);
Py_RETURN_NONE;
}
@@ -1682,7 +1702,7 @@ Db_setAbstractParams(recoll_DbObject *self, PyObject *args, PyObject *kwargs)
static PyObject *
Db_makeDocAbstract(recoll_DbObject* self, PyObject *args)
{
LOGDEB0("Db_makeDocAbstract\n" );
LOGDEB0("Db_makeDocAbstract\n");
recoll_DocObject *pydoc = 0;
recoll_QueryObject *pyquery = 0;
if (!PyArg_ParseTuple(args, "O!O!:Db_makeDocAbstract",
@@ -1691,18 +1711,18 @@ Db_makeDocAbstract(recoll_DbObject* self, PyObject *args)
return 0;
}
if (self->db == 0 || the_dbs.find(self->db) == the_dbs.end()) {
LOGERR("Db_makeDocAbstract: db not found " << (self->db) << "\n" );
LOGERR("Db_makeDocAbstract: db not found " << self->db << "\n");
PyErr_SetString(PyExc_AttributeError, "db");
return 0;
}
if (pydoc->doc == 0 || the_docs.find(pydoc->doc) == the_docs.end()) {
LOGERR("Db_makeDocAbstract: doc not found " << (pydoc->doc) << "\n" );
LOGERR("Db_makeDocAbstract: doc not found " << pydoc->doc << "\n");
PyErr_SetString(PyExc_AttributeError, "doc");
return 0;
}
if (pyquery->query == 0 ||
the_queries.find(pyquery->query) == the_queries.end()) {
LOGERR("Db_makeDocAbstract: query not found " << (pyquery->query) << "\n" );
LOGERR("Db_makeDocAbstract: query not found " << pyquery->query << "\n");
PyErr_SetString(PyExc_AttributeError, "query");
return 0;
}
@@ -1727,7 +1747,7 @@ PyDoc_STRVAR(doc_Db_termMatch,
static PyObject *
Db_termMatch(recoll_DbObject* self, PyObject *args, PyObject *kwargs)
{
LOGDEB0("Db_termMatch\n" );
LOGDEB0("Db_termMatch\n");
static const char *kwlist[] = {"type", "expr", "field", "maxlen",
"casesens", "diacsens", "lang", NULL};
char *tp = 0;
@@ -1750,7 +1770,7 @@ Db_termMatch(recoll_DbObject* self, PyObject *args, PyObject *kwargs)
return 0;
if (self->db == 0 || the_dbs.find(self->db) == the_dbs.end()) {
LOGERR("Db_termMatch: db not found " << (self->db) << "\n" );
LOGERR("Db_termMatch: db not found " << self->db << "\n");
PyErr_SetString(PyExc_AttributeError, "db");
goto out;
}
@@ -1775,7 +1795,7 @@ Db_termMatch(recoll_DbObject* self, PyObject *args, PyObject *kwargs)
if (!self->db->termMatch(typ_sens, lang ? lang : "english",
expr, result, maxlen, field ? field : "")) {
LOGERR("Db_termMatch: db termMatch error\n" );
LOGERR("Db_termMatch: db termMatch error\n");
PyErr_SetString(PyExc_AttributeError, "rcldb termMatch error");
goto out;
}
@@ -1796,7 +1816,7 @@ out:
static PyObject *
Db_needUpdate(recoll_DbObject* self, PyObject *args, PyObject *kwds)
{
LOGDEB0("Db_needUpdate\n" );
LOGDEB0("Db_needUpdate\n");
char *udi = 0; // needs freeing
char *sig = 0; // needs freeing
if (!PyArg_ParseTuple(args, "eses:Db_needUpdate",
@@ -1804,7 +1824,7 @@ Db_needUpdate(recoll_DbObject* self, PyObject *args, PyObject *kwds)
return 0;
}
if (self->db == 0 || the_dbs.find(self->db) == the_dbs.end()) {
LOGERR("Db_needUpdate: db not found " << (self->db) << "\n" );
LOGERR("Db_needUpdate: db not found " << self->db << "\n");
PyErr_SetString(PyExc_AttributeError, "db");
PyMem_Free(udi);
PyMem_Free(sig);
@@ -1819,13 +1839,13 @@ Db_needUpdate(recoll_DbObject* self, PyObject *args, PyObject *kwds)
static PyObject *
Db_delete(recoll_DbObject* self, PyObject *args, PyObject *kwds)
{
LOGDEB0("Db_delete\n" );
LOGDEB0("Db_delete\n");
char *udi = 0; // needs freeing
if (!PyArg_ParseTuple(args, "es:Db_delete", "utf-8", &udi)) {
return 0;
}
if (self->db == 0 || the_dbs.find(self->db) == the_dbs.end()) {
LOGERR("Db_delete: db not found " << (self->db) << "\n" );
LOGERR("Db_delete: db not found " << self->db << "\n");
PyErr_SetString(PyExc_AttributeError, "db");
PyMem_Free(udi);
return 0;
@@ -1838,9 +1858,9 @@ Db_delete(recoll_DbObject* self, PyObject *args, PyObject *kwds)
static PyObject *
Db_purge(recoll_DbObject* self)
{
LOGDEB0("Db_purge\n" );
LOGDEB0("Db_purge\n");
if (self->db == 0 || the_dbs.find(self->db) == the_dbs.end()) {
LOGERR("Db_purge: db not found " << (self->db) << "\n" );
LOGERR("Db_purge: db not found " << self->db << "\n");
PyErr_SetString(PyExc_AttributeError, "db");
return 0;
}
@@ -1851,7 +1871,7 @@ Db_purge(recoll_DbObject* self)
static PyObject *
Db_addOrUpdate(recoll_DbObject* self, PyObject *args, PyObject *)
{
LOGDEB0("Db_addOrUpdate\n" );
LOGDEB0("Db_addOrUpdate\n");
char *sudi = 0; // needs freeing
char *sparent_udi = 0; // needs freeing
recoll_DocObject *pydoc;
@@ -1867,17 +1887,17 @@ Db_addOrUpdate(recoll_DbObject* self, PyObject *args, PyObject *)
PyMem_Free(sparent_udi);
if (self->db == 0 || the_dbs.find(self->db) == the_dbs.end()) {
LOGERR("Db_addOrUpdate: db not found " << (self->db) << "\n" );
LOGERR("Db_addOrUpdate: db not found " << self->db << "\n");
PyErr_SetString(PyExc_AttributeError, "db");
return 0;
}
if (pydoc->doc == 0 || the_docs.find(pydoc->doc) == the_docs.end()) {
LOGERR("Db_addOrUpdate: doc not found " << (pydoc->doc) << "\n" );
LOGERR("Db_addOrUpdate: doc not found " << pydoc->doc << "\n");
PyErr_SetString(PyExc_AttributeError, "doc");
return 0;
}
if (!self->db->addOrUpdate(udi, parent_udi, *pydoc->doc)) {
LOGERR("Db_addOrUpdate: rcldb error\n" );
LOGERR("Db_addOrUpdate: rcldb error\n");
PyErr_SetString(PyExc_AttributeError, "rcldb error");
return 0;
}
@@ -1992,7 +2012,7 @@ static PyTypeObject recoll_DbType = {
static PyObject *
recoll_connect(PyObject *self, PyObject *args, PyObject *kwargs)
{
LOGDEB2("recoll_connect\n" );
LOGDEB2("recoll_connect\n");
recoll_DbObject *db = (recoll_DbObject *)
PyObject_Call((PyObject *)&recoll_DbType, args, kwargs);
return (PyObject *)db;