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