From 004ef0fe2032c262bfe4a96f733ee8da9f97581e Mon Sep 17 00:00:00 2001 From: shiyuhang <1136742008@qq.com> Date: Thu, 4 Jan 2024 16:58:50 +0800 Subject: [PATCH 1/3] alter test --- driver_test.go | 15 +++++++++------ packets.go | 7 +++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/driver_test.go b/driver_test.go index 6bdb78c78..5934caab6 100644 --- a/driver_test.go +++ b/driver_test.go @@ -388,16 +388,16 @@ func TestCRUD(t *testing.T) { func TestNumbersToAny(t *testing.T) { runTestsParallel(t, dsn, func(dbt *DBTest, tbl string) { dbt.mustExec("CREATE TABLE " + tbl + " (id INT PRIMARY KEY, b BOOL, i8 TINYINT, " + - "i16 SMALLINT, i32 INT, i64 BIGINT, f32 FLOAT, f64 DOUBLE)") - dbt.mustExec("INSERT INTO " + tbl + " VALUES (1, true, 127, 32767, 2147483647, 9223372036854775807, 1.25, 2.5)") + "i16 SMALLINT, i32 INT, i64 BIGINT, f32 FLOAT, f64 DOUBLE, iu32 INT UNSIGNED)") + dbt.mustExec("INSERT INTO " + tbl + " VALUES (1, true, 127, 32767, 2147483647, 9223372036854775807, 1.25, 2.5, 4294967295)") - // Use binaryRows for intarpolateParams=false and textRows for intarpolateParams=true. - rows := dbt.mustQuery("SELECT b, i8, i16, i32, i64, f32, f64 FROM "+tbl+" WHERE id=?", 1) + // Use binaryRows for interpolateParams=false and textRows for interpolateParams=true. + rows := dbt.mustQuery("SELECT b, i8, i16, i32, i64, f32, f64, iu32 FROM "+tbl+" WHERE id=?", 1) if !rows.Next() { dbt.Fatal("no data") } - var b, i8, i16, i32, i64, f32, f64 any - err := rows.Scan(&b, &i8, &i16, &i32, &i64, &f32, &f64) + var b, i8, i16, i32, i64, f32, f64, iu32 any + err := rows.Scan(&b, &i8, &i16, &i32, &i64, &f32, &f64, &iu32) if err != nil { dbt.Fatal(err) } @@ -422,6 +422,9 @@ func TestNumbersToAny(t *testing.T) { if f64.(float64) != 2.5 { dbt.Errorf("f64 != 2.5") } + if iu32.(int64) != 4294967295 { + dbt.Errorf("iu32 != 4294967295") + } }) } diff --git a/packets.go b/packets.go index 49e6bb058..ec76c575a 100644 --- a/packets.go +++ b/packets.go @@ -830,6 +830,13 @@ func (rows *textRows) readRow(dest []driver.Value) error { case fieldTypeTiny, fieldTypeShort, fieldTypeInt24, fieldTypeYear, fieldTypeLong: dest[i], err = strconv.ParseInt(string(buf), 10, 32) + //case fieldTypeLong: + // if rows.rs.columns[i].flags&flagUnsigned != 0 { + // dest[i], err = strconv.ParseUint(string(buf), 10, 32) + // } else { + // dest[i], err = strconv.ParseInt(string(buf), 10, 32) + // } + case fieldTypeLongLong: if rows.rs.columns[i].flags&flagUnsigned != 0 { dest[i], err = strconv.ParseUint(string(buf), 10, 64) From f37f4160a2d692024343ae3e048dc5dbdfe0e352 Mon Sep 17 00:00:00 2001 From: shiyuhang <1136742008@qq.com> Date: Thu, 4 Jan 2024 17:08:29 +0800 Subject: [PATCH 2/3] fix unsigned int overflow --- packets.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packets.go b/packets.go index ec76c575a..f73a9b71f 100644 --- a/packets.go +++ b/packets.go @@ -827,15 +827,17 @@ func (rows *textRows) readRow(dest []driver.Value) error { dest[i] = buf } - case fieldTypeTiny, fieldTypeShort, fieldTypeInt24, fieldTypeYear, fieldTypeLong: + case fieldTypeTiny, fieldTypeShort, fieldTypeInt24, fieldTypeYear: dest[i], err = strconv.ParseInt(string(buf), 10, 32) - //case fieldTypeLong: - // if rows.rs.columns[i].flags&flagUnsigned != 0 { - // dest[i], err = strconv.ParseUint(string(buf), 10, 32) - // } else { - // dest[i], err = strconv.ParseInt(string(buf), 10, 32) - // } + case fieldTypeLong: + if rows.rs.columns[i].flags&flagUnsigned != 0 { + var d uint64 + d, err = strconv.ParseUint(string(buf), 10, 32) + dest[i] = int64(d) + } else { + dest[i], err = strconv.ParseInt(string(buf), 10, 32) + } case fieldTypeLongLong: if rows.rs.columns[i].flags&flagUnsigned != 0 { From 9479b800bd8dc2ccdd6ee0ed146e027ee426a063 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 5 Jan 2024 17:30:26 +0900 Subject: [PATCH 3/3] Update packets.go --- packets.go | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/packets.go b/packets.go index f73a9b71f..94b46b10f 100644 --- a/packets.go +++ b/packets.go @@ -827,17 +827,8 @@ func (rows *textRows) readRow(dest []driver.Value) error { dest[i] = buf } - case fieldTypeTiny, fieldTypeShort, fieldTypeInt24, fieldTypeYear: - dest[i], err = strconv.ParseInt(string(buf), 10, 32) - - case fieldTypeLong: - if rows.rs.columns[i].flags&flagUnsigned != 0 { - var d uint64 - d, err = strconv.ParseUint(string(buf), 10, 32) - dest[i] = int64(d) - } else { - dest[i], err = strconv.ParseInt(string(buf), 10, 32) - } + case fieldTypeTiny, fieldTypeShort, fieldTypeInt24, fieldTypeYear, fieldTypeLong: + dest[i], err = strconv.ParseInt(string(buf), 10, 64) case fieldTypeLongLong: if rows.rs.columns[i].flags&flagUnsigned != 0 {