summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-04-13 13:59:30 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-04-13 13:59:30 +0000
commit120f3d34330eb7f3f9950804484f22cafb24cd4d (patch)
treeb5dcb51fe537779b120a8efbb07b5e3146149cc1
parentaa28f2e1381c3212fb21f7446e00e22795d770bc (diff)
Always add the default value to the StringAttribute, and assert that it is present.
-rw-r--r--searchlib/src/tests/expression/attributenode/attribute_node_test.cpp18
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributevector.cpp10
-rw-r--r--searchlib/src/vespa/searchlib/expression/attribute_map_lookup_node.cpp3
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 {