From ee843129cfffbbc8c874225ecb2e0e81d7dcd7d3 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 11 Apr 2018 23:02:16 +0800 Subject: [PATCH] fix error when get null var --- session_get.go | 5 +++++ session_get_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/session_get.go b/session_get.go index a38707c8..e0c353c1 100644 --- a/session_get.go +++ b/session_get.go @@ -114,6 +114,8 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, table *core.Table, bea return true, rows.Scan(&bean) case *sql.NullInt64, *sql.NullBool, *sql.NullFloat64, *sql.NullString: return true, rows.Scan(bean) + case *string, *int, *int8, *int16, *int32, *int64, *uint, *uint8, *uint16, *uint32, *uint64: + return true, rows.Scan(&bean) } switch beanKind { @@ -142,6 +144,9 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, table *core.Table, bea err = rows.ScanSlice(bean) case reflect.Map: err = rows.ScanMap(bean) + case reflect.String, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + err = rows.Scan(&bean) default: err = rows.Scan(bean) } diff --git a/session_get_test.go b/session_get_test.go index 7bb84a8b..1f7d052b 100644 --- a/session_get_test.go +++ b/session_get_test.go @@ -433,3 +433,37 @@ func TestGetCustomTableInterface(t *testing.T) { assert.NoError(t, err) assert.True(t, has) } + +func TestGetNullVar(t *testing.T) { + type TestGetNullVarStruct struct { + Id int64 + Name string + Age int + } + + assert.NoError(t, prepareEngine()) + assertSync(t, new(TestGetNullVarStruct)) + + affected, err := testEngine.Exec("insert into " + testEngine.TableName(new(TestGetNullVarStruct), true) + " (name,age) values (null,null)") + assert.NoError(t, err) + a, _ := affected.RowsAffected() + assert.EqualValues(t, 1, a) + + var name string + has, err := testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("name").Get(&name) + assert.NoError(t, err) + assert.True(t, has) + assert.EqualValues(t, "", name) + + var age int + has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age) + assert.NoError(t, err) + assert.True(t, has) + assert.EqualValues(t, 0, age) + + var age2 int8 + has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age2) + assert.NoError(t, err) + assert.True(t, has) + assert.EqualValues(t, 0, age2) +}