ClickHouse/dbms/include/DB/Core/Types.h

78 lines
3.4 KiB
C++
Raw Normal View History

2011-08-28 00:31:30 +00:00
#pragma once
2010-03-01 16:59:51 +00:00
#include <string>
#include <vector>
2010-03-01 16:59:51 +00:00
#include <Poco/Types.h>
2015-09-29 19:19:54 +00:00
#include <common/strong_typedef.h>
2010-03-01 16:59:51 +00:00
namespace DB
{
/** Типы данных для представления значений из БД в оперативке.
*/
STRONG_TYPEDEF(char, Null);
2010-03-01 16:59:51 +00:00
using UInt8 = Poco::UInt8;
using UInt16 = Poco::UInt16;
using UInt32 = Poco::UInt32;
using UInt64 = Poco::UInt64;
2010-03-01 16:59:51 +00:00
using Int8 = Poco::Int8;
using Int16 = Poco::Int16;
using Int32 = Poco::Int32;
using Int64 = Poco::Int64;
2010-03-01 16:59:51 +00:00
using Float32 = float;
using Float64 = double;
2010-03-01 16:59:51 +00:00
using String = std::string;
using Strings = std::vector<String>;
2010-03-01 16:59:51 +00:00
/// Ordinary types with nullability.
template <typename T> struct Nullable { using Type = T; };
2010-03-01 16:59:51 +00:00
template <typename T> struct RemoveNullable { using Type = T; };
template <typename T> struct RemoveNullable<Nullable <T> > { using Type = T; };
2011-08-28 00:31:30 +00:00
template <typename T> struct IsNullable { static constexpr bool value = !std::is_same<T, typename RemoveNullable<T>::Type>::value; };
template <typename T> struct IsNumber { static constexpr bool value = false; };
template <typename T> struct IsNumber<Nullable<T> > { static constexpr bool value = IsNumber<T>::value; };
template <> struct IsNumber<UInt8> { static constexpr bool value = true; };
template <> struct IsNumber<UInt16> { static constexpr bool value = true; };
template <> struct IsNumber<UInt32> { static constexpr bool value = true; };
template <> struct IsNumber<UInt64> { static constexpr bool value = true; };
template <> struct IsNumber<Int8> { static constexpr bool value = true; };
template <> struct IsNumber<Int16> { static constexpr bool value = true; };
template <> struct IsNumber<Int32> { static constexpr bool value = true; };
template <> struct IsNumber<Int64> { static constexpr bool value = true; };
template <> struct IsNumber<Float32> { static constexpr bool value = true; };
template <> struct IsNumber<Float64> { static constexpr bool value = true; };
2011-08-28 00:31:30 +00:00
template <typename T> struct TypeName;
template <typename T> struct TypeName<Nullable<T> > { static std::string get() { return "Nullable(" + TypeName<T>::get() + ")"; } };
template <> struct TypeName<Null> { static std::string get() { return "Null"; } };
template <> struct TypeName<Nullable<void> > : TypeName<Null> {};
2011-08-28 00:31:30 +00:00
template <> struct TypeName<UInt8> { static std::string get() { return "UInt8"; } };
template <> struct TypeName<UInt16> { static std::string get() { return "UInt16"; } };
template <> struct TypeName<UInt32> { static std::string get() { return "UInt32"; } };
template <> struct TypeName<UInt64> { static std::string get() { return "UInt64"; } };
template <> struct TypeName<Int8> { static std::string get() { return "Int8"; } };
template <> struct TypeName<Int16> { static std::string get() { return "Int16"; } };
template <> struct TypeName<Int32> { static std::string get() { return "Int32"; } };
template <> struct TypeName<Int64> { static std::string get() { return "Int64"; } };
template <> struct TypeName<Float32> { static std::string get() { return "Float32"; } };
template <> struct TypeName<Float64> { static std::string get() { return "Float64"; } };
template <> struct TypeName<String> { static std::string get() { return "String"; } };
/// Этот тип не поддерживается СУБД, но используется в некоторых внутренних преобразованиях.
template <> struct TypeName<long double>{ static std::string get() { return "long double"; } };
2011-08-28 00:31:30 +00:00
}