summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-03-05 06:04:04 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2019-03-05 12:16:43 +0000
commitf1c2464fd83e6623000ad6eb59272b189fffb78e (patch)
tree55288880cd7f6a05125079aaa432c5740fae28ef /searchlib
parentede6354f72951bde6247519e03d6445d3f155985 (diff)
Transform to slime.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp68
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/blueprint.cpp11
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/blueprint.h7
3 files changed, 85 insertions, 1 deletions
diff --git a/searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp b/searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp
index e5ee83507ae..0d34b41d5c7 100644
--- a/searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp
+++ b/searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp
@@ -5,6 +5,7 @@
#include <vespa/searchlib/queryeval/intermediate_blueprints.h>
#include <vespa/vespalib/objects/objectdumper.h>
#include <vespa/vespalib/objects/visit.h>
+#include <vespa/vespalib/data/slime/slime.h>
#include <algorithm>
#include <vespa/log/log.h>
@@ -178,6 +179,7 @@ public:
void testSearchCreation();
void testBlueprintMakeNew();
void requireThatAsStringWorks();
+ void requireThatAsSlimeWorks();
void requireThatVisitMembersWorks();
void requireThatDocIdLimitInjectionWorks();
int Main() override;
@@ -698,6 +700,59 @@ getExpectedBlueprint()
"}\n";
}
+vespalib::string
+getExpectedSlimeBlueprint() {
+ return "{"
+ " '(anonymous namespace)::MyOr': {"
+ " isTermLike: true,"
+ " fields: {"
+ " '[type]': 'FieldList',"
+ " '[0]': {"
+ " '[type]': 'Field',"
+ " fieldId: 5,"
+ " handle: 7,"
+ " isFilter: false"
+ " }"
+ " },"
+ " estimate: {"
+ " '[type]': 'HitEstimate',"
+ " empty: false,"
+ " estHits: 9,"
+ " tree_size: 2,"
+ " allow_termwise_eval: 0"
+ " },"
+ " sourceId: 4294967295,"
+ " docid_limit: 0,"
+ " children: {"
+ " '[type]': 'std::vector',"
+ " '[0]': {"
+ " isTermLike: true,"
+ " fields: {"
+ " '[type]': 'FieldList',"
+ " '[0]': {"
+ " '[type]': 'Field',"
+ " fieldId: 5,"
+ " handle: 7,"
+ " isFilter: false"
+ " }"
+ " },"
+ " '[type]': '(anonymous namespace)::MyTerm',"
+ " estimate: {"
+ " '[type]': 'HitEstimate',"
+ " empty: false,"
+ " estHits: 9,"
+ " tree_size: 1,"
+ " allow_termwise_eval: 1"
+ " },"
+ " sourceId: 4294967295,"
+ " docid_limit: 0"
+ " }"
+ " }"
+ " }"
+ "}";
+}
+
+
struct BlueprintFixture
{
MyOr _blueprint;
@@ -714,6 +769,18 @@ Test::requireThatAsStringWorks()
}
void
+Test::requireThatAsSlimeWorks()
+{
+ BlueprintFixture f;
+ vespalib::Slime slime;
+ f._blueprint.asSlime(vespalib::slime::SlimeInserter(slime));
+ auto s = slime.toString();
+ vespalib::Slime expectedSlime;
+ vespalib::slime::JsonFormat::decode(getExpectedSlimeBlueprint(), expectedSlime);
+ EXPECT_EQUAL(expectedSlime, slime);
+}
+
+void
Test::requireThatVisitMembersWorks()
{
BlueprintFixture f;
@@ -749,6 +816,7 @@ Test::Main()
testSearchCreation();
testBlueprintMakeNew();
requireThatAsStringWorks();
+ requireThatAsSlimeWorks();
requireThatVisitMembersWorks();
requireThatDocIdLimitInjectionWorks();
TEST_DONE();
diff --git a/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp
index c99e07cd355..3f3b4a2300e 100644
--- a/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp
@@ -6,7 +6,9 @@
#include "equiv_blueprint.h"
#include <vespa/vespalib/objects/visit.hpp>
#include <vespa/vespalib/objects/objectdumper.h>
+#include <vespa/vespalib/objects/object2slime.h>
#include <vespa/vespalib/util/classname.h>
+#include <vespa/vespalib/data/slime/inserter.h>
#include <map>
#include <vespa/log/log.h>
@@ -117,6 +119,15 @@ Blueprint::asString() const
return dumper.toString();
}
+vespalib::slime::Cursor &
+Blueprint::asSlime(const vespalib::slime::Inserter & inserter) const
+{
+ vespalib::slime::Cursor & cursor = inserter.insertObject();
+ vespalib::Object2Slime dumper(cursor);
+ visit(dumper, "", this);
+ return cursor;
+}
+
vespalib::string
Blueprint::getClassName() const
{
diff --git a/searchlib/src/vespa/searchlib/queryeval/blueprint.h b/searchlib/src/vespa/searchlib/queryeval/blueprint.h
index 165f592867a..4b60e7d0d8b 100644
--- a/searchlib/src/vespa/searchlib/queryeval/blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/blueprint.h
@@ -9,7 +9,11 @@
#include <vespa/searchlib/fef/termfieldmatchdata.h>
#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
-namespace vespalib { class ObjectVisitor; };
+namespace vespalib { class ObjectVisitor; }
+namespace vespalib::slime {
+ class Cursor;
+ class Inserter;
+}
namespace search::queryeval {
@@ -173,6 +177,7 @@ public:
// for debug dumping
vespalib::string asString() const;
+ vespalib::slime::Cursor & asSlime(const vespalib::slime::Inserter & cursor) const;
virtual vespalib::string getClassName() const;
virtual void visitMembers(vespalib::ObjectVisitor &visitor) const;
virtual bool isEquiv() const { return false; }