Skip to content

Commit 2e9f061

Browse files
authored
Merge pull request #207 from erizocosmico/fix/remove-extra-query-batcher-batch-size
avoid extra query if results are less than BatchSize
2 parents 8f0f7a6 + 1512a7a commit 2e9f061

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

batcher.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func (r *batchQueryRunner) next() (Record, error) {
7676
}
7777

7878
batchSize := r.q.GetBatchSize()
79-
if batchSize > 0 && batchSize < limit {
79+
if batchSize > 0 && (batchSize < limit || limit == 0) {
8080
if uint64(len(records)) < batchSize {
8181
r.eof = true
8282
}

batcher_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,42 @@ func TestBatcherNoExtraQueryIfLessThanLimit(t *testing.T) {
105105
r.Equal(4, count)
106106
r.Equal(2, queries)
107107
}
108+
109+
func TestBatcherNoExtraQueryIfLessThanBatchSize(t *testing.T) {
110+
r := require.New(t)
111+
db, err := openTestDB()
112+
r.NoError(err)
113+
setupTables(t, db)
114+
defer db.Close()
115+
defer teardownTables(t, db)
116+
117+
store := NewStore(db)
118+
for i := 0; i < 4; i++ {
119+
m := newModel("foo", "bar", 1)
120+
r.NoError(store.Insert(ModelSchema, m))
121+
122+
for i := 0; i < 4; i++ {
123+
r.NoError(store.Insert(RelSchema, newRel(m.GetID(), fmt.Sprint(i))))
124+
}
125+
}
126+
127+
q := NewBaseQuery(ModelSchema)
128+
q.BatchSize(3)
129+
r.NoError(q.AddRelation(RelSchema, "rels", OneToMany, Eq(f("foo"), "1")))
130+
var queries int
131+
proxy := store.DebugWith(func(_ string, _ ...interface{}) {
132+
queries++
133+
}).proxy
134+
runner := newBatchQueryRunner(ModelSchema, proxy, q)
135+
rs := NewBatchingResultSet(runner)
136+
137+
var count int
138+
for rs.Next() {
139+
_, err := rs.Get(nil)
140+
r.NoError(err)
141+
count++
142+
}
143+
r.NoError(err)
144+
r.Equal(4, count)
145+
r.Equal(4, queries)
146+
}

0 commit comments

Comments
 (0)