#ifndef DBMS_CORE_COLUMN_CONST_H #define DBMS_CORE_COLUMN_CONST_H #include #include #include #include namespace DB { using Poco::SharedPtr; /** шаблон для столбцов-констант (столбцов одинаковых значений). */ template class ColumnConst : public IColumn { public: ColumnConst(size_t s_, T & data_) : s(s_), data(data_) {} SharedPtr cloneEmpty() const { return new ColumnConst(0, data); } size_t size() const { return s; } Field operator[](size_t n) const { return data; } void cut(size_t start, size_t length) { s = length; } void clear() { s = 0; } void insert(const Field & x) { throw Exception("Cannot insert element into constant column", ErrorCodes::CANNOT_INSERT_ELEMENT_INTO_CONSTANT_COLUMN); } void insertDefault() { ++s; } /** Более эффективные методы манипуляции */ T & getData() { return data; } const T & getData() const { return data; } /** Преобразование из константы в полноценный столбец */ virtual SharedPtr convertToFullColumn() const = 0; private: size_t s; T data; }; } #endif