aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--searchlib/src/tests/stackdumpiterator/stackdumpiteratortest.cpp16
-rw-r--r--searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.h12
-rw-r--r--searchlib/src/vespa/searchlib/query/querynode.cpp26
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h29
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp43
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp41
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h4
7 files changed, 65 insertions, 106 deletions
diff --git a/searchlib/src/tests/stackdumpiterator/stackdumpiteratortest.cpp b/searchlib/src/tests/stackdumpiterator/stackdumpiteratortest.cpp
index 19ce69550f7..326b2c0b280 100644
--- a/searchlib/src/tests/stackdumpiterator/stackdumpiteratortest.cpp
+++ b/searchlib/src/tests/stackdumpiterator/stackdumpiteratortest.cpp
@@ -137,10 +137,6 @@ StackDumpIteratorTest::ShowResult(int testNo,
unsigned int expected)
{
unsigned int results = 0;
- const char *idx_ptr;
- const char *term_ptr;
- size_t idx_len;
- size_t term_len;
int num = 0;
@@ -149,16 +145,16 @@ StackDumpIteratorTest::ShowResult(int testNo,
printf("%03d: ", testNo);
while (actual.next()) {
- actual.getIndexName(&idx_ptr, &idx_len);
- actual.getTerm(&term_ptr, &term_len);
+ vespalib::stringref idx = actual.getIndexName();
+ vespalib::stringref term = actual.getTerm();
#if 0
printf("StackItem #%d: %d %d '%.*s:%.*s'\n",
actual.getNum(),
actual.getType(),
actual.getArity(),
- idx_len, idx_ptr,
- term_len, term_ptr);
+ idx.size(), idx.c_str(),
+ term.size(), term.c_str());
#endif
item = correct.Pop();
@@ -178,12 +174,12 @@ StackDumpIteratorTest::ShowResult(int testNo,
delete item;
break;
}
- if (strncmp(item->_indexName.c_str(), idx_ptr, idx_len) != 0) {
+ if (strncmp(item->_indexName.c_str(), idx.c_str(), idx.size()) != 0) {
results |= ITERATOR_ERROR_WRONG_INDEX;
delete item;
break;
}
- if (strncmp(item->_term.c_str(), term_ptr, term_len) != 0) {
+ if (strncmp(item->_term.c_str(), term.c_str(), term.size()) != 0) {
results |= ITERATOR_ERROR_WRONG_TERM;
delete item;
break;
diff --git a/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.h b/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.h
index 0a8c95da87a..4ccd7660a0c 100644
--- a/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.h
+++ b/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.h
@@ -152,16 +152,8 @@ public:
query::PredicateQueryTerm::UP getPredicateQueryTerm()
{ return std::move(_predicate_query_term); }
- /**
- * Get the type of the current item.
- * @return the type.
- */
- void getIndexName(const char **buf, size_t *buflen) const { *buf = _currIndexName; *buflen = _currIndexNameLen; }
- /**
- * Get the type of the current item.
- * @return the type.
- */
- void getTerm(const char **buf, size_t *buflen) const { *buf = _currTerm; *buflen = _currTermLen; }
+ vespalib::stringref getIndexName() const { return vespalib::stringref(_currIndexName, _currIndexNameLen); }
+ vespalib::stringref getTerm() const { return vespalib::stringref(_currTerm, _currTermLen); }
};
}
diff --git a/searchlib/src/vespa/searchlib/query/querynode.cpp b/searchlib/src/vespa/searchlib/query/querynode.cpp
index c9428e513d6..17df761af83 100644
--- a/searchlib/src/vespa/searchlib/query/querynode.cpp
+++ b/searchlib/src/vespa/searchlib/query/querynode.cpp
@@ -61,10 +61,7 @@ QueryNode::UP QueryNode::Build(const QueryNode * parent, const QueryNodeResultBa
(type == search::ParseItem::ITEM_DOT_PRODUCT) ||
(type == search::ParseItem::ITEM_WAND))
{
- const char * index;
- size_t indexLen(0);
- queryRep.getIndexName(&index, &indexLen);
- qn->setIndex(vespalib::string(index, indexLen));
+ qn->setIndex(queryRep.getIndexName());
}
for (size_t i=0; i < arity; i++) {
queryRep.next();
@@ -91,22 +88,15 @@ QueryNode::UP QueryNode::Build(const QueryNode * parent, const QueryNodeResultBa
case search::ParseItem::ITEM_PURE_WEIGHTED_STRING:
case search::ParseItem::ITEM_PURE_WEIGHTED_LONG:
{
- const char * index;
- size_t indexLen(0);
- queryRep.getIndexName(&index, &indexLen);
- if (indexLen == 0) {
+ vespalib::stringref index = queryRep.getIndexName();
+ if (index.empty()) {
if ((type == search::ParseItem::ITEM_PURE_WEIGHTED_STRING) || (type == search::ParseItem::ITEM_PURE_WEIGHTED_LONG)) {
- const vespalib::string & ref = parent->getIndex();
- index = ref.c_str();
- indexLen = ref.size();
+ index = parent->getIndex();
} else {
- index = "default";
- indexLen = strlen(index);
+ index = DEFAULT;
}
}
- const char * term;
- size_t termLen(0);
- queryRep.getTerm(&term, &termLen);
+ vespalib::stringref term = queryRep.getTerm();
QueryTerm::SearchTerm sTerm(QueryTerm::WORD);
switch (type) {
case search::ParseItem::ITEM_REGEXP:
@@ -127,8 +117,8 @@ QueryNode::UP QueryNode::Build(const QueryNode * parent, const QueryNodeResultBa
default:
break;
}
- QueryTerm::string ssTerm(term, termLen);
- QueryTerm::string ssIndex(index, indexLen);
+ QueryTerm::string ssTerm(term);
+ QueryTerm::string ssIndex(index);
if (ssIndex == "sddocname") {
// This is suboptimal as the term should be checked too.
// But it will do for now as only correct sddocname queries are sent down.
diff --git a/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h b/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h
index 7919c0df981..246fd288b0d 100644
--- a/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h
+++ b/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h
@@ -54,19 +54,6 @@ public:
}
private:
- /**
- * If changing this class note:
- * Note that this method must return a reference into the existing querystack.
- * This is necessary to use the non-copying stringref noted in the create method.
- */
- static vespalib::stringref readString(SimpleQueryStackDumpIterator &queryStack, void (SimpleQueryStackDumpIterator::*f)(const char **, size_t *) const)
- {
- const char *p;
- size_t len;
- (queryStack.*f)(&p, &len);
- return vespalib::stringref(p, len);
- }
-
static Term * createQueryTerm(search::SimpleQueryStackDumpIterator &queryStack, QueryBuilder<NodeTypes> & builder, vespalib::stringref & pureTermView) {
uint32_t arity = queryStack.getArity();
uint32_t arg1 = queryStack.getArg1();
@@ -82,13 +69,13 @@ private:
} else if (type == ParseItem::ITEM_OR) {
builder.addOr(arity);
} else if (type == ParseItem::ITEM_WORD_ALTERNATIVES) {
- vespalib::stringref view = readString(queryStack, &SimpleQueryStackDumpIterator::getIndexName);
+ vespalib::stringref view = queryStack.getIndexName();
int32_t id = queryStack.getUniqueId();
Weight weight = queryStack.GetWeight();
builder.addEquiv(arity, id, weight);
pureTermView = view;
} else if (type == ParseItem::ITEM_WEAK_AND) {
- vespalib::stringref view = readString(queryStack, &SimpleQueryStackDumpIterator::getIndexName);
+ vespalib::stringref view = queryStack.getIndexName();
builder.addWeakAnd(arity, arg1, view);
pureTermView = view;
} else if (type == ParseItem::ITEM_EQUIV) {
@@ -100,25 +87,25 @@ private:
} else if (type == ParseItem::ITEM_ONEAR) {
builder.addONear(arity, arg1);
} else if (type == ParseItem::ITEM_PHRASE) {
- vespalib::stringref view = readString(queryStack, &SimpleQueryStackDumpIterator::getIndexName);
+ vespalib::stringref view = queryStack.getIndexName();
int32_t id = queryStack.getUniqueId();
Weight weight = queryStack.GetWeight();
t = &builder.addPhrase(arity, view, id, weight);
pureTermView = view;
} else if (type == ParseItem::ITEM_WEIGHTED_SET) {
- vespalib::stringref view = readString(queryStack, &SimpleQueryStackDumpIterator::getIndexName);
+ vespalib::stringref view = queryStack.getIndexName();
int32_t id = queryStack.getUniqueId();
Weight weight = queryStack.GetWeight();
t = &builder.addWeightedSetTerm(arity, view, id, weight);
pureTermView = vespalib::stringref();
} else if (type == ParseItem::ITEM_DOT_PRODUCT) {
- vespalib::stringref view = readString(queryStack, &SimpleQueryStackDumpIterator::getIndexName);
+ vespalib::stringref view = queryStack.getIndexName();
int32_t id = queryStack.getUniqueId();
Weight weight = queryStack.GetWeight();
t = &builder.addDotProduct(arity, view, id, weight);
pureTermView = vespalib::stringref();
} else if (type == ParseItem::ITEM_WAND) {
- vespalib::stringref view = readString(queryStack, &SimpleQueryStackDumpIterator::getIndexName);
+ vespalib::stringref view = queryStack.getIndexName();
int32_t id = queryStack.getUniqueId();
Weight weight = queryStack.GetWeight();
t = &builder.addWandTerm(arity, view, id, weight, arg1, arg2, arg3);
@@ -126,8 +113,8 @@ private:
} else if (type == ParseItem::ITEM_NOT) {
builder.addAndNot(arity);
} else {
- vespalib::stringref term = readString(queryStack, &SimpleQueryStackDumpIterator::getTerm);
- vespalib::stringref view = readString(queryStack, &SimpleQueryStackDumpIterator::getIndexName);
+ vespalib::stringref term = queryStack.getTerm();
+ vespalib::stringref view = queryStack.getIndexName();
int32_t id = queryStack.getUniqueId();
Weight weight = queryStack.GetWeight();
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp
index 9a9041ea295..07eaad9807f 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp
@@ -169,29 +169,27 @@ public:
virtual const char *Index(const juniper::QueryItem* item, size_t *len) const
{
if (item->_si != NULL) {
- const char *ret;
- item->_si->getIndexName(&ret, len);
- return ret;
+ *len = item->_si->getIndexName().size();
+ return item->_si->getIndexName().c_str();
} else {
+ *len = item->_data->_indexlen;
return item->_data->_index;
}
}
virtual bool UsefulIndex(const juniper::QueryItem* item) const
{
- const char *buf;
- size_t buflen;
+ vespalib::stringref index;
if (_kwExtractor == NULL)
return true;
if (item->_si != NULL) {
- item->_si->getIndexName(&buf, &buflen);
+ index = item->_si->getIndexName();
} else {
- buf = item->_data->_index;
- buflen = item->_data->_indexlen;
+ index = vespalib::stringref(item->_data->_index, item->_data->_indexlen);
}
- return _kwExtractor->IsLegalIndex(buf, buflen);
+ return _kwExtractor->IsLegalIndex(index);
}
};
@@ -203,8 +201,6 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const
bool rc = true;
search::SimpleQueryStackDumpIterator iterator(_buf);
juniper::QueryItem item(&iterator);
- const char *buf;
- size_t buflen;
if (_highlightTerms->numKeys() > 0) {
v->VisitAND(&item, 2);
@@ -234,14 +230,15 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const
case search::ParseItem::ITEM_TERM:
case search::ParseItem::ITEM_EXACTSTRINGTERM:
case search::ParseItem::ITEM_PURE_WEIGHTED_STRING:
- iterator.getTerm(&buf, &buflen);
- v->VisitKeyword(&item, buf, buflen, false, isSpecialToken);
+ {
+ vespalib::stringref term = iterator.getTerm();
+ v->VisitKeyword(&item, term.c_str(), term.size(), false, isSpecialToken);
+ }
break;
case search::ParseItem::ITEM_NUMTERM:
- iterator.getTerm(&buf, &buflen);
{
- vespalib::string termStr(buf, buflen);
- queryeval::SplitFloat splitter(termStr);
+ vespalib::string term = iterator.getTerm();
+ queryeval::SplitFloat splitter(term);
if (splitter.parts() > 1) {
if (v->VisitPHRASE(&item, splitter.parts())) {
for (size_t i = 0; i < splitter.parts(); ++i) {
@@ -255,7 +252,7 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const
splitter.getPart(0).c_str(),
splitter.getPart(0).size(), false);
} else {
- v->VisitKeyword(&item, buf, buflen, false, true);
+ v->VisitKeyword(&item, term.c_str(), term.size(), false, true);
}
}
break;
@@ -269,16 +266,14 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const
break;
case search::ParseItem::ITEM_PREFIXTERM:
case search::ParseItem::ITEM_SUBSTRINGTERM:
- iterator.getTerm(&buf, &buflen);
- v->VisitKeyword(&item, buf, buflen, true, isSpecialToken);
+ {
+ vespalib::stringref term = iterator.getTerm();
+ v->VisitKeyword(&item, term.c_str(), term.size(), true, isSpecialToken);
+ }
break;
case search::ParseItem::ITEM_ANY:
-#if (JUNIPER_RP_API_MINOR_VERSION >= 1)
if (!v->VisitANY(&item, iterator.getArity()))
-#else
- if (!v->VisitOR(&item, iterator.getArity()))
-#endif
- rc = SkipItem(&iterator);
+ rc = SkipItem(&iterator);
break;
case search::ParseItem::ITEM_NEAR:
if (!v->VisitNEAR(&item, iterator.getArity(),iterator.getArg1()))
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp
index 6d567f9a6da..51025ab1034 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp
@@ -111,10 +111,9 @@ KeywordExtractor::GetLegalIndexSpec()
bool
-KeywordExtractor::IsLegalIndex(const char *idxName, size_t idxNameLen) const
+KeywordExtractor::IsLegalIndex(vespalib::stringref idxS) const
{
vespalib::string resolvedIdxName;
- vespalib::string idxS(idxName, idxNameLen);
if (_env != NULL) {
resolvedIdxName = _env->lookupIndex(idxS);
@@ -136,10 +135,8 @@ KeywordExtractor::IsLegalIndex(const char *idxName, size_t idxNameLen) const
char *
-KeywordExtractor::ExtractKeywords(const vespalib::stringref &buf) const
+KeywordExtractor::ExtractKeywords(vespalib::stringref buf) const
{
- const char *str_ptr;
- size_t str_len;
search::SimpleQueryStackDumpIterator si(buf);
char keywordstore[4096]; // Initial storage for keywords buffer
search::RawBuf keywords(keywordstore, sizeof(keywordstore));
@@ -171,27 +168,28 @@ KeywordExtractor::ExtractKeywords(const vespalib::stringref &buf) const
keywords.reset();
goto iteratorloopend;
} else {
- si.getIndexName(&str_ptr, &str_len);
- if (!IsLegalIndex(str_ptr, str_len))
+ if (!IsLegalIndex(si.getIndexName()))
continue;
// Found a term
- si.getTerm(&str_ptr, &str_len);
+ vespalib::stringref term = si.getTerm();
search::ParseItem::ItemCreator term_creator = si.getCreator();
- if (str_len > 0 && useful(term_creator)) {
+ if ( !term.empty() && useful(term_creator)) {
// Actual term to add
- if (phraseterms_was_added)
+ if (phraseterms_was_added) {
// Not the first term in the phrase
keywords += " ";
- else
+ } else {
phraseterms_was_added = true;
+ }
- keywords.append(str_ptr, str_len);
+ keywords.append(term.c_str(), term.size());
}
}
}
- if (phraseterms_was_added)
+ if (phraseterms_was_added) {
// Terms was added, so 0-terminate the string
keywords.append("\0", 1);
+ }
break;
}
@@ -200,15 +198,16 @@ KeywordExtractor::ExtractKeywords(const vespalib::stringref &buf) const
case search::ParseItem::ITEM_EXACTSTRINGTERM:
case search::ParseItem::ITEM_NUMTERM:
case search::ParseItem::ITEM_TERM:
- si.getIndexName(&str_ptr, &str_len);
- if (!IsLegalIndex(str_ptr, str_len))
+ if (!IsLegalIndex(si.getIndexName()))
continue;
- // add a new keyword
- si.getTerm(&str_ptr, &str_len);
- if (str_len > 0 && useful(creator)) {
- // An actual string to add
- keywords.append(str_ptr, str_len);
- keywords.append("\0", 1);
+ {
+ // add a new keyword
+ vespalib::stringref term = si.getTerm();
+ if ( !term.empty() && useful(creator)) {
+ // An actual string to add
+ keywords.append(term.c_str(), term.size());
+ keywords.append("\0", 1);
+ }
}
break;
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h
index 750cfb2cdee..35c9d387317 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h
@@ -135,7 +135,7 @@ public:
*
* @return true if the given index name is legal.
**/
- bool IsLegalIndex(const char *idxName, size_t idxNameLen) const;
+ bool IsLegalIndex(vespalib::stringref idx) const;
/**
@@ -156,7 +156,7 @@ public:
* @return Pointer to a buffer containing zero-terminated keywords,
* with an empty word at the end.
*/
- char *ExtractKeywords(const vespalib::stringref &buf) const;
+ char *ExtractKeywords(vespalib::stringref buf) const;
};
}