2010-03-05 17:38:01 +00:00
|
|
|
|
#ifndef DBMS_DATA_TYPES_IDATATYPE_H
|
|
|
|
|
#define DBMS_DATA_TYPES_IDATATYPE_H
|
2010-03-01 16:59:51 +00:00
|
|
|
|
|
2010-03-18 19:32:14 +00:00
|
|
|
|
#include <Poco/SharedPtr.h>
|
|
|
|
|
|
2010-03-01 16:59:51 +00:00
|
|
|
|
#include <DB/Core/Field.h>
|
2010-06-04 18:25:25 +00:00
|
|
|
|
#include <DB/IO/ReadBuffer.h>
|
|
|
|
|
#include <DB/IO/WriteBuffer.h>
|
2010-03-12 18:25:35 +00:00
|
|
|
|
#include <DB/Columns/IColumn.h>
|
2010-03-01 16:59:51 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
2010-03-18 19:32:14 +00:00
|
|
|
|
using Poco::SharedPtr;
|
2010-03-01 16:59:51 +00:00
|
|
|
|
|
|
|
|
|
/** Метаданные типа для хранения (столбца).
|
|
|
|
|
* Содержит методы для сериализации/десериализации.
|
|
|
|
|
*/
|
2010-03-05 17:38:01 +00:00
|
|
|
|
class IDataType
|
2010-03-01 16:59:51 +00:00
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
/// Основное имя типа (например, BIGINT UNSIGNED).
|
|
|
|
|
virtual std::string getName() const = 0;
|
|
|
|
|
|
2010-05-21 19:52:50 +00:00
|
|
|
|
/// Клонировать
|
|
|
|
|
virtual SharedPtr<IDataType> clone() const = 0;
|
|
|
|
|
|
2010-03-01 16:59:51 +00:00
|
|
|
|
/** Бинарная сериализация - для сохранения на диск / в сеть и т. п.
|
|
|
|
|
* Обратите внимание, что присутствует по два вида методов
|
|
|
|
|
* - для работы с единичными значениями и целыми столбцами.
|
|
|
|
|
*/
|
2010-06-04 18:25:25 +00:00
|
|
|
|
virtual void serializeBinary(const Field & field, WriteBuffer & ostr) const = 0;
|
|
|
|
|
virtual void deserializeBinary(Field & field, ReadBuffer & istr) const = 0;
|
|
|
|
|
virtual void serializeBinary(const IColumn & column, WriteBuffer & ostr) const = 0;
|
2010-03-03 19:48:02 +00:00
|
|
|
|
/** Считать не более limit значений. */
|
2010-06-04 18:25:25 +00:00
|
|
|
|
virtual void deserializeBinary(IColumn & column, ReadBuffer & istr, size_t limit) const = 0;
|
2010-03-01 16:59:51 +00:00
|
|
|
|
|
|
|
|
|
/** Текстовая сериализация - для вывода на экран / сохранения в текстовый файл и т. п.
|
|
|
|
|
* Без эскейпинга и квотирования.
|
|
|
|
|
*/
|
2010-06-04 18:25:25 +00:00
|
|
|
|
virtual void serializeText(const Field & field, WriteBuffer & ostr) const = 0;
|
|
|
|
|
virtual void deserializeText(Field & field, ReadBuffer & istr) const = 0;
|
2010-03-01 16:59:51 +00:00
|
|
|
|
|
|
|
|
|
/** Текстовая сериализация с эскейпингом, но без квотирования.
|
|
|
|
|
*/
|
2010-06-04 18:25:25 +00:00
|
|
|
|
virtual void serializeTextEscaped(const Field & field, WriteBuffer & ostr) const = 0;
|
|
|
|
|
virtual void deserializeTextEscaped(Field & field, ReadBuffer & istr) const = 0;
|
2010-03-01 16:59:51 +00:00
|
|
|
|
|
|
|
|
|
/** Текстовая сериализация в виде литерала, который может быть вставлен в запрос.
|
|
|
|
|
* Если compatible = true, то значение типа "массив" и "кортеж" ещё дополнительно записывается в кавычки,
|
|
|
|
|
* чтобы текстовый дамп можно было загрузить в другую СУБД с этими значениями в виде строки.
|
|
|
|
|
*/
|
2010-06-04 18:25:25 +00:00
|
|
|
|
virtual void serializeTextQuoted(const Field & field, WriteBuffer & ostr, bool compatible = false) const = 0;
|
|
|
|
|
virtual void deserializeTextQuoted(Field & field, ReadBuffer & istr, bool compatible = false) const = 0;
|
2010-03-01 16:59:51 +00:00
|
|
|
|
|
2010-03-18 19:32:14 +00:00
|
|
|
|
/** Создать пустой столбец соответствующего типа.
|
|
|
|
|
*/
|
|
|
|
|
virtual SharedPtr<IColumn> createColumn() const = 0;
|
2010-03-01 16:59:51 +00:00
|
|
|
|
|
2010-03-05 17:38:01 +00:00
|
|
|
|
virtual ~IDataType() {}
|
2010-03-01 16:59:51 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|