src/StreamRelationalWriter.h
branchv_0
changeset 60 1b20c1e03065
parent 59 4fce579bed22
equal deleted inserted replaced
59:4fce579bed22 60:1b20c1e03065
    46 	std::ostream &output;
    46 	std::ostream &output;
    47 	types::BooleanDataTypeWriter booleanWriter;
    47 	types::BooleanDataTypeWriter booleanWriter;
    48 	types::IntegerDataTypeWriter integerWriter;
    48 	types::IntegerDataTypeWriter integerWriter;
    49 	types::StringDataTypeWriter stringWriter;
    49 	types::StringDataTypeWriter stringWriter;
    50 	std::vector<DataTypeWriterBase*> writers = {&booleanWriter, &integerWriter, &stringWriter};
    50 	std::vector<DataTypeWriterBase*> writers = {&booleanWriter, &integerWriter, &stringWriter};
    51 	BufferingMode bufferingMode = BufferingMode::ENVIRONMENT;
    51 	BufferingMode bufferingMode;
    52 	BufferingMode bufferingModeEnvDefault = BufferingMode::AUTO;
    52 	BufferingMode bufferingModeEnvDefault;
    53 
    53 
    54 	/**
    54 	/**
    55 	 * count of columns in the current table
    55 	 * count of columns in the current table
    56 	 */
    56 	 */
    57 	integer_t columnCount;
    57 	integer_t columnCount;
   101 
   101 
   102 public:
   102 public:
   103 
   103 
   104 	StreamRelationalWriter(std::ostream &output) :
   104 	StreamRelationalWriter(std::ostream &output) :
   105 	output(output) {
   105 	output(output) {
       
   106 		setBufferingMode(BufferingMode::ENVIRONMENT, BufferingMode::AUTO);
   106 	}
   107 	}
   107 
   108 
   108 	TypeId toTypeId(const string_t typeCode) override {
   109 	TypeId toTypeId(const string_t typeCode) override {
   109 		for (DataTypeWriterBase* writer : writers) if (writer->supports(typeCode)) return writer->getTypeId();
   110 		for (DataTypeWriterBase* writer : writers) if (writer->supports(typeCode)) return writer->getTypeId();
   110 		throw RelpipeWriterException(L"Unsupported data type: " + typeCode);
   111 		throw RelpipeWriterException(L"Unsupported data type: " + typeCode);
   112 
   113 
   113 	void startRelation(string_t name, std::vector<AttributeMetadata> attributes, boolean_t writeHeader) override {
   114 	void startRelation(string_t name, std::vector<AttributeMetadata> attributes, boolean_t writeHeader) override {
   114 		string_t tableName = name;
   115 		string_t tableName = name;
   115 		columnCount = attributes.size();
   116 		columnCount = attributes.size();
   116 		currentColumn = 0;
   117 		currentColumn = 0;
   117 
       
   118 		updateBufferingMode();
       
   119 
   118 
   120 		// Write table name and column count:
   119 		// Write table name and column count:
   121 		if (writeHeader) {
   120 		if (writeHeader) {
   122 			integerWriter.writeValue(output, DATA_PART_START);
   121 			integerWriter.writeValue(output, DATA_PART_START);
   123 			stringWriter.writeValue(output, tableName);
   122 			stringWriter.writeValue(output, tableName);
   170 	}
   169 	}
   171 
   170 
   172 	void setBufferingMode(BufferingMode mode, BufferingMode envDefault) override {
   171 	void setBufferingMode(BufferingMode mode, BufferingMode envDefault) override {
   173 		bufferingMode = mode;
   172 		bufferingMode = mode;
   174 		bufferingModeEnvDefault = envDefault;
   173 		bufferingModeEnvDefault = envDefault;
       
   174 		updateBufferingMode();
   175 	}
   175 	}
   176 
   176 
   177 };
   177 };
   178 
   178 
   179 }
   179 }