From bb2dad6d5e262baa7c80d5b2b28598dd410ff048 Mon Sep 17 00:00:00 2001 From: John Guo Date: Sat, 9 Jan 2021 23:02:16 +0800 Subject: [PATCH] improve package gdb of empty value handling for struct convertion --- database/gdb/gdb_type_record.go | 7 +++++-- database/gdb/gdb_z_mysql_struct_test.go | 13 +++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/database/gdb/gdb_type_record.go b/database/gdb/gdb_type_record.go index 3db440993..13edcf385 100644 --- a/database/gdb/gdb_type_record.go +++ b/database/gdb/gdb_type_record.go @@ -48,8 +48,11 @@ func (r Record) GMap() *gmap.StrAnyMap { // Note that it returns sql.ErrNoRows if is empty. func (r Record) Struct(pointer interface{}) error { // If the record is empty, it returns error. - if r.IsEmpty() && !empty.IsNil(pointer, true) { - return sql.ErrNoRows + if r.IsEmpty() { + if !empty.IsNil(pointer, true) { + return sql.ErrNoRows + } + return nil } // Special handling for parameter type: reflect.Value if _, ok := pointer.(reflect.Value); ok { diff --git a/database/gdb/gdb_z_mysql_struct_test.go b/database/gdb/gdb_z_mysql_struct_test.go index d7159c4c5..baf5c8f7a 100644 --- a/database/gdb/gdb_z_mysql_struct_test.go +++ b/database/gdb/gdb_z_mysql_struct_test.go @@ -7,6 +7,7 @@ package gdb_test import ( + "database/sql" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/os/gtime" "github.com/gogf/gf/test/gtest" @@ -252,10 +253,10 @@ func Test_Struct_Empty(t *testing.T) { } gtest.C(t, func(t *gtest.T) { - one, err := db.Table(table).Where("id=100").One() - t.Assert(err, nil) user := new(User) - t.AssertNE(one.Struct(user), nil) + err := db.Table(table).Where("id=100").Struct(user) + t.Assert(err, sql.ErrNoRows) + t.AssertNE(user, nil) }) gtest.C(t, func(t *gtest.T) { @@ -267,10 +268,10 @@ func Test_Struct_Empty(t *testing.T) { }) gtest.C(t, func(t *gtest.T) { - one, err := db.Table(table).Where("id=100").One() - t.Assert(err, nil) var user *User - t.AssertNE(one.Struct(user), nil) + err := db.Table(table).Where("id=100").Struct(&user) + t.Assert(err, nil) + t.Assert(user, nil) }) }