mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 15:42:02 +00:00
Fix build
This commit is contained in:
parent
7161d3d380
commit
6debaccd85
@ -57,14 +57,14 @@ SerializationPtr DataTypeDateTime64::doGetDefaultSerialization() const
|
||||
return std::make_shared<SerializationDateTime64>(scale, *this);
|
||||
}
|
||||
|
||||
inline std::string getDateTimeTimezone(const IDataType & data_type)
|
||||
std::string getDateTimeTimezone(const IDataType & data_type)
|
||||
{
|
||||
if (const auto * type = typeid_cast<const DataTypeDateTime *>(&data_type))
|
||||
return type->hasExplicitTimeZone() ? type->getTimeZone().getTimeZone() : std::string();
|
||||
if (const auto * type = typeid_cast<const DataTypeDateTime64 *>(&data_type))
|
||||
return type->hasExplicitTimeZone() ? type->getTimeZone().getTimeZone() : std::string();
|
||||
|
||||
throw Exception(ErrorCodes::LOGICAL_ERROR, "Cannot get decimal scale from type {}", data_type.getName());
|
||||
throw Exception(ErrorCodes::LOGICAL_ERROR, "Cannot get time zone from type {}", data_type.getName());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ protected:
|
||||
SerializationPtr doGetDefaultSerialization() const override;
|
||||
};
|
||||
|
||||
inline std::string getDateTimeTimezone(const IDataType & data_type);
|
||||
std::string getDateTimeTimezone(const IDataType & data_type);
|
||||
|
||||
}
|
||||
|
||||
|
@ -84,9 +84,10 @@ struct ArrayAggregateResultImpl<ArrayElement, AggregateOperation::sum>
|
||||
std::conditional_t<std::is_same_v<ArrayElement, Decimal64>, Decimal128,
|
||||
std::conditional_t<std::is_same_v<ArrayElement, Decimal128>, Decimal128,
|
||||
std::conditional_t<std::is_same_v<ArrayElement, Decimal256>, Decimal256,
|
||||
std::conditional_t<std::is_same_v<ArrayElement, DateTime64>, Decimal128,
|
||||
std::conditional_t<std::is_floating_point_v<ArrayElement>, Float64,
|
||||
std::conditional_t<std::is_signed_v<ArrayElement>, Int64,
|
||||
UInt64>>>>>>>>>>;
|
||||
UInt64>>>>>>>>>>>;
|
||||
};
|
||||
|
||||
template <typename ArrayElement, AggregateOperation operation>
|
||||
@ -111,28 +112,31 @@ struct ArrayAggregateImpl
|
||||
using Types = std::decay_t<decltype(types)>;
|
||||
using DataType = typename Types::LeftType;
|
||||
|
||||
if constexpr (aggregate_operation == AggregateOperation::average || aggregate_operation == AggregateOperation::product)
|
||||
if constexpr (!IsDataTypeDateOrDateTime<DataType>)
|
||||
{
|
||||
result = std::make_shared<DataTypeFloat64>();
|
||||
if constexpr (aggregate_operation == AggregateOperation::average || aggregate_operation == AggregateOperation::product)
|
||||
{
|
||||
result = std::make_shared<DataTypeFloat64>();
|
||||
|
||||
return true;
|
||||
}
|
||||
else if constexpr (IsDataTypeNumber<DataType>)
|
||||
{
|
||||
using NumberReturnType = ArrayAggregateResult<typename DataType::FieldType, aggregate_operation>;
|
||||
result = std::make_shared<DataTypeNumber<NumberReturnType>>();
|
||||
return true;
|
||||
}
|
||||
else if constexpr (IsDataTypeNumber<DataType>)
|
||||
{
|
||||
using NumberReturnType = ArrayAggregateResult<typename DataType::FieldType, aggregate_operation>;
|
||||
result = std::make_shared<DataTypeNumber<NumberReturnType>>();
|
||||
|
||||
return true;
|
||||
}
|
||||
else if constexpr (IsDataTypeDecimal<DataType> && !IsDataTypeDateOrDateTime<DataType>)
|
||||
{
|
||||
using DecimalReturnType = ArrayAggregateResult<typename DataType::FieldType, aggregate_operation>;
|
||||
UInt32 scale = getDecimalScale(*expression_return);
|
||||
result = std::make_shared<DataTypeDecimal<DecimalReturnType>>(DecimalUtils::max_precision<DecimalReturnType>, scale);
|
||||
return true;
|
||||
}
|
||||
else if constexpr (IsDataTypeDecimal<DataType>)
|
||||
{
|
||||
using DecimalReturnType = ArrayAggregateResult<typename DataType::FieldType, aggregate_operation>;
|
||||
UInt32 scale = getDecimalScale(*expression_return);
|
||||
result = std::make_shared<DataTypeDecimal<DecimalReturnType>>(DecimalUtils::max_precision<DecimalReturnType>, scale);
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if constexpr (IsDataTypeDateOrDateTime<DataType> && (aggregate_operation == AggregateOperation::max || aggregate_operation == AggregateOperation::min))
|
||||
else if constexpr (aggregate_operation == AggregateOperation::max || aggregate_operation == AggregateOperation::min)
|
||||
{
|
||||
if constexpr (IsDataTypeDate<DataType>)
|
||||
{
|
||||
@ -143,7 +147,7 @@ struct ArrayAggregateImpl
|
||||
else if constexpr (!IsDataTypeDecimal<DataType>)
|
||||
{
|
||||
std::string timezone = getDateTimeTimezone(*expression_return);
|
||||
result = std::make_shared<DataType>(timezone);
|
||||
result = std::make_shared<DataTypeDateTime>(timezone);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -151,7 +155,7 @@ struct ArrayAggregateImpl
|
||||
{
|
||||
std::string timezone = getDateTimeTimezone(*expression_return);
|
||||
UInt32 scale = getDecimalScale(*expression_return);
|
||||
result = std::make_shared<DataType>(scale, timezone);
|
||||
result = std::make_shared<DataTypeDateTime64>(scale, timezone);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user