aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-07-12 08:54:33 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-07-13 09:17:32 +0000
commit12a961c14bf256cd07d75e3dd1adf408b972e07b (patch)
tree92476781679114e294372d4b978cb6c715fea25a /searchlib
parent66161a01d7bdf35b3a8c108b165ec041927740a0 (diff)
Separate out non templated code, and avoid magic pre include LOG_SETUP.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/CMakeLists.txt5
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/querybuilder.h2
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.cpp43
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h33
4 files changed, 56 insertions, 27 deletions
diff --git a/searchlib/src/vespa/searchlib/query/tree/CMakeLists.txt b/searchlib/src/vespa/searchlib/query/tree/CMakeLists.txt
index 4fcec251caa..a3a1d52701e 100644
--- a/searchlib/src/vespa/searchlib/query/tree/CMakeLists.txt
+++ b/searchlib/src/vespa/searchlib/query/tree/CMakeLists.txt
@@ -4,12 +4,13 @@ vespa_add_library(searchlib_query_tree OBJECT
const_bool_nodes.cpp
intermediate.cpp
intermediatenodes.cpp
+ location.cpp
querybuilder.cpp
+ range.cpp
simplequery.cpp
stackdumpcreator.cpp
+ stackdumpquerycreator.cpp
term.cpp
- location.cpp
- range.cpp
termnodes.cpp
DEPENDS
)
diff --git a/searchlib/src/vespa/searchlib/query/tree/querybuilder.h b/searchlib/src/vespa/searchlib/query/tree/querybuilder.h
index 979f48fec89..a2c3f4a5af4 100644
--- a/searchlib/src/vespa/searchlib/query/tree/querybuilder.h
+++ b/searchlib/src/vespa/searchlib/query/tree/querybuilder.h
@@ -82,7 +82,7 @@ public:
/**
* If build failed, the reason is stored here.
*/
- vespalib::string error() { return _error_msg; }
+ vespalib::string error() const { return _error_msg; }
/**
* After an error, reset() must be called before attempting to
diff --git a/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.cpp b/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.cpp
new file mode 100644
index 00000000000..c4c99edd73b
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.cpp
@@ -0,0 +1,43 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "stackdumpquerycreator.h"
+#include <vespa/vespalib/objects/hexdump.h>
+
+#include <vespa/log/log.h>
+LOG_SETUP(".searchlib.query.tree.stackdumpquerycreator");
+
+using vespalib::Issue;
+
+namespace search::query {
+
+void
+StackDumpQueryCreatorHelper::populateMultiTerm(SimpleQueryStackDumpIterator &queryStack, QueryBuilderBase & builder, MultiTerm & mt) {
+ uint32_t added(0);
+ for (added = 0; (added < mt.getNumTerms()) && queryStack.next(); added++) {
+ ParseItem::ItemType type = queryStack.getType();
+ switch (type) {
+ case ParseItem::ITEM_PURE_WEIGHTED_LONG:
+ mt.addTerm(queryStack.getIntergerTerm(), queryStack.GetWeight());
+ break;
+ case ParseItem::ITEM_PURE_WEIGHTED_STRING:
+ mt.addTerm(queryStack.getTerm(), queryStack.GetWeight());
+ break;
+ default:
+ builder.reportError(vespalib::make_string("Got unexpected node %d for multiterm node at child term %d", type, added));
+ return;
+ }
+ }
+ if (added < mt.getNumTerms()) {
+ builder.reportError(vespalib::make_string("Too few nodes(%d) for multiterm(%d)", added, mt.getNumTerms()));
+ }
+}
+
+void
+StackDumpQueryCreatorHelper::reportError(const SimpleQueryStackDumpIterator &queryStack, const QueryBuilderBase & builder) {
+ vespalib::stringref stack = queryStack.getStack();
+ Issue::report("Unable to create query tree from stack dump. Failed at position %ld out of %ld bytes %s",
+ queryStack.getPosition(), stack.size(), builder.error().c_str());
+ LOG(error, "got bad query stack: %s", vespalib::HexDump(stack.data(), stack.size()).toString().c_str());
+}
+
+}
diff --git a/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h b/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h
index a552a650704..8b08ae9daa5 100644
--- a/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h
+++ b/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h
@@ -4,16 +4,21 @@
#include "node.h"
#include "querybuilder.h"
-#include "term.h"
+#include "termnodes.h"
#include <vespa/searchlib/parsequery/stackdumpiterator.h>
#include <vespa/searchlib/common/geo_location_parser.h>
-#include <vespa/vespalib/objects/hexdump.h>
#include <vespa/vespalib/util/stringfmt.h>
#include <vespa/vespalib/util/issue.h>
#include <charconv>
namespace search::query {
+class StackDumpQueryCreatorHelper {
+public:
+ static void populateMultiTerm(SimpleQueryStackDumpIterator &queryStack, QueryBuilderBase & builder, MultiTerm & mt);
+ static void reportError(const SimpleQueryStackDumpIterator &queryStack, const QueryBuilderBase & builder);
+};
+
/**
* Creates a query tree from a stack dump.
*/
@@ -40,34 +45,14 @@ public:
}
}
if (builder.hasError()) {
- vespalib::stringref stack = queryStack.getStack();
- vespalib::Issue::report("Unable to create query tree from stack dump. Failed at position %ld out of %ld bytes %s",
- queryStack.getPosition(), stack.size(), builder.error().c_str());
- LOG(error, "got bad query stack: %s", vespalib::HexDump(stack.data(), stack.size()).toString().c_str());
+ StackDumpQueryCreatorHelper::reportError(queryStack, builder);
}
return builder.build();
}
private:
static void populateMultiTerm(search::SimpleQueryStackDumpIterator &queryStack, QueryBuilderBase & builder, MultiTerm & mt) {
- uint32_t added(0);
- for (added = 0; (added < mt.getNumTerms()) && queryStack.next(); added++) {
- ParseItem::ItemType type = queryStack.getType();
- switch (type) {
- case ParseItem::ITEM_PURE_WEIGHTED_LONG:
- mt.addTerm(queryStack.getIntergerTerm(), queryStack.GetWeight());
- break;
- case ParseItem::ITEM_PURE_WEIGHTED_STRING:
- mt.addTerm(queryStack.getTerm(), queryStack.GetWeight());
- break;
- default:
- builder.reportError(vespalib::make_string("Got unexpected node %d for multiterm node at child term %d", type, added));
- return;
- }
- }
- if (added < mt.getNumTerms()) {
- builder.reportError(vespalib::make_string("Too few nodes(%d) for multiterm(%d)", added, mt.getNumTerms()));
- }
+ StackDumpQueryCreatorHelper::populateMultiTerm(queryStack, builder, mt);
}
static Term *
createQueryTerm(search::SimpleQueryStackDumpIterator &queryStack, QueryBuilder<NodeTypes> & builder, vespalib::stringref & pureTermView) {