checked params for InsertMulti, fixed issue #193, thanks to @blu3gui7ar

This commit is contained in:
Nash Tsai 2015-01-29 10:36:01 +08:00
parent d2f6f4f1e8
commit 10fb4dbb78
1 changed files with 29 additions and 19 deletions

View File

@ -1986,6 +1986,8 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
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 {
size := sliceValue.Len()
if size > 0 {
if session.Engine.SupportInsertMany() { if session.Engine.SupportInsertMany() {
cnt, err := session.innerInsertMulti(bean) cnt, err := session.innerInsertMulti(bean)
if err != nil { if err != nil {
@ -1993,7 +1995,6 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
} }
affected += cnt affected += cnt
} else { } else {
size := sliceValue.Len()
for i := 0; i < size; i++ { for i := 0; i < size; i++ {
cnt, err := session.innerInsert(sliceValue.Index(i).Interface()) cnt, err := session.innerInsert(sliceValue.Index(i).Interface())
if err != nil { if err != nil {
@ -2002,6 +2003,7 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
affected += cnt affected += cnt
} }
} }
}
} else { } else {
cnt, err := session.innerInsert(bean) cnt, err := session.innerInsert(bean)
if err != nil { if err != nil {
@ -2176,6 +2178,9 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
// Insert multiple records // Insert multiple records
func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) { func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) {
sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr))
if sliceValue.Kind() == reflect.Slice {
if sliceValue.Len() > 0 {
err := session.newDb() err := session.newDb()
if err != nil { if err != nil {
return 0, err return 0, err
@ -2184,8 +2189,13 @@ func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) {
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
} }
return session.innerInsertMulti(rowsSlicePtr) return session.innerInsertMulti(rowsSlicePtr)
} else {
return 0, nil
}
} else {
return 0, ErrParamsType
}
} }
func (session *Session) byte2Time(col *core.Column, data []byte) (outTime time.Time, outErr error) { func (session *Session) byte2Time(col *core.Column, data []byte) (outTime time.Time, outErr error) {