ClickHouse/dbms/include/DB/Columns/ColumnConst.h

51 lines
1.2 KiB
C
Raw Normal View History

2010-03-12 18:25:35 +00:00
#ifndef DBMS_CORE_COLUMN_CONST_H
#define DBMS_CORE_COLUMN_CONST_H
#include <Poco/SharedPtr.h>
2010-05-20 19:29:04 +00:00
#include <DB/Core/Exception.h>
#include <DB/Core/ErrorCodes.h>
2010-03-12 18:25:35 +00:00
#include <DB/Columns/IColumn.h>
namespace DB
{
using Poco::SharedPtr;
/** шаблон для столбцов-констант (столбцов одинаковых значений).
*/
template <typename T>
class ColumnConst : public IColumn
{
public:
ColumnConst(size_t s_, T & data_) : s(s_), data(data_) {}
2011-08-09 19:19:00 +00:00
ColumnPtr cloneEmpty() const { return new ColumnConst(0, data); }
2010-03-12 18:25:35 +00:00
size_t size() const { return s; }
Field operator[](size_t n) const { return data; }
void cut(size_t start, size_t length) { s = length; }
2010-05-13 16:13:38 +00:00
void clear() { s = 0; }
2010-05-20 19:29:04 +00:00
void insert(const Field & x)
{
throw Exception("Cannot insert element into constant column", ErrorCodes::CANNOT_INSERT_ELEMENT_INTO_CONSTANT_COLUMN);
}
void insertDefault() { ++s; }
2010-03-12 18:25:35 +00:00
/** Более эффективные методы манипуляции */
T & getData() { return data; }
const T & getData() const { return data; }
/** Преобразование из константы в полноценный столбец */
2011-08-09 19:19:00 +00:00
virtual ColumnPtr convertToFullColumn() const = 0;
2010-03-12 18:25:35 +00:00
private:
2010-05-13 16:13:38 +00:00
size_t s;
2010-03-12 18:25:35 +00:00
T data;
};
}
#endif