aboutsummaryrefslogtreecommitdiffstats
path: root/document
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2018-10-08 14:23:41 +0200
committerTor Egge <Tor.Egge@broadpark.no>2018-10-08 15:11:58 +0200
commita6fab103b0ec74ca0a61c3ddc592ccc32445ac24 (patch)
tree8fea0199247b41d7efc44176eb8a327c4558a704 /document
parentc87e55ec025110fe6b7af0675677b657306d3e43 (diff)
Handle serialization of empty struct field value.
Diffstat (limited to 'document')
-rw-r--r--document/src/tests/serialization/vespadocumentserializer_test.cpp14
-rw-r--r--document/src/vespa/document/serialization/vespadocumentserializer.cpp4
2 files changed, 16 insertions, 2 deletions
diff --git a/document/src/tests/serialization/vespadocumentserializer_test.cpp b/document/src/tests/serialization/vespadocumentserializer_test.cpp
index c12a4966bcb..f7d0cd4c3f6 100644
--- a/document/src/tests/serialization/vespadocumentserializer_test.cpp
+++ b/document/src/tests/serialization/vespadocumentserializer_test.cpp
@@ -514,6 +514,20 @@ void checkStructSerialization(const StructFieldValue &value,
EXPECT_EQUAL(60u, element2_size);
}
+TEST("requireThatEmptyStructCanBeSerialized") {
+ StructDataType structType(getStructDataType());
+ StructFieldValue value(structType);
+ nbostream stream;
+ value.reset(); // Simulate the result of deserializing empty struct
+ serializeAndDeserialize(value, stream);
+ uint32_t data_size;
+ uint8_t compression_type;
+ uint8_t field_count;
+ stream >> data_size >> compression_type >> field_count;
+ EXPECT_EQUAL(0u, data_size);
+ EXPECT_EQUAL(0u, field_count);
+}
+
TEST("requireThatUncompressedStructFieldValueCanBeSerialized") {
StructDataType structType(getStructDataType());
StructFieldValue value = getStructFieldValue(structType);
diff --git a/document/src/vespa/document/serialization/vespadocumentserializer.cpp b/document/src/vespa/document/serialization/vespadocumentserializer.cpp
index a309fdd3500..28192cd6a4e 100644
--- a/document/src/vespa/document/serialization/vespadocumentserializer.cpp
+++ b/document/src/vespa/document/serialization/vespadocumentserializer.cpp
@@ -153,8 +153,8 @@ void VespaDocumentSerializer::write(const Document &value,
void VespaDocumentSerializer::visit(const StructFieldValue &value)
{
- if (!structNeedsReserialization(value)) {
- const StructFieldValue::Chunks & chunks = value.getChunks();
+ const StructFieldValue::Chunks & chunks = value.getChunks();
+ if (!structNeedsReserialization(value) && chunks.size() > 0) {
assert(chunks.size() == 1);
writeUnchanged(chunks[0]);
} else {