hotfix:reflect.ValueOf(nil) in getFlatParams
This commit is contained in:
parent
ea87fba943
commit
167749d464
@ -58,13 +58,12 @@ func getFlatParams(fi *fieldInfo, args []interface{}, tz *time.Location) (params
|
|||||||
|
|
||||||
outFor:
|
outFor:
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
val := reflect.ValueOf(arg)
|
|
||||||
|
|
||||||
if arg == nil {
|
if arg == nil {
|
||||||
params = append(params, arg)
|
params = append(params, arg)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val := reflect.ValueOf(arg)
|
||||||
kind := val.Kind()
|
kind := val.Kind()
|
||||||
if kind == reflect.Ptr {
|
if kind == reflect.Ptr {
|
||||||
val = val.Elem()
|
val = val.Elem()
|
||||||
|
|||||||
@ -332,6 +332,11 @@ func NewPost() *Post {
|
|||||||
return obj
|
return obj
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type NullValue struct {
|
||||||
|
ID int `orm:"column(id)"`
|
||||||
|
Value string `orm:"size(30);null"`
|
||||||
|
}
|
||||||
|
|
||||||
type Tag struct {
|
type Tag struct {
|
||||||
ID int `orm:"column(id)"`
|
ID int `orm:"column(id)"`
|
||||||
Name string `orm:"size(30)"`
|
Name string `orm:"size(30)"`
|
||||||
|
|||||||
@ -191,6 +191,7 @@ func TestSyncDb(t *testing.T) {
|
|||||||
RegisterModel(new(Profile))
|
RegisterModel(new(Profile))
|
||||||
RegisterModel(new(Post))
|
RegisterModel(new(Post))
|
||||||
RegisterModel(new(Tag))
|
RegisterModel(new(Tag))
|
||||||
|
RegisterModel(new(NullValue))
|
||||||
RegisterModel(new(Comment))
|
RegisterModel(new(Comment))
|
||||||
RegisterModel(new(UserBig))
|
RegisterModel(new(UserBig))
|
||||||
RegisterModel(new(PostTags))
|
RegisterModel(new(PostTags))
|
||||||
@ -217,6 +218,7 @@ func TestRegisterModels(t *testing.T) {
|
|||||||
RegisterModel(new(User))
|
RegisterModel(new(User))
|
||||||
RegisterModel(new(Profile))
|
RegisterModel(new(Profile))
|
||||||
RegisterModel(new(Post))
|
RegisterModel(new(Post))
|
||||||
|
RegisterModel(new(NullValue))
|
||||||
RegisterModel(new(Tag))
|
RegisterModel(new(Tag))
|
||||||
RegisterModel(new(Comment))
|
RegisterModel(new(Comment))
|
||||||
RegisterModel(new(UserBig))
|
RegisterModel(new(UserBig))
|
||||||
@ -1962,69 +1964,81 @@ func TestRawValues(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestForIssue4709(t *testing.T) {
|
||||||
|
pre, err := dORM.Raw("INSERT into null_value (value) VALUES (?)").Prepare()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
_, err = pre.Exec(nil)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestRawPrepare(t *testing.T) {
|
func TestRawPrepare(t *testing.T) {
|
||||||
|
var (
|
||||||
|
result sql.Result
|
||||||
|
err error
|
||||||
|
pre RawPreparer
|
||||||
|
)
|
||||||
switch {
|
switch {
|
||||||
case IsMysql || IsSqlite:
|
case IsMysql || IsSqlite:
|
||||||
|
|
||||||
pre, err := dORM.Raw("INSERT INTO tag (name) VALUES (?)").Prepare()
|
pre, err = dORM.Raw("INSERT INTO tag (name) VALUES (?)").Prepare()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
if pre != nil {
|
if pre != nil {
|
||||||
r, err := pre.Exec("name1")
|
result, err = pre.Exec("name1")
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
tid, err := r.LastInsertId()
|
tid, err := result.LastInsertId()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
throwFail(t, AssertIs(tid > 0, true))
|
assert.True(t, tid > 0)
|
||||||
|
|
||||||
r, err = pre.Exec("name2")
|
result, err = pre.Exec("name2")
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
id, err := r.LastInsertId()
|
id, err := result.LastInsertId()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
throwFail(t, AssertIs(id, tid+1))
|
assert.Equal(t, id, tid+1)
|
||||||
|
|
||||||
r, err = pre.Exec("name3")
|
result, err = pre.Exec("name3")
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
id, err = r.LastInsertId()
|
id, err = result.LastInsertId()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
throwFail(t, AssertIs(id, tid+2))
|
assert.Equal(t, id, tid+2)
|
||||||
|
|
||||||
err = pre.Close()
|
err = pre.Close()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
res, err := dORM.Raw("DELETE FROM tag WHERE name IN (?, ?, ?)", []string{"name1", "name2", "name3"}).Exec()
|
res, err := dORM.Raw("DELETE FROM tag WHERE name IN (?, ?, ?)", []string{"name1", "name2", "name3"}).Exec()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
num, err := res.RowsAffected()
|
num, err := res.RowsAffected()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
throwFail(t, AssertIs(num, 3))
|
assert.Equal(t, num, int64(3))
|
||||||
}
|
}
|
||||||
|
|
||||||
case IsPostgres:
|
case IsPostgres:
|
||||||
|
|
||||||
pre, err := dORM.Raw(`INSERT INTO "tag" ("name") VALUES (?) RETURNING "id"`).Prepare()
|
pre, err = dORM.Raw(`INSERT INTO "tag" ("name") VALUES (?) RETURNING "id"`).Prepare()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
if pre != nil {
|
if pre != nil {
|
||||||
_, err := pre.Exec("name1")
|
_, err = pre.Exec("name1")
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
_, err = pre.Exec("name2")
|
_, err = pre.Exec("name2")
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
_, err = pre.Exec("name3")
|
_, err = pre.Exec("name3")
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
err = pre.Close()
|
err = pre.Close()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
res, err := dORM.Raw(`DELETE FROM "tag" WHERE "name" IN (?, ?, ?)`, []string{"name1", "name2", "name3"}).Exec()
|
res, err := dORM.Raw(`DELETE FROM "tag" WHERE "name" IN (?, ?, ?)`, []string{"name1", "name2", "name3"}).Exec()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
num, err := res.RowsAffected()
|
num, err := res.RowsAffected()
|
||||||
throwFail(t, err)
|
assert.Nil(t, err)
|
||||||
throwFail(t, AssertIs(num, 3))
|
assert.Equal(t, num, int64(3))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user