From df946b7e049d315d1408cb16b38c884278f2a981 Mon Sep 17 00:00:00 2001 From: lance6716 Date: Wed, 12 Aug 2020 12:58:54 +0800 Subject: [PATCH] syncer: fix wrong conversion for mysql BIT (#876) --- syncer/dml.go | 2 +- syncer/dml_test.go | 5 ++--- tests/all_mode/data/db1.increment.sql | 14 +++++++++++++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/syncer/dml.go b/syncer/dml.go index d53fe021a8..61c3a12cc6 100644 --- a/syncer/dml.go +++ b/syncer/dml.go @@ -312,7 +312,7 @@ func castUnsigned(data interface{}, ft *types.FieldType) interface{} { } return uint32(v) case int64: - return strconv.FormatUint(uint64(v), 10) + return uint64(v) } return data diff --git a/syncer/dml_test.go b/syncer/dml_test.go index 1bbaf5649c..fa0c187fc5 100644 --- a/syncer/dml_test.go +++ b/syncer/dml_test.go @@ -15,7 +15,6 @@ package syncer import ( "math" - "strconv" . "github.com/pingcap/check" "github.com/pingcap/parser" @@ -44,8 +43,8 @@ func (s *testSyncerSuite) TestCastUnsigned(c *C) { {int32(-math.Exp2(23)), true, mysql.TypeInt24, uint32(math.Exp2(23))}, {int32(-math.Exp2(31)), false, mysql.TypeLong, int32(-math.Exp2(31))}, // INT {int32(-math.Exp2(31)), true, mysql.TypeLong, uint32(math.Exp2(31))}, - {int64(-math.Exp2(63)), false, mysql.TypeLonglong, int64(-math.Exp2(63))}, // BIGINT - {int64(-math.Exp2(63)), true, mysql.TypeLonglong, strconv.FormatUint(uint64(math.Exp2(63)), 10)}, // special case use string to represent uint64 + {int64(-math.Exp2(63)), false, mysql.TypeLonglong, int64(-math.Exp2(63))}, // BIGINT + {int64(-math.Exp2(63)), true, mysql.TypeLonglong, uint64(math.Exp2(63))}, } for _, cs := range cases { ft := types.NewFieldType(cs.Type) diff --git a/tests/all_mode/data/db1.increment.sql b/tests/all_mode/data/db1.increment.sql index e154027721..a172eb5aa9 100644 --- a/tests/all_mode/data/db1.increment.sql +++ b/tests/all_mode/data/db1.increment.sql @@ -30,4 +30,16 @@ delete from t1 where gen_id > 124; -- test decimal type alter table t1 add column lat decimal(9,6) default '0.000000'; -insert into t1 (id, name, info, lat) values (8, 'gentest', '{"id":127}', '123.123') +insert into t1 (id, name, info, lat) values (8, 'gentest', '{"id":127}', '123.123'); + +-- test bit type +alter table t1 add column bin bit(1) default NULL; +insert into t1 (id, name, info, lat, bin) values (9, 'gentest', '{"id":128}', '123.123', b'0'); +insert into t1 (id, name, info, lat, bin) values (10, 'gentest', '{"id":129}', '123.123', b'1'); + +-- test bigint, min and max value for bigint/bigint unsigned +alter table t1 add column big1 bigint; +alter table t1 add column big2 bigint unsigned; +insert into t1 (id, name, info, lat, big1, big2) values (11, 'gentest', '{"id":130}', '123.123', -9223372036854775808, 0); +insert into t1 (id, name, info, lat, big1, big2) values (12, 'gentest', '{"id":131}', '123.123', 9223372036854775807, 18446744073709551615); +