aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster/pkg
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-04-07 17:01:33 +0200
committerAleksandr Nogikh <nogikh@google.com>2025-04-08 10:15:40 +0000
commitb133e63a2fee6e55cec2811da78dd5b6aab6440f (patch)
tree73b3ad6c3c8f7031bbfa5b8b3a82cf65fdf6ff30 /syz-cluster/pkg
parentb899e60d5c5004525d9a554d1d5074d062c3fb95 (diff)
syz-cluster: add pagination
Add simple Previous/Next navigation for the list of series. For now, just rely on SQL's LIMIT/OFFSET functionality.
Diffstat (limited to 'syz-cluster/pkg')
-rw-r--r--syz-cluster/pkg/db/series_repo.go14
-rw-r--r--syz-cluster/pkg/db/series_repo_test.go25
-rw-r--r--syz-cluster/pkg/db/session_repo_test.go2
3 files changed, 29 insertions, 12 deletions
diff --git a/syz-cluster/pkg/db/series_repo.go b/syz-cluster/pkg/db/series_repo.go
index b21b82889..554a32b00 100644
--- a/syz-cluster/pkg/db/series_repo.go
+++ b/syz-cluster/pkg/db/series_repo.go
@@ -134,11 +134,13 @@ type SeriesWithSession struct {
type SeriesFilter struct {
Cc string
Status SessionStatus
+ Limit int
+ Offset int
}
// ListLatest() returns the list of series ordered by the decreasing PublishedAt value.
func (repo *SeriesRepository) ListLatest(ctx context.Context, filter SeriesFilter,
- maxPublishedAt time.Time, limit int) ([]*SeriesWithSession, error) {
+ maxPublishedAt time.Time) ([]*SeriesWithSession, error) {
ro := repo.client.ReadOnlyTransaction()
defer ro.Close()
@@ -171,10 +173,14 @@ func (repo *SeriesRepository) ListLatest(ctx context.Context, filter SeriesFilte
}
stmt.SQL += ")"
}
- stmt.SQL += " ORDER BY PublishedAt DESC"
- if limit > 0 {
+ stmt.SQL += " ORDER BY PublishedAt DESC, ID"
+ if filter.Limit > 0 {
stmt.SQL += " LIMIT @limit"
- stmt.Params["limit"] = limit
+ stmt.Params["limit"] = filter.Limit
+ }
+ if filter.Offset > 0 {
+ stmt.SQL += " OFFSET @offset"
+ stmt.Params["offset"] = filter.Offset
}
iter := ro.Query(ctx, stmt)
defer iter.Stop()
diff --git a/syz-cluster/pkg/db/series_repo_test.go b/syz-cluster/pkg/db/series_repo_test.go
index 222014113..694893514 100644
--- a/syz-cluster/pkg/db/series_repo_test.go
+++ b/syz-cluster/pkg/db/series_repo_test.go
@@ -84,22 +84,34 @@ func TestSeriesRepositoryList(t *testing.T) {
})
t.Run("all", func(t *testing.T) {
- list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Time{}, 0)
+ list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Time{})
assert.NoError(t, err)
assert.Len(t, list, 3)
})
t.Run("with_limit", func(t *testing.T) {
- list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Time{}, 2)
+ list, err := repo.ListLatest(ctx, SeriesFilter{
+ Limit: 2,
+ }, time.Time{})
assert.NoError(t, err)
assert.Len(t, list, 2)
assert.Equal(t, "Series 3", list[0].Series.Title)
assert.Equal(t, "Series 2", list[1].Series.Title)
})
+ t.Run("with_offset", func(t *testing.T) {
+ list, err := repo.ListLatest(ctx, SeriesFilter{
+ Limit: 1,
+ Offset: 1,
+ }, time.Time{})
+ assert.NoError(t, err)
+ assert.Len(t, list, 1)
+ assert.Equal(t, "Series 2", list[0].Series.Title)
+ })
+
t.Run("with_from", func(t *testing.T) {
// Skips the latest series.
- list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Date(2020, time.January, 1, 3, 0, 0, 0, time.UTC), 0)
+ list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Date(2020, time.January, 1, 3, 0, 0, 0, time.UTC))
assert.NoError(t, err)
assert.Len(t, list, 2)
assert.Equal(t, "Series 2", list[0].Series.Title)
@@ -107,8 +119,7 @@ func TestSeriesRepositoryList(t *testing.T) {
})
t.Run("filter_by_cc", func(t *testing.T) {
- list, err := repo.ListLatest(ctx,
- SeriesFilter{Cc: "a"}, time.Time{}, 0)
+ list, err := repo.ListLatest(ctx, SeriesFilter{Cc: "a"}, time.Time{})
assert.NoError(t, err)
assert.Len(t, list, 2)
})
@@ -125,7 +136,7 @@ func TestSeriesRepositoryList(t *testing.T) {
assert.NoError(t, err)
t.Run("filter_status_waiting", func(t *testing.T) {
- list, err := repo.ListLatest(ctx, SeriesFilter{Status: SessionStatusWaiting}, time.Time{}, 0)
+ list, err := repo.ListLatest(ctx, SeriesFilter{Status: SessionStatusWaiting}, time.Time{})
assert.NoError(t, err)
assert.Len(t, list, 1)
})
@@ -134,7 +145,7 @@ func TestSeriesRepositoryList(t *testing.T) {
assert.NoError(t, err)
t.Run("filter_status_in_progress", func(t *testing.T) {
- list, err := repo.ListLatest(ctx, SeriesFilter{Status: SessionStatusInProgress}, time.Time{}, 0)
+ list, err := repo.ListLatest(ctx, SeriesFilter{Status: SessionStatusInProgress}, time.Time{})
assert.NoError(t, err)
assert.Len(t, list, 1)
})
diff --git a/syz-cluster/pkg/db/session_repo_test.go b/syz-cluster/pkg/db/session_repo_test.go
index c6f79f975..eb688510a 100644
--- a/syz-cluster/pkg/db/session_repo_test.go
+++ b/syz-cluster/pkg/db/session_repo_test.go
@@ -20,7 +20,7 @@ func TestSeriesInsertSession(t *testing.T) {
assert.NoError(t, err)
withSession := func(need int) {
- list, err := seriesRepo.ListLatest(ctx, SeriesFilter{}, time.Time{}, 10)
+ list, err := seriesRepo.ListLatest(ctx, SeriesFilter{Limit: 10}, time.Time{})
assert.NoError(t, err)
var cnt int
for _, item := range list {