|
@@ -2,6 +2,7 @@ package gorm
|
|
|
|
|
|
import (
|
|
|
"database/sql"
|
|
|
+ "database/sql/driver"
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"reflect"
|
|
@@ -44,7 +45,14 @@ func (field *Field) Set(value interface{}) (err error) {
|
|
|
if reflectValue.Type().ConvertibleTo(fieldValue.Type()) {
|
|
|
fieldValue.Set(reflectValue.Convert(fieldValue.Type()))
|
|
|
} else if scanner, ok := fieldValue.Addr().Interface().(sql.Scanner); ok {
|
|
|
- err = scanner.Scan(reflectValue.Interface())
|
|
|
+ v := reflectValue.Interface()
|
|
|
+ if valuer, ok := v.(driver.Valuer); ok {
|
|
|
+ if v, err = valuer.Value(); err == nil {
|
|
|
+ err = scanner.Scan(v)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ err = scanner.Scan(v)
|
|
|
+ }
|
|
|
} else {
|
|
|
err = fmt.Errorf("could not convert argument of field %s from %s to %s", field.Name, reflectValue.Type(), fieldValue.Type())
|
|
|
}
|