diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-04-13 13:59:30 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-04-13 13:59:30 +0000 |
commit | 120f3d34330eb7f3f9950804484f22cafb24cd4d (patch) | |
tree | b5dcb51fe537779b120a8efbb07b5e3146149cc1 | |
parent | aa28f2e1381c3212fb21f7446e00e22795d770bc (diff) |
Always add the default value to the StringAttribute, and assert that it is present.
3 files changed, 18 insertions, 13 deletions
diff --git a/searchlib/src/tests/expression/attributenode/attribute_node_test.cpp b/searchlib/src/tests/expression/attributenode/attribute_node_test.cpp index 02913a33015..757f74bdaff 100644 --- a/searchlib/src/tests/expression/attributenode/attribute_node_test.cpp +++ b/searchlib/src/tests/expression/attributenode/attribute_node_test.cpp @@ -91,12 +91,12 @@ AttributeManagerFixture::AttributeManagerFixture() buildStringArrayAttribute("array.name", {{"n1.1", "n1.2"}, {"n2"}, {}}); buildIntegerArrayAttribute("array.val", BasicType::INT8, {{ 10, 11}, {20, 21 }, {}}); buildFloatArrayAttribute("array.fval", {{ 110.0}, { 120.0, 121.0 }, {}}); - buildStringArrayAttribute("smap.key", {{"k1.1", "k1.2"}, {"k2", "default_value"}, {}}); - buildStringArrayAttribute("smap.value.name", {{"n1.1", "n1.2"}, {"n2", ""}, {}}); + buildStringArrayAttribute("smap.key", {{"k1.1", "k1.2"}, {"k2"}, {}}); + buildStringArrayAttribute("smap.value.name", {{"n1.1", "n1.2"}, {"n2"}, {}}); buildIntegerArrayAttribute("smap.value.val", BasicType::INT8, {{ 10, 11}, {20, 21 }, {}}); buildFloatArrayAttribute("smap.value.fval", {{ 110.0}, { 120.0, 121.0 }, {}}); - buildStringArrayAttribute("map.key", {{"k1.1", "k1.2"}, {"k2", "default_value"}, {}}); - buildStringArrayAttribute("map.value", {{"n1.1", "n1.2"}, {"n2", "non_empty"}, {}}); + buildStringArrayAttribute("map.key", {{"k1.1", "k1.2"}, {"k2"}, {}}); + buildStringArrayAttribute("map.value", {{"n1.1", "n1.2"}, {"n2"}, {}}); buildStringAttribute("keyfield1", {"k1.2", "k2", "k3"}); buildStringAttribute("keyfield2", {"k1.1", "k1", "k1"}); } @@ -301,7 +301,7 @@ Fixture::assertStrings(std::vector<vespalib::string> expVals, const vespalib::st if (useEnumOptimization) { ASSERT_TRUE(result.inherits(EnumResultNode::classId)); search::enumstore::EnumHandle enumVal(0); - node->getAttribute()->findEnum(expDocVal.c_str(), enumVal); + ASSERT_TRUE(node->getAttribute()->findEnum(expDocVal.c_str(), enumVal)); EXPECT_EQUAL(result.getEnum(), enumVal); } else { ASSERT_TRUE(result.inherits(StringResultNode::classId)); @@ -424,12 +424,12 @@ TEST_F("Test array values", Fixture) TEST_DO(f.assertStringArrays({{"n1.1", "n1.2"}, {"n2"}, {}}, "array.name")); TEST_DO(f.assertStringArrays({{"n1.1", "n1.2"}, {"n2"}, {}}, "array.name", true)); TEST_DO(f.assertFloatArrays({{ 110.0}, { 120.0, 121.0 }, {}}, "array.fval")); - TEST_DO(f.assertStringArrays({{"k1.1", "k1.2"}, {"k2", "default_value"}, {}}, "smap.key")); - TEST_DO(f.assertStringArrays({{"n1.1", "n1.2"}, {"n2", ""}, {}}, "smap.value.name")); + TEST_DO(f.assertStringArrays({{"k1.1", "k1.2"}, {"k2"}, {}}, "smap.key")); + TEST_DO(f.assertStringArrays({{"n1.1", "n1.2"}, {"n2"}, {}}, "smap.value.name")); TEST_DO(f.assertIntArrays({{ 10, 11}, {20, 21 }, {}}, "smap.value.val")); TEST_DO(f.assertFloatArrays({{ 110.0}, { 120.0, 121.0 }, {}}, "smap.value.fval")); - TEST_DO(f.assertStringArrays({{"k1.1", "k1.2"}, {"k2", "default_value"}, {}}, "map.key")); - TEST_DO(f.assertStringArrays({{"n1.1", "n1.2"}, {"n2", "non_empty"}, {}}, "map.value")); + TEST_DO(f.assertStringArrays({{"k1.1", "k1.2"}, {"k2"}, {}}, "map.key")); + TEST_DO(f.assertStringArrays({{"n1.1", "n1.2"}, {"n2"}, {}}, "map.value")); } TEST_F("test keyed values", Fixture) diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp index 4126fc3b4fb..f0c8d9a2191 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp @@ -441,16 +441,20 @@ AttributeVector::addReservedDoc() assert(docId == 0u); assert(docId < getNumDocs()); clearDoc(docId); - commit(); if (hasMultiValue()) { if (isFloatingPointType()) { - FloatingPointAttribute * vec = dynamic_cast<FloatingPointAttribute *>(this); + auto * vec = dynamic_cast<FloatingPointAttribute *>(this); bool appendedUndefined = vec->append(0, attribute::getUndefined<double>(), 1); assert(appendedUndefined); (void) appendedUndefined; - commit(); + } else if (isStringType()) { + auto * vec = dynamic_cast<StringAttribute *>(this); + bool appendedUndefined = vec->append(0, StringAttribute::defaultValue(), 1); + assert(appendedUndefined); + (void) appendedUndefined; } } + commit(); } attribute::IPostingListAttributeBase *AttributeVector::getIPostingListAttributeBase() { return nullptr; } diff --git a/searchlib/src/vespa/searchlib/expression/attribute_map_lookup_node.cpp b/searchlib/src/vespa/searchlib/expression/attribute_map_lookup_node.cpp index df3b4f06eb7..52ee467fac8 100644 --- a/searchlib/src/vespa/searchlib/expression/attribute_map_lookup_node.cpp +++ b/searchlib/src/vespa/searchlib/expression/attribute_map_lookup_node.cpp @@ -340,7 +340,8 @@ AttributeMapLookupNode::onPrepare(bool preserveAccurateTypes) auto resultNode = std::make_unique<EnumResultNode>(); const StringAttribute & sattr = dynamic_cast<const StringAttribute &>(*attribute); EnumHandle undefined(0); - attribute->findEnum(sattr.defaultValue(), undefined); + bool found = attribute->findEnum(sattr.defaultValue(), undefined); + assert(found); _handler = std::make_unique<EnumValueHandler>(std::move(keyHandler), *attribute, *resultNode, undefined); setResultType(std::move(resultNode)); } else { |