diff options
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.go | 35 |
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() } |
