fix Get sql.Nullxx (#805)
This commit is contained in:
parent
26d40bc248
commit
2bfe0b4d5e
|
@ -5,6 +5,7 @@
|
||||||
package xorm
|
package xorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -79,6 +80,13 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, table *core.Table, bea
|
||||||
return false, nil
|
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 {
|
switch beanKind {
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
fields, err := rows.Columns()
|
fields, err := rows.Columns()
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
package xorm
|
package xorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
@ -31,7 +32,7 @@ func TestGetVar(t *testing.T) {
|
||||||
Age: 28,
|
Age: 28,
|
||||||
Money: 1.5,
|
Money: 1.5,
|
||||||
}
|
}
|
||||||
_, err := testEngine.InsertOne(data)
|
_, err := testEngine.InsertOne(&data)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
var msg string
|
var msg string
|
||||||
|
@ -55,6 +56,27 @@ func TestGetVar(t *testing.T) {
|
||||||
assert.Equal(t, true, has)
|
assert.Equal(t, true, has)
|
||||||
assert.EqualValues(t, 28, age2)
|
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
|
var money float64
|
||||||
has, err = testEngine.Table("get_var").Cols("money").Get(&money)
|
has, err = testEngine.Table("get_var").Cols("money").Get(&money)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
Loading…
Reference in New Issue