summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-08-13 12:07:19 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-08-13 12:07:19 +0000
commit997b2342d51fa0b1d32e18c62a7a0914ba6cba43 (patch)
treeee21d946a3cfad5351628492fc6df8252acee642 /searchcore
parent837df3c6a5ec87494a3d42799390d8a4a102a403 (diff)
Handle all cases androp default: label, also add test for NONE and DOCID sets
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/server/documentretriever_test.cpp11
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp24
2 files changed, 22 insertions, 13 deletions
diff --git a/searchcore/src/tests/proton/server/documentretriever_test.cpp b/searchcore/src/tests/proton/server/documentretriever_test.cpp
index 8385bf89780..83d5672bb22 100644
--- a/searchcore/src/tests/proton/server/documentretriever_test.cpp
+++ b/searchcore/src/tests/proton/server/documentretriever_test.cpp
@@ -17,6 +17,7 @@
#include <vespa/document/fieldvalue/structfieldvalue.h>
#include <vespa/document/fieldvalue/tensorfieldvalue.h>
#include <vespa/document/fieldvalue/weightedsetfieldvalue.h>
+#include <vespa/document/fieldset/fieldsets.h>
#include <vespa/document/repo/configbuilder.h>
#include <vespa/document/repo/documenttyperepo.h>
#include <vespa/eval/tensor/tensor.h>
@@ -464,6 +465,14 @@ TEST_F("require that attributes are patched into stored document", Fixture) {
EXPECT_FALSE(doc->getValue(dyn_wset_field_n));
}
+TEST_F("require that we can look up NONE and DOCIDONLY field sets", Fixture) {
+ DocumentMetaData meta_data = f._retriever->getDocumentMetaData(doc_id);
+ Document::UP doc = f._retriever->getPartialDocument(meta_data.lid, doc_id, document::NoFields());
+ ASSERT_TRUE(doc);
+ doc = f._retriever->getPartialDocument(meta_data.lid, doc_id, document::DocIdOnly());
+ ASSERT_TRUE(doc);
+}
+
TEST_F("require that attributes are patched into stored document unless also index field", Fixture) {
f.addIndexField(Schema::IndexField(dyn_field_s, DataType::STRING)).build();
DocumentMetaData meta_data = f._retriever->getDocumentMetaData(doc_id);
@@ -577,7 +586,7 @@ struct Lookup : public IFieldInfo
mutable unsigned _count;
};
-TEST("require ") {
+TEST("require that fieldset can figure out their attributeness and rember it") {
Lookup lookup;
FieldSetAttributeDB fsDB(lookup);
document::Field attr1("attr1", 1, *document::DataType::LONG, true);
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp
index 9a219df3f52..4484338ddfd 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp
@@ -57,16 +57,16 @@ bool
FieldSetAttributeDB::areAllFieldsAttributes(uint64_t key, const document::Field::Set & set) const {
std::lock_guard guard(_lock);
auto found = _isFieldSetAttributeOnly.find(key);
- if (found != _isFieldSetAttributeOnly.end()) {
- return found->second;
- }
-
bool isAttributeOnly = true;
- for (const document::Field * field : set) {
- isAttributeOnly = _fieldInfo.isFieldAttribute(*field);
- if (!isAttributeOnly) break;
+ if (found == _isFieldSetAttributeOnly.end()) {
+ for (const document::Field *field : set) {
+ isAttributeOnly = _fieldInfo.isFieldAttribute(*field);
+ if (!isAttributeOnly) break;
+ }
+ _isFieldSetAttributeOnly[key] = isAttributeOnly;
+ } else {
+ isAttributeOnly = found->second;
}
- _isFieldSetAttributeOnly[key] = isAttributeOnly;
return isAttributeOnly;
}
@@ -133,9 +133,8 @@ DocumentRetriever::needFetchFromDocStore(const document::FieldSet & fieldSet) co
const auto &set = static_cast<const document::FieldCollection &>(fieldSet);
return ! _fieldSetAttributeInfo.areAllFieldsAttributes(set.hash(), set.getFields());
}
- default:
- abort();
}
+ abort();
}
bool
@@ -256,8 +255,9 @@ DocumentRetriever::getPartialDocument(search::DocumentIdT lid, const document::D
populate(lid, *doc, set.getFields());
break;
}
- default:
- abort();
+ case document::FieldSet::Type::NONE:
+ case document::FieldSet::Type::DOCID:
+ break;
}
}
return doc;