summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2021-11-10 10:37:23 +0100
committerTor Egge <Tor.Egge@online.no>2021-11-10 10:37:23 +0100
commit9b964a8ac767864a904089e185eb88ddbc834e81 (patch)
tree1b55a1fe3da0d16df8f0845c25b25544bc507b13 /searchcore
parent0ff0fbb70bfbb9a91c54f671f167391bfea6b87c (diff)
Document field extractor instance must live while extracted field values are used.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp
index 0f044f0dff8..992edbc33b8 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp
@@ -339,6 +339,7 @@ class PutTask : public vespalib::Executor::Task
const bool _allAttributes;
std::remove_reference_t<AttributeWriter::OnWriteDoneType> _onWriteDone;
const Document& _doc;
+ DocumentFieldExtractor _field_extractor;
std::vector<FieldValue::UP> _fieldValues;
public:
PutTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, const Document& doc, uint32_t lid, bool allAttributes, AttributeWriter::OnWriteDoneType onWriteDone);
@@ -353,15 +354,15 @@ PutTask::PutTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, c
_allAttributes(allAttributes),
_onWriteDone(onWriteDone),
_doc(doc),
+ _field_extractor(_doc),
_fieldValues()
{
_wc.consider_build_field_paths(_doc);
- DocumentFieldExtractor field_extractor(_doc);
const auto &fields = _wc.getFields();
_fieldValues.reserve(fields.size());
for (const auto& field : fields) {
if (_allAttributes || field.isStructFieldAttribute()) {
- FieldValue::UP fv = field_extractor.getFieldValue(field.getFieldPath());
+ FieldValue::UP fv = _field_extractor.getFieldValue(field.getFieldPath());
_fieldValues.emplace_back(std::move(fv));
}
}