diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-07-12 08:54:33 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-07-13 09:17:32 +0000 |
commit | 12a961c14bf256cd07d75e3dd1adf408b972e07b (patch) | |
tree | 92476781679114e294372d4b978cb6c715fea25a /searchlib | |
parent | 66161a01d7bdf35b3a8c108b165ec041927740a0 (diff) |
Separate out non templated code, and avoid magic pre include LOG_SETUP.
Diffstat (limited to 'searchlib')
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) { |