src/StreamRelationalReader.h
author František Kučera <franta-hg@frantovo.cz>
Mon, 27 Aug 2018 00:06:14 +0200
branchv_0
changeset 17 ec750c536705
parent 16 9b8139bb0519
child 18 e11f1ad20826
permissions -rw-r--r--
interface + dummy implementation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     1
#pragma once
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     2
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     3
#include <string>
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     4
#include <iostream>
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     5
#include <vector>
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     6
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     7
#include <relpipe/protocol/constants.h>
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     8
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     9
#include "../include/relpipe/reader/typedefs.h"
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    10
#include "../include/relpipe/reader/RelationalReader.h"
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    11
#include "../include/relpipe/reader/TypeId.h"
16
9b8139bb0519 handler structure
František Kučera <franta-hg@frantovo.cz>
parents: 14
diff changeset
    12
#include "../include/relpipe/reader/handlers/RelationalReaderBaseHandler.h"
9b8139bb0519 handler structure
František Kučera <franta-hg@frantovo.cz>
parents: 14
diff changeset
    13
#include "../include/relpipe/reader/handlers/RelationalReaderStringHandler.h"
9b8139bb0519 handler structure
František Kučera <franta-hg@frantovo.cz>
parents: 14
diff changeset
    14
#include "../include/relpipe/reader/handlers/RelationalReaderValueHandler.h"
14
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    15
#include "DataTypeReaderBase.h"
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    16
#include "types/BooleanDataTypeReader.h"
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    17
#include "types/IntegerDataTypeReader.h"
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    18
#include "types/StringDataTypeReader.h"
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    19
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    20
namespace relpipe {
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    21
namespace reader {
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    22
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    23
using namespace relpipe::protocol;
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    24
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    25
class StreamRelationalReader : public RelationalReader {
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    26
private:
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    27
	std::istream &input;
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    28
	types::BooleanDataTypeReader booleanReader;
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    29
	types::IntegerDataTypeReader integerReader;
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    30
	types::StringDataTypeReader stringReader;
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    31
	std::vector<DataTypeReaderBase*> readers = {&booleanReader, &integerReader, &stringReader};
17
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    32
	std::vector<handlers::RelationalReaderStringHadler*> stringHandlers;
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    33
	std::vector<handlers::RelationalReaderValueHadler*> valueHandlers;
14
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    34
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    35
	/**
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    36
	 * count of columns in the current table
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    37
	 */
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    38
	integer_t columnCount;
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    39
	/**
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    40
	 * number of column (0 = first) that will be written; after writing, the number is increased and prepared for next one
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    41
	 */
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    42
	integer_t currentColumn;
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    43
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    44
	/**
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    45
	 * types of columns in the current table
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    46
	 */
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    47
	std::vector<TypeId> columnTypes;
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    48
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    49
public:
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    50
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    51
	StreamRelationalReader(std::istream &input) :
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    52
	input(input) {
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    53
	}
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    54
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    55
	string_t toTypeCode(const TypeId typeId) override {
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    56
		for (DataTypeReaderBase* reader : readers) if (reader->supports(typeId)) return reader->getTypeCode();
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    57
		throw RelpipeReaderException(L"Unsupported data type: " + static_cast<integer_t> (typeId));
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    58
	}
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    59
17
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    60
	void addHandler(handlers::RelationalReaderStringHadler* handler) override {
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    61
		stringHandlers.push_back(handler);
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    62
	}
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    63
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    64
	void addHandler(handlers::RelationalReaderValueHadler* handler) override {
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    65
		valueHandlers.push_back(handler);
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    66
	}
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    67
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    68
	void process() override {
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    69
		for (int i = 0; i < stringHandlers.size(); i++) {
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    70
			// FIXME: parse and call methods
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    71
			stringHandlers[i]->startRelation(L"TODO: table",{
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    72
				{L"a", TypeId::STRING},
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    73
				{L"b", TypeId::STRING},
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    74
				{L"c", TypeId::STRING}
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    75
			});
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    76
		}
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    77
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    78
		for (int i = 0; i < valueHandlers.size(); i++) {
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    79
			// FIXME: parse and call methods
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    80
			valueHandlers[i]->startRelation(L"TODO: table value",{
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    81
				{L"av", TypeId::STRING},
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    82
				{L"bv", TypeId::STRING},
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    83
				{L"cv", TypeId::STRING}
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    84
			});
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    85
		}
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    86
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    87
		// FIXME: parse and call methods
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    88
		for (int row = 0; row < 3; row++) {
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    89
			for (int i = 0; i < stringHandlers.size(); i++) stringHandlers[i]->attribute(L"x");
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    90
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    91
		}
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    92
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    93
	}
ec750c536705 interface + dummy implementation
František Kučera <franta-hg@frantovo.cz>
parents: 16
diff changeset
    94
14
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    95
};
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    96
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    97
}
e8de089f95dd refactoring, move files, use TypeId instead of integer_t
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    98
}