2011-08-22 08:43:52 +00:00
|
|
|
|
#pragma once
|
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>
|
|
|
|
|
|
2011-08-22 08:43:52 +00:00
|
|
|
|
|
2010-03-12 18:25:35 +00:00
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
2010-05-21 19:52:50 +00:00
|
|
|
|
using Poco::SharedPtr;
|
|
|
|
|
|
2011-08-22 08:43:52 +00:00
|
|
|
|
class IColumn;
|
|
|
|
|
typedef SharedPtr<IColumn> ColumnPtr;
|
|
|
|
|
typedef std::vector<ColumnPtr> Columns;
|
|
|
|
|
|
|
|
|
|
|
2010-03-12 18:25:35 +00:00
|
|
|
|
/** Интерфейс для хранения столбцов значений в оперативке.
|
|
|
|
|
*/
|
|
|
|
|
class IColumn
|
|
|
|
|
{
|
|
|
|
|
public:
|
2011-08-28 00:31:30 +00:00
|
|
|
|
/** Имя столбца. Для информационных сообщений.
|
|
|
|
|
*/
|
|
|
|
|
virtual std::string getName() const = 0;
|
|
|
|
|
|
2011-08-21 03:41:37 +00:00
|
|
|
|
/** Столбец представляет собой вектор чисел или числовую константу.
|
|
|
|
|
*/
|
|
|
|
|
virtual bool isNumeric() const { return false; }
|
|
|
|
|
|
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;
|
|
|
|
|
|
2011-08-28 08:02:11 +00:00
|
|
|
|
bool empty() const { return size() == 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;
|
|
|
|
|
|
2011-08-22 08:43:52 +00:00
|
|
|
|
/** Соединить столбец с одним или несколькими другими.
|
|
|
|
|
* Используется при склейке маленьких блоков.
|
|
|
|
|
*/
|
|
|
|
|
//virtual void merge(const Columns & columns) = 0;
|
|
|
|
|
|
|
|
|
|
/** Оставить только значения, соответствующие фильтру.
|
|
|
|
|
* Используется для операции WHERE / HAVING.
|
|
|
|
|
*/
|
|
|
|
|
typedef std::vector<UInt8> Filter;
|
2011-08-22 20:24:45 +00:00
|
|
|
|
virtual void filter(const Filter & filt) = 0;
|
2011-08-22 08:43:52 +00:00
|
|
|
|
|
2011-09-04 00:22:19 +00:00
|
|
|
|
/** Переставить значения местами, используя указанную перестановку.
|
|
|
|
|
* Используется при сортировке.
|
|
|
|
|
*/
|
|
|
|
|
typedef std::vector<size_t> Permutation;
|
|
|
|
|
virtual void permute(const Permutation & perm) = 0;
|
|
|
|
|
|
|
|
|
|
/** Сравнить (*this)[n] и rhs[m].
|
|
|
|
|
* Вернуть отрицательное число, 0, или положительное число, если меньше, равно, или больше, соответственно.
|
|
|
|
|
* Используется при сортировке.
|
|
|
|
|
*/
|
|
|
|
|
virtual int compareAt(size_t n, size_t m, const IColumn & rhs) const = 0;
|
|
|
|
|
|
2010-05-13 16:13:38 +00:00
|
|
|
|
/** Очистить */
|
|
|
|
|
virtual void clear() = 0;
|
|
|
|
|
|
2011-08-27 22:43:31 +00:00
|
|
|
|
/** Приблизительный размер столбца в оперативке в байтах - для профайлинга. 0 - если неизвестно. */
|
|
|
|
|
virtual size_t byteSize() = 0;
|
|
|
|
|
|
2010-03-12 18:25:35 +00:00
|
|
|
|
virtual ~IColumn() {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|