# HG changeset patch # User František Kučera # Date 1532290909 -7200 # Node ID f2cccaa9dd38b9501a6fb950fdd818a12ef3e1c1 # Parent 3613617d3076c5a36099417fa238a388d4f586e1 replace writeRecord() with sequence of writeAttribute() diff -r 3613617d3076 -r f2cccaa9dd38 include/RelationalWriter.h --- a/include/RelationalWriter.h Sun Jul 22 17:19:25 2018 +0200 +++ b/include/RelationalWriter.h Sun Jul 22 22:21:49 2018 +0200 @@ -21,12 +21,14 @@ virtual void startRelation(string_t name, std::vector> attributes, boolean_t writeHeader) = 0; - virtual void writeRecord(std::vector attributes) = 0; - + virtual void writeAttribute(const string_t& value) = 0; + + // TODO: fluent interface? + // TODO: << operator? // TODO: write bitmap + attribute: // virtual void writeBitmap(...) = 0; // virtual void writeAttribute(string_t attribute) = 0; - + virtual void writeAttribute(const void* value, const std::type_info& type) = 0; }; diff -r 3613617d3076 -r f2cccaa9dd38 src/StreamRelationalWriter.h --- a/src/StreamRelationalWriter.h Sun Jul 22 17:19:25 2018 +0200 +++ b/src/StreamRelationalWriter.h Sun Jul 22 22:21:49 2018 +0200 @@ -92,19 +92,10 @@ } - void writeRecord(std::vector attributes) override { - // FIXME: check vector size - // FIXME: check currentColumn == 0 - for (size_t c = 0; c < columnCount; c++) { - // TODO: do not support multiple rows in a single method call - if (c % columnCount == 0) { - integerWriter.writeValue(output, DATA_PART_ROW); - } - - wstring stringValue = attributes[c]; - TypeId typeId = columnTypes[c % columnCount]; - writeString(stringValue, typeId); - } + void writeAttribute(const string_t& value) override { + if (currentColumn == 0) integerWriter.writeValue(output, DATA_PART_ROW); + writeString(value, columnTypes[currentColumn]); + if (++currentColumn == columnCount) currentColumn = 0; } void writeAttribute(const void* value, const std::type_info& type) override {