summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--document/src/tests/documentselectparsertest.cpp4
-rw-r--r--document/src/tests/documentupdatetestcase.cpp119
-rw-r--r--document/src/tests/feed_reject_helper_test.cpp10
-rw-r--r--document/src/tests/testxml.cpp14
-rw-r--r--document/src/vespa/document/base/forcelink.cpp8
-rw-r--r--document/src/vespa/document/update/addvalueupdate.cpp4
-rw-r--r--document/src/vespa/document/update/addvalueupdate.h21
-rw-r--r--document/src/vespa/document/update/arithmeticvalueupdate.h10
-rw-r--r--document/src/vespa/document/update/assignvalueupdate.cpp10
-rw-r--r--document/src/vespa/document/update/assignvalueupdate.h7
-rw-r--r--document/src/vespa/document/update/clearvalueupdate.h5
-rw-r--r--document/src/vespa/document/update/mapvalueupdate.cpp16
-rw-r--r--document/src/vespa/document/update/mapvalueupdate.h6
-rw-r--r--document/src/vespa/document/update/removevalueupdate.cpp4
-rw-r--r--document/src/vespa/document/update/removevalueupdate.h10
-rw-r--r--document/src/vespa/document/update/tensor_add_update.cpp21
-rw-r--r--document/src/vespa/document/update/tensor_add_update.h5
-rw-r--r--document/src/vespa/document/update/tensor_modify_update.cpp32
-rw-r--r--document/src/vespa/document/update/tensor_modify_update.h6
-rw-r--r--document/src/vespa/document/update/tensor_remove_update.cpp28
-rw-r--r--document/src/vespa/document/update/tensor_remove_update.h5
-rw-r--r--persistence/src/vespa/persistence/conformancetest/conformancetest.cpp154
-rw-r--r--searchcore/src/tests/proton/attribute/attribute_test.cpp15
-rw-r--r--searchcore/src/tests/proton/common/attribute_updater/attribute_updater_test.cpp138
-rw-r--r--searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp4
-rw-r--r--searchcore/src/tests/proton/feedoperation/feedoperation_test.cpp2
-rw-r--r--searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/bmcluster/bm_feed.cpp2
-rw-r--r--searchlib/src/tests/attribute/attribute_test.cpp19
-rw-r--r--storage/src/tests/distributor/externaloperationhandlertest.cpp21
-rw-r--r--storage/src/tests/persistence/persistencetestutils.cpp8
-rw-r--r--storage/src/tests/persistence/persistencetestutils.h67
-rw-r--r--storage/src/tests/persistence/testandsettest.cpp11
-rw-r--r--storageapi/src/tests/mbusprot/storageprotocoltest.cpp5
34 files changed, 281 insertions, 512 deletions
diff --git a/document/src/tests/documentselectparsertest.cpp b/document/src/tests/documentselectparsertest.cpp
index a447df1044e..70ebd9bd7a2 100644
--- a/document/src/tests/documentselectparsertest.cpp
+++ b/document/src/tests/documentselectparsertest.cpp
@@ -139,9 +139,9 @@ DocumentUpdate::SP DocumentSelectParserTest::createUpdate(
const DocumentType* type = _repo->getDocumentType(doctype);
auto doc = std::make_shared<DocumentUpdate>(*_repo, *type, DocumentId(id));
doc->addUpdate(FieldUpdate(doc->getType().getField("headerval"))
- .addUpdate(std::make_unique<AssignValueUpdate>(IntFieldValue(hint))));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(hint))));
doc->addUpdate(FieldUpdate(doc->getType().getField("hstringval"))
- .addUpdate(std::make_unique<AssignValueUpdate>(StringFieldValue(hstr))));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<StringFieldValue>(hstr))));
return doc;
}
diff --git a/document/src/tests/documentupdatetestcase.cpp b/document/src/tests/documentupdatetestcase.cpp
index 93ab1c370c5..27a9791b95c 100644
--- a/document/src/tests/documentupdatetestcase.cpp
+++ b/document/src/tests/documentupdatetestcase.cpp
@@ -120,13 +120,13 @@ TEST(DocumentUpdateTest, testSimpleUsage)
// Test that primitive value updates can be serialized
testRoundtripSerialize(ClearValueUpdate(), *DataType::INT);
- testRoundtripSerialize(AssignValueUpdate(IntFieldValue(1)), *DataType::INT);
+ testRoundtripSerialize(AssignValueUpdate(std::make_unique<IntFieldValue>(1)), *DataType::INT);
testRoundtripSerialize(ArithmeticValueUpdate(ArithmeticValueUpdate::Div, 4.3), *DataType::FLOAT);
- testRoundtripSerialize(AddValueUpdate(IntFieldValue(1), 4), *arrayType);
- testRoundtripSerialize(RemoveValueUpdate(IntFieldValue(1)), *arrayType);
+ testRoundtripSerialize(AddValueUpdate(std::make_unique<IntFieldValue>(1), 4), *arrayType);
+ testRoundtripSerialize(RemoveValueUpdate(std::make_unique<IntFieldValue>(1)), *arrayType);
FieldUpdate fieldUpdate(docType->getField("intf"));
- fieldUpdate.addUpdate(std::make_unique<AssignValueUpdate>(IntFieldValue(1)));
+ fieldUpdate.addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(1)));
nbostream stream = serialize(fieldUpdate);
FieldUpdate fieldUpdateCopy(repo, *docType, stream);
EXPECT_EQ(fieldUpdate, fieldUpdateCopy);
@@ -158,7 +158,7 @@ TEST(DocumentUpdateTest, testSimpleUsage)
{
Document updated(doc);
DocumentUpdate upd(repo, *docType, DocumentId("id:ns:test::1"));
- upd.addUpdate(FieldUpdate(docType->getField("intf")).addUpdate(std::make_unique<AssignValueUpdate>(IntFieldValue(15))));
+ upd.addUpdate(FieldUpdate(docType->getField("intf")).addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(15))));
upd.applyTo(updated);
EXPECT_NE(doc, updated);
EXPECT_EQ(15, updated.getValue("intf")->getAsInt());
@@ -174,7 +174,7 @@ TEST(DocumentUpdateTest, testSimpleUsage)
{
Document updated(doc);
DocumentUpdate upd(repo, *docType, DocumentId("id:ns:test::1"));
- upd.addUpdate(FieldUpdate(docType->getField("intarr")).addUpdate(std::make_unique<AddValueUpdate>(IntFieldValue(4))));
+ upd.addUpdate(FieldUpdate(docType->getField("intarr")).addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<IntFieldValue>(4))));
upd.applyTo(updated);
EXPECT_NE(doc, updated);
std::unique_ptr<ArrayFieldValue> val(dynamic_cast<ArrayFieldValue*>(updated.getValue("intarr").release()));
@@ -184,7 +184,7 @@ TEST(DocumentUpdateTest, testSimpleUsage)
{
Document updated(doc);
DocumentUpdate upd(repo, *docType, DocumentId("id:ns:test::1"));
- upd.addUpdate(FieldUpdate(docType->getField("intarr")).addUpdate(std::make_unique<RemoveValueUpdate>(IntFieldValue(3))));
+ upd.addUpdate(FieldUpdate(docType->getField("intarr")).addUpdate(std::make_unique<RemoveValueUpdate>(std::make_unique<IntFieldValue>(3))));
upd.applyTo(updated);
EXPECT_NE(doc, updated);
std::unique_ptr<ArrayFieldValue> val(dynamic_cast<ArrayFieldValue*>(updated.getValue("intarr").release()));
@@ -227,7 +227,7 @@ TEST(DocumentUpdateTest, testUpdateApplySingleValue)
// Apply an update.
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
- .addUpdate(FieldUpdate(doc->getField("headerval")).addUpdate(std::make_unique<AssignValueUpdate>(IntFieldValue(9))))
+ .addUpdate(FieldUpdate(doc->getField("headerval")).addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(9))))
.applyTo(*doc);
EXPECT_EQ(9, doc->getValue("headerval")->getAsInt());
}
@@ -240,12 +240,12 @@ TEST(DocumentUpdateTest, testUpdateArray)
EXPECT_EQ((document::FieldValue*)nullptr, doc->getValue(doc->getField("tags")).get());
// Assign array field.
- ArrayFieldValue myarray(doc->getType().getField("tags").getDataType());
- myarray.add(StringFieldValue("foo"));
- myarray.add(StringFieldValue("bar"));
+ auto myarray = std::make_unique<ArrayFieldValue>(doc->getType().getField("tags").getDataType());
+ myarray->add(StringFieldValue("foo"));
+ myarray->add(StringFieldValue("bar"));
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
- .addUpdate(FieldUpdate(doc->getField("tags")).addUpdate(std::make_unique<AssignValueUpdate>(myarray)))
+ .addUpdate(FieldUpdate(doc->getField("tags")).addUpdate(std::make_unique<AssignValueUpdate>(std::move(myarray))))
.applyTo(*doc);
auto fval1(doc->getAs<ArrayFieldValue>(doc->getField("tags")));
ASSERT_EQ((size_t) 2, fval1->size());
@@ -255,8 +255,8 @@ TEST(DocumentUpdateTest, testUpdateArray)
// Append array field
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(doc->getField("tags"))
- .addUpdate(std::make_unique<AddValueUpdate>(StringFieldValue("another")))
- .addUpdate(std::make_unique<AddValueUpdate>(StringFieldValue("tag"))))
+ .addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<StringFieldValue>("another")))
+ .addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<StringFieldValue>("tag"))))
.applyTo(*doc);
std::unique_ptr<ArrayFieldValue>
fval2(doc->getAs<ArrayFieldValue>(doc->getField("tags")));
@@ -270,15 +270,15 @@ TEST(DocumentUpdateTest, testUpdateArray)
ASSERT_THROW(
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(doc->getField("tags"))
- .addUpdate(std::make_unique<AssignValueUpdate>(StringFieldValue("THROW MEH!"))))
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<StringFieldValue>("THROW MEH!"))))
.applyTo(*doc),
std::exception) << "Expected exception when assigning a string value to an array field.";
// Remove array field.
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(doc->getField("tags"))
- .addUpdate(std::make_unique<RemoveValueUpdate>(StringFieldValue("foo")))
- .addUpdate(std::make_unique<RemoveValueUpdate>(StringFieldValue("tag"))))
+ .addUpdate(std::make_unique<RemoveValueUpdate>(std::make_unique<StringFieldValue>("foo")))
+ .addUpdate(std::make_unique<RemoveValueUpdate>(std::make_unique<StringFieldValue>("tag"))))
.applyTo(*doc);
auto fval3(doc->getAs<ArrayFieldValue>(doc->getField("tags")));
ASSERT_EQ((size_t) 2, fval3->size());
@@ -286,27 +286,27 @@ TEST(DocumentUpdateTest, testUpdateArray)
EXPECT_EQ(std::string("another"), std::string((*fval3)[1].getAsString()));
// Remove array from array.
- ArrayFieldValue myarray2(doc->getType().getField("tags").getDataType());
- myarray2.add(StringFieldValue("foo"));
- myarray2.add(StringFieldValue("bar"));
+ auto myarray2 = std::make_unique<ArrayFieldValue>(doc->getType().getField("tags").getDataType());
+ myarray2->add(StringFieldValue("foo"));
+ myarray2->add(StringFieldValue("bar"));
ASSERT_THROW(
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(doc->getField("tags"))
- .addUpdate(std::make_unique<RemoveValueUpdate>(myarray2)))
+ .addUpdate(std::make_unique<RemoveValueUpdate>(std::move(myarray2))))
.applyTo(*doc),
std::exception) << "Expected exception when removing an array from a string array.";
}
std::unique_ptr<ValueUpdate>
createAddUpdate(vespalib::stringref key, int weight) {
- auto upd = std::make_unique<AddValueUpdate>(StringFieldValue(key));
+ auto upd = std::make_unique<AddValueUpdate>(std::make_unique<StringFieldValue>(key));
upd->setWeight(weight);
return upd;
}
std::unique_ptr<ValueUpdate>
createAddUpdate(int key, int weight) {
- auto upd = std::make_unique<AddValueUpdate>(IntFieldValue(key));
+ auto upd = std::make_unique<AddValueUpdate>(std::make_unique<IntFieldValue>(key));
upd->setWeight(weight);
return upd;
}
@@ -320,11 +320,11 @@ TEST(DocumentUpdateTest, testUpdateWeightedSet)
EXPECT_EQ((FieldValue*) 0, doc->getValue(field).get());
// Assign weightedset field
- WeightedSetFieldValue wset(field.getDataType());
- wset.add(StringFieldValue("foo"), 3);
- wset.add(StringFieldValue("bar"), 14);
+ auto wset =std::make_unique<WeightedSetFieldValue>(field.getDataType());
+ wset->add(StringFieldValue("foo"), 3);
+ wset->add(StringFieldValue("bar"), 14);
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
- .addUpdate(FieldUpdate(field).addUpdate(std::make_unique<AssignValueUpdate>(wset)))
+ .addUpdate(FieldUpdate(field).addUpdate(std::make_unique<AssignValueUpdate>(std::move(wset))))
.applyTo(*doc);
auto fval1(doc->getAs<WeightedSetFieldValue>(field));
ASSERT_EQ((size_t) 2, fval1->size());
@@ -336,12 +336,12 @@ TEST(DocumentUpdateTest, testUpdateWeightedSet)
EXPECT_EQ(14, fval1->get(StringFieldValue("bar"), 0));
// Do a second assign
- WeightedSetFieldValue wset2(field.getDataType());
- wset2.add(StringFieldValue("foo"), 16);
- wset2.add(StringFieldValue("bar"), 24);
+ auto wset2 = std::make_unique<WeightedSetFieldValue>(field.getDataType());
+ wset2->add(StringFieldValue("foo"), 16);
+ wset2->add(StringFieldValue("bar"), 24);
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(field)
- .addUpdate(std::make_unique<AssignValueUpdate>(wset2)))
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::move(wset2))))
.applyTo(*doc);
auto fval2(doc->getAs<WeightedSetFieldValue>(field));
ASSERT_EQ((size_t) 2, fval2->size());
@@ -371,8 +371,8 @@ TEST(DocumentUpdateTest, testUpdateWeightedSet)
// Remove weighted field
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(field)
- .addUpdate(std::make_unique<RemoveValueUpdate>(StringFieldValue("foo")))
- .addUpdate(std::make_unique<RemoveValueUpdate>(StringFieldValue("too"))))
+ .addUpdate(std::make_unique<RemoveValueUpdate>(std::make_unique<StringFieldValue>("foo")))
+ .addUpdate(std::make_unique<RemoveValueUpdate>(std::make_unique<StringFieldValue>("too"))))
.applyTo(*doc);
auto fval4(doc->getAs<WeightedSetFieldValue>(field));
ASSERT_EQ((size_t) 1, fval4->size());
@@ -419,7 +419,7 @@ WeightedSetAutoCreateFixture::WeightedSetAutoCreateFixture()
update(repo, *docType, DocumentId("id:ns:test::1"))
{
update.addUpdate(FieldUpdate(field)
- .addUpdate(std::make_unique<MapValueUpdate>(StringFieldValue("foo"),
+ .addUpdate(std::make_unique<MapValueUpdate>(std::make_unique<StringFieldValue>("foo"),
std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 1))));
}
} // anon ns
@@ -457,7 +457,7 @@ TEST(DocumentUpdateTest, testIncrementWithZeroResultWeightIsRemoved)
{
WeightedSetAutoCreateFixture fixture;
fixture.update.addUpdate(FieldUpdate(fixture.field)
- .addUpdate(std::make_unique<MapValueUpdate>(StringFieldValue("baz"),
+ .addUpdate(std::make_unique<MapValueUpdate>(std::make_unique<StringFieldValue>("baz"),
std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 0))));
fixture.applyUpdateToDocument();
@@ -539,19 +539,19 @@ TEST(DocumentUpdateTest, testGenerateSerializedFile)
const DocumentType *type(repo.getDocumentType("serializetest"));
DocumentUpdate upd(repo, *type, DocumentId("id:ns:serializetest::update"));
upd.addUpdate(FieldUpdate(type->getField("intfield"))
- .addUpdate(std::make_unique<AssignValueUpdate>(IntFieldValue(4))));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(4))));
upd.addUpdate(FieldUpdate(type->getField("floatfield"))
- .addUpdate(std::make_unique<AssignValueUpdate>(FloatFieldValue(1.00f))));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<FloatFieldValue>(1.00f))));
upd.addUpdate(FieldUpdate(type->getField("arrayoffloatfield"))
- .addUpdate(std::make_unique<AddValueUpdate>(FloatFieldValue(5.00f)))
- .addUpdate(std::make_unique<AddValueUpdate>(FloatFieldValue(4.23f)))
- .addUpdate(std::make_unique<AddValueUpdate>(FloatFieldValue(-1.00f))));
+ .addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<FloatFieldValue>(5.00f)))
+ .addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<FloatFieldValue>(4.23f)))
+ .addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<FloatFieldValue>(-1.00f))));
upd.addUpdate(FieldUpdate(type->getField("intfield"))
.addUpdate(std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 3)));
upd.addUpdate(FieldUpdate(type->getField("wsfield"))
- .addUpdate(std::make_unique<MapValueUpdate>(StringFieldValue("foo"),
+ .addUpdate(std::make_unique<MapValueUpdate>(std::make_unique<StringFieldValue>("foo"),
std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 2)))
- .addUpdate(std::make_unique<MapValueUpdate>(StringFieldValue("foo"),
+ .addUpdate(std::make_unique<MapValueUpdate>(std::make_unique<StringFieldValue>("foo"),
std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Mul, 2))));
nbostream buf(serializeHEAD(upd));
writeBufferToFile(buf, "data/serializeupdatecpp.dat");
@@ -569,7 +569,7 @@ TEST(DocumentUpdateTest, testSetBadFieldTypes)
DocumentUpdate update(docMan.getTypeRepo(), *doc->getDataType(), doc->getId());
ASSERT_THROW(
update.addUpdate(FieldUpdate(doc->getField("headerval"))
- .addUpdate(std::make_unique<AssignValueUpdate>(FloatFieldValue(4.00f)))),
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<FloatFieldValue>(4.00f)))),
std::exception) << "Expected exception when adding a float to an int field.";
update.applyTo(*doc);
@@ -604,7 +604,7 @@ TEST(DocumentUpdateTest, testUpdateApplyNoArrayValues)
// Assign array field with no array values = empty array
DocumentUpdate update(docMan.getTypeRepo(), *doc->getDataType(), doc->getId());
update.addUpdate(FieldUpdate(field)
- .addUpdate(std::make_unique<AssignValueUpdate>(ArrayFieldValue(field.getDataType()))));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<ArrayFieldValue>(field.getDataType()))));
update.applyTo(*doc);
@@ -624,7 +624,7 @@ TEST(DocumentUpdateTest, testUpdateArrayEmptyParamValue)
// Assign array field with no array values = empty array.
DocumentUpdate update(docMan.getTypeRepo(), *doc->getDataType(), doc->getId());
- update.addUpdate(FieldUpdate(field).addUpdate(std::make_unique<AssignValueUpdate>(ArrayFieldValue(field.getDataType()))));
+ update.addUpdate(FieldUpdate(field).addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<ArrayFieldValue>(field.getDataType()))));
update.applyTo(*doc);
// Verify that the field was set in the document.
@@ -652,7 +652,7 @@ TEST(DocumentUpdateTest, testUpdateWeightedSetEmptyParamValue)
// Assign weighted set with no items = empty set.
DocumentUpdate update(docMan.getTypeRepo(), *doc->getDataType(), doc->getId());
- update.addUpdate(FieldUpdate(field).addUpdate(std::make_unique<AssignValueUpdate>(WeightedSetFieldValue(field.getDataType()))));
+ update.addUpdate(FieldUpdate(field).addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<WeightedSetFieldValue>(field.getDataType()))));
update.applyTo(*doc);
// Verify that the field was set in the document.
@@ -682,8 +682,8 @@ TEST(DocumentUpdateTest, testUpdateArrayWrongSubtype)
DocumentUpdate update(docMan.getTypeRepo(), *doc->getDataType(), doc->getId());
ASSERT_THROW(
update.addUpdate(FieldUpdate(field)
- .addUpdate(std::make_unique<AddValueUpdate>(IntFieldValue(123)))
- .addUpdate(std::make_unique<AddValueUpdate>(IntFieldValue(456)))),
+ .addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<IntFieldValue>(123)))
+ .addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<IntFieldValue>(456)))),
std::exception) << "Expected exception when adding wrong type.";
// Apply update
@@ -732,7 +732,7 @@ TEST(DocumentUpdateTest, testMapValueUpdate)
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(field1)
- .addUpdate(std::make_unique<MapValueUpdate>(StringFieldValue("banana"),
+ .addUpdate(std::make_unique<MapValueUpdate>(std::make_unique<StringFieldValue>("banana"),
std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 1.0))))
.applyTo(*doc);
std::unique_ptr<WeightedSetFieldValue> fv1 =
@@ -741,7 +741,7 @@ TEST(DocumentUpdateTest, testMapValueUpdate)
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(field2)
- .addUpdate(std::make_unique<MapValueUpdate>(StringFieldValue("banana"),
+ .addUpdate(std::make_unique<MapValueUpdate>(std::make_unique<StringFieldValue>("banana"),
std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 1.0))))
.applyTo(*doc);
auto fv2 = doc->getAs<WeightedSetFieldValue>(field2);
@@ -770,7 +770,7 @@ TEST(DocumentUpdateTest, testMapValueUpdate)
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(field1)
- .addUpdate(std::make_unique<MapValueUpdate>(StringFieldValue("apple"),
+ .addUpdate(std::make_unique<MapValueUpdate>(std::make_unique<StringFieldValue>("apple"),
std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Sub, 1.0))))
.applyTo(*doc);
@@ -780,7 +780,7 @@ TEST(DocumentUpdateTest, testMapValueUpdate)
DocumentUpdate(docMan.getTypeRepo(), *doc->getDataType(), doc->getId())
.addUpdate(FieldUpdate(field2)
- .addUpdate(std::make_unique<MapValueUpdate>(StringFieldValue("apple"),
+ .addUpdate(std::make_unique<MapValueUpdate>(std::make_unique<StringFieldValue>("apple"),
std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Sub, 1.0))))
.applyTo(*doc);
@@ -940,10 +940,9 @@ struct TensorUpdateFixture {
TEST(DocumentUpdateTest, tensor_assign_update_can_be_applied)
{
TensorUpdateFixture f;
- auto newTensor = f.makeBaselineTensor();
- f.applyUpdate(std::make_unique<AssignValueUpdate>(*newTensor));
+ f.applyUpdate(std::make_unique<AssignValueUpdate>(f.makeBaselineTensor()));
f.assertDocumentUpdated();
- f.assertTensor(*newTensor);
+ f.assertTensor(*f.makeBaselineTensor());
}
TEST(DocumentUpdateTest, tensor_clear_update_can_be_applied)
@@ -1032,7 +1031,7 @@ TEST(DocumentUpdateTest, tensor_modify_update_can_be_applied_to_nonexisting_tens
TEST(DocumentUpdateTest, tensor_assign_update_can_be_roundtrip_serialized)
{
TensorUpdateFixture f;
- f.assertRoundtripSerialize(AssignValueUpdate(*f.makeBaselineTensor()));
+ f.assertRoundtripSerialize(AssignValueUpdate(f.makeBaselineTensor()));
}
TEST(DocumentUpdateTest, tensor_add_update_can_be_roundtrip_serialized)
@@ -1162,7 +1161,7 @@ struct TensorUpdateSerializeFixture {
(*repo, docType, DocumentId("id:test:test::0"));
result->addUpdate(FieldUpdate(getField("sparse_tensor"))
- .addUpdate(std::make_unique<AssignValueUpdate>(*makeTensor()))
+ .addUpdate(std::make_unique<AssignValueUpdate>(makeTensor()))
.addUpdate(std::make_unique<TensorAddUpdate>(makeTensor()))
.addUpdate(std::make_unique<TensorRemoveUpdate>(makeTensor())));
result->addUpdate(FieldUpdate(getField("dense_tensor"))
@@ -1250,7 +1249,7 @@ CreateIfNonExistentFixture::CreateIfNonExistentFixture()
update(std::make_unique<DocumentUpdate>(docMan.getTypeRepo(), *document->getDataType(), document->getId()))
{
update->addUpdate(FieldUpdate(document->getField("headerval"))
- .addUpdate(std::make_unique<AssignValueUpdate>(IntFieldValue(1))));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(1))));
update->setCreateIfNonExistent(true);
}
@@ -1282,8 +1281,8 @@ ArrayUpdateFixture::ArrayUpdateFixture()
{
update = std::make_unique<DocumentUpdate>(doc_man.getTypeRepo(), *doc->getDataType(), doc->getId());
update->addUpdate(FieldUpdate(array_field)
- .addUpdate(std::make_unique<MapValueUpdate>(IntFieldValue(1),
- std::make_unique<AssignValueUpdate>(StringFieldValue("bar")))));
+ .addUpdate(std::make_unique<MapValueUpdate>(std::make_unique<IntFieldValue>(1),
+ std::make_unique<AssignValueUpdate>(std::make_unique<StringFieldValue>("bar")))));
}
ArrayUpdateFixture::~ArrayUpdateFixture() = default;
diff --git a/document/src/tests/feed_reject_helper_test.cpp b/document/src/tests/feed_reject_helper_test.cpp
index 6649c9c0208..278e89b15a3 100644
--- a/document/src/tests/feed_reject_helper_test.cpp
+++ b/document/src/tests/feed_reject_helper_test.cpp
@@ -53,22 +53,22 @@ TEST(DocumentRejectTest, requireThatFixedSizeFieldValuesAreDetected) {
TEST(DocumentRejectTest, requireThatClearRemoveTensorRemoveAndArtithmeticUpdatesIgnoreFeedRejection) {
EXPECT_FALSE(FeedRejectHelper::mustReject(ClearValueUpdate()));
- EXPECT_FALSE(FeedRejectHelper::mustReject(RemoveValueUpdate(StringFieldValue())));
+ EXPECT_FALSE(FeedRejectHelper::mustReject(RemoveValueUpdate(std::make_unique<StringFieldValue>())));
EXPECT_FALSE(FeedRejectHelper::mustReject(ArithmeticValueUpdate(ArithmeticValueUpdate::Add, 5.0)));
EXPECT_FALSE(FeedRejectHelper::mustReject(TensorRemoveUpdate(std::make_unique<TensorFieldValue>())));
}
TEST(DocumentRejectTest, requireThatAddMapTensorModifyAndTensorAddUpdatesWillBeRejected) {
- EXPECT_TRUE(FeedRejectHelper::mustReject(AddValueUpdate(IntFieldValue())));
- EXPECT_TRUE(FeedRejectHelper::mustReject(MapValueUpdate(IntFieldValue(), std::make_unique<ClearValueUpdate>())));
+ EXPECT_TRUE(FeedRejectHelper::mustReject(AddValueUpdate(std::make_unique<IntFieldValue>())));
+ EXPECT_TRUE(FeedRejectHelper::mustReject(MapValueUpdate(std::make_unique<IntFieldValue>(), std::make_unique<ClearValueUpdate>())));
EXPECT_TRUE(FeedRejectHelper::mustReject(TensorModifyUpdate(TensorModifyUpdate::Operation::REPLACE,
std::make_unique<TensorFieldValue>())));
EXPECT_TRUE(FeedRejectHelper::mustReject(TensorAddUpdate(std::make_unique<TensorFieldValue>())));
}
TEST(DocumentRejectTest, requireThatAssignUpdatesWillBeRejectedBasedOnTheirContent) {
- EXPECT_FALSE(FeedRejectHelper::mustReject(AssignValueUpdate(IntFieldValue())));
- EXPECT_TRUE(FeedRejectHelper::mustReject(AssignValueUpdate(StringFieldValue())));
+ EXPECT_FALSE(FeedRejectHelper::mustReject(AssignValueUpdate(std::make_unique<IntFieldValue>())));
+ EXPECT_TRUE(FeedRejectHelper::mustReject(AssignValueUpdate(std::make_unique<StringFieldValue>())));
}
}
diff --git a/document/src/tests/testxml.cpp b/document/src/tests/testxml.cpp
index 978ab572214..998d41480f3 100644
--- a/document/src/tests/testxml.cpp
+++ b/document/src/tests/testxml.cpp
@@ -60,16 +60,16 @@ createTestDocumentUpdate(const DocumentTypeRepo& repo)
auto up = std::make_unique<DocumentUpdate>(repo, *type, id);
up->addUpdate(FieldUpdate(type->getField("intattr"))
- .addUpdate(std::make_unique<AssignValueUpdate>(IntFieldValue(7))));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(7))));
up->addUpdate(FieldUpdate(type->getField("stringattr"))
- .addUpdate(std::make_unique<AssignValueUpdate>(StringFieldValue("New value"))));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<StringFieldValue>("New value"))));
up->addUpdate(FieldUpdate(type->getField("arrayattr"))
- .addUpdate(std::make_unique<AddValueUpdate>(IntFieldValue(123)))
- .addUpdate(std::make_unique<AddValueUpdate>(IntFieldValue(456))));
+ .addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<IntFieldValue>(123)))
+ .addUpdate(std::make_unique<AddValueUpdate>(std::make_unique<IntFieldValue>(456))));
up->addUpdate(FieldUpdate(type->getField("arrayattr"))
- .addUpdate(std::make_unique<RemoveValueUpdate>(IntFieldValue(123)))
- .addUpdate(std::make_unique<RemoveValueUpdate>(IntFieldValue(456)))
- .addUpdate(std::make_unique<RemoveValueUpdate>(IntFieldValue(789))));
+ .addUpdate(std::make_unique<RemoveValueUpdate>(std::make_unique<IntFieldValue>(123)))
+ .addUpdate(std::make_unique<RemoveValueUpdate>(std::make_unique<IntFieldValue>(456)))
+ .addUpdate(std::make_unique<RemoveValueUpdate>(std::make_unique<IntFieldValue>(789))));
return up;
}
diff --git a/document/src/vespa/document/base/forcelink.cpp b/document/src/vespa/document/base/forcelink.cpp
index 500b5cf7fa5..cfa3354f5f2 100644
--- a/document/src/vespa/document/base/forcelink.cpp
+++ b/document/src/vespa/document/base/forcelink.cpp
@@ -14,10 +14,10 @@ ForceLink::ForceLink(void)
DocumentType type("foo", 1);
Document document(type, DocumentId("doc:ns:bar"));
DocumentUpdate documentUpdate;
- MapValueUpdate mapValueUpdate(IntFieldValue(3), std::make_unique<ClearValueUpdate>());
- AddValueUpdate addValueUpdate(IntFieldValue(3));
- RemoveValueUpdate removeValueUpdate(IntFieldValue(3));
- AssignValueUpdate assignValueUpdate(IntFieldValue(3));
+ MapValueUpdate mapValueUpdate(std::make_unique<IntFieldValue>(3), std::make_unique<ClearValueUpdate>());
+ AddValueUpdate addValueUpdate(std::make_unique<IntFieldValue>(3));
+ RemoveValueUpdate removeValueUpdate(std::make_unique<IntFieldValue>(3));
+ AssignValueUpdate assignValueUpdate(std::make_unique<IntFieldValue>(3));
ClearValueUpdate clearValueUpdate;
ArithmeticValueUpdate arithmeticValueUpdate(ArithmeticValueUpdate::Add, 3);
}
diff --git a/document/src/vespa/document/update/addvalueupdate.cpp b/document/src/vespa/document/update/addvalueupdate.cpp
index 3b593d3e9b2..102f8ceebbe 100644
--- a/document/src/vespa/document/update/addvalueupdate.cpp
+++ b/document/src/vespa/document/update/addvalueupdate.cpp
@@ -18,9 +18,9 @@ using namespace vespalib::xml;
namespace document {
-AddValueUpdate:: AddValueUpdate(const FieldValue& value, int weight)
+AddValueUpdate:: AddValueUpdate(std::unique_ptr<FieldValue> value, int weight)
: ValueUpdate(Add),
- _value(value.clone()),
+ _value(std::move(value)),
_weight(weight)
{}
diff --git a/document/src/vespa/document/update/addvalueupdate.h b/document/src/vespa/document/update/addvalueupdate.h
index 2ab7a98e842..f891c368f96 100644
--- a/document/src/vespa/document/update/addvalueupdate.h
+++ b/document/src/vespa/document/update/addvalueupdate.h
@@ -13,24 +13,24 @@
namespace document {
class AddValueUpdate final : public ValueUpdate {
- FieldValue::CP _value; // The field value to add by this update.
+ std::unique_ptr<FieldValue> _value; // The field value to add by this update.
int _weight; // The weight to assign to the contained value.
// Used by ValueUpdate's static factory function
// Private because it generates an invalid object.
friend class ValueUpdate;
- AddValueUpdate() : ValueUpdate(Add), _value(0), _weight(1) {}
+ AddValueUpdate() : ValueUpdate(Add), _value(), _weight(1) {}
ACCEPT_UPDATE_VISITOR;
public:
- typedef std::unique_ptr<AddValueUpdate> UP;
-
/**
* The default constructor requires initial values for all member variables.
*
* @param value The field value to add.
* @param weight The weight for the field value.
*/
- AddValueUpdate(const FieldValue& value, int weight = 1);
+ AddValueUpdate(std::unique_ptr<FieldValue> value, int weight = 1);
+ AddValueUpdate(const AddValueUpdate &) = delete;
+ AddValueUpdate & operator =(const AddValueUpdate &) = delete;
~AddValueUpdate();
bool operator==(const ValueUpdate& other) const override;
@@ -42,17 +42,6 @@ public:
int getWeight() const { return _weight; }
/**
- * Sets the field value to add during this update.
- *
- * @param value The new field value.
- * @return A reference to this object so you can chain calls.
- */
- AddValueUpdate& setValue(const FieldValue& value) {
- _value.reset(value.clone());
- return *this;
- }
-
- /**
* Sets the weight to assign to the value of this.
*
* @return A reference to this object so you can chain calls.
diff --git a/document/src/vespa/document/update/arithmeticvalueupdate.h b/document/src/vespa/document/update/arithmeticvalueupdate.h
index c82a5b4c338..7651c838458 100644
--- a/document/src/vespa/document/update/arithmeticvalueupdate.h
+++ b/document/src/vespa/document/update/arithmeticvalueupdate.h
@@ -25,7 +25,7 @@ public:
private:
Operator _operator; // The operator of the arithmetic operation.
- double _operand; // The operand of the arithmetic operation.
+ double _operand; // The operand of the arithmetic operation.
// Used by ValueUpdate's static factory function
// Private because it generates an invalid object.
@@ -50,12 +50,8 @@ public:
_operator(opt),
_operand(opn) {}
- ArithmeticValueUpdate(const ArithmeticValueUpdate& update)
- : ValueUpdate(update),
- _operator(update._operator),
- _operand(update._operand) {}
-
- ArithmeticValueUpdate &operator=(const ArithmeticValueUpdate &rhs) = default;
+ ArithmeticValueUpdate(const ArithmeticValueUpdate& update) = delete;
+ ArithmeticValueUpdate &operator=(const ArithmeticValueUpdate &rhs) = delete;
bool operator==(const ValueUpdate& other) const override;
diff --git a/document/src/vespa/document/update/assignvalueupdate.cpp b/document/src/vespa/document/update/assignvalueupdate.cpp
index 363eff92bf0..32bded8cfd7 100644
--- a/document/src/vespa/document/update/assignvalueupdate.cpp
+++ b/document/src/vespa/document/update/assignvalueupdate.cpp
@@ -21,9 +21,9 @@ AssignValueUpdate::AssignValueUpdate()
_value()
{}
-AssignValueUpdate::AssignValueUpdate(const FieldValue& value)
+AssignValueUpdate::AssignValueUpdate(std::unique_ptr<FieldValue> value)
: ValueUpdate(Assign),
- _value(value.clone())
+ _value(std::move(value))
{
}
AssignValueUpdate::~AssignValueUpdate() = default;
@@ -36,7 +36,11 @@ AssignValueUpdate::operator==(const ValueUpdate& other) const
{
if (other.getType() != Assign) return false;
const AssignValueUpdate& o(static_cast<const AssignValueUpdate&>(other));
- return _value == o._value;
+ if (_value && o._value) {
+ return *_value == *o._value;
+ } else {
+ return bool(_value) == bool(o._value);
+ }
}
// Ensure that this update is compatible with given field.
diff --git a/document/src/vespa/document/update/assignvalueupdate.h b/document/src/vespa/document/update/assignvalueupdate.h
index 9df2084ef97..1e006d3baed 100644
--- a/document/src/vespa/document/update/assignvalueupdate.h
+++ b/document/src/vespa/document/update/assignvalueupdate.h
@@ -17,13 +17,14 @@
namespace document {
class AssignValueUpdate final : public ValueUpdate {
- FieldValue::CP _value;
+ std::unique_ptr<FieldValue> _value;
ACCEPT_UPDATE_VISITOR;
public:
- typedef std::unique_ptr<AssignValueUpdate> UP;
AssignValueUpdate();
- AssignValueUpdate(const FieldValue& value);
+ AssignValueUpdate(std::unique_ptr<FieldValue> value);
+ AssignValueUpdate(const AssignValueUpdate& value) = delete;
+ AssignValueUpdate & operator=(const AssignValueUpdate& value) = delete;
~AssignValueUpdate() override;
bool operator==(const ValueUpdate& other) const override;
diff --git a/document/src/vespa/document/update/clearvalueupdate.h b/document/src/vespa/document/update/clearvalueupdate.h
index 2a68814f8b0..770f0a91d07 100644
--- a/document/src/vespa/document/update/clearvalueupdate.h
+++ b/document/src/vespa/document/update/clearvalueupdate.h
@@ -14,10 +14,9 @@ namespace document {
class ClearValueUpdate final : public ValueUpdate {
ACCEPT_UPDATE_VISITOR;
public:
- typedef std::unique_ptr<ClearValueUpdate> UP;
- ClearValueUpdate(const ClearValueUpdate& update) = default;
+ ClearValueUpdate(const ClearValueUpdate& update) = delete;
+ ClearValueUpdate &operator=(const ClearValueUpdate &rhs) = delete;
ClearValueUpdate() : ValueUpdate(Clear) {}
- ClearValueUpdate &operator=(const ClearValueUpdate &rhs) = default;
bool operator==(const ValueUpdate& other) const override;
void checkCompatibility(const Field& field) const override;
diff --git a/document/src/vespa/document/update/mapvalueupdate.cpp b/document/src/vespa/document/update/mapvalueupdate.cpp
index 93f2029b92f..47346133e17 100644
--- a/document/src/vespa/document/update/mapvalueupdate.cpp
+++ b/document/src/vespa/document/update/mapvalueupdate.cpp
@@ -16,24 +16,12 @@ using namespace vespalib::xml;
namespace document {
-MapValueUpdate::MapValueUpdate(const FieldValue& key, std::unique_ptr<ValueUpdate> update)
+MapValueUpdate::MapValueUpdate(std::unique_ptr<FieldValue> key, std::unique_ptr<ValueUpdate> update)
: ValueUpdate(Map),
- _key(key.clone()),
+ _key(std::move(key)),
_update(std::move(update))
{}
-MapValueUpdate::MapValueUpdate(const MapValueUpdate &)
- : ValueUpdate(Map),
- _key(),
- _update()
-{
- abort(); // TODO Will never be called, remove
-}
-MapValueUpdate &
-MapValueUpdate::operator = (const MapValueUpdate &) {
- abort(); // TODO Will never be called, remove
- return *this;
-}
MapValueUpdate::~MapValueUpdate() = default;
bool
diff --git a/document/src/vespa/document/update/mapvalueupdate.h b/document/src/vespa/document/update/mapvalueupdate.h
index 93d6c844899..dfbb880f422 100644
--- a/document/src/vespa/document/update/mapvalueupdate.h
+++ b/document/src/vespa/document/update/mapvalueupdate.h
@@ -26,9 +26,9 @@ public:
* @param key The identifier of the field value to be updated.
* @param update The update to map to apply to the field value of this.
*/
- MapValueUpdate(const FieldValue& key, std::unique_ptr<ValueUpdate> update);
- MapValueUpdate(const MapValueUpdate &);
- MapValueUpdate & operator = (const MapValueUpdate &);
+ MapValueUpdate(std::unique_ptr<FieldValue> key, std::unique_ptr<ValueUpdate> update);
+ MapValueUpdate(const MapValueUpdate &) = delete;
+ MapValueUpdate & operator = (const MapValueUpdate &) = delete;
MapValueUpdate(MapValueUpdate &&) = default;
MapValueUpdate & operator = (MapValueUpdate &&) = default;
diff --git a/document/src/vespa/document/update/removevalueupdate.cpp b/document/src/vespa/document/update/removevalueupdate.cpp
index 4789df8d7ab..3c381148e94 100644
--- a/document/src/vespa/document/update/removevalueupdate.cpp
+++ b/document/src/vespa/document/update/removevalueupdate.cpp
@@ -16,9 +16,9 @@ using namespace vespalib::xml;
namespace document {
-RemoveValueUpdate::RemoveValueUpdate(const FieldValue& key)
+RemoveValueUpdate::RemoveValueUpdate(std::unique_ptr<FieldValue> key)
: ValueUpdate(Remove),
- _key(key.clone())
+ _key(std::move(key))
{}
RemoveValueUpdate::~RemoveValueUpdate() = default;
diff --git a/document/src/vespa/document/update/removevalueupdate.h b/document/src/vespa/document/update/removevalueupdate.h
index 0c57817ce33..cfce9b5234a 100644
--- a/document/src/vespa/document/update/removevalueupdate.h
+++ b/document/src/vespa/document/update/removevalueupdate.h
@@ -11,21 +11,21 @@
namespace document {
class RemoveValueUpdate final : public ValueUpdate {
- FieldValue::CP _key; // The field value to remove by this update.
+ std::unique_ptr<FieldValue> _key; // The field value to remove by this update.
ACCEPT_UPDATE_VISITOR;
friend ValueUpdate;
RemoveValueUpdate() : ValueUpdate(Remove), _key() {}
public:
- typedef std::unique_ptr<RemoveValueUpdate> UP;
-
/**
* The default constructor requires initial values for all member variables.
*
* @param value The identifier of the field value to update.
*/
- RemoveValueUpdate(const FieldValue& key);
- ~RemoveValueUpdate();
+ RemoveValueUpdate(std::unique_ptr<FieldValue> key);
+ RemoveValueUpdate(const RemoveValueUpdate &) = delete;
+ RemoveValueUpdate & operator=(const RemoveValueUpdate &) = delete;
+ ~RemoveValueUpdate() override;
bool operator==(const ValueUpdate& other) const override;
diff --git a/document/src/vespa/document/update/tensor_add_update.cpp b/document/src/vespa/document/update/tensor_add_update.cpp
index 49c73722147..b3bb4d7623d 100644
--- a/document/src/vespa/document/update/tensor_add_update.cpp
+++ b/document/src/vespa/document/update/tensor_add_update.cpp
@@ -29,13 +29,6 @@ TensorAddUpdate::TensorAddUpdate()
{
}
-TensorAddUpdate::TensorAddUpdate(const TensorAddUpdate &rhs)
- : ValueUpdate(rhs),
- TensorUpdate(rhs),
- _tensor(rhs._tensor->clone())
-{
-}
-
TensorAddUpdate::TensorAddUpdate(std::unique_ptr<TensorFieldValue> &&tensor)
: ValueUpdate(TensorAdd),
TensorUpdate(),
@@ -45,20 +38,6 @@ TensorAddUpdate::TensorAddUpdate(std::unique_ptr<TensorFieldValue> &&tensor)
TensorAddUpdate::~TensorAddUpdate() = default;
-TensorAddUpdate &
-TensorAddUpdate::operator=(const TensorAddUpdate &rhs)
-{
- _tensor.reset(rhs._tensor->clone());
- return *this;
-}
-
-TensorAddUpdate &
-TensorAddUpdate::operator=(TensorAddUpdate &&rhs)
-{
- _tensor = std::move(rhs._tensor);
- return *this;
-}
-
bool
TensorAddUpdate::operator==(const ValueUpdate &other) const
{
diff --git a/document/src/vespa/document/update/tensor_add_update.h b/document/src/vespa/document/update/tensor_add_update.h
index 7e62f2db71a..00346b4e723 100644
--- a/document/src/vespa/document/update/tensor_add_update.h
+++ b/document/src/vespa/document/update/tensor_add_update.h
@@ -19,13 +19,12 @@ class TensorAddUpdate final : public ValueUpdate, public TensorUpdate {
friend ValueUpdate;
TensorAddUpdate();
- TensorAddUpdate(const TensorAddUpdate &rhs);
ACCEPT_UPDATE_VISITOR;
public:
TensorAddUpdate(std::unique_ptr<TensorFieldValue> &&tensor);
+ TensorAddUpdate(const TensorAddUpdate &rhs) = delete;
+ TensorAddUpdate &operator=(const TensorAddUpdate &rhs) = delete;
~TensorAddUpdate() override;
- TensorAddUpdate &operator=(const TensorAddUpdate &rhs);
- TensorAddUpdate &operator=(TensorAddUpdate &&rhs);
bool operator==(const ValueUpdate &other) const override;
const TensorFieldValue &getTensor() const { return *_tensor; }
void checkCompatibility(const Field &field) const override;
diff --git a/document/src/vespa/document/update/tensor_modify_update.cpp b/document/src/vespa/document/update/tensor_modify_update.cpp
index 6abed60af17..92b2a8672c3 100644
--- a/document/src/vespa/document/update/tensor_modify_update.cpp
+++ b/document/src/vespa/document/update/tensor_modify_update.cpp
@@ -91,16 +91,6 @@ TensorModifyUpdate::TensorModifyUpdate()
{
}
-TensorModifyUpdate::TensorModifyUpdate(const TensorModifyUpdate &rhs)
- : ValueUpdate(rhs),
- TensorUpdate(),
- _operation(rhs._operation),
- _tensorType(std::make_unique<TensorDataType>(*rhs._tensorType)),
- _tensor(static_cast<TensorFieldValue *>(_tensorType->createFieldValue().release()))
-{
- *_tensor = *rhs._tensor;
-}
-
TensorModifyUpdate::TensorModifyUpdate(Operation operation, std::unique_ptr<TensorFieldValue> tensor)
: ValueUpdate(TensorModify),
TensorUpdate(),
@@ -113,28 +103,6 @@ TensorModifyUpdate::TensorModifyUpdate(Operation operation, std::unique_ptr<Tens
TensorModifyUpdate::~TensorModifyUpdate() = default;
-TensorModifyUpdate &
-TensorModifyUpdate::operator=(const TensorModifyUpdate &rhs)
-{
- if (&rhs != this) {
- _operation = rhs._operation;
- _tensor.reset();
- _tensorType = std::make_unique<TensorDataType>(*rhs._tensorType);
- _tensor.reset(dynamic_cast<TensorFieldValue *>(_tensorType->createFieldValue().release()));
- *_tensor = *rhs._tensor;
- }
- return *this;
-}
-
-TensorModifyUpdate &
-TensorModifyUpdate::operator=(TensorModifyUpdate &&rhs)
-{
- _operation = rhs._operation;
- _tensorType = std::move(rhs._tensorType);
- _tensor = std::move(rhs._tensor);
- return *this;
-}
-
bool
TensorModifyUpdate::operator==(const ValueUpdate &other) const
{
diff --git a/document/src/vespa/document/update/tensor_modify_update.h b/document/src/vespa/document/update/tensor_modify_update.h
index 9fb69ec5a13..9386b4f8a1b 100644
--- a/document/src/vespa/document/update/tensor_modify_update.h
+++ b/document/src/vespa/document/update/tensor_modify_update.h
@@ -32,13 +32,13 @@ private:
friend ValueUpdate;
TensorModifyUpdate();
- TensorModifyUpdate(const TensorModifyUpdate &rhs);
ACCEPT_UPDATE_VISITOR;
public:
TensorModifyUpdate(Operation operation, std::unique_ptr<TensorFieldValue> tensor);
+ TensorModifyUpdate(const TensorModifyUpdate &rhs) = delete;
+ TensorModifyUpdate &operator=(const TensorModifyUpdate &rhs) = delete;
~TensorModifyUpdate() override;
- TensorModifyUpdate &operator=(const TensorModifyUpdate &rhs);
- TensorModifyUpdate &operator=(TensorModifyUpdate &&rhs);
+
bool operator==(const ValueUpdate &other) const override;
Operation getOperation() const { return _operation; }
const TensorFieldValue &getTensor() const { return *_tensor; }
diff --git a/document/src/vespa/document/update/tensor_remove_update.cpp b/document/src/vespa/document/update/tensor_remove_update.cpp
index 4bfb6bc6b18..74c0cbe6c63 100644
--- a/document/src/vespa/document/update/tensor_remove_update.cpp
+++ b/document/src/vespa/document/update/tensor_remove_update.cpp
@@ -46,14 +46,6 @@ TensorRemoveUpdate::TensorRemoveUpdate()
{
}
-TensorRemoveUpdate::TensorRemoveUpdate(const TensorRemoveUpdate &rhs)
- : ValueUpdate(rhs),
- TensorUpdate(rhs),
- _tensorType(std::make_unique<TensorDataType>(*rhs._tensorType)),
- _tensor(rhs._tensor->clone())
-{
-}
-
TensorRemoveUpdate::TensorRemoveUpdate(std::unique_ptr<TensorFieldValue> tensor)
: ValueUpdate(TensorRemove),
TensorUpdate(),
@@ -65,26 +57,6 @@ TensorRemoveUpdate::TensorRemoveUpdate(std::unique_ptr<TensorFieldValue> tensor)
TensorRemoveUpdate::~TensorRemoveUpdate() = default;
-TensorRemoveUpdate &
-TensorRemoveUpdate::operator=(const TensorRemoveUpdate &rhs)
-{
- if (&rhs != this) {
- _tensor.reset();
- _tensorType = std::make_unique<TensorDataType>(*rhs._tensorType);
- _tensor.reset(static_cast<TensorFieldValue *>(_tensorType->createFieldValue().release()));
- *_tensor = *rhs._tensor;
- }
- return *this;
-}
-
-TensorRemoveUpdate &
-TensorRemoveUpdate::operator=(TensorRemoveUpdate &&rhs)
-{
- _tensorType = std::move(rhs._tensorType);
- _tensor = std::move(rhs._tensor);
- return *this;
-}
-
bool
TensorRemoveUpdate::operator==(const ValueUpdate &other) const
{
diff --git a/document/src/vespa/document/update/tensor_remove_update.h b/document/src/vespa/document/update/tensor_remove_update.h
index 00c886fa41f..06b0c512b4b 100644
--- a/document/src/vespa/document/update/tensor_remove_update.h
+++ b/document/src/vespa/document/update/tensor_remove_update.h
@@ -23,14 +23,13 @@ private:
friend ValueUpdate;
TensorRemoveUpdate();
- TensorRemoveUpdate(const TensorRemoveUpdate &rhs);
ACCEPT_UPDATE_VISITOR;
public:
TensorRemoveUpdate(std::unique_ptr<TensorFieldValue> tensor);
+ TensorRemoveUpdate(const TensorRemoveUpdate &rhs) = delete;
+ TensorRemoveUpdate &operator=(const TensorRemoveUpdate &rhs) = delete;
~TensorRemoveUpdate() override;
- TensorRemoveUpdate &operator=(const TensorRemoveUpdate &rhs);
- TensorRemoveUpdate &operator=(TensorRemoveUpdate &&rhs);
const TensorFieldValue &getTensor() const { return *_tensor; }
std::unique_ptr<vespalib::eval::Value> applyTo(const vespalib::eval::Value &tensor) const;
std::unique_ptr<Value> apply_to(const Value &tensor,
diff --git a/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp b/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp
index 2a5b4b48cfa..6f05a1a7b79 100644
--- a/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp
+++ b/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp
@@ -29,6 +29,9 @@
using document::BucketId;
using document::BucketSpace;
using document::test::makeBucketSpace;
+using document::FieldUpdate;
+using document::AssignValueUpdate;
+using document::IntFieldValue;
using storage::spi::test::makeSpiBucket;
using storage::spi::test::cloneDocEntry;
@@ -92,11 +95,7 @@ createClusterState(const lib::State& nodeState = lib::State::UP)
storage::lib::ClusterState cstate;
StorDistributionConfigBuilder dc;
- cstate.setNodeState(Node(NodeType::STORAGE, 0),
- NodeState(NodeType::STORAGE,
- nodeState,
- "dummy desc",
- 1.0));
+ cstate.setNodeState(Node(NodeType::STORAGE, 0), NodeState(NodeType::STORAGE, nodeState, "dummy desc", 1.0));
cstate.setClusterState(State::UP);
dc.redundancy = 1;
dc.readyCopies = 1;
@@ -120,8 +119,7 @@ struct DocAndTimestamp
DocAndTimestamp(const Document::SP& docptr, spi::Timestamp ts)
: doc(docptr), timestamp(ts)
- {
- }
+ { }
};
/**
@@ -135,9 +133,7 @@ struct Chunk
struct DocEntryIndirectTimestampComparator
{
- bool operator()(const DocEntry::UP& e1,
- const DocEntry::UP& e2) const
- {
+ bool operator()(const DocEntry::UP& e1, const DocEntry::UP& e2) const {
return e1->getTimestamp() < e2->getTimestamp();
}
};
@@ -210,12 +206,7 @@ iterateBucket(PersistenceProvider& spi,
Selection sel(docSel);
Context context(Priority(0), Trace::TraceLevel(0));
- CreateIteratorResult iter = spi.createIterator(
- bucket,
- std::make_shared<document::AllFields>(),
- sel,
- versions,
- context);
+ CreateIteratorResult iter = spi.createIterator(bucket, std::make_shared<document::AllFields>(), sel, versions, context);
EXPECT_EQ(Result::ErrorType::NONE, iter.getErrorCode());
@@ -340,17 +331,9 @@ TEST_F(ConformanceTest, testBasics)
Document::SP doc1 = testDocMan.createRandomDocumentAtLocation(0x01, 1);
Document::SP doc2 = testDocMan.createRandomDocumentAtLocation(0x01, 2);
spi->createBucket(bucket, context);
- EXPECT_EQ(
- Result(),
- Result(spi->put(bucket, Timestamp(1), doc1, context)));
-
- EXPECT_EQ(
- Result(),
- Result(spi->put(bucket, Timestamp(2), doc2, context)));
-
- EXPECT_EQ(
- Result(),
- Result(spi->remove(bucket, Timestamp(3), doc1->getId(), context)));
+ EXPECT_EQ(Result(), Result(spi->put(bucket, Timestamp(1), doc1, context)));
+ EXPECT_EQ(Result(), Result(spi->put(bucket, Timestamp(2), doc2, context)));
+ EXPECT_EQ(Result(), Result(spi->remove(bucket, Timestamp(3), doc1->getId(), context)));
// Iterate first without removes, then with.
for (int iterPass = 0; iterPass < 2; ++iterPass) {
@@ -369,9 +352,7 @@ TEST_F(ConformanceTest, testBasics)
EXPECT_EQ(Result(), Result(iter));
- IterateResult result =
- spi->iterate(iter.getIteratorId(),
- std::numeric_limits<int64_t>().max(), context);
+ IterateResult result = spi->iterate(iter.getIteratorId(), std::numeric_limits<int64_t>().max(), context);
EXPECT_EQ(Result(), Result(result));
EXPECT_TRUE(result.isCompleted());
@@ -614,8 +595,7 @@ TEST_F(ConformanceTest, testPutNewDocumentVersion)
EXPECT_TRUE(info.getUsedSize() >= info.getDocumentSize());
}
- GetResult gr = spi->get(bucket, document::AllFields(), doc1->getId(),
- context);
+ GetResult gr = spi->get(bucket, document::AllFields(), doc1->getId(), context);
EXPECT_EQ(Result::ErrorType::NONE, gr.getErrorCode());
EXPECT_EQ(Timestamp(4), gr.getTimestamp());
@@ -660,8 +640,7 @@ TEST_F(ConformanceTest, testPutOlderDocumentVersion)
EXPECT_EQ(1, (int)info2.getDocumentCount());
EXPECT_TRUE(info2.getEntryCount() >= info1.getDocumentCount());
EXPECT_EQ(info1.getChecksum(), info2.getChecksum());
- EXPECT_EQ(info1.getDocumentSize(),
- info2.getDocumentSize());
+ EXPECT_EQ(info1.getDocumentSize(), info2.getDocumentSize());
EXPECT_TRUE(info2.getUsedSize() >= info1.getDocumentSize());
}
@@ -907,10 +886,9 @@ TEST_F(ConformanceTest, testUpdate)
Bucket bucket(makeSpiBucket(BucketId(8, 0x01)));
spi->createBucket(bucket, context);
- const document::DocumentType *docType(
- testDocMan.getTypeRepo().getDocumentType("testdoctype1"));
+ const document::DocumentType *docType(testDocMan.getTypeRepo().getDocumentType("testdoctype1"));
document::DocumentUpdate::SP update(new DocumentUpdate(testDocMan.getTypeRepo(), *docType, doc1->getId()));
- update->addUpdate(document::FieldUpdate(docType->getField("headerval")).addUpdate(std::make_unique<document::AssignValueUpdate>(document::IntFieldValue(42))));
+ update->addUpdate(FieldUpdate(docType->getField("headerval")).addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(42))));
{
UpdateResult result = spi->update(bucket, Timestamp(3), update, context);
@@ -932,9 +910,7 @@ TEST_F(ConformanceTest, testUpdate)
EXPECT_EQ(Result::ErrorType::NONE, result.getErrorCode());
EXPECT_EQ(Timestamp(4), result.getTimestamp());
EXPECT_FALSE(result.is_tombstone());
- EXPECT_EQ(document::IntFieldValue(42),
- static_cast<document::IntFieldValue&>(
- *result.getDocument().getValue("headerval")));
+ EXPECT_EQ(IntFieldValue(42), static_cast<IntFieldValue&>(*result.getDocument().getValue("headerval")));
}
spi->remove(bucket, Timestamp(5), doc1->getId(), context);
@@ -977,9 +953,7 @@ TEST_F(ConformanceTest, testUpdate)
EXPECT_EQ(Result::ErrorType::NONE, result.getErrorCode());
EXPECT_EQ(Timestamp(7), result.getTimestamp());
EXPECT_FALSE(result.is_tombstone());
- EXPECT_EQ(document::IntFieldValue(42),
- reinterpret_cast<document::IntFieldValue&>(
- *result.getDocument().getValue("headerval")));
+ EXPECT_EQ(IntFieldValue(42), reinterpret_cast<IntFieldValue&>(*result.getDocument().getValue("headerval")));
}
}
@@ -995,8 +969,7 @@ TEST_F(ConformanceTest, testGet)
spi->createBucket(bucket, context);
{
- GetResult result = spi->get(bucket, document::AllFields(),
- doc1->getId(), context);
+ GetResult result = spi->get(bucket, document::AllFields(), doc1->getId(), context);
EXPECT_EQ(Result::ErrorType::NONE, result.getErrorCode());
EXPECT_EQ(Timestamp(0), result.getTimestamp());
@@ -1006,8 +979,7 @@ TEST_F(ConformanceTest, testGet)
spi->put(bucket, Timestamp(3), doc1, context);
{
- GetResult result = spi->get(bucket, document::AllFields(),
- doc1->getId(), context);
+ GetResult result = spi->get(bucket, document::AllFields(), doc1->getId(), context);
EXPECT_EQ(*doc1, result.getDocument());
EXPECT_EQ(Timestamp(3), result.getTimestamp());
EXPECT_FALSE(result.is_tombstone());
@@ -1016,8 +988,7 @@ TEST_F(ConformanceTest, testGet)
spi->remove(bucket, Timestamp(4), doc1->getId(), context);
{
- GetResult result = spi->get(bucket, document::AllFields(),
- doc1->getId(), context);
+ GetResult result = spi->get(bucket, document::AllFields(), doc1->getId(), context);
EXPECT_EQ(Result::ErrorType::NONE, result.getErrorCode());
EXPECT_EQ(Timestamp(4), result.getTimestamp());
@@ -1035,8 +1006,7 @@ TEST_F(ConformanceTest, testIterateCreateIterator)
Bucket b(makeSpiBucket(BucketId(8, 0x1)));
spi->createBucket(b, context);
- spi::CreateIteratorResult result(
- createIterator(*spi, b, createSelection("")));
+ spi::CreateIteratorResult result(createIterator(*spi, b, createSelection("")));
EXPECT_EQ(Result::ErrorType::NONE, result.getErrorCode());
// Iterator ID 0 means invalid iterator, so cannot be returned
// from a successful createIterator call.
@@ -1075,8 +1045,7 @@ TEST_F(ConformanceTest, testIterateDestroyIterator)
}
{
- Result destroyResult(
- spi->destroyIterator(iter.getIteratorId(), context));
+ Result destroyResult(spi->destroyIterator(iter.getIteratorId(), context));
EXPECT_TRUE(!destroyResult.hasError());
}
// Iteration should now fail
@@ -1085,8 +1054,7 @@ TEST_F(ConformanceTest, testIterateDestroyIterator)
EXPECT_EQ(Result::ErrorType::PERMANENT_ERROR, result.getErrorCode());
}
{
- Result destroyResult(
- spi->destroyIterator(iter.getIteratorId(), context));
+ Result destroyResult(spi->destroyIterator(iter.getIteratorId(), context));
EXPECT_TRUE(!destroyResult.hasError());
}
}
@@ -1124,7 +1092,7 @@ TEST_F(ConformanceTest, testIterateAllDocsNewestVersionOnly)
for (size_t i = 0; i < docs.size(); ++i) {
Document::SP newDoc(docs[i].doc->clone());
Timestamp newTimestamp(2000 + i);
- newDoc->setValue("headerval", document::IntFieldValue(5678 + i));
+ newDoc->setValue("headerval", IntFieldValue(5678 + i));
spi->put(b, newTimestamp, newDoc, context);
newDocs.push_back(DocAndTimestamp(newDoc, newTimestamp));
}
@@ -1166,8 +1134,7 @@ TEST_F(ConformanceTest, testMaxByteSize)
Bucket b(makeSpiBucket(BucketId(8, 0x1)));
spi->createBucket(b, context);
- std::vector<DocAndTimestamp> docs(
- feedDocs(*spi, testDocMan, b, 100, 4_Ki, 4096));
+ std::vector<DocAndTimestamp> docs(feedDocs(*spi, testDocMan, b, 100, 4_Ki, 4096));
Selection sel(createSelection(""));
CreateIteratorResult iter(createIterator(*spi, b, sel));
@@ -1198,14 +1165,11 @@ TEST_F(ConformanceTest, testIterateMatchTimestampRange)
for (uint32_t i = 0; i < 99; i++) {
Timestamp timestamp(1000 + i);
- document::Document::SP doc(
- testDocMan.createRandomDocumentAtLocation(
- 1, timestamp, 110, 110));
+ document::Document::SP doc(testDocMan.createRandomDocumentAtLocation(1, timestamp, 110, 110));
spi->put(b, timestamp, doc, context);
if (timestamp >= fromTimestamp && timestamp <= toTimestamp) {
- docsToVisit.push_back(
- DocAndTimestamp(doc, Timestamp(1000 + i)));
+ docsToVisit.push_back(DocAndTimestamp(doc, Timestamp(1000 + i)));
}
}
@@ -1236,14 +1200,11 @@ TEST_F(ConformanceTest, testIterateExplicitTimestampSubset)
for (uint32_t i = 0; i < 99; i++) {
Timestamp timestamp(1000 + i);
- document::Document::SP doc(
- testDocMan.createRandomDocumentAtLocation(
- 1, timestamp, 110, 110));
+ document::Document::SP doc(testDocMan.createRandomDocumentAtLocation(1, timestamp, 110, 110));
spi->put(b, timestamp, doc, context);
if (timestamp % 3 == 0) {
- docsToVisit.push_back(
- DocAndTimestamp(doc, Timestamp(1000 + i)));
+ docsToVisit.push_back(DocAndTimestamp(doc, Timestamp(1000 + i)));
timestampsToVisit.push_back(Timestamp(timestamp));
}
}
@@ -1332,9 +1293,8 @@ TEST_F(ConformanceTest, testIterateMatchSelection)
std::vector<DocAndTimestamp> docsToVisit;
for (uint32_t i = 0; i < 99; i++) {
- document::Document::SP doc(testDocMan.createRandomDocumentAtLocation(
- 1, 1000 + i, 110, 110));
- doc->setValue("headerval", document::IntFieldValue(i));
+ document::Document::SP doc(testDocMan.createRandomDocumentAtLocation(1, 1000 + i, 110, 110));
+ doc->setValue("headerval", IntFieldValue(i));
spi->put(b, Timestamp(1000 + i), doc, context);
if ((i % 3) == 0) {
@@ -1503,10 +1463,7 @@ testDeleteBucketPostCondition(const PersistenceProvider &spi,
{
Context context(Priority(0), Trace::TraceLevel(0));
{
- GetResult result = spi.get(bucket,
- document::AllFields(),
- doc1.getId(),
- context);
+ GetResult result = spi.get(bucket, document::AllFields(), doc1.getId(), context);
EXPECT_EQ(Result::ErrorType::NONE, result.getErrorCode());
EXPECT_EQ(Timestamp(0), result.getTimestamp());
@@ -1633,31 +1590,23 @@ testSplitTargetExistsPostCondition(const PersistenceProvider &spi,
const Bucket &bucketC,
document::TestDocMan &testDocMan)
{
- EXPECT_EQ(10, (int)spi.getBucketInfo(bucketA).getBucketInfo().
- getDocumentCount());
- EXPECT_EQ(15, (int)spi.getBucketInfo(bucketB).getBucketInfo().
- getDocumentCount());
+ EXPECT_EQ(10, (int)spi.getBucketInfo(bucketA).getBucketInfo().getDocumentCount());
+ EXPECT_EQ(15, (int)spi.getBucketInfo(bucketB).getBucketInfo().getDocumentCount());
document::AllFields fs;
Context context(Priority(0), Trace::TraceLevel(0));
for (uint32_t i = 0; i < 10; ++i) {
Document::UP doc1 = testDocMan.createRandomDocumentAtLocation(0x02, i);
- EXPECT_TRUE(
- spi.get(bucketA, fs, doc1->getId(), context).hasDocument());
- EXPECT_TRUE(
- !spi.get(bucketC, fs, doc1->getId(), context).hasDocument());
- EXPECT_TRUE(
- !spi.get(bucketB, fs, doc1->getId(), context).hasDocument());
+ EXPECT_TRUE(spi.get(bucketA, fs, doc1->getId(), context).hasDocument());
+ EXPECT_FALSE(spi.get(bucketC, fs, doc1->getId(), context).hasDocument());
+ EXPECT_FALSE(spi.get(bucketB, fs, doc1->getId(), context).hasDocument());
}
for (uint32_t i = 10; i < 25; ++i) {
Document::UP doc1 = testDocMan.createRandomDocumentAtLocation(0x06, i);
- EXPECT_TRUE(
- spi.get(bucketB, fs, doc1->getId(), context).hasDocument());
- EXPECT_TRUE(
- !spi.get(bucketA, fs, doc1->getId(), context).hasDocument());
- EXPECT_TRUE(
- !spi.get(bucketC, fs, doc1->getId(), context).hasDocument());
+ EXPECT_TRUE(spi.get(bucketB, fs, doc1->getId(), context).hasDocument());
+ EXPECT_FALSE(spi.get(bucketA, fs, doc1->getId(), context).hasDocument());
+ EXPECT_FALSE(spi.get(bucketC, fs, doc1->getId(), context).hasDocument());
}
}
@@ -1722,16 +1671,12 @@ ConformanceTest::createAndPopulateJoinSourceBuckets(
spi.createBucket(source2, context);
for (uint32_t i = 0; i < 10; ++i) {
- Document::SP doc(
- testDocMan.createRandomDocumentAtLocation(
- source1.getBucketId().getId(), i));
+ Document::SP doc(testDocMan.createRandomDocumentAtLocation(source1.getBucketId().getId(), i));
spi.put(source1, Timestamp(i + 1), doc, context);
}
for (uint32_t i = 10; i < 20; ++i) {
- Document::SP doc(
- testDocMan.createRandomDocumentAtLocation(
- source2.getBucketId().getId(), i));
+ Document::SP doc(testDocMan.createRandomDocumentAtLocation(source2.getBucketId().getId(), i));
spi.put(source2, Timestamp(i + 1), doc, context);
}
}
@@ -1788,9 +1733,7 @@ testJoinNormalCasePostCondition(const PersistenceProvider &spi,
document::AllFields fs;
Context context(Priority(0), Trace::TraceLevel(0));
for (uint32_t i = 0; i < 10; ++i) {
- Document::UP doc(
- testDocMan.createRandomDocumentAtLocation(
- bucketA.getBucketId().getId(), i));
+ Document::UP doc(testDocMan.createRandomDocumentAtLocation(bucketA.getBucketId().getId(), i));
EXPECT_TRUE(spi.get(bucketC, fs, doc->getId(), context).hasDocument());
EXPECT_TRUE(!spi.get(bucketA, fs, doc->getId(), context).hasDocument());
}
@@ -2017,8 +1960,7 @@ TEST_F(ConformanceTest, testJoinSameSourceBucketsTargetExists)
populateBucket(target, *spi, context, 10, 20, testDocMan);
spi->join(source, source, target, context);
- testJoinSameSourceBucketsTargetExistsPostCondition(
- *spi, source, target, testDocMan);
+ testJoinSameSourceBucketsTargetExistsPostCondition(*spi, source, target, testDocMan);
if (_factory->hasPersistence()) {
spi.reset();
document::TestDocMan testDocMan2;
@@ -2057,12 +1999,8 @@ TEST_F(ConformanceTest, testBucketActivation)
// Add and remove a document, so document goes to zero, to check that
// active state isn't cleared then.
Document::SP doc1 = testDocMan.createRandomDocumentAtLocation(0x01, 1);
- EXPECT_EQ(
- Result(),
- Result(spi->put(bucket, Timestamp(1), doc1, context)));
- EXPECT_EQ(
- Result(),
- Result(spi->remove(bucket, Timestamp(5), doc1->getId(), context)));
+ EXPECT_EQ(Result(), Result(spi->put(bucket, Timestamp(1), doc1, context)));
+ EXPECT_EQ(Result(), Result(spi->remove(bucket, Timestamp(5), doc1->getId(), context)));
EXPECT_TRUE(spi->getBucketInfo(bucket).getBucketInfo().isActive());
// Setting node down should clear active flag.
diff --git a/searchcore/src/tests/proton/attribute/attribute_test.cpp b/searchcore/src/tests/proton/attribute/attribute_test.cpp
index 51bc60d3783..de6b923bdc1 100644
--- a/searchcore/src/tests/proton/attribute/attribute_test.cpp
+++ b/searchcore/src/tests/proton/attribute/attribute_test.cpp
@@ -526,9 +526,8 @@ TEST_F(AttributeWriterTest, handles_predicate_update)
const document::DocumentType &dt(idb.getDocumentType());
DocumentUpdate upd(*idb.getDocumentTypeRepo(), dt, DocumentId("id:ns:searchdocument::1"));
- PredicateFieldValue new_value(builder.feature("foo").value("bar").build());
upd.addUpdate(FieldUpdate(upd.getType().getField("a1"))
- .addUpdate(std::make_unique<AssignValueUpdate>(new_value)));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<PredicateFieldValue>(builder.feature("foo").value("bar").build()))));
PredicateIndex &index = static_cast<PredicateAttribute &>(*a1).getIndex();
EXPECT_EQ(1u, index.getZeroConstraintDocs().size());
@@ -726,10 +725,10 @@ TEST_F(AttributeWriterTest, handles_tensor_assign_update)
auto new_tensor = make_tensor(TensorSpec(sparse_tensor)
.add({{"x", "8"}, {"y", "9"}}, 11));
TensorDataType xySparseTensorDataType(vespalib::eval::ValueType::from_spec(sparse_tensor));
- TensorFieldValue new_value(xySparseTensorDataType);
- new_value = SimpleValue::from_value(*new_tensor);
+ auto new_value = std::make_unique<TensorFieldValue>(xySparseTensorDataType);
+ *new_value = SimpleValue::from_value(*new_tensor);
upd.addUpdate(FieldUpdate(upd.getType().getField("a1"))
- .addUpdate(std::make_unique<AssignValueUpdate>(new_value)));
+ .addUpdate(std::make_unique<AssignValueUpdate>(std::move(new_value))));
DummyFieldUpdateCallback onUpdate;
update(2, upd, 1, onUpdate);
EXPECT_EQ(2u, a1->getNumDocs());
@@ -936,9 +935,9 @@ public:
builder.getDocumentType(),
DocumentId(doc_id));
TensorDataType tensor_type(vespalib::eval::ValueType::from_spec(dense_tensor));
- TensorFieldValue tensor_value(tensor_type);
- tensor_value= SimpleValue::from_value(*tensor);
- upd->addUpdate(FieldUpdate(upd->getType().getField("a1")).addUpdate(std::make_unique<AssignValueUpdate>(tensor_value)));
+ auto tensor_value = std::make_unique<TensorFieldValue>(tensor_type);
+ *tensor_value = SimpleValue::from_value(*tensor);
+ upd->addUpdate(FieldUpdate(upd->getType().getField("a1")).addUpdate(std::make_unique<AssignValueUpdate>(std::move(tensor_value))));
return upd;
}
void expect_shared_executor_tasks(size_t exp_accepted_tasks) {
diff --git a/searchcore/src/tests/proton/common/attribute_updater/attribute_updater_test.cpp b/searchcore/src/tests/proton/common/attribute_updater/attribute_updater_test.cpp
index 20584a2a1fb..d2897216ea2 100644
--- a/searchcore/src/tests/proton/common/attribute_updater/attribute_updater_test.cpp
+++ b/searchcore/src/tests/proton/common/attribute_updater/attribute_updater_test.cpp
@@ -104,21 +104,21 @@ struct Fixture {
vec.commit();
}
- void applyArrayUpdates(AttributeVector & vec, const FieldValue & assign,
- const FieldValue & first, const FieldValue & second) {
- applyValueUpdate(vec, 0, std::make_unique<AssignValueUpdate>(assign));
- applyValueUpdate(vec, 1, std::make_unique<AddValueUpdate>(second));
- applyValueUpdate(vec, 2, std::make_unique<RemoveValueUpdate>(first));
+ void applyArrayUpdates(AttributeVector & vec, std::unique_ptr<FieldValue> assign,
+ std::unique_ptr<FieldValue> first, std::unique_ptr<FieldValue> second) {
+ applyValueUpdate(vec, 0, std::make_unique<AssignValueUpdate>(std::move(assign)));
+ applyValueUpdate(vec, 1, std::make_unique<AddValueUpdate>(std::move(second)));
+ applyValueUpdate(vec, 2, std::make_unique<RemoveValueUpdate>(std::move(first)));
applyValueUpdate(vec, 3, std::make_unique<ClearValueUpdate>());
}
- void applyWeightedSetUpdates(AttributeVector & vec, const FieldValue & assign,
- const FieldValue & first, const FieldValue & second) {
- applyValueUpdate(vec, 0, std::make_unique<AssignValueUpdate>(assign));
- applyValueUpdate(vec, 1, std::make_unique<AddValueUpdate>(second, 20));
- applyValueUpdate(vec, 2, std::make_unique<RemoveValueUpdate>(first));
+ void applyWeightedSetUpdates(AttributeVector & vec, std::unique_ptr<FieldValue> assign,
+ std::unique_ptr<FieldValue> first, std::unique_ptr<FieldValue> copyOfFirst, std::unique_ptr<FieldValue> second) {
+ applyValueUpdate(vec, 0, std::make_unique<AssignValueUpdate>(std::move(assign)));
+ applyValueUpdate(vec, 1, std::make_unique<AddValueUpdate>(std::move(second), 20));
+ applyValueUpdate(vec, 2, std::make_unique<RemoveValueUpdate>(std::move(first)));
applyValueUpdate(vec, 3, std::make_unique<ClearValueUpdate>());
- applyValueUpdate(vec, 4, std::make_unique<MapValueUpdate>(first, std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 10)));
+ applyValueUpdate(vec, 4, std::make_unique<MapValueUpdate>(std::move(copyOfFirst), std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 10)));
}
};
@@ -203,10 +203,8 @@ TEST_F("require that single attributes are updated", Fixture)
CollectionType ct(CollectionType::SINGLE);
{
BasicType bt(BasicType::INT32);
- AttributePtr vec = create<int32_t, IntegerAttribute>(3, 32, 0,
- "in1/int",
- Config(bt, ct));
- f.applyValueUpdate(*vec, 0, std::make_unique<AssignValueUpdate>(IntFieldValue(64)));
+ AttributePtr vec = create<int32_t, IntegerAttribute>(3, 32, 0, "in1/int", Config(bt, ct));
+ f.applyValueUpdate(*vec, 0, std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(64)));
f.applyValueUpdate(*vec, 1, std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 10));
f.applyValueUpdate(*vec, 2, std::make_unique<ClearValueUpdate>());
EXPECT_EQUAL(3u, vec->getNumDocs());
@@ -216,11 +214,8 @@ TEST_F("require that single attributes are updated", Fixture)
}
{
BasicType bt(BasicType::FLOAT);
- AttributePtr vec = create<float, FloatingPointAttribute>(3, 55.5f, 0,
- "in1/float",
- Config(bt,
- ct));
- f.applyValueUpdate(*vec, 0, std::make_unique<AssignValueUpdate>(FloatFieldValue(77.7f)));
+ AttributePtr vec = create<float, FloatingPointAttribute>(3, 55.5f, 0, "in1/float",Config(bt, ct));
+ f.applyValueUpdate(*vec, 0, std::make_unique<AssignValueUpdate>(std::make_unique<FloatFieldValue>(77.7f)));
f.applyValueUpdate(*vec, 1, std::make_unique<ArithmeticValueUpdate>(ArithmeticValueUpdate::Add, 10));
f.applyValueUpdate(*vec, 2, std::make_unique<ClearValueUpdate>());
EXPECT_EQUAL(3u, vec->getNumDocs());
@@ -230,11 +225,8 @@ TEST_F("require that single attributes are updated", Fixture)
}
{
BasicType bt(BasicType::STRING);
- AttributePtr vec = create<std::string, StringAttribute>(3, "first", 0,
- "in1/string",
- Config(bt,
- ct));
- f.applyValueUpdate(*vec, 0, std::make_unique<AssignValueUpdate>(StringFieldValue("second")));
+ AttributePtr vec = create<std::string, StringAttribute>(3, "first", 0, "in1/string",Config(bt, ct));
+ f.applyValueUpdate(*vec, 0, std::make_unique<AssignValueUpdate>(std::make_unique<StringFieldValue>("second")));
f.applyValueUpdate(*vec, 2, std::make_unique<ClearValueUpdate>());
EXPECT_EQUAL(3u, vec->getNumDocs());
EXPECT_TRUE(check(vec, 0, std::vector<WeightedString>{WeightedString("second")}));
@@ -254,7 +246,7 @@ TEST_F("require that single attributes are updated", Fixture)
asReferenceAttribute(*vec).update(docId, toGid(doc1));
}
vec->commit();
- f.applyValueUpdate(*vec, 0, std::make_unique<AssignValueUpdate>(ReferenceFieldValue(dynamic_cast<const ReferenceDataType &>(f.docType->getField("ref").getDataType()), DocumentId(doc2))));
+ f.applyValueUpdate(*vec, 0, std::make_unique<AssignValueUpdate>(std::make_unique<ReferenceFieldValue>(dynamic_cast<const ReferenceDataType &>(f.docType->getField("ref").getDataType()), DocumentId(doc2))));
f.applyValueUpdate(*vec, 2, std::make_unique<ClearValueUpdate>());
EXPECT_EQUAL(3u, vec->getNumDocs());
TEST_DO(assertRef(*vec, doc2, 0));
@@ -268,14 +260,12 @@ TEST_F("require that array attributes are updated", Fixture)
CollectionType ct(CollectionType::ARRAY);
{
BasicType bt(BasicType::INT32);
- AttributePtr vec = create<int32_t, IntegerAttribute>(5, 32, 1,
- "in1/aint",
- Config(bt, ct));
- IntFieldValue first(32);
- IntFieldValue second(64);
- ArrayFieldValue assign(f.docType->getField("aint").getDataType());
- assign.add(second);
- f.applyArrayUpdates(*vec, assign, first, second);
+ AttributePtr vec = create<int32_t, IntegerAttribute>(5, 32, 1, "in1/aint", Config(bt, ct));
+ auto first = std::make_unique<IntFieldValue>(32);
+ auto second = std::make_unique<IntFieldValue>(64);
+ auto assign = std::make_unique<ArrayFieldValue>(f.docType->getField("aint").getDataType());
+ assign->add(*second);
+ f.applyArrayUpdates(*vec, std::move(assign), std::move(first), std::move(second));
EXPECT_EQUAL(5u, vec->getNumDocs());
EXPECT_TRUE(check(vec, 0, std::vector<WeightedInt>{WeightedInt(64)}));
@@ -286,15 +276,12 @@ TEST_F("require that array attributes are updated", Fixture)
}
{
BasicType bt(BasicType::FLOAT);
- AttributePtr vec = create<float, FloatingPointAttribute>(5, 55.5f, 1,
- "in1/afloat",
- Config(bt,
- ct));
- FloatFieldValue first(55.5f);
- FloatFieldValue second(77.7f);
- ArrayFieldValue assign(f.docType->getField("afloat").getDataType());
- assign.add(second);
- f.applyArrayUpdates(*vec, assign, first, second);
+ AttributePtr vec = create<float, FloatingPointAttribute>(5, 55.5f, 1, "in1/afloat", Config(bt, ct));
+ auto first = std::make_unique<FloatFieldValue>(55.5f);
+ auto second = std::make_unique<FloatFieldValue>(77.7f);
+ auto assign = std::make_unique<ArrayFieldValue>(f.docType->getField("afloat").getDataType());
+ assign->add(*second);
+ f.applyArrayUpdates(*vec, std::move(assign), std::move(first), std::move(second));
EXPECT_EQUAL(5u, vec->getNumDocs());
EXPECT_TRUE(check(vec, 0, std::vector<WeightedFloat>{WeightedFloat(77.7f)}));
@@ -305,14 +292,12 @@ TEST_F("require that array attributes are updated", Fixture)
}
{
BasicType bt(BasicType::STRING);
- AttributePtr vec = create<std::string, StringAttribute>(5, "first", 1,
- "in1/astring",
- Config(bt, ct));
- StringFieldValue first("first");
- StringFieldValue second("second");
- ArrayFieldValue assign(f.docType->getField("astring").getDataType());
- assign.add(second);
- f.applyArrayUpdates(*vec, assign, first, second);
+ AttributePtr vec = create<std::string, StringAttribute>(5, "first", 1, "in1/astring", Config(bt, ct));
+ auto first = std::make_unique<StringFieldValue>("first");
+ auto second = std::make_unique<StringFieldValue>("second");
+ auto assign = std::make_unique<ArrayFieldValue>(f.docType->getField("astring").getDataType());
+ assign->add(*second);
+ f.applyArrayUpdates(*vec, std::move(assign), std::move(first), std::move(second));
EXPECT_EQUAL(5u, vec->getNumDocs());
EXPECT_TRUE(check(vec, 0, std::vector<WeightedString>{WeightedString("second")}));
@@ -328,15 +313,13 @@ TEST_F("require that weighted set attributes are updated", Fixture)
CollectionType ct(CollectionType::WSET);
{
BasicType bt(BasicType::INT32);
- AttributePtr vec = create<int32_t, IntegerAttribute>(5, 32, 100,
- "in1/wsint",
- Config(bt, ct));
- IntFieldValue first(32);
- IntFieldValue second(64);
- WeightedSetFieldValue
- assign(f.docType->getField("wsint").getDataType());
- assign.add(second, 20);
- f.applyWeightedSetUpdates(*vec, assign, first, second);
+ AttributePtr vec = create<int32_t, IntegerAttribute>(5, 32, 100, "in1/wsint", Config(bt, ct));
+ auto first = std::make_unique<IntFieldValue>(32);
+ auto copyOfFirst = std::make_unique<IntFieldValue>(32);
+ auto second = std::make_unique<IntFieldValue>(64);
+ auto assign = std::make_unique<WeightedSetFieldValue>(f.docType->getField("wsint").getDataType());
+ assign->add(*second, 20);
+ f.applyWeightedSetUpdates(*vec, std::move(assign), std::move(first), std::move(copyOfFirst), std::move(second));
EXPECT_EQUAL(5u, vec->getNumDocs());
EXPECT_TRUE(check(vec, 0, std::vector<WeightedInt>{WeightedInt(64, 20)}));
@@ -347,16 +330,13 @@ TEST_F("require that weighted set attributes are updated", Fixture)
}
{
BasicType bt(BasicType::FLOAT);
- AttributePtr vec = create<float, FloatingPointAttribute>(5, 55.5f, 100,
- "in1/wsfloat",
- Config(bt,
- ct));
- FloatFieldValue first(55.5f);
- FloatFieldValue second(77.7f);
- WeightedSetFieldValue
- assign(f.docType->getField("wsfloat").getDataType());
- assign.add(second, 20);
- f.applyWeightedSetUpdates(*vec, assign, first, second);
+ AttributePtr vec = create<float, FloatingPointAttribute>(5, 55.5f, 100, "in1/wsfloat", Config(bt, ct));
+ auto first = std::make_unique<FloatFieldValue>(55.5f);
+ auto copyOfFirst = std::make_unique<FloatFieldValue>(55.5f);
+ auto second = std::make_unique<FloatFieldValue>(77.7f);
+ auto assign = std::make_unique<WeightedSetFieldValue>(f.docType->getField("wsfloat").getDataType());
+ assign->add(*second, 20);
+ f.applyWeightedSetUpdates(*vec, std::move(assign), std::move(first), std::move(copyOfFirst), std::move(second));
EXPECT_EQUAL(5u, vec->getNumDocs());
EXPECT_TRUE(check(vec, 0, std::vector<WeightedFloat>{WeightedFloat(77.7f, 20)}));
@@ -367,17 +347,13 @@ TEST_F("require that weighted set attributes are updated", Fixture)
}
{
BasicType bt(BasicType::STRING);
- AttributePtr vec = create<std::string, StringAttribute>(5, "first",
- 100,
- "in1/wsstring",
- Config(bt,
- ct));
- StringFieldValue first("first");
- StringFieldValue second("second");
- WeightedSetFieldValue
- assign(f.docType->getField("wsstring").getDataType());
- assign.add(second, 20);
- f.applyWeightedSetUpdates(*vec, assign, first, second);
+ AttributePtr vec = create<std::string, StringAttribute>(5, "first", 100, "in1/wsstring", Config(bt, ct));
+ auto first = std::make_unique<StringFieldValue>("first");
+ auto copyOfFirst = std::make_unique<StringFieldValue>("first");
+ auto second = std::make_unique<StringFieldValue>("second");
+ auto assign = std::make_unique<WeightedSetFieldValue>(f.docType->getField("wsstring").getDataType());
+ assign->add(*second, 20);
+ f.applyWeightedSetUpdates(*vec, std::move(assign), std::move(first), std::move(copyOfFirst), std::move(second));
EXPECT_EQUAL(5u, vec->getNumDocs());
EXPECT_TRUE(check(vec, 0, std::vector<WeightedString>{WeightedString("second", 20)}));
diff --git a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp
index 6cd92dea516..94595f0efc7 100644
--- a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp
@@ -345,7 +345,7 @@ struct UpdateContext {
} else {
fieldValue->assign(document::StringFieldValue("new value"));
}
- update->addUpdate(document::FieldUpdate(field).addUpdate(std::make_unique<document::AssignValueUpdate>(*fieldValue)));
+ update->addUpdate(document::FieldUpdate(field).addUpdate(std::make_unique<document::AssignValueUpdate>(std::move(fieldValue))));
}
};
@@ -774,7 +774,7 @@ TEST_F("require that all value updates will be inspected before rejected", Schem
EXPECT_FALSE(FeedRejectHelper::mustReject(*docUpdate));
docUpdate->addUpdate(std::move(FieldUpdate(docType->getField("i1")).addUpdate(std::make_unique<ClearValueUpdate>())));
EXPECT_FALSE(FeedRejectHelper::mustReject(*docUpdate));
- docUpdate->addUpdate(std::move(FieldUpdate(docType->getField("i1")).addUpdate(std::make_unique<AssignValueUpdate>(StringFieldValue()))));
+ docUpdate->addUpdate(std::move(FieldUpdate(docType->getField("i1")).addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<StringFieldValue>()))));
EXPECT_TRUE(FeedRejectHelper::mustReject(*docUpdate));
}
diff --git a/searchcore/src/tests/proton/feedoperation/feedoperation_test.cpp b/searchcore/src/tests/proton/feedoperation/feedoperation_test.cpp
index 40332157a8d..dea3a3e69a6 100644
--- a/searchcore/src/tests/proton/feedoperation/feedoperation_test.cpp
+++ b/searchcore/src/tests/proton/feedoperation/feedoperation_test.cpp
@@ -122,7 +122,7 @@ public:
auto makeUpdate() {
auto upd(std::make_shared<DocumentUpdate>(*_repo, _docType, docId));
upd->addUpdate(FieldUpdate(upd->getType().getField("string")).
- addUpdate(std::make_unique<AssignValueUpdate>(StringFieldValue("newval"))));
+ addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<StringFieldValue>("newval"))));
return upd;
}
auto makeDoc() {
diff --git a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
index 7f35e05dfb6..6fb7a35fffe 100644
--- a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
+++ b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
@@ -521,7 +521,7 @@ TEST_F("require that update is rejected if resource limit is reached", SimpleFix
document::Field field("string", 1, *document::DataType::STRING);
type.addField(field);
DocumentUpdate::SP upd = createUpd(type, docId1);
- upd->addUpdate(std::move(document::FieldUpdate(field).addUpdate(std::make_unique<document::AssignValueUpdate>(document::StringFieldValue("new value")))));
+ upd->addUpdate(std::move(document::FieldUpdate(field).addUpdate(std::make_unique<document::AssignValueUpdate>(std::make_unique<document::StringFieldValue>("new value")))));
EXPECT_EQUAL(
Result(Result::ErrorType::RESOURCE_EXHAUSTED,
diff --git a/searchcore/src/vespa/searchcore/bmcluster/bm_feed.cpp b/searchcore/src/vespa/searchcore/bmcluster/bm_feed.cpp
index 2dcf18f9da6..0856bad0035 100644
--- a/searchcore/src/vespa/searchcore/bmcluster/bm_feed.cpp
+++ b/searchcore/src/vespa/searchcore/bmcluster/bm_feed.cpp
@@ -71,7 +71,7 @@ BmFeed::make_document_update(uint32_t n, uint32_t i) const
{
auto id = make_document_id(n, i);
auto document_update = std::make_unique<DocumentUpdate>(*_repo, *_document_type, id);
- document_update->addUpdate(FieldUpdate(_field).addUpdate(std::make_unique<AssignValueUpdate>(IntFieldValue(15))));
+ document_update->addUpdate(FieldUpdate(_field).addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(15))));
return document_update;
}
diff --git a/searchlib/src/tests/attribute/attribute_test.cpp b/searchlib/src/tests/attribute/attribute_test.cpp
index ea8a1649789..cb51487abdd 100644
--- a/searchlib/src/tests/attribute/attribute_test.cpp
+++ b/searchlib/src/tests/attribute/attribute_test.cpp
@@ -1514,11 +1514,11 @@ AttributeTest::testMapValueUpdate(const AttributePtr & ptr, BufferType initValue
EXPECT_EQUAL(ptr->getStatus().getUpdateCount(), 7u);
EXPECT_EQUAL(ptr->getStatus().getNonIdempotentUpdateCount(), 0u);
- EXPECT_TRUE(ptr->apply(0, MapVU(initFieldValue, std::make_unique<ArithVU>(ArithVU::Add, 10))));
- EXPECT_TRUE(ptr->apply(1, MapVU(initFieldValue, std::make_unique<ArithVU>(ArithVU::Sub, 10))));
- EXPECT_TRUE(ptr->apply(2, MapVU(initFieldValue, std::make_unique<ArithVU>(ArithVU::Mul, 10))));
- EXPECT_TRUE(ptr->apply(3, MapVU(initFieldValue, std::make_unique<ArithVU>(ArithVU::Div, 10))));
- EXPECT_TRUE(ptr->apply(6, MapVU(initFieldValue, std::make_unique<AssignValueUpdate>(IntFieldValue(70)))));
+ EXPECT_TRUE(ptr->apply(0, MapVU(std::unique_ptr<FieldValue>(initFieldValue.clone()), std::make_unique<ArithVU>(ArithVU::Add, 10))));
+ EXPECT_TRUE(ptr->apply(1, MapVU(std::unique_ptr<FieldValue>(initFieldValue.clone()), std::make_unique<ArithVU>(ArithVU::Sub, 10))));
+ EXPECT_TRUE(ptr->apply(2, MapVU(std::unique_ptr<FieldValue>(initFieldValue.clone()), std::make_unique<ArithVU>(ArithVU::Mul, 10))));
+ EXPECT_TRUE(ptr->apply(3, MapVU(std::unique_ptr<FieldValue>(initFieldValue.clone()), std::make_unique<ArithVU>(ArithVU::Div, 10))));
+ EXPECT_TRUE(ptr->apply(6, MapVU(std::unique_ptr<FieldValue>(initFieldValue.clone()), std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(70)))));
ptr->commit();
EXPECT_EQUAL(ptr->getStatus().getUpdateCount(), 12u);
EXPECT_EQUAL(ptr->getStatus().getNonIdempotentUpdateCount(), 5u);
@@ -1536,7 +1536,7 @@ AttributeTest::testMapValueUpdate(const AttributePtr & ptr, BufferType initValue
EXPECT_EQUAL(buf[0].getWeight(), 70);
// removeifzero
- EXPECT_TRUE(ptr->apply(4, MapVU(initFieldValue, std::make_unique<ArithVU>(ArithVU::Sub, 100))));
+ EXPECT_TRUE(ptr->apply(4, MapVU(std::unique_ptr<FieldValue>(initFieldValue.clone()), std::make_unique<ArithVU>(ArithVU::Sub, 100))));
ptr->commit();
if (removeIfZero) {
EXPECT_EQUAL(ptr->get(4, &buf[0], 2), uint32_t(0));
@@ -1548,7 +1548,7 @@ AttributeTest::testMapValueUpdate(const AttributePtr & ptr, BufferType initValue
EXPECT_EQUAL(ptr->getStatus().getNonIdempotentUpdateCount(), 6u);
// createifnonexistant
- EXPECT_TRUE(ptr->apply(5, MapVU(nonExistant, std::make_unique<ArithVU>(ArithVU::Add, 10))));
+ EXPECT_TRUE(ptr->apply(5, MapVU(std::unique_ptr<FieldValue>(nonExistant.clone()), std::make_unique<ArithVU>(ArithVU::Add, 10))));
ptr->commit();
if (createIfNonExistant) {
EXPECT_EQUAL(ptr->get(5, &buf[0], 2), uint32_t(2));
@@ -1568,7 +1568,7 @@ AttributeTest::testMapValueUpdate(const AttributePtr & ptr, BufferType initValue
EXPECT_EQUAL(ptr->getStatus().getUpdateCount(), 15u);
ASSERT_TRUE(vec.append(0, initValue.getValue(), 12345));
EXPECT_EQUAL(ptr->getStatus().getUpdateCount(), 16u);
- EXPECT_TRUE(ptr->apply(0, MapVU(initFieldValue, std::make_unique<ArithVU>(ArithVU::Div, 0))));
+ EXPECT_TRUE(ptr->apply(0, MapVU(std::unique_ptr<FieldValue>(initFieldValue.clone()), std::make_unique<ArithVU>(ArithVU::Div, 0))));
EXPECT_EQUAL(ptr->getStatus().getUpdateCount(), 16u);
EXPECT_EQUAL(ptr->getStatus().getNonIdempotentUpdateCount(), 7u);
ptr->commit();
@@ -1585,8 +1585,7 @@ AttributeTest::testMapValueUpdate()
(ptr, AttributeVector::WeightedInt(64, 1), IntFieldValue(64), IntFieldValue(32), false, false);
}
{ // remove if zero
- AttributePtr ptr = createAttribute("wsint32", Config(BasicType::INT32,
- CollectionType(CollectionType::WSET, true, false)));
+ AttributePtr ptr = createAttribute("wsint32", Config(BasicType::INT32, CollectionType(CollectionType::WSET, true, false)));
testMapValueUpdate<IntegerAttribute, AttributeVector::WeightedInt>
(ptr, AttributeVector::WeightedInt(64, 1), IntFieldValue(64), IntFieldValue(32), true, false);
}
diff --git a/storage/src/tests/distributor/externaloperationhandlertest.cpp b/storage/src/tests/distributor/externaloperationhandlertest.cpp
index 0e5372043ab..a6e2b9a2632 100644
--- a/storage/src/tests/distributor/externaloperationhandlertest.cpp
+++ b/storage/src/tests/distributor/externaloperationhandlertest.cpp
@@ -32,28 +32,22 @@ struct ExternalOperationHandlerTest : Test, DistributorStripeTestUtil {
document::TestDocMan _testDocMan;
document::BucketId findNonOwnedUserBucketInState(vespalib::stringref state);
- document::BucketId findOwned1stNotOwned2ndInStates(
- vespalib::stringref state1,
- vespalib::stringref state2);
+ document::BucketId findOwned1stNotOwned2ndInStates(vespalib::stringref state1, vespalib::stringref state2);
std::shared_ptr<api::GetCommand> makeGetCommandForUser(uint64_t id) const;
std::shared_ptr<api::GetCommand> makeGetCommand(const vespalib::string& id) const;
- std::shared_ptr<api::UpdateCommand> makeUpdateCommand(const vespalib::string& doc_type,
- const vespalib::string& id) const;
+ std::shared_ptr<api::UpdateCommand> makeUpdateCommand(const vespalib::string& doc_type, const vespalib::string& id) const;
std::shared_ptr<api::UpdateCommand> makeUpdateCommand() const;
std::shared_ptr<api::UpdateCommand> makeUpdateCommandForUser(uint64_t id) const;
- std::shared_ptr<api::PutCommand> makePutCommand(const vespalib::string& doc_type,
- const vespalib::string& id) const;
+ std::shared_ptr<api::PutCommand> makePutCommand(const vespalib::string& doc_type, const vespalib::string& id) const;
std::shared_ptr<api::RemoveCommand> makeRemoveCommand(const vespalib::string& id) const;
void verify_busy_bounced_due_to_no_active_state(std::shared_ptr<api::StorageCommand> cmd);
- void start_operation_verify_not_rejected(std::shared_ptr<api::StorageCommand> cmd,
- Operation::SP& out_generated);
+ void start_operation_verify_not_rejected(std::shared_ptr<api::StorageCommand> cmd, Operation::SP& out_generated);
void start_operation_verify_rejected(std::shared_ptr<api::StorageCommand> cmd);
- int64_t safe_time_not_reached_metric_count(
- const PersistenceOperationMetricSet & metrics) const {
+ int64_t safe_time_not_reached_metric_count(const PersistenceOperationMetricSet & metrics) const {
return metrics.failures.safe_time_not_reached.getLongValue("count");
}
@@ -61,8 +55,7 @@ struct ExternalOperationHandlerTest : Test, DistributorStripeTestUtil {
return metrics.failures.safe_time_not_reached.getLongValue("count");
}
- int64_t concurrent_mutatations_metric_count(
- const PersistenceOperationMetricSet& metrics) const {
+ int64_t concurrent_mutatations_metric_count(const PersistenceOperationMetricSet& metrics) const {
return metrics.failures.concurrent_mutations.getLongValue("count");
}
@@ -597,7 +590,7 @@ TEST_F(ExternalOperationHandlerTest, non_trivial_updates_are_rejected_if_feed_is
auto cmd = makeUpdateCommand("testdoctype1", "id:foo:testdoctype1::foo");
const auto* doc_type = _testDocMan.getTypeRepo().getDocumentType("testdoctype1");
- cmd->getUpdate()->addUpdate(FieldUpdate(doc_type->getField("title")).addUpdate(std::make_unique<AssignValueUpdate>(StringFieldValue("new value"))));
+ cmd->getUpdate()->addUpdate(FieldUpdate(doc_type->getField("title")).addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<StringFieldValue>("new value"))));
ASSERT_NO_FATAL_FAILURE(start_operation_verify_rejected(std::move(cmd)));
EXPECT_EQ("ReturnCode(NO_SPACE, External feed is blocked due to resource exhaustion: full disk)",
diff --git a/storage/src/tests/persistence/persistencetestutils.cpp b/storage/src/tests/persistence/persistencetestutils.cpp
index 3812e7b85c9..b0efed07fab 100644
--- a/storage/src/tests/persistence/persistencetestutils.cpp
+++ b/storage/src/tests/persistence/persistencetestutils.cpp
@@ -221,20 +221,20 @@ PersistenceTestUtils::doGetOnDisk(const document::BucketId& bucketId, const docu
}
document::DocumentUpdate::SP
-PersistenceTestUtils::createBodyUpdate(const document::DocumentId& docId, const document::FieldValue& updateValue)
+PersistenceTestUtils::createBodyUpdate(const document::DocumentId& docId, std::unique_ptr<document::FieldValue> updateValue)
{
const DocumentType* docType(getTypeRepo()->getDocumentType("testdoctype1"));
auto update = std::make_shared<document::DocumentUpdate>(*getTypeRepo(), *docType, docId);
- update->addUpdate(document::FieldUpdate(docType->getField("content")).addUpdate(std::make_unique<document::AssignValueUpdate>(updateValue)));
+ update->addUpdate(document::FieldUpdate(docType->getField("content")).addUpdate(std::make_unique<document::AssignValueUpdate>(std::move(updateValue))));
return update;
}
document::DocumentUpdate::SP
-PersistenceTestUtils::createHeaderUpdate(const document::DocumentId& docId, const document::FieldValue& updateValue)
+PersistenceTestUtils::createHeaderUpdate(const document::DocumentId& docId, std::unique_ptr<document::FieldValue> updateValue)
{
const DocumentType* docType(getTypeRepo()->getDocumentType("testdoctype1"));
auto update = std::make_shared<document::DocumentUpdate>(*getTypeRepo(), *docType, docId);
- update->addUpdate(document::FieldUpdate(docType->getField("headerval")).addUpdate(std::make_unique<document::AssignValueUpdate>(updateValue)));
+ update->addUpdate(document::FieldUpdate(docType->getField("headerval")).addUpdate(std::make_unique<document::AssignValueUpdate>(std::move(updateValue))));
return update;
}
diff --git a/storage/src/tests/persistence/persistencetestutils.h b/storage/src/tests/persistence/persistencetestutils.h
index 4bbff9bb2ca..94ae7b9fb53 100644
--- a/storage/src/tests/persistence/persistencetestutils.h
+++ b/storage/src/tests/persistence/persistencetestutils.h
@@ -163,44 +163,23 @@ public:
/**
Returns the document that was inserted.
*/
- document::Document::SP doPutOnDisk(
- uint32_t location,
- spi::Timestamp timestamp,
- uint32_t minSize = 0,
- uint32_t maxSize = 128);
-
- document::Document::SP doPut(
- uint32_t location,
- spi::Timestamp timestamp,
- uint32_t minSize = 0,
- uint32_t maxSize = 128)
- { return doPutOnDisk(location, timestamp, minSize, maxSize); }
+ document::Document::SP doPutOnDisk(uint32_t location, spi::Timestamp timestamp, uint32_t minSize = 0, uint32_t maxSize = 128);
+
+ document::Document::SP doPut(uint32_t location, spi::Timestamp timestamp, uint32_t minSize = 0, uint32_t maxSize = 128) {
+ return doPutOnDisk(location, timestamp, minSize, maxSize);
+ }
/**
Returns the new doccount if document was removed, or -1 if not found.
*/
- bool doRemoveOnDisk(
- const document::BucketId& bid,
- const document::DocumentId& id,
- spi::Timestamp timestamp,
- bool persistRemove);
-
- bool doRemove(
- const document::BucketId& bid,
- const document::DocumentId& id,
- spi::Timestamp timestamp,
- bool persistRemove) {
+ bool doRemoveOnDisk(const document::BucketId& bid, const document::DocumentId& id, spi::Timestamp timestamp, bool persistRemove);
+ bool doRemove(const document::BucketId& bid, const document::DocumentId& id, spi::Timestamp timestamp, bool persistRemove) {
return doRemoveOnDisk(bid, id, timestamp, persistRemove);
}
- bool doUnrevertableRemoveOnDisk(const document::BucketId& bid,
- const document::DocumentId& id,
- spi::Timestamp timestamp);
+ bool doUnrevertableRemoveOnDisk(const document::BucketId& bid, const document::DocumentId& id, spi::Timestamp timestamp);
- bool doUnrevertableRemove(const document::BucketId& bid,
- const document::DocumentId& id,
- spi::Timestamp timestamp)
- {
+ bool doUnrevertableRemove(const document::BucketId& bid, const document::DocumentId& id, spi::Timestamp timestamp) {
return doUnrevertableRemoveOnDisk(bid, id, timestamp);
}
@@ -211,25 +190,19 @@ public:
* @unrevertableRemove If set, instead of adding put, turn put to remove.
* @usedBits Generate bucket to use from docid using this amount of bits.
*/
- void doRemove(const document::DocumentId& id, spi::Timestamp,
- bool unrevertableRemove = false, uint16_t usedBits = 16);
+ void doRemove(const document::DocumentId& id, spi::Timestamp, bool unrevertableRemove = false, uint16_t usedBits = 16);
- spi::GetResult doGetOnDisk(
- const document::BucketId& bucketId,
- const document::DocumentId& docId);
+ spi::GetResult doGetOnDisk(const document::BucketId& bucketId, const document::DocumentId& docId);
- spi::GetResult doGet(
- const document::BucketId& bucketId,
- const document::DocumentId& docId)
- { return doGetOnDisk(bucketId, docId); }
+ spi::GetResult doGet(const document::BucketId& bucketId, const document::DocumentId& docId) {
+ return doGetOnDisk(bucketId, docId);
+ }
- std::shared_ptr<document::DocumentUpdate> createBodyUpdate(
- const document::DocumentId& id,
- const document::FieldValue& updateValue);
+ std::shared_ptr<document::DocumentUpdate>
+ createBodyUpdate(const document::DocumentId& id, std::unique_ptr<document::FieldValue> updateValue);
- std::shared_ptr<document::DocumentUpdate> createHeaderUpdate(
- const document::DocumentId& id,
- const document::FieldValue& updateValue);
+ std::shared_ptr<document::DocumentUpdate>
+ createHeaderUpdate(const document::DocumentId& id, std::unique_ptr<document::FieldValue> updateValue);
uint16_t getDiskFromBucketDatabaseIfUnset(const document::Bucket &);
@@ -241,9 +214,7 @@ public:
*/
void doPut(const document::Document::SP& doc, spi::Timestamp, uint16_t usedBits = 16);
- void doPut(const document::Document::SP& doc,
- document::BucketId bid,
- spi::Timestamp time);
+ void doPut(const document::Document::SP& doc, document::BucketId bid, spi::Timestamp time);
spi::UpdateResult doUpdate(document::BucketId bid,
const std::shared_ptr<document::DocumentUpdate>& update,
diff --git a/storage/src/tests/persistence/testandsettest.cpp b/storage/src/tests/persistence/testandsettest.cpp
index 6e5fc491941..3245bd78a07 100644
--- a/storage/src/tests/persistence/testandsettest.cpp
+++ b/storage/src/tests/persistence/testandsettest.cpp
@@ -18,6 +18,7 @@ using std::shared_ptr;
using storage::spi::test::makeSpiBucket;
using document::test::makeDocumentBucket;
+using document::StringFieldValue;
using namespace ::testing;
namespace storage {
@@ -28,10 +29,10 @@ struct TestAndSetTest : PersistenceTestUtils {
static constexpr int RANDOM_SEED = 1234;
const document::BucketId BUCKET_ID{16, 4};
- const document::StringFieldValue MISMATCHING_HEADER{"Definitely nothing about loud canines"};
- const document::StringFieldValue MATCHING_HEADER{"Some string with woofy dog as a substring"};
- const document::StringFieldValue OLD_CONTENT{"Some old content"};
- const document::StringFieldValue NEW_CONTENT{"Freshly pressed and squeezed content"};
+ const StringFieldValue MISMATCHING_HEADER{"Definitely nothing about loud canines"};
+ const StringFieldValue MATCHING_HEADER{"Some string with woofy dog as a substring"};
+ const StringFieldValue OLD_CONTENT{"Some old content"};
+ const StringFieldValue NEW_CONTENT{"Freshly pressed and squeezed content"};
const document::Bucket BUCKET = makeDocumentBucket(BUCKET_ID);
unique_ptr<PersistenceHandler> persistenceHandler;
@@ -159,7 +160,7 @@ std::shared_ptr<api::UpdateCommand>
TestAndSetTest::conditional_update_test(bool createIfMissing, api::Timestamp updateTimestamp)
{
auto docUpdate = std::make_shared<document::DocumentUpdate>(_env->_testDocMan.getTypeRepo(), testDoc->getType(), testDocId);
- docUpdate->addUpdate(document::FieldUpdate(testDoc->getField("content")).addUpdate(std::make_unique<document::AssignValueUpdate>(NEW_CONTENT)));
+ docUpdate->addUpdate(document::FieldUpdate(testDoc->getField("content")).addUpdate(std::make_unique<document::AssignValueUpdate>(std::make_unique<StringFieldValue>(NEW_CONTENT))));
docUpdate->setCreateIfNonExistent(createIfMissing);
auto updateUp = std::make_unique<api::UpdateCommand>(BUCKET, docUpdate, updateTimestamp);
diff --git a/storageapi/src/tests/mbusprot/storageprotocoltest.cpp b/storageapi/src/tests/mbusprot/storageprotocoltest.cpp
index 40969455d68..5e773be42b6 100644
--- a/storageapi/src/tests/mbusprot/storageprotocoltest.cpp
+++ b/storageapi/src/tests/mbusprot/storageprotocoltest.cpp
@@ -248,9 +248,8 @@ TEST_P(StorageProtocolTest, response_metadata_is_propagated) {
}
TEST_P(StorageProtocolTest, update) {
- auto update = std::make_shared<document::DocumentUpdate>(
- _docMan.getTypeRepo(), *_testDoc->getDataType(), _testDoc->getId());
- update->addUpdate(FieldUpdate(_testDoc->getField("headerval")).addUpdate(std::make_unique<AssignValueUpdate>(IntFieldValue(17))));
+ auto update = std::make_shared<document::DocumentUpdate>(_docMan.getTypeRepo(), *_testDoc->getDataType(), _testDoc->getId());
+ update->addUpdate(FieldUpdate(_testDoc->getField("headerval")).addUpdate(std::make_unique<AssignValueUpdate>(std::make_unique<IntFieldValue>(17))));
update->addFieldPathUpdate(FieldPathUpdate::CP(new RemoveFieldPathUpdate("headerval", "testdoctype1.headerval > 0")));