diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2018-10-08 14:23:41 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2018-10-08 15:11:58 +0200 |
commit | a6fab103b0ec74ca0a61c3ddc592ccc32445ac24 (patch) | |
tree | 8fea0199247b41d7efc44176eb8a327c4558a704 /document | |
parent | c87e55ec025110fe6b7af0675677b657306d3e43 (diff) |
Handle serialization of empty struct field value.
Diffstat (limited to 'document')
-rw-r--r-- | document/src/tests/serialization/vespadocumentserializer_test.cpp | 14 | ||||
-rw-r--r-- | document/src/vespa/document/serialization/vespadocumentserializer.cpp | 4 |
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 { |