Fix use table.* as select/omit columns
This commit is contained in:
		
							parent
							
								
									baf1afa1fc
								
							
						
					
					
						commit
						3d35ddba55
					
				| @ -4,9 +4,6 @@ The fantastic ORM library for Golang, aims to be developer friendly. | |||||||
| 
 | 
 | ||||||
| [](https://goreportcard.com/report/github.com/go-gorm/gorm) | [](https://goreportcard.com/report/github.com/go-gorm/gorm) | ||||||
| [](https://github.com/go-gorm/gorm/actions) | [](https://github.com/go-gorm/gorm/actions) | ||||||
| [](https://gitter.im/jinzhu/gorm?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) |  | ||||||
| [](https://opencollective.com/gorm) |  | ||||||
| [](https://opencollective.com/gorm) |  | ||||||
| [](https://opensource.org/licenses/MIT) | [](https://opensource.org/licenses/MIT) | ||||||
| [](https://pkg.go.dev/gorm.io/gorm?tab=doc) | [](https://pkg.go.dev/gorm.io/gorm?tab=doc) | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										48
									
								
								statement.go
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								statement.go
									
									
									
									
									
								
							| @ -665,47 +665,41 @@ func (stmt *Statement) SelectAndOmitColumns(requireCreate, requireUpdate bool) ( | |||||||
| 	results := map[string]bool{} | 	results := map[string]bool{} | ||||||
| 	notRestricted := false | 	notRestricted := false | ||||||
| 
 | 
 | ||||||
| 	// select columns
 | 	processColumn := func(column string, result bool) { | ||||||
| 	for _, column := range stmt.Selects { |  | ||||||
| 		if stmt.Schema == nil { | 		if stmt.Schema == nil { | ||||||
| 			results[column] = true | 			results[column] = result | ||||||
| 		} else if column == "*" { | 		} else if column == "*" { | ||||||
| 			notRestricted = true | 			notRestricted = result | ||||||
| 			for _, dbName := range stmt.Schema.DBNames { | 			for _, dbName := range stmt.Schema.DBNames { | ||||||
| 				results[dbName] = true | 				results[dbName] = result | ||||||
| 			} | 			} | ||||||
| 		} else if column == clause.Associations { | 		} else if column == clause.Associations { | ||||||
| 			for _, rel := range stmt.Schema.Relationships.Relations { | 			for _, rel := range stmt.Schema.Relationships.Relations { | ||||||
| 				results[rel.Name] = true | 				results[rel.Name] = result | ||||||
| 			} | 			} | ||||||
| 		} else if field := stmt.Schema.LookUpField(column); field != nil && field.DBName != "" { | 		} else if field := stmt.Schema.LookUpField(column); field != nil && field.DBName != "" { | ||||||
| 			results[field.DBName] = true | 			results[field.DBName] = result | ||||||
| 		} else if matches := nameMatcher.FindStringSubmatch(column); len(matches) == 3 && (matches[1] == stmt.Table || matches[1] == "") { | 		} else if matches := nameMatcher.FindStringSubmatch(column); len(matches) == 3 && (matches[1] == stmt.Table || matches[1] == "") { | ||||||
| 			results[matches[2]] = true | 			if matches[2] == "*" { | ||||||
|  | 				for _, dbName := range stmt.Schema.DBNames { | ||||||
|  | 					results[dbName] = result | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				results[matches[2]] = result | ||||||
|  | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			results[column] = true | 			results[column] = result | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// select columns
 | ||||||
|  | 	for _, column := range stmt.Selects { | ||||||
|  | 		processColumn(column, true) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// omit columns
 | 	// omit columns
 | ||||||
| 	for _, omit := range stmt.Omits { | 	for _, column := range stmt.Omits { | ||||||
| 		if stmt.Schema == nil { | 		processColumn(column, false) | ||||||
| 			results[omit] = false |  | ||||||
| 		} else if omit == "*" { |  | ||||||
| 			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 { | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ require ( | |||||||
| 	github.com/lib/pq v1.10.7 | 	github.com/lib/pq v1.10.7 | ||||||
| 	github.com/mattn/go-sqlite3 v1.14.16 // indirect | 	github.com/mattn/go-sqlite3 v1.14.16 // indirect | ||||||
| 	github.com/microsoft/go-mssqldb v0.19.0 // indirect | 	github.com/microsoft/go-mssqldb v0.19.0 // indirect | ||||||
|  | 	golang.org/x/crypto v0.5.0 // indirect | ||||||
| 	gorm.io/driver/mysql v1.4.5 | 	gorm.io/driver/mysql v1.4.5 | ||||||
| 	gorm.io/driver/postgres v1.4.6 | 	gorm.io/driver/postgres v1.4.6 | ||||||
| 	gorm.io/driver/sqlite v1.4.4 | 	gorm.io/driver/sqlite v1.4.4 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu