diff options
Diffstat (limited to 'searchlib/src/vespa/searchlib/queryeval')
5 files changed, 43 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp index e1322d04081..5b8757411bd 100644 --- a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp @@ -90,4 +90,12 @@ CreateBlueprintVisitorHelper::visitWandTerm(query::WandTerm &n) { n); } +void CreateBlueprintVisitorHelper::visit(query::TrueQueryNode &) { + setResult(std::make_unique<AlwaysTrueBlueprint>()); +} + +void CreateBlueprintVisitorHelper::visit(query::FalseQueryNode &) { + setResult(std::make_unique<EmptyBlueprint>()); +} + } diff --git a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h index ceca605b2e6..86cde64a197 100644 --- a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h +++ b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h @@ -73,6 +73,9 @@ public: void visit(query::SuffixTerm &n) override = 0; void visit(query::RegExpTerm &n) override = 0; void visit(query::NearestNeighborTerm &n) override = 0; + + void visit(query::TrueQueryNode &) final override; + void visit(query::FalseQueryNode &) final override; }; } diff --git a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp index a72fbc8d57a..53ffe839a72 100644 --- a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp @@ -2,6 +2,7 @@ #include "leaf_blueprints.h" #include "emptysearch.h" +#include "full_search.h" #include "simplesearch.h" #include "fake_search.h" @@ -37,6 +38,24 @@ EmptyBlueprint::EmptyBlueprint() { } + +SearchIterator::UP +AlwaysTrueBlueprint::createLeafSearch(const search::fef::TermFieldMatchDataArray &, bool) const +{ + return std::make_unique<FullSearch>(); +} + +SearchIterator::UP +AlwaysTrueBlueprint::createFilterSearch(bool /*strict*/, FilterConstraint /* constraint */) const +{ + return std::make_unique<FullSearch>(); +} + +AlwaysTrueBlueprint::AlwaysTrueBlueprint() : SimpleLeafBlueprint(FieldSpecBaseList()) +{ + setEstimate(HitEstimate(search::endDocId, false)); +} + //----------------------------------------------------------------------------- SearchIterator::UP diff --git a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h index 288f4dec1c8..7a1d8f3d253 100644 --- a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h +++ b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h @@ -22,6 +22,15 @@ public: SearchIterator::UP createFilterSearch(bool strict, FilterConstraint constraint) const override; }; +class AlwaysTrueBlueprint : public SimpleLeafBlueprint +{ +protected: + SearchIterator::UP createLeafSearch(const search::fef::TermFieldMatchDataArray &tfmda, bool strict) const override; +public: + AlwaysTrueBlueprint(); + SearchIterator::UP createFilterSearch(bool strict, FilterConstraint constraint) const override; +}; + //----------------------------------------------------------------------------- class SimpleBlueprint : public SimpleLeafBlueprint diff --git a/searchlib/src/vespa/searchlib/queryeval/termasstring.cpp b/searchlib/src/vespa/searchlib/queryeval/termasstring.cpp index bcf3fb8e86d..08c0280ee68 100644 --- a/searchlib/src/vespa/searchlib/queryeval/termasstring.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/termasstring.cpp @@ -16,6 +16,7 @@ using search::query::And; using search::query::AndNot; using search::query::DotProduct; using search::query::Equiv; +using search::query::FalseQueryNode; using search::query::LocationTerm; using search::query::Near; using search::query::NearestNeighborTerm; @@ -34,6 +35,7 @@ using search::query::SameElement; using search::query::StringTerm; using search::query::SubstringTerm; using search::query::SuffixTerm; +using search::query::TrueQueryNode; using search::query::WandTerm; using search::query::WeakAnd; using search::query::WeightedSetTerm; @@ -105,6 +107,8 @@ struct TermAsStringVisitor : public QueryVisitor { void visit(RegExpTerm &n) override {visitTerm(n); } void visit(PredicateQuery &) override {illegalVisit(); } void visit(NearestNeighborTerm &) override { illegalVisit(); } + void visit(TrueQueryNode &) override { illegalVisit(); } + void visit(FalseQueryNode &) override { illegalVisit(); } }; void throwFailure(const search::query::Node &term_node) __attribute((noinline)); |