Open
Description
GORM Playground Link
Description
func (d *DO) Updates(value interface{}) (info ResultInfo, err error) {
var rawTyp, valTyp reflect.Type
rawTyp = reflect.TypeOf(value)
if rawTyp.Kind() == reflect.Ptr {
valTyp = rawTyp.Elem()
} else {
valTyp = rawTyp
}
tx := d.db // v0.3.26
// tx := d.db.Model(d.newResultPointer()) // v0.3.27
if d.backfillData != nil {
tx = tx.Model(d.backfillData)
}
switch {
case valTyp != d.modelType: // different type with model
if d.backfillData == nil {
tx = tx.Model(d.newResultPointer())
}
case rawTyp.Kind() == reflect.Ptr: // ignore ptr value
default: // for fixing "reflect.Value.Addr of unaddressable value" panic
ptr := reflect.New(d.modelType)
ptr.Elem().Set(reflect.ValueOf(value))
value = ptr.Interface()
}
result := tx.Updates(value)
return ResultInfo{RowsAffected: result.RowsAffected, Error: result.Error}, result.Error
}
Metadata
Metadata
Assignees
Labels
No labels