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