fix Get sql.Nullxx (#805)

This commit is contained in:
Lunny Xiao 2017-12-13 23:04:41 +08:00 committed by GitHub
parent 26d40bc248
commit 2bfe0b4d5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 1 deletions

View File

@ -5,6 +5,7 @@
package xorm
import (
"database/sql"
"errors"
"reflect"
"strconv"
@ -79,6 +80,13 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, table *core.Table, bea
return false, nil
}
switch bean.(type) {
case sql.NullInt64, sql.NullBool, sql.NullFloat64, sql.NullString:
return true, rows.Scan(&bean)
case *sql.NullInt64, *sql.NullBool, *sql.NullFloat64, *sql.NullString:
return true, rows.Scan(bean)
}
switch beanKind {
case reflect.Struct:
fields, err := rows.Columns()

View File

@ -5,6 +5,7 @@
package xorm
import (
"database/sql"
"fmt"
"testing"
"time"
@ -31,7 +32,7 @@ func TestGetVar(t *testing.T) {
Age: 28,
Money: 1.5,
}
_, err := testEngine.InsertOne(data)
_, err := testEngine.InsertOne(&data)
assert.NoError(t, err)
var msg string
@ -55,6 +56,27 @@ func TestGetVar(t *testing.T) {
assert.Equal(t, true, has)
assert.EqualValues(t, 28, age2)
var id sql.NullInt64
has, err = testEngine.Table("get_var").Cols("id").Get(&id)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, true, id.Valid)
assert.EqualValues(t, data.Id, id.Int64)
var msgNull sql.NullString
has, err = testEngine.Table("get_var").Cols("msg").Get(&msgNull)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, true, msgNull.Valid)
assert.EqualValues(t, data.Msg, msgNull.String)
var nullMoney sql.NullFloat64
has, err = testEngine.Table("get_var").Cols("money").Get(&nullMoney)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, true, nullMoney.Valid)
assert.EqualValues(t, data.Money, nullMoney.Float64)
var money float64
has, err = testEngine.Table("get_var").Cols("money").Get(&money)
assert.NoError(t, err)