From a7f289541ff64edfeea11d4db4310c5245f1f823 Mon Sep 17 00:00:00 2001 From: Arne H Juul Date: Tue, 19 Oct 2021 11:08:39 +0000 Subject: use custom types for true/false (NodeTypes::True, ProtonTrue, etc) --- searchlib/src/tests/query/querybuilder_test.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'searchlib/src/tests/query/querybuilder_test.cpp') diff --git a/searchlib/src/tests/query/querybuilder_test.cpp b/searchlib/src/tests/query/querybuilder_test.cpp index 0c784287e5c..b421084bbef 100644 --- a/searchlib/src/tests/query/querybuilder_test.cpp +++ b/searchlib/src/tests/query/querybuilder_test.cpp @@ -409,6 +409,8 @@ struct MyNearestNeighborTerm : NearestNeighborTerm { : NearestNeighborTerm(query_tensor_name, field_name, i, w, target_num_hits, allow_approximate, explore_additional_hits, distance_threshold) {} }; +struct MyTrue : TrueQueryNode {}; +struct MyFalse : FalseQueryNode {}; struct MyQueryNodeTypes { typedef MyAnd And; @@ -434,6 +436,8 @@ struct MyQueryNodeTypes { typedef MyPredicateQuery PredicateQuery; typedef MyRegExpTerm RegExpTerm; typedef MyNearestNeighborTerm NearestNeighborTerm; + typedef MyTrue True; + typedef MyFalse False; }; TEST("require that Custom Query Trees Can Be Built") { -- cgit v1.2.3 From e75c880c158bd8a4b3cf3f1d7701d6855c9f260d Mon Sep 17 00:00:00 2001 From: Arne H Juul Date: Tue, 19 Oct 2021 11:36:31 +0000 Subject: extend unit test --- searchlib/src/tests/query/querybuilder_test.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'searchlib/src/tests/query/querybuilder_test.cpp') diff --git a/searchlib/src/tests/query/querybuilder_test.cpp b/searchlib/src/tests/query/querybuilder_test.cpp index b421084bbef..80ccd494ef6 100644 --- a/searchlib/src/tests/query/querybuilder_test.cpp +++ b/searchlib/src/tests/query/querybuilder_test.cpp @@ -47,7 +47,7 @@ PredicateQueryTerm::UP getPredicateQueryTerm() { template Node::UP createQueryTree() { QueryBuilder builder; - builder.addAnd(11); + builder.addAnd(12); { builder.addRank(2); { @@ -110,6 +110,11 @@ Node::UP createQueryTree() { builder.addStringTerm(str[6], view[6], id[6], weight[7]); } builder.add_nearest_neighbor_term("query_tensor", "doc_tensor", id[3], weight[5], 7, true, 33, 100100.25); + builder.addAndNot(2); + { + builder.add_true_node(); + builder.add_false_node(); + } } Node::UP node = builder.build(); ASSERT_TRUE(node.get()); @@ -172,10 +177,12 @@ void checkQueryTreeTypes(Node *node) { typedef typename NodeTypes::WeakAnd WeakAnd; typedef typename NodeTypes::PredicateQuery PredicateQuery; typedef typename NodeTypes::RegExpTerm RegExpTerm; + typedef typename NodeTypes::True TrueNode; + typedef typename NodeTypes::False FalseNode; ASSERT_TRUE(node); auto* and_node = as_node(node); - EXPECT_EQUAL(11u, and_node->getChildren().size()); + EXPECT_EQUAL(12u, and_node->getChildren().size()); auto* rank = as_node(and_node->getChildren()[0]); EXPECT_EQUAL(2u, rank->getChildren().size()); @@ -292,6 +299,13 @@ void checkQueryTreeTypes(Node *node) { EXPECT_EQUAL(id[3], nearest_neighbor->getId()); EXPECT_EQUAL(weight[5].percent(), nearest_neighbor->getWeight().percent()); EXPECT_EQUAL(7u, nearest_neighbor->get_target_num_hits()); + + and_not = as_node(and_node->getChildren()[11]); + EXPECT_EQUAL(2u, and_not->getChildren().size()); + auto* true_node = as_node(and_not->getChildren()[0]); + auto* false_node = as_node(and_not->getChildren()[1]); + EXPECT_TRUE(true_node); + EXPECT_TRUE(false_node); } struct AbstractTypes { @@ -316,6 +330,8 @@ struct AbstractTypes { typedef search::query::WeakAnd WeakAnd; typedef search::query::PredicateQuery PredicateQuery; typedef search::query::RegExpTerm RegExpTerm; + typedef search::query::TrueQueryNode True; + typedef search::query::FalseQueryNode False; }; // Builds a tree with simplequery and checks that the results have the -- cgit v1.2.3 From 5bac27daa62f5b9136695a319a7ff5a7b8bcb602 Mon Sep 17 00:00:00 2001 From: Arne H Juul Date: Tue, 19 Oct 2021 14:15:47 +0000 Subject: use same name for abstract node types --- searchcore/src/vespa/searchcore/proton/matching/querynodes.h | 4 ++-- .../src/vespa/searchcorespi/index/indexcollection.cpp | 4 ++-- searchlib/src/tests/query/customtypevisitor_test.cpp | 4 ++-- searchlib/src/tests/query/querybuilder_test.cpp | 12 ++++++------ searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp | 2 -- .../src/vespa/searchlib/query/tree/customtypetermvisitor.h | 4 ++-- searchlib/src/vespa/searchlib/query/tree/customtypevisitor.h | 12 ++++++------ searchlib/src/vespa/searchlib/query/tree/querybuilder.h | 8 ++++---- searchlib/src/vespa/searchlib/query/tree/simplequery.h | 4 ++-- 9 files changed, 26 insertions(+), 28 deletions(-) (limited to 'searchlib/src/tests/query/querybuilder_test.cpp') diff --git a/searchcore/src/vespa/searchcore/proton/matching/querynodes.h b/searchcore/src/vespa/searchcore/proton/matching/querynodes.h index 084c533fa55..e7817dcecd2 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/querynodes.h +++ b/searchcore/src/vespa/searchcore/proton/matching/querynodes.h @@ -162,8 +162,8 @@ struct ProtonNodeTypes { typedef ProtonPredicateQuery PredicateQuery; typedef ProtonRegExpTerm RegExpTerm; typedef ProtonNearestNeighborTerm NearestNeighborTerm; - typedef ProtonTrue True; - typedef ProtonFalse False; + typedef ProtonTrue TrueQueryNode; + typedef ProtonFalse FalseQueryNode; }; } diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexcollection.cpp b/searchcorespi/src/vespa/searchcorespi/index/indexcollection.cpp index 49348d77c08..5592215f9e2 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/indexcollection.cpp +++ b/searchcorespi/src/vespa/searchcorespi/index/indexcollection.cpp @@ -188,6 +188,8 @@ private: void visit(Near &) override { } void visit(ONear &) override { } void visit(SameElement &) override { } + void visit(TrueQueryNode &) override {} + void visit(FalseQueryNode &) override {} void visit(WeightedSetTerm &n) override { visitTerm(n); } void visit(DotProduct &n) override { visitTerm(n); } @@ -203,8 +205,6 @@ private: void visit(PredicateQuery &n) override { visitTerm(n); } void visit(RegExpTerm &n) override { visitTerm(n); } void visit(NearestNeighborTerm &n) override { visitTerm(n); } - void visit(TrueQueryNode &) override {} - void visit(FalseQueryNode &) override {} public: CreateBlueprintVisitor(const IIndexCollection &indexes, diff --git a/searchlib/src/tests/query/customtypevisitor_test.cpp b/searchlib/src/tests/query/customtypevisitor_test.cpp index da3d8ffa115..35280fb0bd8 100644 --- a/searchlib/src/tests/query/customtypevisitor_test.cpp +++ b/searchlib/src/tests/query/customtypevisitor_test.cpp @@ -72,8 +72,8 @@ struct MyQueryNodeTypes { typedef MyPredicateQuery PredicateQuery; typedef MyRegExpTerm RegExpTerm; typedef MyNearestNeighborTerm NearestNeighborTerm; - typedef MyFalse False; - typedef MyTrue True; + typedef MyFalse FalseQueryNode; + typedef MyTrue TrueQueryNode; }; class MyCustomVisitor : public CustomTypeVisitor diff --git a/searchlib/src/tests/query/querybuilder_test.cpp b/searchlib/src/tests/query/querybuilder_test.cpp index 80ccd494ef6..93cfad27742 100644 --- a/searchlib/src/tests/query/querybuilder_test.cpp +++ b/searchlib/src/tests/query/querybuilder_test.cpp @@ -177,8 +177,8 @@ void checkQueryTreeTypes(Node *node) { typedef typename NodeTypes::WeakAnd WeakAnd; typedef typename NodeTypes::PredicateQuery PredicateQuery; typedef typename NodeTypes::RegExpTerm RegExpTerm; - typedef typename NodeTypes::True TrueNode; - typedef typename NodeTypes::False FalseNode; + typedef typename NodeTypes::TrueQueryNode TrueNode; + typedef typename NodeTypes::FalseQueryNode FalseNode; ASSERT_TRUE(node); auto* and_node = as_node(node); @@ -330,8 +330,8 @@ struct AbstractTypes { typedef search::query::WeakAnd WeakAnd; typedef search::query::PredicateQuery PredicateQuery; typedef search::query::RegExpTerm RegExpTerm; - typedef search::query::TrueQueryNode True; - typedef search::query::FalseQueryNode False; + typedef search::query::TrueQueryNode TrueQueryNode; + typedef search::query::FalseQueryNode FalseQueryNode; }; // Builds a tree with simplequery and checks that the results have the @@ -452,8 +452,8 @@ struct MyQueryNodeTypes { typedef MyPredicateQuery PredicateQuery; typedef MyRegExpTerm RegExpTerm; typedef MyNearestNeighborTerm NearestNeighborTerm; - typedef MyTrue True; - typedef MyFalse False; + typedef MyTrue TrueQueryNode; + typedef MyFalse FalseQueryNode; }; TEST("require that Custom Query Trees Can Be Built") { diff --git a/searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp b/searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp index 8870a498a55..1574c94e164 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp +++ b/searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp @@ -37,8 +37,6 @@ using query::RegExpTerm; using query::StringTerm; using query::SubstringTerm; using query::SuffixTerm; -using query::TrueQueryNode; -using query::FalseQueryNode; using queryeval::Blueprint; using queryeval::CreateBlueprintVisitorHelper; using queryeval::EmptyBlueprint; diff --git a/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h b/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h index 80b854acaf9..bf92f0ae04c 100644 --- a/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h +++ b/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h @@ -29,8 +29,8 @@ private: void visit(typename NodeTypes::SameElement &n) override { visitChildren(n); } // leaf nodes without terms: - void visit(typename NodeTypes::True &) override {} - void visit(typename NodeTypes::False &) override {} + void visit(typename NodeTypes::TrueQueryNode &) override {} + void visit(typename NodeTypes::FalseQueryNode &) override {} // phrases and weighted set terms are conceptual leaf nodes and // should be handled that way. diff --git a/searchlib/src/vespa/searchlib/query/tree/customtypevisitor.h b/searchlib/src/vespa/searchlib/query/tree/customtypevisitor.h index 0e1f590c348..9f29c34aa05 100644 --- a/searchlib/src/vespa/searchlib/query/tree/customtypevisitor.h +++ b/searchlib/src/vespa/searchlib/query/tree/customtypevisitor.h @@ -50,8 +50,8 @@ public: virtual void visit(typename NodeTypes::PredicateQuery &) = 0; virtual void visit(typename NodeTypes::RegExpTerm &) = 0; virtual void visit(typename NodeTypes::NearestNeighborTerm &) = 0; - virtual void visit(typename NodeTypes::True &) = 0; - virtual void visit(typename NodeTypes::False &) = 0; + virtual void visit(typename NodeTypes::TrueQueryNode &) = 0; + virtual void visit(typename NodeTypes::FalseQueryNode &) = 0; private: // Route QueryVisit requests to the correct custom type. @@ -79,8 +79,8 @@ private: typedef typename NodeTypes::PredicateQuery TPredicateQuery; typedef typename NodeTypes::RegExpTerm TRegExpTerm; typedef typename NodeTypes::NearestNeighborTerm TNearestNeighborTerm; - typedef typename NodeTypes::True TTrue; - typedef typename NodeTypes::False TFalse; + typedef typename NodeTypes::TrueQueryNode TTrueQueryNode; + typedef typename NodeTypes::FalseQueryNode TFalseQueryNode; void visit(And &n) override { visit(static_cast(n)); } void visit(AndNot &n) override { visit(static_cast(n)); } @@ -105,8 +105,8 @@ private: void visit(PredicateQuery &n) override { visit(static_cast(n)); } void visit(RegExpTerm &n) override { visit(static_cast(n)); } void visit(NearestNeighborTerm &n) override { visit(static_cast(n)); } - void visit(TrueQueryNode &n) override { visit(static_cast(n)); } - void visit(FalseQueryNode &n) override { visit(static_cast(n)); } + void visit(TrueQueryNode &n) override { visit(static_cast(n)); } + void visit(FalseQueryNode &n) override { visit(static_cast(n)); } }; } diff --git a/searchlib/src/vespa/searchlib/query/tree/querybuilder.h b/searchlib/src/vespa/searchlib/query/tree/querybuilder.h index 1df73ededac..9631e2afded 100644 --- a/searchlib/src/vespa/searchlib/query/tree/querybuilder.h +++ b/searchlib/src/vespa/searchlib/query/tree/querybuilder.h @@ -100,10 +100,10 @@ public: // control of the query node instantiation. template -typename NodeTypes::True *create_true() { return new typename NodeTypes::True; } +typename NodeTypes::TrueQueryNode *create_true() { return new typename NodeTypes::TrueQueryNode; } template -typename NodeTypes::False *create_false() { return new typename NodeTypes::False; } +typename NodeTypes::FalseQueryNode *create_false() { return new typename NodeTypes::FalseQueryNode; } // Intermediate nodes template @@ -335,10 +335,10 @@ public: adjustWeight(weight); return addTerm(create_nearest_neighbor_term(query_tensor_name, field_name, id, weight, target_num_hits, allow_approximate, explore_additional_hits, distance_threshold)); } - typename NodeTypes::True &add_true_node() { + typename NodeTypes::TrueQueryNode &add_true_node() { return addTerm(create_true()); } - typename NodeTypes::False &add_false_node() { + typename NodeTypes::FalseQueryNode &add_false_node() { return addTerm(create_false()); } }; diff --git a/searchlib/src/vespa/searchlib/query/tree/simplequery.h b/searchlib/src/vespa/searchlib/query/tree/simplequery.h index 4829a569921..0e52698c915 100644 --- a/searchlib/src/vespa/searchlib/query/tree/simplequery.h +++ b/searchlib/src/vespa/searchlib/query/tree/simplequery.h @@ -122,8 +122,8 @@ struct SimpleQueryNodeTypes { using And = SimpleAnd; using AndNot = SimpleAndNot; using Equiv = SimpleEquiv; - using False = SimpleFalse; - using True = SimpleTrue; + using TrueQueryNode = SimpleTrue; + using FalseQueryNode = SimpleFalse; using NumberTerm = SimpleNumberTerm; using LocationTerm = SimpleLocationTerm; using Near = SimpleNear; -- cgit v1.2.3