mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
dbms: development.
This commit is contained in:
parent
a4d785017c
commit
78c982e205
@ -41,7 +41,7 @@ public:
|
||||
|
||||
void insert(const Field & x)
|
||||
{
|
||||
String & s = boost::get<String &>(x);
|
||||
const String & s = boost::get<const String &>(x);
|
||||
size_t old_size = char_data.size();
|
||||
size_t size_to_append = s.size() + 1;
|
||||
char_data.resize(old_size + size_to_append);
|
||||
|
@ -33,6 +33,8 @@ private:
|
||||
IRowInputStream & row_input;
|
||||
const Block & sample;
|
||||
size_t max_block_size;
|
||||
|
||||
void initBlock(Block & res);
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include <DB/DataStreams/BlockInputStreamFromRowInputStream.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
@ -19,10 +20,8 @@ BlockInputStreamFromRowInputStream::BlockInputStreamFromRowInputStream(
|
||||
}
|
||||
|
||||
|
||||
Block BlockInputStreamFromRowInputStream::read()
|
||||
void BlockInputStreamFromRowInputStream::initBlock(Block & res)
|
||||
{
|
||||
Block res;
|
||||
|
||||
for (size_t i = 0; i < sample.columns(); ++i)
|
||||
{
|
||||
const ColumnWithNameAndType & sample_elem = sample.getByPosition(i);
|
||||
@ -34,13 +33,22 @@ Block BlockInputStreamFromRowInputStream::read()
|
||||
|
||||
res.insert(res_elem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Block BlockInputStreamFromRowInputStream::read()
|
||||
{
|
||||
Block res;
|
||||
|
||||
for (size_t rows = 0; rows < max_block_size; ++rows)
|
||||
{
|
||||
Row row = row_input.read();
|
||||
|
||||
if (row.empty())
|
||||
return sample;
|
||||
return res;
|
||||
|
||||
if (!res)
|
||||
initBlock(res);
|
||||
|
||||
if (row.size() != sample.columns())
|
||||
throw Exception("Number of columns doesn't match", ErrorCodes::NUMBER_OF_COLUMNS_DOESNT_MATCH);
|
||||
@ -48,7 +56,7 @@ Block BlockInputStreamFromRowInputStream::read()
|
||||
for (size_t i = 0; i < row.size(); ++i)
|
||||
res.getByPosition(i).column->insert(row[i]);
|
||||
}
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
59
dbms/src/DataStreams/tests/block_row_transforms.cpp
Normal file
59
dbms/src/DataStreams/tests/block_row_transforms.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
#include <string>
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include <Poco/Stopwatch.h>
|
||||
#include <Poco/SharedPtr.h>
|
||||
|
||||
#include <DB/Core/Block.h>
|
||||
#include <DB/Core/ColumnWithNameAndType.h>
|
||||
|
||||
#include <DB/DataTypes/DataTypesNumberFixed.h>
|
||||
#include <DB/DataTypes/DataTypeString.h>
|
||||
|
||||
#include <DB/DataStreams/TabSeparatedRowInputStream.h>
|
||||
#include <DB/DataStreams/TabSeparatedRowOutputStream.h>
|
||||
#include <DB/DataStreams/BlockInputStreamFromRowInputStream.h>
|
||||
#include <DB/DataStreams/copyData.h>
|
||||
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
try
|
||||
{
|
||||
Poco::SharedPtr<DB::DataTypes> data_types = new DB::DataTypes;
|
||||
data_types->push_back(new DB::DataTypeUInt64);
|
||||
data_types->push_back(new DB::DataTypeString);
|
||||
|
||||
DB::Block sample;
|
||||
|
||||
DB::ColumnWithNameAndType col1;
|
||||
col1.name = "col1";
|
||||
col1.type = data_types->at(0);
|
||||
col1.column = col1.type->createColumn();
|
||||
sample.insert(col1);
|
||||
|
||||
DB::ColumnWithNameAndType col2;
|
||||
col2.name = "col2";
|
||||
col2.type = data_types->at(1);
|
||||
col2.column = col2.type->createColumn();
|
||||
sample.insert(col2);
|
||||
|
||||
std::ifstream istr("test_in");
|
||||
std::ofstream ostr("test_out");
|
||||
|
||||
DB::TabSeparatedRowInputStream row_input(istr, data_types);
|
||||
DB::BlockInputStreamFromRowInputStream block_input(row_input, sample);
|
||||
DB::TabSeparatedRowOutputStream row_output(ostr, data_types);
|
||||
|
||||
DB::copyData(block_input, row_output);
|
||||
}
|
||||
catch (const DB::Exception & e)
|
||||
{
|
||||
std::cerr << e.what() << ", " << e.message() << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user