[Bug](datetimev2) Fix BE crash if scale is invalid (#17763)
This commit is contained in:
@ -126,7 +126,7 @@ DataTypePtr DataTypeFactory::create_data_type(const TypeDescriptor& col_desc, bo
|
||||
nested = std::make_shared<vectorized::DataTypeDateV2>();
|
||||
break;
|
||||
case TYPE_DATETIMEV2:
|
||||
nested = std::make_shared<vectorized::DataTypeDateTimeV2>(col_desc.scale);
|
||||
nested = vectorized::create_datetimev2(col_desc.scale);
|
||||
break;
|
||||
case TYPE_DATETIME:
|
||||
nested = std::make_shared<vectorized::DataTypeDateTime>();
|
||||
@ -243,7 +243,7 @@ DataTypePtr DataTypeFactory::_create_primitive_data_type(const FieldType& type,
|
||||
result = std::make_shared<vectorized::DataTypeDateV2>();
|
||||
break;
|
||||
case OLAP_FIELD_TYPE_DATETIMEV2:
|
||||
result = std::make_shared<vectorized::DataTypeDateTimeV2>(scale);
|
||||
result = vectorized::create_datetimev2(scale);
|
||||
break;
|
||||
case OLAP_FIELD_TYPE_DATETIME:
|
||||
result = std::make_shared<vectorized::DataTypeDateTime>();
|
||||
|
||||
@ -178,4 +178,13 @@ void DataTypeDateTimeV2::cast_from_date_time(const Int64 from, UInt64& to) {
|
||||
void DataTypeDateTimeV2::cast_to_date_v2(const UInt64 from, UInt32& to) {
|
||||
to = from >> TIME_PART_LENGTH;
|
||||
}
|
||||
|
||||
DataTypePtr create_datetimev2(UInt64 scale_value) {
|
||||
if (scale_value > 6) {
|
||||
LOG(WARNING) << "Wrong scale " << scale_value;
|
||||
return nullptr;
|
||||
}
|
||||
return std::make_shared<DataTypeDateTimeV2>(scale_value);
|
||||
}
|
||||
|
||||
} // namespace doris::vectorized
|
||||
|
||||
@ -91,6 +91,8 @@ private:
|
||||
UInt32 _scale;
|
||||
};
|
||||
|
||||
DataTypePtr create_datetimev2(UInt64 scale);
|
||||
|
||||
template <typename DataType>
|
||||
constexpr bool IsDataTypeDateTimeV2 = false;
|
||||
template <>
|
||||
|
||||
Reference in New Issue
Block a user