MCPcopy
hub / github.com/go-gorm/gorm / parsePreloadMap

Function parsePreloadMap

callbacks/preload.go:38–69  ·  view source on GitHub ↗

parsePreloadMap extracts nested preloads. e.g. // schema has a "k0" relation and a "k7.k8" embedded relation parsePreloadMap(schema, map[string][]interface{}{ clause.Associations: {"arg1"}, "k1": {"arg2"}, "k2.k3": {"arg3"}, "k4.k5.k6": {"arg4"}, }) /

(s *schema.Schema, preloads map[string][]interface{})

Source from the content-addressed store, hash-verified

36// },
37// }
38func parsePreloadMap(s *schema.Schema, preloads map[string][]interface{}) map[string]map[string][]interface{} {
39 preloadMap := map[string]map[string][]interface{}{}
40 setPreloadMap := func(name, value string, args []interface{}) {
41 if _, ok := preloadMap[name]; !ok {
42 preloadMap[name] = map[string][]interface{}{}
43 }
44 if value != "" {
45 preloadMap[name][value] = args
46 }
47 }
48
49 for name, args := range preloads {
50 preloadFields := strings.Split(name, ".")
51 value := strings.TrimPrefix(strings.TrimPrefix(name, preloadFields[0]), ".")
52 if preloadFields[0] == clause.Associations {
53 for _, relation := range s.Relationships.Relations {
54 if relation.Schema == s {
55 setPreloadMap(relation.Name, value, args)
56 }
57 }
58
59 for embedded, embeddedRelations := range s.Relationships.EmbeddedRelations {
60 for _, value := range embeddedValues(embeddedRelations) {
61 setPreloadMap(embedded, value, args)
62 }
63 }
64 } else {
65 setPreloadMap(preloadFields[0], value, args)
66 }
67 }
68 return preloadMap
69}
70
71func embeddedValues(embeddedRelations *schema.Relationships) []string {
72 if embeddedRelations == nil {

Callers 1

preloadEntryPointFunction · 0.85

Calls 1

embeddedValuesFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…