Skip to content

Commit bd65232

Browse files
committed
1 parent f5809b8 commit bd65232

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

main_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"os"
1414
"path/filepath"
1515
"reflect"
16+
"sort"
1617
"strconv"
1718
"strings"
1819
"sync"
@@ -843,6 +844,11 @@ func TestJoinsWithSelect(t *testing.T) {
843844

844845
var results []result
845846
DB.Table("users").Select("name, emails.email").Joins("left join emails on emails.user_id = users.id").Where("name = ?", "joins_with_select").Scan(&results)
847+
848+
sort.Slice(results, func(i, j int) bool {
849+
return strings.Compare(results[i].Email, results[j].Email) < 0
850+
})
851+
846852
if len(results) != 2 || results[0].Email != "[email protected]" || results[1].Email != "[email protected]" {
847853
t.Errorf("Should find all two emails with Join select")
848854
}

scope.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -913,21 +913,25 @@ func (scope *Scope) updatedAttrsWithValues(value interface{}) (results map[strin
913913
results = map[string]interface{}{}
914914

915915
for key, value := range convertInterfaceToMap(value, true, scope.db) {
916-
if field, ok := scope.FieldByName(key); ok && scope.changeableField(field) {
917-
if _, ok := value.(*SqlExpr); ok {
918-
hasUpdate = true
919-
results[field.DBName] = value
920-
} else {
921-
err := field.Set(value)
922-
if field.IsNormal && !field.IsIgnored {
916+
if field, ok := scope.FieldByName(key); ok {
917+
if scope.changeableField(field) {
918+
if _, ok := value.(*SqlExpr); ok {
923919
hasUpdate = true
924-
if err == ErrUnaddressable {
925-
results[field.DBName] = value
926-
} else {
927-
results[field.DBName] = field.Field.Interface()
920+
results[field.DBName] = value
921+
} else {
922+
err := field.Set(value)
923+
if field.IsNormal && !field.IsIgnored {
924+
hasUpdate = true
925+
if err == ErrUnaddressable {
926+
results[field.DBName] = value
927+
} else {
928+
results[field.DBName] = field.Field.Interface()
929+
}
928930
}
929931
}
930932
}
933+
} else {
934+
results[key] = value
931935
}
932936
}
933937
return

0 commit comments

Comments
 (0)