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
|
|
|
|
{
|
2013-01-05 20:03:19 +00:00
|
|
|
|
writeText(get<typename NearestFieldType<FieldType>::Type>(field), ostr);
|
2010-03-03 19:48:02 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-03-06 14:19:55 +00:00
|
|
|
|
inline void deserializeText(Field & field, ReadBuffer & istr) const;
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2012-08-26 06:48:39 +00:00
|
|
|
|
void serializeTextQuoted(const Field & field, WriteBuffer & ostr) const
|
2010-03-03 19:48:02 +00:00
|
|
|
|
{
|
|
|
|
|
serializeText(field, ostr);
|
|
|
|
|
}
|
|
|
|
|
|
2012-08-26 06:48:39 +00:00
|
|
|
|
void deserializeTextQuoted(Field & field, ReadBuffer & istr) 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); }
|
2012-08-13 20:16:06 +00:00
|
|
|
|
|
|
|
|
|
Field getDefault() const
|
|
|
|
|
{
|
|
|
|
|
return typename NearestFieldType<FieldType>::Type();
|
|
|
|
|
}
|
2010-03-03 19:48:02 +00:00
|
|
|
|
};
|
|
|
|
|
|
2013-03-06 14:19:55 +00:00
|
|
|
|
template <typename FType> inline void IDataTypeNumber<FType>::deserializeText(Field & field, ReadBuffer & istr) const
|
|
|
|
|
{
|
|
|
|
|
typename NearestFieldType<FieldType>::Type x;
|
|
|
|
|
readIntTextUnsafe(x, istr);
|
|
|
|
|
field = x;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <> inline void IDataTypeNumber<Float64>::deserializeText(Field & field, ReadBuffer & istr) const
|
|
|
|
|
{
|
|
|
|
|
Float64 x;
|
|
|
|
|
readText(x, istr);
|
|
|
|
|
field = x;
|
|
|
|
|
}
|
|
|
|
|
template <> inline void IDataTypeNumber<Float32>::deserializeText(Field & field, ReadBuffer & istr) const
|
|
|
|
|
{
|
|
|
|
|
Float64 x;
|
|
|
|
|
readText(x, istr);
|
|
|
|
|
field = x;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2010-03-03 19:48:02 +00:00
|
|
|
|
}
|