diff options
Diffstat (limited to 'searchcore')
15 files changed, 102 insertions, 104 deletions
diff --git a/searchcore/src/tests/proton/attribute/attribute_populator/attribute_populator_test.cpp b/searchcore/src/tests/proton/attribute/attribute_populator/attribute_populator_test.cpp index 19b8348fb7a..b4d3eb13ac7 100644 --- a/searchcore/src/tests/proton/attribute/attribute_populator/attribute_populator_test.cpp +++ b/searchcore/src/tests/proton/attribute/attribute_populator/attribute_populator_test.cpp @@ -60,7 +60,7 @@ struct DocContext std::shared_ptr<Document> create(uint32_t id, int64_t fieldValue) { vespalib::string docId = vespalib::make_string("id:searchdocument:searchdocument::%u", id); - auto doc = std::make_shared<Document>(*_repo->getDocumentType("searchdocument"), DocumentId(docId)); + auto doc = std::make_shared<Document>(*_repo, *_repo->getDocumentType("searchdocument"), DocumentId(docId)); doc->setValue("a1", IntFieldValue(fieldValue)); return doc; } diff --git a/searchcore/src/tests/proton/attribute/attribute_test.cpp b/searchcore/src/tests/proton/attribute/attribute_test.cpp index 75d9c78d07e..4458cd66ad6 100644 --- a/searchcore/src/tests/proton/attribute/attribute_test.cpp +++ b/searchcore/src/tests/proton/attribute/attribute_test.cpp @@ -1050,7 +1050,7 @@ public: } std::unique_ptr<Document> makeDoc() { - return std::make_unique<Document>(_type, DocumentId("id::test::1")); + return Document::make_without_repo(_type, DocumentId("id::test::1")); } }; diff --git a/searchcore/src/tests/proton/attribute/document_field_extractor/document_field_extractor_test.cpp b/searchcore/src/tests/proton/attribute/document_field_extractor/document_field_extractor_test.cpp index 903b4d89696..42dad54394f 100644 --- a/searchcore/src/tests/proton/attribute/document_field_extractor/document_field_extractor_test.cpp +++ b/searchcore/src/tests/proton/attribute/document_field_extractor/document_field_extractor_test.cpp @@ -109,7 +109,7 @@ struct FixtureBase Document * makeDoc() { - doc = std::make_unique<Document>(type, DocumentId("id::test::1")); + doc = Document::make_without_repo(type, DocumentId("id::test::1")); extractor = std::make_unique<DocumentFieldExtractor>(*doc); return doc.get(); } diff --git a/searchcore/src/tests/proton/common/cachedselect_test.cpp b/searchcore/src/tests/proton/common/cachedselect_test.cpp index 6565ec601e6..93a7e46285e 100644 --- a/searchcore/src/tests/proton/common/cachedselect_test.cpp +++ b/searchcore/src/tests/proton/common/cachedselect_test.cpp @@ -123,7 +123,7 @@ makeDoc(const DocumentTypeRepo &repo, int32_t ab) { const DocumentType *docType = repo.getDocumentType("test"); - Document::UP doc(new Document(*docType, DocumentId(docId))); + auto doc = std::make_unique<Document>(repo, *docType, DocumentId(docId)); if (ia != "null") doc->setValue("ia", StringFieldValue(ia)); if (ib != "null") @@ -348,7 +348,7 @@ TestFixture::testParse(const string &selection, const DocumentType *docType = repo.getDocumentType(docTypeName); ASSERT_TRUE(docType != nullptr); - Document::UP emptyDoc(new Document(*docType, DocumentId())); + auto emptyDoc = std::make_unique<Document>(repo, *docType, DocumentId()); res->set(selection, docTypeName, diff --git a/searchcore/src/tests/proton/common/selectpruner_test.cpp b/searchcore/src/tests/proton/common/selectpruner_test.cpp index 4bc7ef53d94..80d6314c392 100644 --- a/searchcore/src/tests/proton/common/selectpruner_test.cpp +++ b/searchcore/src/tests/proton/common/selectpruner_test.cpp @@ -222,8 +222,7 @@ TestFixture::testPrune(const string &selection, const string &exp, const string LOG(info, "ParseTree: '%s'", os.str().c_str()); const DocumentType *docType = repo.getDocumentType(docTypeName); ASSERT_TRUE(docType != nullptr); - auto emptyDoc = std::make_unique<Document>(*docType, document::DocumentId("id:ns:" + docTypeName + "::1")); - emptyDoc->setRepo(repo); + auto emptyDoc = std::make_unique<Document>(repo, *docType, document::DocumentId("id:ns:" + docTypeName + "::1")); SelectPruner pruner(docTypeName, &_amgr, *emptyDoc, repo, _hasFields, _hasDocuments); pruner.process(*select); std::ostringstream pos; diff --git a/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp b/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp index f89af9a11a6..ff55d3cca7c 100644 --- a/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp +++ b/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp @@ -156,8 +156,12 @@ struct UnitDR : DocumentRetrieverBaseForTest { static void reset() { _docidCnt = 2; } }; +Document::UP make_doc(DocumentId docid) { + return Document::make_without_repo(*DataType::DOCUMENT, docid); +} + UnitDR::UnitDR() - : repo(), document(std::make_unique<Document>(*DataType::DOCUMENT, DocumentId())), timestamp(0), + : repo(), document(make_doc(DocumentId())), timestamp(0), bucket(), removed(false), docid(0), docIdLimit(std::numeric_limits<uint32_t>::max()) {} UnitDR::UnitDR(document::Document::UP d, Timestamp t, Bucket b, bool r) @@ -242,7 +246,7 @@ struct AttrUnitDR : public UnitDR CachedSelect::SP parseSelect(const vespalib::string &selection) const override { auto res = std::make_shared<CachedSelect>(); - res->set(selection, "foo", Document(document->getType(), DocumentId()), repo, &_amgr, true); + res->set(selection, "foo", Document(repo, document->getType(), DocumentId()), repo, &_amgr, true); return res; } }; @@ -291,7 +295,7 @@ IDocumentRetriever::SP nil() { return std::make_unique<UnitDR>(); } IDocumentRetriever::SP doc(const DocumentId &id, Timestamp t, Bucket b) { - return std::make_shared<UnitDR>(std::make_unique<Document>(*DataType::DOCUMENT, id), t, b, false); + return std::make_shared<UnitDR>(make_doc(id), t, b, false); } IDocumentRetriever::SP @@ -301,7 +305,7 @@ doc(const std::string &id, Timestamp t, Bucket b) { IDocumentRetriever::SP rem(const DocumentId &id, Timestamp t, Bucket b) { - return std::make_shared<UnitDR>(std::make_unique<Document>(*DataType::DOCUMENT, id), t, b, true); + return std::make_shared<UnitDR>(make_doc(id), t, b, true); } IDocumentRetriever::SP @@ -338,14 +342,14 @@ const DocumentType &getAttrDocType() { } IDocumentRetriever::SP doc_with_fields(const std::string &id, Timestamp t, Bucket b) { - auto d = std::make_unique<Document>(getDocType(), DocumentId(id)); + auto d = Document::make_without_repo(getDocType(), DocumentId(id)); d->setValue("header", StringFieldValue::make("foo")); d->setValue("body", StringFieldValue::make("bar")); return std::make_shared<UnitDR>(getDocType(), std::move(d), t, b, false); } IDocumentRetriever::SP doc_with_null_fields(const std::string &id, Timestamp t, Bucket b) { - return std::make_unique<AttrUnitDR>(std::make_unique<Document>(getAttrDocType(), DocumentId(id)), t, b, false); + return std::make_unique<AttrUnitDR>(Document::make_without_repo(getAttrDocType(), DocumentId(id)), t, b, false); } IDocumentRetriever::SP doc_with_attr_fields(const vespalib::string &id, @@ -355,7 +359,7 @@ IDocumentRetriever::SP doc_with_attr_fields(const vespalib::string &id, const vespalib::string &ss, const vespalib::string &attr_ss) { - auto d = std::make_unique<Document>(getAttrDocType(), DocumentId(id)); + auto d = Document::make_without_repo(getAttrDocType(), DocumentId(id)); d->setValue("header", StringFieldValue::make("foo")); d->setValue("body", StringFieldValue::make("bar")); d->setValue("aa", IntFieldValue::make(aa)); @@ -367,7 +371,7 @@ IDocumentRetriever::SP doc_with_attr_fields(const vespalib::string &id, auto doc_rec(VisitRecordingUnitDR::VisitedLIDs& visited_lids, const std::string &id, Timestamp t, Bucket b) { - return std::make_shared<VisitRecordingUnitDR>(visited_lids, std::make_unique<Document>(getAttrDocType(), DocumentId(id)), t, b, false); + return std::make_shared<VisitRecordingUnitDR>(visited_lids, Document::make_without_repo(getAttrDocType(), DocumentId(id)), t, b, false); } void checkDoc(const IDocumentRetriever &dr, const std::string &id, @@ -462,9 +466,9 @@ TEST("require that normal documents can be iterated") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(3u, res.getEntries().size()); - TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::1")), Timestamp(2))); - TEST_DO(checkEntry(res, 1, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::2")), Timestamp(3))); - TEST_DO(checkEntry(res, 2, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::3")), Timestamp(4))); + TEST_DO(checkEntry(res, 0, *make_doc(DocumentId("id:ns:document::1")), Timestamp(2))); + TEST_DO(checkEntry(res, 1, *make_doc(DocumentId("id:ns:document::2")), Timestamp(3))); + TEST_DO(checkEntry(res, 2, *make_doc(DocumentId("id:ns:document::3")), Timestamp(4))); } void verifyIterateIgnoringStopSignal(DocumentIterator & itr) { @@ -495,7 +499,7 @@ void verifyReadConsistency(DocumentIterator & itr, ILidCommitState & lidCommitSt IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(1u, res.getEntries().size()); - TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::1")), Timestamp(2))); + TEST_DO(checkEntry(res, 0, *make_doc(DocumentId("id:ns:document::1")), Timestamp(2))); } class ILidCommitStateProxy : public ILidCommitState { @@ -552,7 +556,7 @@ TEST("require that docid limit is honoured") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(1u, res.getEntries().size()); - TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::1")), Timestamp(2))); + TEST_DO(checkEntry(res, 0, *make_doc(DocumentId("id:ns:document::1")), Timestamp(2))); udr.setDocIdLimit(7); DocumentIterator limited(bucket(5), std::make_shared<document::AllFields>(), selectAll(), newestV(), -1, false); @@ -583,7 +587,7 @@ TEST("require that remove entries can be ignored") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(1u, res.getEntries().size()); - TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::2")), Timestamp(3))); + TEST_DO(checkEntry(res, 0, *make_doc(DocumentId("id:ns:document::2")), Timestamp(3))); } TEST("require that iterating all versions returns both documents and removes") { @@ -595,7 +599,7 @@ TEST("require that iterating all versions returns both documents and removes") { EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(3u, res.getEntries().size()); TEST_DO(checkEntry(res, 0, DocumentId("id:ns:document::1"), Timestamp(2))); - TEST_DO(checkEntry(res, 1, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::2")), Timestamp(3))); + TEST_DO(checkEntry(res, 1, *make_doc(DocumentId("id:ns:document::2")), Timestamp(3))); TEST_DO(checkEntry(res, 2, DocumentId("id:ns:document::3"), Timestamp(4))); } @@ -620,7 +624,7 @@ TEST("require that entries in other buckets are skipped") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(1u, res.getEntries().size()); - TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::2")), Timestamp(3))); + TEST_DO(checkEntry(res, 0, *make_doc(DocumentId("id:ns:document::2")), Timestamp(3))); } TEST("require that maxBytes splits iteration results") { @@ -628,16 +632,16 @@ TEST("require that maxBytes splits iteration results") { itr.add(doc("id:ns:document::1", Timestamp(2), bucket(5))); itr.add(cat(rem("id:ns:document::2", Timestamp(3), bucket(5)), doc("id:ns:document::3", Timestamp(4), bucket(5)))); - IterateResult res1 = itr.iterate(getSize(Document(*DataType::DOCUMENT, DocumentId("id:ns:document::1"))) + + IterateResult res1 = itr.iterate(getSize(*make_doc(DocumentId("id:ns:document::1"))) + getSize(DocumentId("id:ns:document::2"))); EXPECT_TRUE(!res1.isCompleted()); EXPECT_EQUAL(2u, res1.getEntries().size()); - TEST_DO(checkEntry(res1, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::1")), Timestamp(2))); + TEST_DO(checkEntry(res1, 0, *make_doc(DocumentId("id:ns:document::1")), Timestamp(2))); TEST_DO(checkEntry(res1, 1, DocumentId("id:ns:document::2"), Timestamp(3))); IterateResult res2 = itr.iterate(largeNum); EXPECT_TRUE(res2.isCompleted()); - TEST_DO(checkEntry(res2, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::3")), Timestamp(4))); + TEST_DO(checkEntry(res2, 0, *make_doc(DocumentId("id:ns:document::3")), Timestamp(4))); IterateResult res3 = itr.iterate(largeNum); EXPECT_TRUE(res3.isCompleted()); @@ -671,7 +675,7 @@ TEST("require that at least one document is returned by visit") { doc("id:ns:document::3", Timestamp(4), bucket(5)))); IterateResult res1 = itr.iterate(0); EXPECT_TRUE( ! res1.getEntries().empty()); - TEST_DO(checkEntry(res1, 0, Document(*DataType::DOCUMENT,DocumentId("id:ns:document::1")), Timestamp(2))); + TEST_DO(checkEntry(res1, 0, *make_doc(DocumentId("id:ns:document::1")), Timestamp(2))); } TEST("require that documents outside the timestamp limits are ignored") { @@ -687,8 +691,8 @@ TEST("require that documents outside the timestamp limits are ignored") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(4u, res.getEntries().size()); - TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::2")), Timestamp(100))); - TEST_DO(checkEntry(res, 1, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::3")), Timestamp(200))); + TEST_DO(checkEntry(res, 0, *make_doc(DocumentId("id:ns:document::2")), Timestamp(100))); + TEST_DO(checkEntry(res, 1, *make_doc(DocumentId("id:ns:document::3")), Timestamp(200))); TEST_DO(checkEntry(res, 2, DocumentId("id:ns:document::6"), Timestamp(100))); TEST_DO(checkEntry(res, 3, DocumentId("id:ns:document::7"), Timestamp(200))); } @@ -706,8 +710,8 @@ TEST("require that timestamp subset returns the appropriate documents") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(3u, res.getEntries().size()); - TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::2")), Timestamp(400))); - TEST_DO(checkEntry(res, 1, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::4")), Timestamp(200))); + TEST_DO(checkEntry(res, 0, *make_doc(DocumentId("id:ns:document::2")), Timestamp(400))); + TEST_DO(checkEntry(res, 1, *make_doc(DocumentId("id:ns:document::4")), Timestamp(200))); TEST_DO(checkEntry(res, 2, DocumentId("id:ns:document::6"), Timestamp(350))); } @@ -724,8 +728,8 @@ TEST("require that document selection will filter results") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(4u, res.getEntries().size()); - TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::xxx1")), Timestamp(99))); - TEST_DO(checkEntry(res, 1, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::xxx2")), Timestamp(200))); + TEST_DO(checkEntry(res, 0, *make_doc(DocumentId("id:ns:document::xxx1")), Timestamp(99))); + TEST_DO(checkEntry(res, 1, *make_doc(DocumentId("id:ns:document::xxx2")), Timestamp(200))); TEST_DO(checkEntry(res, 2, DocumentId("id:ns:document::xxx3"), Timestamp(99))); TEST_DO(checkEntry(res, 3, DocumentId("id:ns:document::xxx4"), Timestamp(200))); } @@ -737,10 +741,10 @@ TEST("require that document selection handles 'field == null'") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); ASSERT_EQUAL(2u, res.getEntries().size()); - Document expected1(getAttrDocType(), DocumentId("id:ns:foo::xxx1")); - TEST_DO(checkEntry(res, 0, expected1, Timestamp(99))); - Document expected2(getAttrDocType(), DocumentId("id:ns:foo::xxx2")); - TEST_DO(checkEntry(res, 1, expected2, Timestamp(100))); + auto expected1 = Document::make_without_repo(getAttrDocType(), DocumentId("id:ns:foo::xxx1")); + TEST_DO(checkEntry(res, 0, *expected1, Timestamp(99))); + auto expected2 = Document::make_without_repo(getAttrDocType(), DocumentId("id:ns:foo::xxx2")); + TEST_DO(checkEntry(res, 1, *expected2, Timestamp(100))); } TEST("require that invalid document selection returns no documents") { @@ -771,7 +775,7 @@ TEST("require that document selection and timestamp range works together") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(2u, res.getEntries().size()); - TEST_DO(checkEntry(res, 0, Document(*DataType::DOCUMENT, DocumentId("id:ns:document::xxx2")), Timestamp(200))); + TEST_DO(checkEntry(res, 0, *make_doc(DocumentId("id:ns:document::xxx2")), Timestamp(200))); TEST_DO(checkEntry(res, 1, DocumentId("id:ns:document::xxx4"), Timestamp(200))); } @@ -782,9 +786,9 @@ TEST("require that fieldset limits fields returned") { IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(1u, res.getEntries().size()); - Document expected(getDocType(), DocumentId("id:ns:foo::xxx1")); - expected.setValue("header", StringFieldValue::make("foo")); - TEST_DO(checkEntry(res, 0, expected, Timestamp(1))); + auto expected = Document::make_without_repo(getDocType(), DocumentId("id:ns:foo::xxx1")); + expected->setValue("header", StringFieldValue::make("foo")); + TEST_DO(checkEntry(res, 0, *expected, Timestamp(1))); } namespace { @@ -838,22 +842,22 @@ TEST("require that attributes are used") IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); EXPECT_EQUAL(2u, res.getEntries().size()); - Document expected1(getAttrDocType(), DocumentId("id:ns:foo::xx2")); - expected1.setValue("header", StringFieldValue::make("foo")); - expected1.setValue("body", StringFieldValue::make("bar")); - expected1.setValue("aa", IntFieldValue::make(27)); - expected1.setValue("ab", IntFieldValue::make(28)); - expected1.setValue("dd", DoubleFieldValue::make(2.7)); - expected1.setValue("ss", StringFieldValue::make("x27")); - Document expected2(getAttrDocType(), DocumentId("id:ns:foo::xx4")); - expected2.setValue("header", StringFieldValue::make("foo")); - expected2.setValue("body", StringFieldValue::make("bar")); - expected2.setValue("aa", IntFieldValue::make(45)); - expected2.setValue("ab", IntFieldValue::make(46)); - expected2.setValue("dd", DoubleFieldValue::make(4.5)); - expected2.setValue("ss", StringFieldValue::make("x45")); - TEST_DO(checkEntry(res, 0, expected1, Timestamp(2))); - TEST_DO(checkEntry(res, 1, expected2, Timestamp(4))); + auto expected1 = Document::make_without_repo(getAttrDocType(), DocumentId("id:ns:foo::xx2")); + expected1->setValue("header", StringFieldValue::make("foo")); + expected1->setValue("body", StringFieldValue::make("bar")); + expected1->setValue("aa", IntFieldValue::make(27)); + expected1->setValue("ab", IntFieldValue::make(28)); + expected1->setValue("dd", DoubleFieldValue::make(2.7)); + expected1->setValue("ss", StringFieldValue::make("x27")); + auto expected2 = Document::make_without_repo(getAttrDocType(), DocumentId("id:ns:foo::xx4")); + expected2->setValue("header", StringFieldValue::make("foo")); + expected2->setValue("body", StringFieldValue::make("bar")); + expected2->setValue("aa", IntFieldValue::make(45)); + expected2->setValue("ab", IntFieldValue::make(46)); + expected2->setValue("dd", DoubleFieldValue::make(4.5)); + expected2->setValue("ss", StringFieldValue::make("x45")); + TEST_DO(checkEntry(res, 0, *expected1, Timestamp(2))); + TEST_DO(checkEntry(res, 1, *expected2, Timestamp(4))); DocumentIterator itr2(bucket(5), std::make_shared<document::AllFields>(), selectDocs("foo.dd == 4.5"), docV(), -1, false); itr2.add(doc_with_attr_fields("id:ns:foo::xx5", Timestamp(5), bucket(5), @@ -868,22 +872,22 @@ TEST("require that attributes are used") IterateResult res2 = itr2.iterate(largeNum); EXPECT_TRUE(res2.isCompleted()); EXPECT_EQUAL(2u, res2.getEntries().size()); - Document expected3(getAttrDocType(), DocumentId("id:ns:foo::xx6")); - expected3.setValue("header", StringFieldValue::make("foo")); - expected3.setValue("body", StringFieldValue::make("bar")); - expected3.setValue("aa", IntFieldValue::make(27)); - expected3.setValue("ab", IntFieldValue::make(28)); - expected3.setValue("dd", DoubleFieldValue::make(2.7)); - expected3.setValue("ss", StringFieldValue::make("x27")); - Document expected4(getAttrDocType(), DocumentId("id:ns:foo::xx8")); - expected4.setValue("header", StringFieldValue::make("foo")); - expected4.setValue("body", StringFieldValue::make("bar")); - expected4.setValue("aa", IntFieldValue::make(45)); - expected4.setValue("ab", IntFieldValue::make(46)); - expected4.setValue("dd", DoubleFieldValue::make(4.5)); - expected4.setValue("ss", StringFieldValue::make("x45")); - TEST_DO(checkEntry(res2, 0, expected3, Timestamp(6))); - TEST_DO(checkEntry(res2, 1, expected4, Timestamp(8))); + auto expected3 = Document::make_without_repo(getAttrDocType(), DocumentId("id:ns:foo::xx6")); + expected3->setValue("header", StringFieldValue::make("foo")); + expected3->setValue("body", StringFieldValue::make("bar")); + expected3->setValue("aa", IntFieldValue::make(27)); + expected3->setValue("ab", IntFieldValue::make(28)); + expected3->setValue("dd", DoubleFieldValue::make(2.7)); + expected3->setValue("ss", StringFieldValue::make("x27")); + auto expected4 = Document::make_without_repo(getAttrDocType(), DocumentId("id:ns:foo::xx8")); + expected4->setValue("header", StringFieldValue::make("foo")); + expected4->setValue("body", StringFieldValue::make("bar")); + expected4->setValue("aa", IntFieldValue::make(45)); + expected4->setValue("ab", IntFieldValue::make(46)); + expected4->setValue("dd", DoubleFieldValue::make(4.5)); + expected4->setValue("ss", StringFieldValue::make("x45")); + TEST_DO(checkEntry(res2, 0, *expected3, Timestamp(6))); + TEST_DO(checkEntry(res2, 1, *expected4, Timestamp(8))); DocumentIterator itr3(bucket(5), std::make_shared<document::AllFields>(), selectDocs("foo.ss == \"x45\""), docV(), -1, false); itr3.add(doc_with_attr_fields("id:ns:foo::xx9", Timestamp(9), bucket(5), @@ -898,22 +902,22 @@ TEST("require that attributes are used") IterateResult res3 = itr3.iterate(largeNum); EXPECT_TRUE(res3.isCompleted()); EXPECT_EQUAL(2u, res3.getEntries().size()); - Document expected5(getAttrDocType(), DocumentId("id:ns:foo::xx10")); - expected5.setValue("header", StringFieldValue::make("foo")); - expected5.setValue("body", StringFieldValue::make("bar")); - expected5.setValue("aa", IntFieldValue::make(27)); - expected5.setValue("ab", IntFieldValue::make(28)); - expected5.setValue("dd", DoubleFieldValue::make(2.7)); - expected5.setValue("ss", StringFieldValue::make("x27")); - Document expected6(getAttrDocType(), DocumentId("id:ns:foo::xx12")); - expected6.setValue("header", StringFieldValue::make("foo")); - expected6.setValue("body", StringFieldValue::make("bar")); - expected6.setValue("aa", IntFieldValue::make(45)); - expected6.setValue("ab", IntFieldValue::make(46)); - expected6.setValue("dd", DoubleFieldValue::make(4.5)); - expected6.setValue("ss", StringFieldValue::make("x45")); - TEST_DO(checkEntry(res3, 0, expected5, Timestamp(10))); - TEST_DO(checkEntry(res3, 1, expected6, Timestamp(12))); + auto expected5 = Document::make_without_repo(getAttrDocType(), DocumentId("id:ns:foo::xx10")); + expected5->setValue("header", StringFieldValue::make("foo")); + expected5->setValue("body", StringFieldValue::make("bar")); + expected5->setValue("aa", IntFieldValue::make(27)); + expected5->setValue("ab", IntFieldValue::make(28)); + expected5->setValue("dd", DoubleFieldValue::make(2.7)); + expected5->setValue("ss", StringFieldValue::make("x27")); + auto expected6 = Document::make_without_repo(getAttrDocType(), DocumentId("id:ns:foo::xx12")); + expected6->setValue("header", StringFieldValue::make("foo")); + expected6->setValue("body", StringFieldValue::make("bar")); + expected6->setValue("aa", IntFieldValue::make(45)); + expected6->setValue("ab", IntFieldValue::make(46)); + expected6->setValue("dd", DoubleFieldValue::make(4.5)); + expected6->setValue("ss", StringFieldValue::make("x45")); + TEST_DO(checkEntry(res3, 0, *expected5, Timestamp(10))); + TEST_DO(checkEntry(res3, 1, *expected6, Timestamp(12))); } TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp index 5afe0a0c5a2..bf960768c89 100644 --- a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp +++ b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp @@ -516,8 +516,7 @@ MyDocumentSubDB::handleRemove(RemoveOperationWithDocId &op) assert(op.getLid() == putRes._lid); const document::DocumentType *docType = _repo->getDocumentType(_docTypeName.getName()); - auto doc = std::make_unique<Document>(*docType, docId); - doc->setRepo(*_repo); + auto doc = std::make_unique<Document>(*_repo, *docType, docId); _docs[op.getLid()] = std::move(doc); needCommit = true; } diff --git a/searchcore/src/tests/proton/feedoperation/feedoperation_test.cpp b/searchcore/src/tests/proton/feedoperation/feedoperation_test.cpp index 87947788bdf..0479fa61e2b 100644 --- a/searchcore/src/tests/proton/feedoperation/feedoperation_test.cpp +++ b/searchcore/src/tests/proton/feedoperation/feedoperation_test.cpp @@ -126,7 +126,7 @@ public: return upd; } auto makeDoc() { - auto doc(std::make_shared<Document>(_docType, docId)); + auto doc(std::make_shared<Document>(*_repo, _docType, docId)); doc->setValue("string", StringFieldValue("stringval")); return doc; } diff --git a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp index e9fd4fa9d37..996d9846934 100644 --- a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp +++ b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp @@ -61,7 +61,7 @@ createDocType(const vespalib::string &name, int32_t id) Document::SP createDoc(const DocumentType &docType, const DocumentId &docId) { - return std::make_shared<Document>(docType, docId); + return Document::SP(Document::make_without_repo(docType, docId).release()); } diff --git a/searchcore/src/tests/proton/server/documentretriever_test.cpp b/searchcore/src/tests/proton/server/documentretriever_test.cpp index 6cc2ca22531..f99c3ab0f67 100644 --- a/searchcore/src/tests/proton/server/documentretriever_test.cpp +++ b/searchcore/src/tests/proton/server/documentretriever_test.cpp @@ -161,7 +161,7 @@ struct MyDocumentStore : proton::test::DummyDocumentStore { return std::move(_testDoc); } const DocumentType *doc_type = r.getDocumentType(doc_type_name); - auto doc = std::make_unique<Document>(*doc_type, doc_id); + auto doc = std::make_unique<Document>(r, *doc_type, doc_id); ASSERT_TRUE(doc); doc->setValue(static_field, IntFieldValue::make(static_value)); doc->setValue(dyn_field_i, IntFieldValue::make(static_value)); diff --git a/searchcore/src/vespa/searchcore/bmcluster/bm_feed.cpp b/searchcore/src/vespa/searchcore/bmcluster/bm_feed.cpp index 0856bad0035..b257f85acdc 100644 --- a/searchcore/src/vespa/searchcore/bmcluster/bm_feed.cpp +++ b/searchcore/src/vespa/searchcore/bmcluster/bm_feed.cpp @@ -60,8 +60,7 @@ std::unique_ptr<Document> BmFeed::make_document(uint32_t n, uint32_t i) const { auto id = make_document_id(n, i); - auto document = std::make_unique<Document>(*_document_type, id); - document->setRepo(*_repo); + auto document = std::make_unique<Document>(*_repo, *_document_type, id); document->setFieldValue(_field, IntFieldValue::make(i)); return document; } diff --git a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp index ee2af5b606c..b8240b33b6c 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentretriever.cpp @@ -244,7 +244,7 @@ DocumentRetriever::getPartialDocument(search::DocumentIdT lid, const document::D FieldSet::stripFields(*doc, fieldSet); } } else { - doc = std::make_unique<Document>(getDocumentType(), docId); + doc = std::make_unique<Document>(getDocumentTypeRepo(), getDocumentType(), docId); switch (fieldSet.getType()) { case FieldSet::Type::ALL: populate(lid, *doc); @@ -271,7 +271,6 @@ DocumentRetriever::getPartialDocument(search::DocumentIdT lid, const document::D case FieldSet::Type::DOCID: break; } - doc->setRepo(getDocumentTypeRepo()); } return doc; } diff --git a/searchcore/src/vespa/searchcore/proton/server/documentretrieverbase.cpp b/searchcore/src/vespa/searchcore/proton/server/documentretrieverbase.cpp index 914f3d8bcfd..bb7d80c5ebc 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentretrieverbase.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentretrieverbase.cpp @@ -26,8 +26,7 @@ DocumentRetrieverBase::DocumentRetrieverBase( _hasFields(hasFields) { const document::DocumentType * docType(_repo.getDocumentType(_docTypeName.getName())); - _emptyDoc = std::make_unique<document::Document>(*docType, DocumentId("id:empty:" + _docTypeName.getName() + "::empty")); - _emptyDoc->setRepo(_repo); + _emptyDoc = std::make_unique<document::Document>(_repo, *docType, DocumentId("id:empty:" + _docTypeName.getName() + "::empty")); } DocumentRetrieverBase::~DocumentRetrieverBase() = default; diff --git a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp index 6bbedcdb18e..e9a14385c6a 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp @@ -217,8 +217,8 @@ FeedHandler::performInternalUpdate(FeedToken token, UpdateOperation &op) void FeedHandler::createNonExistingDocument(FeedToken token, const UpdateOperation &op) { - auto doc = make_shared<Document>(op.getUpdate()->getType(), op.getUpdate()->getId()); - doc->setRepo(*_activeFeedView->getDocumentTypeRepo()); + auto doc = make_shared<Document>(*_activeFeedView->getDocumentTypeRepo(), + op.getUpdate()->getType(), op.getUpdate()->getId()); op.getUpdate()->applyTo(*doc); PutOperation putOp(op.getBucketId(), op.getTimestamp(), std::move(doc)); putOp.set_prepare_serial_num(op.get_prepare_serial_num()); diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp index 533b270c20a..c2b4c0507db 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp @@ -586,8 +586,7 @@ StoreOnlyFeedView::internalRemove(FeedToken token, const RemoveOperationWithDocI adjustMetaStore(rmOp, docId.getGlobalId(), docId); if (rmOp.getValidDbdId(_params._subDbId)) { - auto clearDoc = std::make_unique<Document>(*_docType, docId); - clearDoc->setRepo(*_repo); + auto clearDoc = std::make_unique<Document>(*_repo, *_docType, docId); putSummary(serialNum, rmOp.getLid(), std::move(clearDoc), std::make_shared<SummaryPutDoneContext>(std::move(token), get_pending_lid_token(rmOp))); } |