summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/model_table_has_many.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/model_table_has_many.go')
-rw-r--r--vendor/github.com/uptrace/bun/model_table_has_many.go35
1 files changed, 17 insertions, 18 deletions
diff --git a/vendor/github.com/uptrace/bun/model_table_has_many.go b/vendor/github.com/uptrace/bun/model_table_has_many.go
index c7bdee98a..dd74a774c 100644
--- a/vendor/github.com/uptrace/bun/model_table_has_many.go
+++ b/vendor/github.com/uptrace/bun/model_table_has_many.go
@@ -152,25 +152,24 @@ func modelKey(key []interface{}, strct reflect.Value, fields []*schema.Field) []
// indirectAsKey return the field value dereferencing the pointer if necessary.
// The value is then used as a map key.
func indirectAsKey(field reflect.Value) interface{} {
- if field.Kind() != reflect.Ptr {
- i := field.Interface()
- if valuer, ok := i.(driver.Valuer); ok {
- if v, err := valuer.Value(); err == nil {
- switch reflect.TypeOf(v).Kind() {
- case reflect.Array, reflect.Chan, reflect.Func,
- reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer:
- // NOTE #1107, these types cannot be used as map key,
- // let us use original logic.
- return i
- default:
- return v
- }
+ if field.Kind() == reflect.Pointer && field.IsNil() {
+ return nil
+ }
+
+ i := field.Interface()
+ if valuer, ok := i.(driver.Valuer); ok {
+ if v, err := valuer.Value(); err == nil {
+ switch reflect.TypeOf(v).Kind() {
+ case reflect.Array, reflect.Chan, reflect.Func,
+ reflect.Map, reflect.Pointer, reflect.Slice, reflect.UnsafePointer:
+ // NOTE #1107, these types cannot be used as map key,
+ // let us use original logic.
+ return i
+ default:
+ return v
}
}
- return i
}
- if field.IsNil() {
- return nil
- }
- return field.Elem().Interface()
+
+ return reflect.Indirect(field).Interface()
}