Skip to content

Commit 1d78553

Browse files
author
Miguel Molina
authored
Merge pull request #109 from erizocosmico/bugfix/batcher-limit
fix: set limit correctly in batcher queries
2 parents bd459dd + 137d945 commit 1d78553

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

batcher.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,17 @@ func (r *batchQueryRunner) next() (Record, error) {
5757
}
5858

5959
if len(r.records) == 0 {
60-
records, err := r.loadNextBatch()
61-
if err != nil {
62-
return nil, err
60+
var (
61+
records []Record
62+
err error
63+
)
64+
65+
limit := r.q.GetLimit()
66+
if limit <= 0 || limit > uint64(r.total) {
67+
records, err = r.loadNextBatch()
68+
if err != nil {
69+
return nil, err
70+
}
6371
}
6472

6573
if len(records) == 0 {

batcher_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,38 @@ func TestOneToManyWithFilterNotWritable(t *testing.T) {
3131
r.NoError(err)
3232
r.False(record.IsWritable())
3333
}
34+
35+
func TestBatcherLimit(t *testing.T) {
36+
r := require.New(t)
37+
db, err := openTestDB()
38+
r.NoError(err)
39+
setupTables(t, db)
40+
defer db.Close()
41+
defer teardownTables(t, db)
42+
43+
store := NewStore(db)
44+
for i := 0; i < 10; i++ {
45+
m := newModel("foo", "bar", 1)
46+
r.NoError(store.Insert(ModelSchema, m))
47+
48+
for i := 0; i < 4; i++ {
49+
r.NoError(store.Insert(RelSchema, newRel(m.GetID(), fmt.Sprint(i))))
50+
}
51+
}
52+
53+
q := NewBaseQuery(ModelSchema)
54+
q.BatchSize(2)
55+
q.Limit(5)
56+
r.NoError(q.AddRelation(RelSchema, "rels", OneToMany, Eq(f("foo"), "1")))
57+
runner := newBatchQueryRunner(ModelSchema, squirrel.NewStmtCacher(db), q)
58+
rs := NewBatchingResultSet(runner)
59+
60+
var count int
61+
for rs.Next() {
62+
_, err := rs.Get(nil)
63+
r.NoError(err)
64+
count++
65+
}
66+
r.NoError(err)
67+
r.Equal(5, count)
68+
}

0 commit comments

Comments
 (0)