Skip to content

Commit 19fa28b

Browse files
authored
fix preloading has many with no result (#69)
1 parent a9d8951 commit 19fa28b

File tree

3 files changed

+41
-5
lines changed

3 files changed

+41
-5
lines changed

go.mod

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
module github.com/Fs02/grimoire
22

3+
go 1.14
4+
35
require (
46
github.com/Fs02/go-paranoid v0.0.0-20180516074805-ab50069def7d
57
github.com/azer/snakecase v0.0.0-20161028114325-c818dddafb5c
6-
github.com/davecgh/go-spew v1.1.0
8+
github.com/davecgh/go-spew v1.1.0 // indirect
79
github.com/go-sql-driver/mysql v1.3.0
810
github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2
911
github.com/mattn/go-sqlite3 v1.6.0
10-
github.com/pmezard/go-difflib v1.0.0
11-
github.com/stretchr/objx v0.1.0
12+
github.com/pmezard/go-difflib v1.0.0 // indirect
13+
github.com/stretchr/objx v0.1.0 // indirect
1214
github.com/stretchr/testify v1.2.1
1315
github.com/tidwall/gjson v1.1.3
14-
github.com/tidwall/match v1.0.0
16+
github.com/tidwall/match v1.0.0 // indirect
1517
)

query.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ func collectPreloadTarget(preload []preloadTarget, refIndex []int) (map[interfac
560560

561561
// reset to zero if slice.
562562
if fv.Kind() == reflect.Slice || fv.Kind() == reflect.Array {
563-
fv.Set(reflect.Zero(fv.Type()))
563+
fv.Set(reflect.MakeSlice(fv.Type(), 0, 0))
564564
}
565565

566566
addrs[id] = append(addrs[id], fv)

query_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1208,6 +1208,23 @@ func TestQuery_Preload_hasMany(t *testing.T) {
12081208
mock.AssertExpectations(t)
12091209
}
12101210

1211+
func TestQuery_Preload_hasManyNoResult(t *testing.T) {
1212+
mock := new(TestAdapter)
1213+
repo := Repo{adapter: mock}
1214+
1215+
user := User{ID: 10}
1216+
result := []Transaction{}
1217+
1218+
query := repo.From("transactions")
1219+
1220+
mock.Result(result).On("All", query.Where(In("user_id", 10)), &[]Transaction{}).Return(2, nil)
1221+
1222+
assert.Nil(t, query.Preload(&user, "Transactions"))
1223+
assert.Equal(t, result, user.Transactions)
1224+
assert.NotPanics(t, func() { query.MustPreload(&user, "Transactions") })
1225+
mock.AssertExpectations(t)
1226+
}
1227+
12111228
func TestQuery_Preload_sliceHasMany(t *testing.T) {
12121229
mock := new(TestAdapter)
12131230
repo := Repo{adapter: mock}
@@ -1251,6 +1268,23 @@ func TestQuery_Preload_nestedHasMany(t *testing.T) {
12511268
mock.AssertExpectations(t)
12521269
}
12531270

1271+
func TestQuery_Preload_nestedHasManyNoResult(t *testing.T) {
1272+
mock := new(TestAdapter)
1273+
repo := Repo{adapter: mock}
1274+
1275+
address := Address{User: &User{ID: 10}}
1276+
result := []Transaction{}
1277+
1278+
query := repo.From("transactions")
1279+
1280+
mock.Result(result).On("All", query.Where(In("user_id", 10)), &[]Transaction{}).Return(2, nil)
1281+
1282+
assert.Nil(t, query.Preload(&address, "User.Transactions"))
1283+
assert.Equal(t, result, address.User.Transactions)
1284+
assert.NotPanics(t, func() { query.MustPreload(&address, "User.Transactions") })
1285+
mock.AssertExpectations(t)
1286+
}
1287+
12541288
func TestQuery_Preload_nestedNullHasMany(t *testing.T) {
12551289
mock := new(TestAdapter)
12561290
repo := Repo{adapter: mock}

0 commit comments

Comments
 (0)