initialize record context on first attribute of each record v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sun, 17 Apr 2022 16:39:29 +0200
branchv_0
changeset 2 d2ba14aa4e20
parent 1 c0a1a008982c
child 3 9e16e31fa756
initialize record context on first attribute of each record
src/SerializeHandler.h
--- a/src/SerializeHandler.h	Sun Apr 17 01:31:28 2022 +0200
+++ b/src/SerializeHandler.h	Sun Apr 17 16:39:29 2022 +0200
@@ -87,9 +87,6 @@
 		relationContext.name = name;
 		relationContext.readerMetadata = attributes;
 
-		recordContext = RecordContext();
-		recordContext.writer.reset(relpipe::writer::Factory::create(recordContext.buffer));
-
 		for (relpipe::reader::handlers::AttributeMetadata readerMetadata : attributes) {
 			relationContext.writerMetadata.push_back({readerMetadata.getAttributeName(), writer->toTypeId(readerMetadata.getTypeName())});
 		}
@@ -97,6 +94,8 @@
 
 	void attribute(const relpipe::common::type::StringX& value) override {
 		if (recordContext.attributeIndex == 0) {
+			recordContext = RecordContext();
+			recordContext.writer.reset(relpipe::writer::Factory::create(recordContext.buffer));
 			recordContext.writer->startRelation(relationContext.name, relationContext.writerMetadata, true);
 		}
 
@@ -105,8 +104,7 @@
 
 		if (recordContext.attributeIndex % relationContext.readerMetadata.size() == 0) {
 			writer->writeAttribute(toHex(recordContext.buffer.str()));
-			recordContext = RecordContext();
-			recordContext.writer.reset(relpipe::writer::Factory::create(recordContext.buffer));
+			recordContext.attributeIndex = 0;
 		}
 	}