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

58 lines
2.0 KiB
C
Raw Normal View History

2010-06-24 19:12:10 +00:00
#ifndef DBMS_COLUMNS_ICOLUMN_H
#define DBMS_COLUMNS_ICOLUMN_H
2010-03-12 18:25:35 +00:00
2010-05-21 19:52:50 +00:00
#include <Poco/SharedPtr.h>
2010-03-12 18:25:35 +00:00
#include <DB/Core/Field.h>
namespace DB
{
2010-05-21 19:52:50 +00:00
using Poco::SharedPtr;
2010-03-12 18:25:35 +00:00
/** Интерфейс для хранения столбцов значений в оперативке.
*/
class IColumn
{
public:
2010-05-21 19:52:50 +00:00
/** Создать пустой столбец такого же типа */
virtual SharedPtr<IColumn> cloneEmpty() const = 0;
2010-05-20 19:29:04 +00:00
/** Количество значений в столбце. */
2010-03-12 18:25:35 +00:00
virtual size_t size() const = 0;
2010-05-20 19:29:04 +00:00
/** Получить значение n-го элемента.
* Используется для преобразования из блоков в строки (например, при выводе значений в текстовый дамп)
*/
2010-03-12 18:25:35 +00:00
virtual Field operator[](size_t n) const = 0;
2010-05-20 19:29:04 +00:00
/** Удалить всё кроме диапазона элементов.
* Используется, например, для операции LIMIT.
*/
2010-03-12 18:25:35 +00:00
virtual void cut(size_t start, size_t length) = 0;
2010-05-20 19:29:04 +00:00
/** Вставить значение в конец столбца (количество значений увеличится на 1).
* Используется для преобразования из строк в блоки (например, при чтении значений из текстового дампа)
*/
virtual void insert(const Field & x) = 0;
/** Вставить значение "по умолчанию".
* Используется, когда нужно увеличить размер столбца, но значение не имеет смысла.
* Например, для ColumnNullable, если взведён флаг null, то соответствующее значение во вложенном столбце игнорируется.
*/
virtual void insertDefault() = 0;
2010-05-13 16:13:38 +00:00
/** Очистить */
virtual void clear() = 0;
2010-03-12 18:25:35 +00:00
virtual ~IColumn() {}
};
2011-08-09 19:19:00 +00:00
typedef SharedPtr<IColumn> ColumnPtr;
typedef std::vector<ColumnPtr> Columns;
2010-03-12 18:25:35 +00:00
}
#endif