[Bug](datetimev2) Fix BE crash if scale is invalid (#17763)

This commit is contained in:
Gabriel
2023-03-15 12:08:23 +08:00
committed by GitHub
parent 049b70b957
commit bbf88ecc49
4 changed files with 20 additions and 2 deletions

View File

@ -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>();

View File

@ -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

View File

@ -91,6 +91,8 @@ private:
UInt32 _scale;
};
DataTypePtr create_datetimev2(UInt64 scale);
template <typename DataType>
constexpr bool IsDataTypeDateTimeV2 = false;
template <>