Skip to content

Commit 3d35ddb

Browse files
committed
Fix use table.* as select/omit columns
1 parent baf1afa commit 3d35ddb

File tree

3 files changed

+22
-30
lines changed

3 files changed

+22
-30
lines changed

README.md

-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ The fantastic ORM library for Golang, aims to be developer friendly.
44

55
[![go report card](https://goreportcard.com/badge/github.com/go-gorm/gorm "go report card")](https://goreportcard.com/report/github.com/go-gorm/gorm)
66
[![test status](https://github.com/go-gorm/gorm/workflows/tests/badge.svg?branch=master "test status")](https://github.com/go-gorm/gorm/actions)
7-
[![Join the chat at https://gitter.im/jinzhu/gorm](https://img.shields.io/gitter/room/jinzhu/gorm.svg)](https://gitter.im/jinzhu/gorm?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
8-
[![Open Collective Backer](https://opencollective.com/gorm/tiers/backer/badge.svg?label=backer&color=brightgreen "Open Collective Backer")](https://opencollective.com/gorm)
9-
[![Open Collective Sponsor](https://opencollective.com/gorm/tiers/sponsor/badge.svg?label=sponsor&color=brightgreen "Open Collective Sponsor")](https://opencollective.com/gorm)
107
[![MIT license](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://opensource.org/licenses/MIT)
118
[![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-blue?logo=go&logoColor=white)](https://pkg.go.dev/gorm.io/gorm?tab=doc)
129

statement.go

+21-27
Original file line numberDiff line numberDiff line change
@@ -665,47 +665,41 @@ func (stmt *Statement) SelectAndOmitColumns(requireCreate, requireUpdate bool) (
665665
results := map[string]bool{}
666666
notRestricted := false
667667

668-
// select columns
669-
for _, column := range stmt.Selects {
668+
processColumn := func(column string, result bool) {
670669
if stmt.Schema == nil {
671-
results[column] = true
670+
results[column] = result
672671
} else if column == "*" {
673-
notRestricted = true
672+
notRestricted = result
674673
for _, dbName := range stmt.Schema.DBNames {
675-
results[dbName] = true
674+
results[dbName] = result
676675
}
677676
} else if column == clause.Associations {
678677
for _, rel := range stmt.Schema.Relationships.Relations {
679-
results[rel.Name] = true
678+
results[rel.Name] = result
680679
}
681680
} else if field := stmt.Schema.LookUpField(column); field != nil && field.DBName != "" {
682-
results[field.DBName] = true
681+
results[field.DBName] = result
683682
} else if matches := nameMatcher.FindStringSubmatch(column); len(matches) == 3 && (matches[1] == stmt.Table || matches[1] == "") {
684-
results[matches[2]] = true
683+
if matches[2] == "*" {
684+
for _, dbName := range stmt.Schema.DBNames {
685+
results[dbName] = result
686+
}
687+
} else {
688+
results[matches[2]] = result
689+
}
685690
} else {
686-
results[column] = true
691+
results[column] = result
687692
}
688693
}
689694

695+
// select columns
696+
for _, column := range stmt.Selects {
697+
processColumn(column, true)
698+
}
699+
690700
// omit columns
691-
for _, omit := range stmt.Omits {
692-
if stmt.Schema == nil {
693-
results[omit] = false
694-
} else if omit == "*" {
695-
for _, dbName := range stmt.Schema.DBNames {
696-
results[dbName] = false
697-
}
698-
} else if omit == clause.Associations {
699-
for _, rel := range stmt.Schema.Relationships.Relations {
700-
results[rel.Name] = false
701-
}
702-
} else if field := stmt.Schema.LookUpField(omit); field != nil && field.DBName != "" {
703-
results[field.DBName] = false
704-
} else if matches := nameMatcher.FindStringSubmatch(omit); len(matches) == 2 {
705-
results[matches[1]] = false
706-
} else {
707-
results[omit] = false
708-
}
701+
for _, column := range stmt.Omits {
702+
processColumn(column, false)
709703
}
710704

711705
if stmt.Schema != nil {

tests/go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ require (
88
github.com/lib/pq v1.10.7
99
github.com/mattn/go-sqlite3 v1.14.16 // indirect
1010
github.com/microsoft/go-mssqldb v0.19.0 // indirect
11+
golang.org/x/crypto v0.5.0 // indirect
1112
gorm.io/driver/mysql v1.4.5
1213
gorm.io/driver/postgres v1.4.6
1314
gorm.io/driver/sqlite v1.4.4

0 commit comments

Comments
 (0)