returns ErrEmptySlice when creating with zero length slice
This commit is contained in:
		
							parent
							
								
									fcb666cfa3
								
							
						
					
					
						commit
						48b395b760
					
				| @ -252,6 +252,11 @@ func ConvertToCreateValues(stmt *gorm.Statement) (values clause.Values) { | ||||
| 			stmt.SQL.Grow(stmt.ReflectValue.Len() * 15) | ||||
| 			values.Values = make([][]interface{}, stmt.ReflectValue.Len()) | ||||
| 			defaultValueFieldsHavingValue := map[*schema.Field][]interface{}{} | ||||
| 			if stmt.ReflectValue.Len() == 0 { | ||||
| 				stmt.AddError(gorm.ErrEmptySlice) | ||||
| 				return | ||||
| 			} | ||||
| 
 | ||||
| 			for i := 0; i < stmt.ReflectValue.Len(); i++ { | ||||
| 				rv := reflect.Indirect(stmt.ReflectValue.Index(i)) | ||||
| 				values.Values[i] = make([]interface{}, len(values.Columns)) | ||||
|  | ||||
| @ -46,6 +46,11 @@ func ConvertSliceOfMapToValuesForCreate(stmt *gorm.Statement, mapValues []map[st | ||||
| 		selectColumns, restricted = stmt.SelectAndOmitColumns(true, false) | ||||
| 	) | ||||
| 
 | ||||
| 	if len(mapValues) == 0 { | ||||
| 		stmt.AddError(gorm.ErrEmptySlice) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	for idx, mapValue := range mapValues { | ||||
| 		for k, v := range mapValue { | ||||
| 			if stmt.Schema != nil { | ||||
|  | ||||
| @ -27,4 +27,6 @@ var ( | ||||
| 	ErrRegistered = errors.New("registered") | ||||
| 	// ErrInvalidField invalid field
 | ||||
| 	ErrInvalidField = errors.New("invalid field") | ||||
| 	// ErrEmptySlice empty slice found
 | ||||
| 	ErrEmptySlice = errors.New("empty slice found") | ||||
| ) | ||||
|  | ||||
| @ -287,6 +287,18 @@ func TestCreateEmptyStruct(t *testing.T) { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCreateEmptySlice(t *testing.T) { | ||||
| 	var data = []User{} | ||||
| 	if err := DB.Create(&data).Error; err != gorm.ErrEmptySlice { | ||||
| 		t.Errorf("no data should be created, got %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	var sliceMap = []map[string]interface{}{} | ||||
| 	if err := DB.Model(&User{}).Create(&sliceMap).Error; err != gorm.ErrEmptySlice { | ||||
| 		t.Errorf("no data should be created, got %v", err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCreateWithExistingTimestamp(t *testing.T) { | ||||
| 	user := User{Name: "CreateUserExistingTimestamp"} | ||||
| 	curTime := now.MustParse("2016-01-01") | ||||
|  | ||||
| @ -16,3 +16,5 @@ require ( | ||||
| replace gorm.io/gorm => ../ | ||||
| 
 | ||||
| replace github.com/jackc/pgx/v4 => github.com/jinzhu/pgx/v4 v4.8.2 | ||||
| 
 | ||||
| replace gorm.io/driver/sqlserver => /Users/jinzhu/Projects/jinzhu/sqlserver | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu