@@ -665,47 +665,41 @@ func (stmt *Statement) SelectAndOmitColumns(requireCreate, requireUpdate bool) (
665
665
results := map [string ]bool {}
666
666
notRestricted := false
667
667
668
- // select columns
669
- for _ , column := range stmt .Selects {
668
+ processColumn := func (column string , result bool ) {
670
669
if stmt .Schema == nil {
671
- results [column ] = true
670
+ results [column ] = result
672
671
} else if column == "*" {
673
- notRestricted = true
672
+ notRestricted = result
674
673
for _ , dbName := range stmt .Schema .DBNames {
675
- results [dbName ] = true
674
+ results [dbName ] = result
676
675
}
677
676
} else if column == clause .Associations {
678
677
for _ , rel := range stmt .Schema .Relationships .Relations {
679
- results [rel .Name ] = true
678
+ results [rel .Name ] = result
680
679
}
681
680
} else if field := stmt .Schema .LookUpField (column ); field != nil && field .DBName != "" {
682
- results [field .DBName ] = true
681
+ results [field .DBName ] = result
683
682
} 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
+ }
685
690
} else {
686
- results [column ] = true
691
+ results [column ] = result
687
692
}
688
693
}
689
694
695
+ // select columns
696
+ for _ , column := range stmt .Selects {
697
+ processColumn (column , true )
698
+ }
699
+
690
700
// 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 )
709
703
}
710
704
711
705
if stmt .Schema != nil {
0 commit comments