aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@oath.com>2018-06-08 11:35:14 +0000
committerTor Egge <Tor.Egge@oath.com>2018-06-08 11:35:14 +0000
commit23dc7db626daef98536095f2b399fe084a7a74bb (patch)
treeb3f61b541c8a60b82d88e0f6c3adfae7f3dddd67
parent87ccad88a9f9c30a9fb924d1f2e5638f8930406a (diff)
Handle empty array of struct in attribute combiner dynamic field writer.
-rw-r--r--searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp7
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp3
2 files changed, 7 insertions, 3 deletions
diff --git a/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp b/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp
index 97fafd0a446..06b81be6d8d 100644
--- a/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp
+++ b/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp
@@ -94,9 +94,9 @@ struct AttributeManagerFixture
AttributeManagerFixture::AttributeManagerFixture()
: mgr()
{
- buildStringAttribute("array.name", {{"n1.1", "n1.2"}, {"n2"}, {"n3.1", "n3.2"}, {"", "n4.2"}});
- buildIntegerAttribute("array.val", BasicType::Type::INT8, {{ 10, 11}, {20, 21 }, {30}, { getUndefined<int8_t>(), 41}});
- buildFloatAttribute("array.fval", {{ 110.0}, { 120.0, 121.0 }, { 130.0, 131.0}, { getUndefined<double>(), 141.0 }});
+ buildStringAttribute("array.name", {{"n1.1", "n1.2"}, {"n2"}, {"n3.1", "n3.2"}, {"", "n4.2"}, {}});
+ buildIntegerAttribute("array.val", BasicType::Type::INT8, {{ 10, 11}, {20, 21 }, {30}, { getUndefined<int8_t>(), 41}, {}});
+ buildFloatAttribute("array.fval", {{ 110.0}, { 120.0, 121.0 }, { 130.0, 131.0}, { getUndefined<double>(), 141.0 }, {}});
}
AttributeManagerFixture::~AttributeManagerFixture() = default;
@@ -210,6 +210,7 @@ TEST_F("require that attributes combiner dfw generates correct slime output for
f.assertWritten("[ { fval: 120.0, name: \"n2\", val: 20}, { fval: 121.0, val: 21 }]", 2);
f.assertWritten("[ { fval: 130.0, name: \"n3.1\", val: 30}, { fval: 131.0, name: \"n3.2\"} ]", 3);
f.assertWritten("[ { }, { fval: 141.0, name: \"n4.2\", val: 41} ]", 4);
+ f.assertWritten("null", 5);
}
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp
index 84e329f159d..0527b6a9b57 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp
@@ -54,6 +54,9 @@ ArrayAttributeFieldWriterState::insertField(uint32_t docId, vespalib::slime::Ins
elems = writer->size();
}
}
+ if (elems == 0) {
+ return;
+ }
Cursor &arr = target.insertArray();
for (uint32_t idx = 0; idx < elems; ++idx) {
Cursor &obj = arr.addObject();