fix batch insert interface slice be panic #1598
|
@ -122,7 +122,13 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
|
||||||
|
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
v := sliceValue.Index(i)
|
v := sliceValue.Index(i)
|
||||||
vv := reflect.Indirect(v)
|
var vv reflect.Value
|
||||||
|
switch v.Kind() {
|
||||||
|
case reflect.Interface:
|
||||||
|
vv = reflect.Indirect(v.Elem())
|
||||||
|
default:
|
||||||
|
vv = reflect.Indirect(v)
|
||||||
|
}
|
||||||
elemValue := v.Interface()
|
elemValue := v.Interface()
|
||||||
var colPlaces []string
|
var colPlaces []string
|
||||||
|
|
||||||
|
|
|
@ -433,6 +433,37 @@ func TestInsertMulti2(t *testing.T) {
|
||||||
assert.EqualValues(t, len(users2), cnt)
|
assert.EqualValues(t, len(users2), cnt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestInsertMulti2Interface(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
assertSync(t, new(Userinfo))
|
||||||
|
|
||||||
|
users := []interface{}{
|
||||||
|
Userinfo{Username: "xlw", Departname: "dev", Alias: "lunny2", Created: time.Now()},
|
||||||
|
Userinfo{Username: "xlw2", Departname: "dev", Alias: "lunny3", Created: time.Now()},
|
||||||
|
Userinfo{Username: "xlw11", Departname: "dev", Alias: "lunny2", Created: time.Now()},
|
||||||
|
Userinfo{Username: "xlw22", Departname: "dev", Alias: "lunny3", Created: time.Now()},
|
||||||
|
}
|
||||||
|
|
||||||
|
cnt, err := testEngine.Insert(&users)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
assert.EqualValues(t, len(users), cnt)
|
||||||
|
|
||||||
|
users2 := []interface{}{
|
||||||
|
&Userinfo{Username: "1xlw", Departname: "dev", Alias: "lunny2", Created: time.Now()},
|
||||||
|
&Userinfo{Username: "1xlw2", Departname: "dev", Alias: "lunny3", Created: time.Now()},
|
||||||
|
&Userinfo{Username: "1xlw11", Departname: "dev", Alias: "lunny2", Created: time.Now()},
|
||||||
|
&Userinfo{Username: "1xlw22", Departname: "dev", Alias: "lunny3", Created: time.Now()},
|
||||||
|
}
|
||||||
|
|
||||||
|
cnt, err = testEngine.Insert(&users2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, len(users2), cnt)
|
||||||
|
}
|
||||||
|
|
||||||
func TestInsertTwoTable(t *testing.T) {
|
func TestInsertTwoTable(t *testing.T) {
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user