bug fixed for extends insert
This commit is contained in:
parent
6d9fe27a6d
commit
4578668362
30
session.go
30
session.go
|
@ -2144,7 +2144,9 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
|
||||||
cols := make([]*core.Column, 0)
|
cols := make([]*core.Column, 0)
|
||||||
|
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
elemValue := sliceValue.Index(i).Interface()
|
v := sliceValue.Index(i)
|
||||||
|
vv := reflect.Indirect(v)
|
||||||
|
elemValue := v.Interface()
|
||||||
colPlaces := make([]string, 0)
|
colPlaces := make([]string, 0)
|
||||||
|
|
||||||
// handle BeforeInsertProcessor
|
// handle BeforeInsertProcessor
|
||||||
|
@ -2160,7 +2162,11 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
|
||||||
|
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
for _, col := range table.Columns() {
|
for _, col := range table.Columns() {
|
||||||
fieldValue := reflect.Indirect(reflect.ValueOf(elemValue)).FieldByName(col.FieldName)
|
ptrFieldValue, err := col.ValueOfV(&vv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
fieldValue := *ptrFieldValue
|
||||||
if col.IsAutoIncrement && fieldValue.Int() == 0 {
|
if col.IsAutoIncrement && fieldValue.Int() == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -2203,7 +2209,12 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for _, col := range cols {
|
for _, col := range cols {
|
||||||
fieldValue := reflect.Indirect(reflect.ValueOf(elemValue)).FieldByName(col.FieldName)
|
ptrFieldValue, err := col.ValueOfV(&vv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
fieldValue := *ptrFieldValue
|
||||||
|
|
||||||
if col.IsAutoIncrement && fieldValue.Int() == 0 {
|
if col.IsAutoIncrement && fieldValue.Int() == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -2267,7 +2278,8 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
|
||||||
|
|
||||||
lenAfterClosures := len(session.afterClosures)
|
lenAfterClosures := len(session.afterClosures)
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
elemValue := sliceValue.Index(i).Interface()
|
elemValue := reflect.Indirect(sliceValue.Index(i)).Addr().Interface()
|
||||||
|
|
||||||
// handle AfterInsertProcessor
|
// handle AfterInsertProcessor
|
||||||
if session.IsAutoCommit {
|
if session.IsAutoCommit {
|
||||||
// !nashtsai! does user expect it's same slice to passed closure when using Before()/After() when insert multi??
|
// !nashtsai! does user expect it's same slice to passed closure when using Before()/After() when insert multi??
|
||||||
|
@ -3012,11 +3024,11 @@ func (session *Session) value2Interface(col *core.Column, fieldValue reflect.Val
|
||||||
|
|
||||||
fieldTable := session.Engine.autoMapType(fieldValue)
|
fieldTable := session.Engine.autoMapType(fieldValue)
|
||||||
//if fieldTable, ok := session.Engine.Tables[fieldValue.Type()]; ok {
|
//if fieldTable, ok := session.Engine.Tables[fieldValue.Type()]; ok {
|
||||||
if len(fieldTable.PrimaryKeys) == 1 {
|
if len(fieldTable.PrimaryKeys) == 1 {
|
||||||
pkField := reflect.Indirect(fieldValue).FieldByName(fieldTable.PKColumns()[0].FieldName)
|
pkField := reflect.Indirect(fieldValue).FieldByName(fieldTable.PKColumns()[0].FieldName)
|
||||||
return pkField.Interface(), nil
|
return pkField.Interface(), nil
|
||||||
}
|
}
|
||||||
return 0, fmt.Errorf("no primary key for col %v", col.Name)
|
return 0, fmt.Errorf("no primary key for col %v", col.Name)
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue