This commit is contained in:
parent
b07c406703
commit
6b3b18733a
|
@ -23,6 +23,16 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var copyOfOmitColMap columnMap
|
||||||
|
var copyOfOmitStr string
|
||||||
|
|
||||||
|
if len(session.statement.omitColumnMap) > 0 {
|
||||||
|
copyOfOmitColMap = make([]string, len(session.statement.omitColumnMap))
|
||||||
|
copy(copyOfOmitColMap, session.statement.omitColumnMap)
|
||||||
|
|
||||||
|
copyOfOmitStr = session.statement.OmitStr
|
||||||
|
}
|
||||||
|
|
||||||
for _, bean := range beans {
|
for _, bean := range beans {
|
||||||
sliceValue := reflect.Indirect(reflect.ValueOf(bean))
|
sliceValue := reflect.Indirect(reflect.ValueOf(bean))
|
||||||
if sliceValue.Kind() == reflect.Slice {
|
if sliceValue.Kind() == reflect.Slice {
|
||||||
|
@ -45,6 +55,11 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if len(copyOfOmitColMap) > 0 {
|
||||||
|
session.statement.omitColumnMap = copyOfOmitColMap
|
||||||
|
session.statement.OmitStr = copyOfOmitStr
|
||||||
|
}
|
||||||
|
|
||||||
cnt, err := session.innerInsert(bean)
|
cnt, err := session.innerInsert(bean)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return affected, err
|
return affected, err
|
||||||
|
|
|
@ -46,6 +46,51 @@ func TestInsertMulti(t *testing.T) {
|
||||||
assert.EqualValues(t, 3, num)
|
assert.EqualValues(t, 3, num)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestInsertMultiWithOmit(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type TestMultiOmit struct {
|
||||||
|
Id int64 `xorm:"int(11) pk"`
|
||||||
|
Name string `xorm:"varchar(255)"`
|
||||||
|
Omitted string `xorm:"varchar(255) 'omitted'"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NoError(t, testEngine.Sync2(new(TestMultiOmit)))
|
||||||
|
|
||||||
|
l := []interface{}{
|
||||||
|
TestMultiOmit{Id: 1, Name: "1", Omitted: "1"},
|
||||||
|
TestMultiOmit{Id: 2, Name: "1", Omitted: "2"},
|
||||||
|
TestMultiOmit{Id: 3, Name: "1", Omitted: "3"},
|
||||||
|
}
|
||||||
|
|
||||||
|
check := func() {
|
||||||
|
var ls []TestMultiOmit
|
||||||
|
err := testEngine.NewSession().Find(&ls)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 3, len(ls))
|
||||||
|
|
||||||
|
for e := range ls {
|
||||||
|
assert.EqualValues(t, "", ls[e].Omitted)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
num, err := testEngine.NewSession().Omit("omitted").
|
||||||
|
Insert(l ...)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 3, num)
|
||||||
|
check()
|
||||||
|
|
||||||
|
num, err = testEngine.NewSession().Delete(TestMultiOmit{Name: "1"})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 3, num)
|
||||||
|
|
||||||
|
num, err = testEngine.NewSession().Omit("omitted").
|
||||||
|
Insert(l)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 3, num)
|
||||||
|
check()
|
||||||
|
}
|
||||||
|
|
||||||
func insertMultiDatas(step int, datas interface{}) (num int64, err error) {
|
func insertMultiDatas(step int, datas interface{}) (num int64, err error) {
|
||||||
sliceValue := reflect.Indirect(reflect.ValueOf(datas))
|
sliceValue := reflect.Indirect(reflect.ValueOf(datas))
|
||||||
var iLen int64
|
var iLen int64
|
||||||
|
|
Loading…
Reference in New Issue