ClickHouse/dbms/src/Storages/StorageSystemNumbers.cpp

68 lines
1.7 KiB
C++
Raw Normal View History

2010-03-04 19:20:28 +00:00
#include <Poco/SharedPtr.h>
#include <DB/Core/Exception.h>
#include <DB/Core/ErrorCodes.h>
2010-03-12 18:25:35 +00:00
#include <DB/Columns/ColumnsNumber.h>
2010-03-05 17:38:01 +00:00
#include <DB/DataTypes/DataTypesNumberFixed.h>
2010-03-04 19:20:28 +00:00
#include <DB/Storages/StorageSystemNumbers.h>
namespace DB
{
using Poco::SharedPtr;
NumbersBlockInputStream::NumbersBlockInputStream(size_t block_size_) : block_size(block_size_), next(0)
{
}
2011-09-04 21:23:19 +00:00
Block NumbersBlockInputStream::readImpl()
2010-03-04 19:20:28 +00:00
{
Block res;
2011-08-14 00:49:30 +00:00
ColumnWithNameAndType column_with_name_and_type;
2010-03-12 20:44:25 +00:00
2010-03-04 19:20:28 +00:00
column_with_name_and_type.name = "number";
2010-03-05 17:38:01 +00:00
column_with_name_and_type.type = new DataTypeUInt64();
2010-03-12 18:25:35 +00:00
ColumnUInt64 * column = new ColumnUInt64(block_size);
ColumnUInt64::Container_t & vec = column->getData();
column_with_name_and_type.column = column;
2010-03-04 19:20:28 +00:00
size_t curr = next; /// Локальная переменная почему-то работает быстрее (>20%), чем член класса.
UInt64 * pos = &vec[0]; /// Это тоже ускоряет код.
UInt64 * end = &vec[block_size];
while (pos < end)
*pos++ = curr++;
next = curr;
2011-08-14 00:49:30 +00:00
res.insert(column_with_name_and_type);
2010-03-04 19:20:28 +00:00
return res;
}
2011-08-18 20:33:20 +00:00
StorageSystemNumbers::StorageSystemNumbers(const std::string & name_)
: name(name_)
2010-03-04 19:20:28 +00:00
{
2011-11-01 17:12:11 +00:00
columns.push_back(NameAndTypePair("number", new DataTypeUInt64));
2011-08-15 02:24:44 +00:00
}
2010-03-04 19:20:28 +00:00
StoragePtr StorageSystemNumbers::create(const std::string & name_)
{
return (new StorageSystemNumbers(name_))->thisPtr();
}
2010-03-04 19:20:28 +00:00
2012-01-09 19:20:48 +00:00
BlockInputStreams StorageSystemNumbers::read(
const Names & column_names, ASTPtr query, const Settings & settings,
QueryProcessingStage::Enum & processed_stage, size_t max_block_size, unsigned threads)
2011-08-15 02:24:44 +00:00
{
check(column_names);
2012-05-22 18:32:45 +00:00
processed_stage = QueryProcessingStage::FetchColumns;
2012-01-09 19:20:48 +00:00
return BlockInputStreams(1, new NumbersBlockInputStream(max_block_size));
2010-03-04 19:20:28 +00:00
}
}