ClickHouse/dbms/include/DB/DataTypes/IDataTypeNumber.h

60 lines
1.3 KiB
C
Raw Normal View History

2012-05-09 13:12:38 +00:00
#pragma once
2010-03-03 19:48:02 +00:00
2010-03-05 17:38:01 +00:00
#include <DB/DataTypes/IDataType.h>
2010-03-03 19:48:02 +00:00
2010-06-04 18:25:25 +00:00
#include <DB/IO/ReadHelpers.h>
#include <DB/IO/WriteHelpers.h>
2010-03-03 19:48:02 +00:00
namespace DB
{
2010-03-05 17:38:01 +00:00
/** Реализует часть интерфейса IDataType, общую для всяких чисел
2010-03-03 19:48:02 +00:00
* - ввод и вывод в текстовом виде.
*/
2011-08-15 00:55:43 +00:00
template <typename FType>
2010-03-05 17:38:01 +00:00
class IDataTypeNumber : public IDataType
2010-03-03 19:48:02 +00:00
{
public:
2011-08-15 00:55:43 +00:00
typedef FType FieldType;
2011-08-18 20:33:20 +00:00
bool isNumeric() const { return true; }
2011-08-15 00:55:43 +00:00
2010-06-04 18:25:25 +00:00
void serializeText(const Field & field, WriteBuffer & ostr) const
2010-03-03 19:48:02 +00:00
{
2011-08-09 17:24:17 +00:00
writeText(boost::get<typename NearestFieldType<FieldType>::Type>(field), ostr);
2010-03-03 19:48:02 +00:00
}
2010-06-04 18:25:25 +00:00
void deserializeText(Field & field, ReadBuffer & istr) const
2010-03-03 19:48:02 +00:00
{
2010-05-24 18:58:14 +00:00
typename NearestFieldType<FieldType>::Type x;
2011-08-09 17:24:17 +00:00
readText(x, istr);
2010-05-24 18:58:14 +00:00
field = x;
2010-03-03 19:48:02 +00:00
}
2010-06-04 18:25:25 +00:00
void serializeTextEscaped(const Field & field, WriteBuffer & ostr) const
2010-03-03 19:48:02 +00:00
{
serializeText(field, ostr);
}
2010-06-04 18:25:25 +00:00
void deserializeTextEscaped(Field & field, ReadBuffer & istr) const
2010-03-03 19:48:02 +00:00
{
deserializeText(field, istr);
}
2010-06-04 18:25:25 +00:00
void serializeTextQuoted(const Field & field, WriteBuffer & ostr, bool compatible = false) const
2010-03-03 19:48:02 +00:00
{
serializeText(field, ostr);
}
2010-06-04 18:25:25 +00:00
void deserializeTextQuoted(Field & field, ReadBuffer & istr, bool compatible = false) const
2010-03-03 19:48:02 +00:00
{
deserializeText(field, istr);
}
2012-05-09 13:12:38 +00:00
size_t getSizeOfField() const { return sizeof(FieldType); }
2010-03-03 19:48:02 +00:00
};
}