diff --git a/dbms/src/Storages/DeltaMerge/File/DMFilePackFilter.h b/dbms/src/Storages/DeltaMerge/File/DMFilePackFilter.h index de2cd5e3bc1..ef793697ab3 100644 --- a/dbms/src/Storages/DeltaMerge/File/DMFilePackFilter.h +++ b/dbms/src/Storages/DeltaMerge/File/DMFilePackFilter.h @@ -164,7 +164,7 @@ class DMFilePackFilter after_filter += u; ProfileEvents::increment(ProfileEvents::DMFileFilterAftRoughSet, after_filter); - Float64 filter_rate = (Float64)(after_read_packs - after_filter) * 100 / after_read_packs; + Float64 filter_rate = static_cast(after_read_packs - after_filter) * 100 / after_read_packs; LOG_DEBUG(log, "RSFilter exclude rate: " << ((after_read_packs == 0) ? "nan" : DB::toString(filter_rate, 2)) << ", after_pk: " << after_pk << ", after_read_packs: " << after_read_packs diff --git a/dbms/src/Storages/Transaction/TiDB.cpp b/dbms/src/Storages/Transaction/TiDB.cpp index aa6138cdae8..2a05432b92a 100644 --- a/dbms/src/Storages/Transaction/TiDB.cpp +++ b/dbms/src/Storages/Transaction/TiDB.cpp @@ -10,6 +10,8 @@ #include #include +#include + namespace DB { extern const UInt8 TYPE_CODE_LITERAL; @@ -52,7 +54,22 @@ Field ColumnInfo::defaultValueToField() const case TypeLong: case TypeLongLong: case TypeInt24: - return value.convert(); + { + // In c++, cast a unsigned integer to signed integer will not change the value. + // like 9223372036854775808 which is larger than the maximum value of Int64, + // static_cast(static_cast(9223372036854775808)) == 9223372036854775808 + // so we don't need consider unsigned here. + try + { + return value.convert(); + } + catch (...) + { + // due to https://github.com/pingcap/tidb/issues/34881 + // we do this to avoid exception in older version of TiDB. + return static_cast(std::llround(value.convert())); + } + } case TypeBit: { // TODO: We shall use something like `orig_default_bit`, which will never change once created, @@ -976,4 +993,4 @@ ColumnInfo fieldTypeToColumnInfo(const tipb::FieldType & field_type) return ret; } -} // namespace TiDB +} // namespace TiDB \ No newline at end of file