diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-08-13 12:07:19 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-08-13 12:07:19 +0000 |
commit | 997b2342d51fa0b1d32e18c62a7a0914ba6cba43 (patch) | |
tree | ee21d946a3cfad5351628492fc6df8252acee642 /searchcore | |
parent | 837df3c6a5ec87494a3d42799390d8a4a102a403 (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.cpp | 11 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp | 24 |
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; |