Have the query parser directly return a shared_ptr and consequent simplifications
This commit is contained in:
parent
3417351bfb
commit
93f96ef68b
@ -1004,15 +1004,14 @@ Query_execute(recoll_QueryObject* self, PyObject *args, PyObject *kwargs)
|
|||||||
// SearchData defaults to stemming in english
|
// SearchData defaults to stemming in english
|
||||||
// Use default for now but need to add way to specify language
|
// Use default for now but need to add way to specify language
|
||||||
string reason;
|
string reason;
|
||||||
Rcl::SearchData *sd = wasaStringToRcl(
|
std::shared_ptr<Rcl::SearchData> rq = wasaStringToRcl(
|
||||||
self->connection->rclconfig.get(),dostem ? stemlang : "", utf8, reason);
|
self->connection->rclconfig.get(),dostem ? stemlang : "", utf8, reason);
|
||||||
|
|
||||||
if (!sd) {
|
if (!rq) {
|
||||||
PyErr_SetString(PyExc_ValueError, reason.c_str());
|
PyErr_SetString(PyExc_ValueError, reason.c_str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<Rcl::SearchData> rq(sd);
|
|
||||||
self->query->setSortBy(*self->sortfield, self->ascending);
|
self->query->setSortBy(*self->sortfield, self->ascending);
|
||||||
self->query->setQuery(rq);
|
self->query->setQuery(rq);
|
||||||
int cnt = self->query->getResCnt();
|
int cnt = self->query->getResCnt();
|
||||||
|
|||||||
@ -330,10 +330,10 @@ void SpellW::showStats()
|
|||||||
it != allmimetypes.end(); it++) {
|
it != allmimetypes.end(); it++) {
|
||||||
string reason;
|
string reason;
|
||||||
string q = string("mime:") + *it;
|
string q = string("mime:") + *it;
|
||||||
Rcl::SearchData *sd = wasaStringToRcl(theconfig, "", q, reason);
|
std::shared_ptr<Rcl::SearchData> sd =
|
||||||
std::shared_ptr<Rcl::SearchData> rq(sd);
|
wasaStringToRcl(theconfig, "", q, reason);
|
||||||
Rcl::Query query(rcldb.get());
|
Rcl::Query query(rcldb.get());
|
||||||
if (!query.setQuery(rq)) {
|
if (!query.setQuery(sd)) {
|
||||||
LOGERR("Query setup failed: " << (query.getReason()) << "" );
|
LOGERR("Query setup failed: " << (query.getReason()) << "" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -495,7 +495,7 @@ bool SSearch::startSimpleSearch(const string& u8, int maxexp)
|
|||||||
xml << " <T>" << base64_encode(u8) << "</T>\n";
|
xml << " <T>" << base64_encode(u8) << "</T>\n";
|
||||||
|
|
||||||
SSearchType tp = (SSearchType)searchTypCMB->currentIndex();
|
SSearchType tp = (SSearchType)searchTypCMB->currentIndex();
|
||||||
Rcl::SearchData *sdata = 0;
|
std::shared_ptr<Rcl::SearchData> sdata;
|
||||||
|
|
||||||
if (tp == SST_LANG) {
|
if (tp == SST_LANG) {
|
||||||
xml << " <SM>QL</SM>\n";
|
xml << " <SM>QL</SM>\n";
|
||||||
@ -509,14 +509,14 @@ bool SSearch::startSimpleSearch(const string& u8, int maxexp)
|
|||||||
} else {
|
} else {
|
||||||
sdata = wasaStringToRcl(theconfig, stemlang, u8, reason);
|
sdata = wasaStringToRcl(theconfig, stemlang, u8, reason);
|
||||||
}
|
}
|
||||||
if (sdata == 0) {
|
if (!sdata) {
|
||||||
QMessageBox::warning(0, "Recoll", tr("Bad query string") + ": " +
|
QMessageBox::warning(0, "Recoll", tr("Bad query string") + ": " +
|
||||||
QString::fromUtf8(reason.c_str()));
|
QString::fromUtf8(reason.c_str()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sdata = new Rcl::SearchData(Rcl::SCLT_OR, stemlang);
|
sdata = std::make_shared<Rcl::SearchData>(Rcl::SCLT_OR, stemlang);
|
||||||
if (sdata == 0) {
|
if (!sdata) {
|
||||||
QMessageBox::warning(0, "Recoll", tr("Out of memory"));
|
QMessageBox::warning(0, "Recoll", tr("Out of memory"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -554,9 +554,8 @@ bool SSearch::startSimpleSearch(const string& u8, int maxexp)
|
|||||||
m_xml = xml.str();
|
m_xml = xml.str();
|
||||||
LOGDEB("SSearch::startSimpleSearch:xml:[" << m_xml << "]\n");
|
LOGDEB("SSearch::startSimpleSearch:xml:[" << m_xml << "]\n");
|
||||||
|
|
||||||
std::shared_ptr<Rcl::SearchData> rsdata(sdata);
|
|
||||||
emit setDescription(u8s2qs(u8));
|
emit setDescription(u8s2qs(u8));
|
||||||
emit startSearch(rsdata, true);
|
emit startSearch(sdata, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -161,10 +161,9 @@ bool DocSequenceDb::setFiltSpec(const DocSeqFiltSpec &fs)
|
|||||||
std::unique_lock<std::mutex> locker(o_dblock);
|
std::unique_lock<std::mutex> locker(o_dblock);
|
||||||
if (fs.isNotNull()) {
|
if (fs.isNotNull()) {
|
||||||
// We build a search spec by adding a filtering layer to the base one.
|
// We build a search spec by adding a filtering layer to the base one.
|
||||||
m_fsdata = std::shared_ptr<Rcl::SearchData>(
|
m_fsdata = std::make_shared<Rcl::SearchData>(
|
||||||
new Rcl::SearchData(Rcl::SCLT_AND, m_sdata->getStemLang()));
|
Rcl::SCLT_AND, m_sdata->getStemLang());
|
||||||
Rcl::SearchDataClauseSub *cl =
|
Rcl::SearchDataClauseSub *cl = new Rcl::SearchDataClauseSub(m_sdata);
|
||||||
new Rcl::SearchDataClauseSub(m_sdata);
|
|
||||||
m_fsdata->addClause(cl);
|
m_fsdata->addClause(cl);
|
||||||
|
|
||||||
for (unsigned int i = 0; i < fs.crits.size(); i++) {
|
for (unsigned int i = 0; i < fs.crits.size(); i++) {
|
||||||
@ -178,14 +177,12 @@ bool DocSequenceDb::setFiltSpec(const DocSeqFiltSpec &fs)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
string reason;
|
string reason;
|
||||||
Rcl::SearchData *sd =
|
auto sd = wasaStringToRcl(m_q->whatDb()->getConf(),
|
||||||
wasaStringToRcl(m_q->whatDb()->getConf(),
|
m_sdata->getStemLang(),
|
||||||
m_sdata->getStemLang(),
|
fs.values[i], reason);
|
||||||
fs.values[i], reason);
|
|
||||||
if (sd) {
|
if (sd) {
|
||||||
Rcl::SearchDataClauseSub *cl1 =
|
Rcl::SearchDataClauseSub *cl1 =
|
||||||
new Rcl::SearchDataClauseSub(
|
new Rcl::SearchDataClauseSub(sd);
|
||||||
std::shared_ptr<Rcl::SearchData>(sd));
|
|
||||||
m_fsdata->addClause(cl1);
|
m_fsdata->addClause(cl1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -371,10 +371,10 @@ endopts:
|
|||||||
qs = uq;
|
qs = uq;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rcl::SearchData *sd = 0;
|
std::shared_ptr<Rcl::SearchData> sd;
|
||||||
|
|
||||||
if (op_flags & (OPT_a|OPT_o|OPT_f)) {
|
if (op_flags & (OPT_a|OPT_o|OPT_f)) {
|
||||||
sd = new Rcl::SearchData(Rcl::SCLT_OR, stemlang);
|
sd = std::make_shared<Rcl::SearchData>(Rcl::SCLT_OR, stemlang);
|
||||||
Rcl::SearchDataClause *clp = 0;
|
Rcl::SearchDataClause *clp = 0;
|
||||||
if (op_flags & OPT_f) {
|
if (op_flags & OPT_f) {
|
||||||
clp = new Rcl::SearchDataClauseFilename(qs);
|
clp = new Rcl::SearchDataClauseFilename(qs);
|
||||||
|
|||||||
@ -39,13 +39,12 @@ yy::parser::error (const location_type&, const std::string& m)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SearchData *wasaStringToRcl(const RclConfig *config,
|
std::shared_ptr<SearchData> wasaStringToRcl(
|
||||||
const std::string& stemlang,
|
const RclConfig *config, const std::string& stemlang,
|
||||||
const std::string& query, string &reason,
|
const std::string& query, string &reason, const std::string& autosuffs)
|
||||||
const std::string& autosuffs)
|
|
||||||
{
|
{
|
||||||
WasaParserDriver d(config, stemlang, autosuffs);
|
WasaParserDriver d(config, stemlang, autosuffs);
|
||||||
SearchData *sd = d.parse(query);
|
auto sd = std::shared_ptr<Rcl::SearchData>(d.parse(query));
|
||||||
if (!sd)
|
if (!sd)
|
||||||
reason = d.getreason();
|
reason = d.getreason();
|
||||||
return sd;
|
return sd;
|
||||||
|
|||||||
@ -19,16 +19,16 @@
|
|||||||
#define _WASATORCL_H_INCLUDED_
|
#define _WASATORCL_H_INCLUDED_
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
namespace Rcl {
|
namespace Rcl {
|
||||||
class SearchData;
|
class SearchData;
|
||||||
}
|
}
|
||||||
class RclConfig;
|
class RclConfig;
|
||||||
|
|
||||||
extern Rcl::SearchData *wasaStringToRcl(const RclConfig *,
|
extern std::shared_ptr<Rcl::SearchData>wasaStringToRcl(
|
||||||
const std::string& stemlang,
|
const RclConfig *, const std::string& stemlang,
|
||||||
const std::string& query,
|
const std::string& query, std::string &reason,
|
||||||
std::string &reason,
|
const std::string& autosuffs = "");
|
||||||
const std::string& autosuffs = "");
|
|
||||||
|
|
||||||
#endif /* _WASATORCL_H_INCLUDED_ */
|
#endif /* _WASATORCL_H_INCLUDED_ */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user