refactor SelectAndOmitColumns
This commit is contained in:
		
							parent
							
								
									b566ed7913
								
							
						
					
					
						commit
						cb18433078
					
				
							
								
								
									
										56
									
								
								statement.go
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								statement.go
									
									
									
									
									
								
							@ -647,51 +647,39 @@ var nameMatcher = regexp.MustCompile(`^[\W]?(?:[a-z_]+?)[\W]?\.[\W]?([a-z_]+?)[\
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// SelectAndOmitColumns get select and omit columns, select -> true, omit -> false
 | 
					// SelectAndOmitColumns get select and omit columns, select -> true, omit -> false
 | 
				
			||||||
func (stmt *Statement) SelectAndOmitColumns(requireCreate, requireUpdate bool) (map[string]bool, bool) {
 | 
					func (stmt *Statement) SelectAndOmitColumns(requireCreate, requireUpdate bool) (map[string]bool, bool) {
 | 
				
			||||||
	results := map[string]bool{}
 | 
					 | 
				
			||||||
	notRestricted := false
 | 
						notRestricted := false
 | 
				
			||||||
 | 
						results := map[string]bool{}
 | 
				
			||||||
	// select columns
 | 
						filter := func(columns []string, selected bool) {
 | 
				
			||||||
	for _, column := range stmt.Selects {
 | 
							for _, column := range columns {
 | 
				
			||||||
		if stmt.Schema == nil {
 | 
								switch {
 | 
				
			||||||
			results[column] = true
 | 
								case stmt.Schema == nil:
 | 
				
			||||||
		} else if column == "*" {
 | 
									results[column] = selected
 | 
				
			||||||
			notRestricted = true
 | 
								case column == "*":
 | 
				
			||||||
 | 
									notRestricted = selected
 | 
				
			||||||
				for _, dbName := range stmt.Schema.DBNames {
 | 
									for _, dbName := range stmt.Schema.DBNames {
 | 
				
			||||||
				results[dbName] = true
 | 
										results[dbName] = selected
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
		} else if column == clause.Associations {
 | 
								case column == clause.Associations:
 | 
				
			||||||
				for _, rel := range stmt.Schema.Relationships.Relations {
 | 
									for _, rel := range stmt.Schema.Relationships.Relations {
 | 
				
			||||||
				results[rel.Name] = true
 | 
										results[rel.Name] = selected
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
		} else if field := stmt.Schema.LookUpField(column); field != nil && field.DBName != "" {
 | 
								default:
 | 
				
			||||||
			results[field.DBName] = true
 | 
									if field := stmt.Schema.LookUpField(column); field != nil && field.DBName != "" {
 | 
				
			||||||
 | 
										results[field.DBName] = selected
 | 
				
			||||||
				} else if matches := nameMatcher.FindStringSubmatch(column); len(matches) == 2 {
 | 
									} else if matches := nameMatcher.FindStringSubmatch(column); len(matches) == 2 {
 | 
				
			||||||
			results[matches[1]] = true
 | 
										results[matches[1]] = selected
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
			results[column] = true
 | 
										results[column] = selected
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// omit columns
 | 
						// omit columns
 | 
				
			||||||
	for _, omit := range stmt.Omits {
 | 
						filter(stmt.Omits, false)
 | 
				
			||||||
		if stmt.Schema == nil {
 | 
					
 | 
				
			||||||
			results[omit] = false
 | 
						// select columns
 | 
				
			||||||
		} else if omit == "*" {
 | 
						filter(stmt.Selects, true)
 | 
				
			||||||
			for _, dbName := range stmt.Schema.DBNames {
 | 
					 | 
				
			||||||
				results[dbName] = false
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		} else if omit == clause.Associations {
 | 
					 | 
				
			||||||
			for _, rel := range stmt.Schema.Relationships.Relations {
 | 
					 | 
				
			||||||
				results[rel.Name] = false
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		} else if field := stmt.Schema.LookUpField(omit); field != nil && field.DBName != "" {
 | 
					 | 
				
			||||||
			results[field.DBName] = false
 | 
					 | 
				
			||||||
		} else if matches := nameMatcher.FindStringSubmatch(omit); len(matches) == 2 {
 | 
					 | 
				
			||||||
			results[matches[1]] = false
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			results[omit] = false
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if stmt.Schema != nil {
 | 
						if stmt.Schema != nil {
 | 
				
			||||||
		for _, field := range stmt.Schema.FieldsByName {
 | 
							for _, field := range stmt.Schema.FieldsByName {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user