From 6513ded7a2f7592610673936cda804e752306691 Mon Sep 17 00:00:00 2001 From: Leon van Zantvoort Date: Tue, 8 Sep 2026 11:39:59 +0200 Subject: [PATCH] Follow Storm 1.14.1: the request states the ordering and size, the cursor the position Scrollable.fromCursor(key, cursor) is gone. The scroll request names its key and size in code, and from(cursor) puts it at the position a client sent back, so the page size no longer travels inside the cursor. --- src/main/java/st/orm/demo/imdb/service/BrowseService.java | 2 +- src/main/java/st/orm/demo/imdb/service/SearchService.java | 4 ++-- .../orm/demo/imdb/repository/MovieSummaryRepositoryTest.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/st/orm/demo/imdb/service/BrowseService.java b/src/main/java/st/orm/demo/imdb/service/BrowseService.java index 09e762a..a3d7204 100644 --- a/src/main/java/st/orm/demo/imdb/service/BrowseService.java +++ b/src/main/java/st/orm/demo/imdb/service/BrowseService.java @@ -62,7 +62,7 @@ public Window scrollGenre(String genreName, String cursor) { return null; } Scrollable scrollable = cursor != null - ? Scrollable.fromCursor(MovieSummary_.id, cursor) + ? Scrollable.of(MovieSummary_.id, PAGE_SIZE).from(cursor) : Scrollable.of(MovieSummary_.id, PAGE_SIZE); return movieSummaryRepository.scrollByGenre(genre, scrollable); }); diff --git a/src/main/java/st/orm/demo/imdb/service/SearchService.java b/src/main/java/st/orm/demo/imdb/service/SearchService.java index 86a4990..c6b5b8a 100644 --- a/src/main/java/st/orm/demo/imdb/service/SearchService.java +++ b/src/main/java/st/orm/demo/imdb/service/SearchService.java @@ -52,7 +52,7 @@ public SearchResults search(String query) { */ public Window scrollMovies(String query, String cursor) { Scrollable scrollable = cursor != null - ? Scrollable.fromCursor(MovieSummary_.id, cursor) + ? Scrollable.of(MovieSummary_.id, MOVIE_PAGE_SIZE).from(cursor) : Scrollable.of(MovieSummary_.id, MOVIE_PAGE_SIZE); return movieSummaryRepository.searchByTitle(query, scrollable); } @@ -60,7 +60,7 @@ public Window scrollMovies(String query, String cursor) { /** The next window of person results — same cursor contract as {@link #scrollMovies}. */ public Window scrollPersons(String query, String cursor) { Scrollable scrollable = cursor != null - ? Scrollable.fromCursor(PersonSummary_.id, cursor) + ? Scrollable.of(PersonSummary_.id, PERSON_PAGE_SIZE).from(cursor) : Scrollable.of(PersonSummary_.id, PERSON_PAGE_SIZE); return personSummaryRepository.searchByName(query, scrollable); } diff --git a/src/test/java/st/orm/demo/imdb/repository/MovieSummaryRepositoryTest.java b/src/test/java/st/orm/demo/imdb/repository/MovieSummaryRepositoryTest.java index b504f3e..29a3b6c 100644 --- a/src/test/java/st/orm/demo/imdb/repository/MovieSummaryRepositoryTest.java +++ b/src/test/java/st/orm/demo/imdb/repository/MovieSummaryRepositoryTest.java @@ -48,7 +48,7 @@ void searchByTitleScrollsThroughWindowsWithACursor(ORMTemplate orm, SqlCapture c assertNotNull(cursor); Window secondWindow = capture.execute(() -> - movieSummaryRepository.searchByTitle("matrix", Scrollable.fromCursor(MovieSummary_.id, cursor))); + movieSummaryRepository.searchByTitle("matrix", Scrollable.of(MovieSummary_.id, 1).from(cursor))); TestSupport.printStatements(capture, "searchByTitle-cursor"); assertEquals(1, secondWindow.content().size()); assertFalse(firstWindow.content().get(0).id().equals(secondWindow.content().get(0).id())); @@ -100,7 +100,7 @@ void scrollByGenreJoinsTheJunctionTableAndScrollsOnTheMovieKey(ORMTemplate orm, assertTrue(firstWindow.hasNext()); Window secondWindow = movieSummaryRepository.scrollByGenre( - drama, Scrollable.fromCursor(MovieSummary_.id, firstWindow.nextCursor())); + drama, Scrollable.of(MovieSummary_.id, 2).from(firstWindow.nextCursor())); // Three drama movies in total: 2 in the first window, 1 in the second. assertEquals(1, secondWindow.content().size()); }