fix lint and test
This commit is contained in:
parent
cc14764fd8
commit
8bc0a78dd7
@ -36,37 +36,32 @@ import (
|
|||||||
// }
|
// }
|
||||||
func parsePreloadMap(s *schema.Schema, preloads map[string][]interface{}) map[string]map[string][]interface{} {
|
func parsePreloadMap(s *schema.Schema, preloads map[string][]interface{}) map[string]map[string][]interface{} {
|
||||||
preloadMap := map[string]map[string][]interface{}{}
|
preloadMap := map[string]map[string][]interface{}{}
|
||||||
|
setPreloadMap := func(name, value string, args []interface{}) {
|
||||||
|
if _, ok := preloadMap[name]; !ok {
|
||||||
|
preloadMap[name] = map[string][]interface{}{}
|
||||||
|
}
|
||||||
|
if value != "" {
|
||||||
|
preloadMap[name][value] = args
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for name, args := range preloads {
|
for name, args := range preloads {
|
||||||
preloadFields := strings.Split(name, ".")
|
preloadFields := strings.Split(name, ".")
|
||||||
value := strings.TrimPrefix(strings.TrimPrefix(name, preloadFields[0]), ".")
|
value := strings.TrimPrefix(strings.TrimPrefix(name, preloadFields[0]), ".")
|
||||||
if preloadFields[0] == clause.Associations {
|
if preloadFields[0] == clause.Associations {
|
||||||
for _, relation := range s.Relationships.Relations {
|
for _, relation := range s.Relationships.Relations {
|
||||||
if _, ok := preloadMap[relation.Name]; !ok {
|
if relation.Schema == s {
|
||||||
preloadMap[relation.Name] = map[string][]interface{}{}
|
setPreloadMap(relation.Name, value, args)
|
||||||
}
|
|
||||||
|
|
||||||
if value != "" {
|
|
||||||
preloadMap[relation.Name][value] = args
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for embedded, embeddedRelations := range s.Relationships.EmbeddedRelations {
|
for embedded, embeddedRelations := range s.Relationships.EmbeddedRelations {
|
||||||
if _, ok := preloadMap[embedded]; !ok {
|
|
||||||
preloadMap[embedded] = map[string][]interface{}{}
|
|
||||||
}
|
|
||||||
for _, value := range embeddedValues(embeddedRelations) {
|
for _, value := range embeddedValues(embeddedRelations) {
|
||||||
preloadMap[embedded][value] = args
|
setPreloadMap(embedded, value, args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if _, ok := preloadMap[preloadFields[0]]; !ok {
|
setPreloadMap(preloadFields[0], value, args)
|
||||||
preloadMap[preloadFields[0]] = map[string][]interface{}{}
|
|
||||||
}
|
|
||||||
|
|
||||||
if value != "" {
|
|
||||||
preloadMap[preloadFields[0]][value] = args
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return preloadMap
|
return preloadMap
|
||||||
@ -76,7 +71,7 @@ func embeddedValues(embeddedRelations *schema.Relationships) []string {
|
|||||||
if embeddedRelations == nil {
|
if embeddedRelations == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var names []string
|
names := make([]string, 0, len(embeddedRelations.Relations)+len(embeddedRelations.EmbeddedRelations))
|
||||||
for _, relation := range embeddedRelations.Relations {
|
for _, relation := range embeddedRelations.Relations {
|
||||||
// skip first struct name
|
// skip first struct name
|
||||||
names = append(names, strings.Join(relation.Field.BindNames[1:], "."))
|
names = append(names, strings.Join(relation.Field.BindNames[1:], "."))
|
||||||
@ -87,7 +82,9 @@ func embeddedValues(embeddedRelations *schema.Relationships) []string {
|
|||||||
return names
|
return names
|
||||||
}
|
}
|
||||||
|
|
||||||
func preloadEmbedded(tx *gorm.DB, relationships *schema.Relationships, s *schema.Schema, preloads map[string][]interface{}, as []interface{}) error {
|
func preloadEmbedded(
|
||||||
|
tx *gorm.DB, relationships *schema.Relationships, s *schema.Schema, preloads map[string][]interface{}, as []interface{},
|
||||||
|
) error {
|
||||||
if relationships == nil {
|
if relationships == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -102,7 +99,7 @@ func preloadEmbedded(tx *gorm.DB, relationships *schema.Relationships, s *schema
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return fmt.Errorf("%s: %w for schema %s", name, gorm.ErrUnsupportedRelation, s.Name)
|
return fmt.Errorf("%s: %w (embedded) for schema %s", name, gorm.ErrUnsupportedRelation, s.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user