summaryrefslogtreecommitdiffstats
path: root/document
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-02-16 15:18:11 +0000
committerArne H Juul <arnej@yahooinc.com>2022-02-16 15:18:11 +0000
commitbb7c40435ff9f80c47cba77fbae7f2276171adf1 (patch)
treee30a52a9aec4e0b8eb8f8818f87c7b94f4cb9ad9 /document
parent90694216f0c1cd2dcb43fa346051949c72a9a438 (diff)
avoid using getHeader() in serialization code
Diffstat (limited to 'document')
-rw-r--r--document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java16
-rw-r--r--document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java23
-rw-r--r--document/src/main/java/com/yahoo/document/serialization/XmlDocumentWriter.java12
-rw-r--r--document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java7
4 files changed, 31 insertions, 27 deletions
diff --git a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java
index 757356e3096..4afab9233c6 100644
--- a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java
+++ b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java
@@ -116,13 +116,11 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu
doc.setDataType(readDocumentType());
doc.setId(documentId);
- Struct h = doc.getHeader();
- h.clear();
if ((content & 0x2) != 0) {
- readHeaderBody(h);
+ readHeaderBody(doc);
}
if ((content & 0x4) != 0) {
- readHeaderBody(h);
+ readHeaderBody(doc);
}
if (dataLength != (position() - dataPos)) {
@@ -322,15 +320,12 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu
buf = bigBuf;
}
- private void readHeaderBody(Struct primary) {
- primary.setVersion(version);
-
+ private void readHeaderBody(Document target) {
if (version < 8) {
throw new DeserializationException("Illegal document serialization version " + version);
}
int dataSize = getInt(null);
-
byte comprCode = getByte(null);
CompressionType compression = CompressionType.valueOf(comprCode);
@@ -366,7 +361,8 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu
// for a while: deserialize from this buffer instead:
buf = GrowableByteBuffer.wrap(destination);
- StructDataType priType = primary.getDataType();
+ StructDataType priType = target.getDataType().contentStruct();
+
for (int i=0; i<numberOfFields; ++i) {
int posBefore = position();
Integer f_id = fieldIdsAndLengths.get(i).first;
@@ -374,7 +370,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu
if (structField != null) {
FieldValue value = structField.getDataType().createFieldValue();
value.deserialize(structField, this);
- primary.setFieldValue(structField, value);
+ target.setFieldValue(structField, value);
}
//jump to beginning of next field:
position(posBefore + fieldIdsAndLengths.get(i).second.intValue());
diff --git a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java
index 09e41a0e8bf..8f5a0f6acd5 100644
--- a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java
+++ b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java
@@ -106,7 +106,8 @@ public class VespaDocumentSerializer6 extends BufferSerializer implements Docume
doc.getDataType().serialize(this);
if (hasHead) {
- doc.getHeader().serialize(null, this);
+ StructuredFieldValue asStructured = doc;
+ write(null, asStructured);
}
int finalPos = buf.position();
@@ -311,12 +312,12 @@ public class VespaDocumentSerializer6 extends BufferSerializer implements Docume
}
/**
- * Write out the value of struct field
+ * Write out the value of structured field
*
* @param field - field description (name and data type)
* @param s - field value
*/
- public void write(FieldBase field, Struct s) {
+ public void write(FieldBase field, StructuredFieldValue s) {
// Serialize all parts first.. As we need to know length before starting
// Serialize all the fields.
@@ -330,7 +331,9 @@ public class VespaDocumentSerializer6 extends BufferSerializer implements Docume
List<Integer> fieldIds = new LinkedList<>();
List<java.lang.Integer> fieldLengths = new LinkedList<>();
- for (Map.Entry<Field, FieldValue> value : s.getFields()) {
+ var iter = s.iterator();
+ while (iter.hasNext()) {
+ Map.Entry<Field, FieldValue> value = iter.next();
int startPos = buffer.position();
value.getValue().serialize(value.getKey(), this);
@@ -343,13 +346,14 @@ public class VespaDocumentSerializer6 extends BufferSerializer implements Docume
buffer.flip();
buf = bigBuffer;
+ int sz = fieldIds.size();
// Actual serialization starts here.
int lenPos = buf.position();
putInt(null, 0); // Move back to this after compression is done.
buf.put(CompressionType.NONE.getCode());
- buf.putInt1_4Bytes(s.getFieldCount());
+ buf.putInt1_4Bytes(sz);
- for (int i = 0; i < s.getFieldCount(); ++i) {
+ for (int i = 0; i < sz; ++i) {
putInt1_4Bytes(null, fieldIds.get(i));
putInt2_4_8Bytes(null, fieldLengths.get(i));
}
@@ -365,13 +369,14 @@ public class VespaDocumentSerializer6 extends BufferSerializer implements Docume
}
/**
- * Write out the value of structured field
+ * Write out the value of struct field
*
* @param field - field description (name and data type)
* @param value - field value
*/
- public void write(FieldBase field, StructuredFieldValue value) {
- throw new IllegalArgumentException("Not Implemented");
+ public void write(FieldBase field, Struct value) {
+ StructuredFieldValue asStructured = value;
+ write(field, asStructured);
}
/**
diff --git a/document/src/main/java/com/yahoo/document/serialization/XmlDocumentWriter.java b/document/src/main/java/com/yahoo/document/serialization/XmlDocumentWriter.java
index c610af9778d..082a88bb000 100644
--- a/document/src/main/java/com/yahoo/document/serialization/XmlDocumentWriter.java
+++ b/document/src/main/java/com/yahoo/document/serialization/XmlDocumentWriter.java
@@ -105,7 +105,8 @@ public final class XmlDocumentWriter implements DocumentWriter {
if (lastModified != null) {
buffer.addAttribute("lastmodifiedtime", lastModified);
}
- write(null, value.getHeader());
+ StructuredFieldValue asStructured = value;
+ write(null, asStructured);
buffer.endTag();
}
@@ -228,14 +229,13 @@ public final class XmlDocumentWriter implements DocumentWriter {
@Override
public void write(FieldBase field, Struct value) {
- optionalWrapperStart(field);
- XmlSerializationHelper.printStructXml(value, buffer);
- optionalWrapperEnd(field);
+ StructuredFieldValue asStructured = value;
+ write(field, asStructured);
}
@Override
public void write(FieldBase field, StructuredFieldValue value) {
- buffer.beginTag(field.getName());
+ optionalWrapperStart(field);
Iterator<Map.Entry<Field, FieldValue>> i = value.iterator();
while (i.hasNext()) {
Map.Entry<Field, FieldValue> v = i.next();
@@ -243,7 +243,7 @@ public final class XmlDocumentWriter implements DocumentWriter {
v.getValue().printXml(buffer);
buffer.endTag();
}
- buffer.endTag();
+ optionalWrapperEnd(field);
}
@Override
diff --git a/document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java b/document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java
index 9b99c0c9bbd..1bb91b91762 100644
--- a/document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java
+++ b/document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java
@@ -54,7 +54,7 @@ public class XmlSerializationHelper {
if (lastModified != null) {
xml.addAttribute("lastmodifiedtime", lastModified);
}
- doc.getHeader().printXml(xml);
+ printStructured(doc, xml);
}
public static void printDoubleXml(DoubleFieldValue d, XmlStream xml) {
@@ -97,7 +97,7 @@ public class XmlSerializationHelper {
}
}
- public static void printStructXml(Struct s, XmlStream xml) {
+ private static void printStructured(StructuredFieldValue s, XmlStream xml) {
Iterator<Map.Entry<Field, FieldValue>> it = s.iterator();
while (it.hasNext()) {
Map.Entry<Field, FieldValue> val = it.next();
@@ -106,6 +106,9 @@ public class XmlSerializationHelper {
xml.endTag();
}
}
+ public static void printStructXml(Struct s, XmlStream xml) {
+ printStructured(s, xml);
+ }
public static void printWeightedSetXml(WeightedSet ws, XmlStream xml) {
Iterator<FieldValue> it = ws.fieldValueIterator();