Skip to content

Commit

Permalink
Fix an invalid default value cause bootstrap failed (#4916) (#5334)
Browse files Browse the repository at this point in the history
close #3157
  • Loading branch information
ti-chi-bot authored Sep 27, 2022
1 parent 4ec6c7e commit 72ece8b
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions dbms/src/Storages/Transaction/TiDB.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
#include <Storages/Transaction/SchemaNameMapper.h>
#include <Storages/Transaction/TiDB.h>

#include <cmath>

namespace DB
{
namespace ErrorCodes
Expand Down Expand Up @@ -96,14 +98,28 @@ Field ColumnInfo::defaultValueToField() const
}
switch (tp)
{
// TODO: Consider unsigned?
// Integer Type.
case TypeTiny:
case TypeShort:
case TypeLong:
case TypeLongLong:
case TypeInt24:
return value.convert<Int64>();
{
// 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<UInt64>(static_cast<Int64>(9223372036854775808)) == 9223372036854775808
// so we don't need consider unsigned here.
try
{
return value.convert<Int64>();
}
catch (...)
{
// due to https://github.com/pingcap/tidb/issues/34881
// we do this to avoid exception in older version of TiDB.
return static_cast<Int64>(std::llround(value.convert<double>()));
}
}
case TypeBit:
{
// TODO: We shall use something like `orig_default_bit`, which will never change once created,
Expand Down Expand Up @@ -652,6 +668,13 @@ catch (const Poco::Exception & e)
///////////////////////

IndexInfo::IndexInfo(Poco::JSON::Object::Ptr json)
: id()
, state()
, index_type()
, is_unique()
, is_primary()
, is_invisible()
, is_global()
{
deserialize(json);
}
Expand Down

0 comments on commit 72ece8b

Please sign in to comment.