Skip to content

Commit

Permalink
chore: cleanup code
Browse files Browse the repository at this point in the history
  • Loading branch information
vmihailenco committed Oct 26, 2024
1 parent cbc5177 commit 6af4c48
Showing 1 changed file with 11 additions and 16 deletions.
27 changes: 11 additions & 16 deletions model_table_has_many.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func (m *hasManyModel) Scan(src interface{}) error {

for _, f := range m.rel.JoinFields {
if f.Name == field.Name {
m.structKey = append(m.structKey, getFieldValue(field.Value(m.strct)))
m.structKey = append(m.structKey, indirectFieldValue(field.Value(m.strct)))
break
}
}
Expand Down Expand Up @@ -144,24 +144,19 @@ func baseValues(model TableModel, fields []*schema.Field) map[internal.MapKey][]

func modelKey(key []interface{}, strct reflect.Value, fields []*schema.Field) []interface{} {
for _, f := range fields {
key = append(key, getFieldValue(f.Value(strct)))
key = append(key, indirectFieldValue(f.Value(strct)))
}
return key
}

// getFieldValue extracts the value from a reflect.Value, handling pointer types appropriately.
func getFieldValue(fieldValue reflect.Value) interface{} {
var keyValue interface{}

if fieldValue.Kind() == reflect.Ptr {
if !fieldValue.IsNil() {
keyValue = fieldValue.Elem().Interface()
} else {
keyValue = nil
}
} else {
keyValue = fieldValue.Interface()
// indirectFieldValue return the field value dereferencing the pointer if necessary.
// The value is then used as a map key.
func indirectFieldValue(field reflect.Value) interface{} {
if field.Kind() != reflect.Ptr {
return field.Interface()
}

return keyValue
if field.IsNil() {
return nil
}
return field.Elem().Interface()
}

0 comments on commit 6af4c48

Please sign in to comment.