diff --git a/core/src/main/java/google/registry/bsa/persistence/Queries.java b/core/src/main/java/google/registry/bsa/persistence/Queries.java index 0e53dfba7..d3e49fc10 100644 --- a/core/src/main/java/google/registry/bsa/persistence/Queries.java +++ b/core/src/main/java/google/registry/bsa/persistence/Queries.java @@ -109,7 +109,7 @@ public final class Queries { tm().getEntityManager() .createQuery( "FROM BsaUnblockableDomain d WHERE d.label > :label OR (d.label = :label" - + " AND d.tld > :tld) ORDER BY d.tld, d.label ") + + " AND d.tld > :tld) ORDER BY d.label, d.tld ") .setParameter("label", lastRead.map(d -> d.label).orElse("")) .setParameter("tld", lastRead.map(d -> d.tld).orElse("")) .setMaxResults(batchSize) diff --git a/core/src/test/java/google/registry/bsa/persistence/QueriesTest.java b/core/src/test/java/google/registry/bsa/persistence/QueriesTest.java index 979519bcd..0c20a03cb 100644 --- a/core/src/test/java/google/registry/bsa/persistence/QueriesTest.java +++ b/core/src/test/java/google/registry/bsa/persistence/QueriesTest.java @@ -15,9 +15,12 @@ package google.registry.bsa.persistence; import static com.google.common.collect.ImmutableList.toImmutableList; +import static com.google.common.collect.Iterables.getLast; +import static com.google.common.collect.Iterables.getOnlyElement; import static com.google.common.truth.Truth.assertThat; import static google.registry.bsa.BsaTransactions.bsaQuery; import static google.registry.bsa.persistence.Queries.batchReadBsaLabelText; +import static google.registry.bsa.persistence.Queries.batchReadUnblockableDomains; import static google.registry.bsa.persistence.Queries.deleteBsaLabelByLabels; import static google.registry.bsa.persistence.Queries.queryBsaLabelByLabels; import static google.registry.bsa.persistence.Queries.queryBsaUnblockableDomainByLabels; @@ -295,4 +298,15 @@ class QueriesTest { assertThat(bsaQuery(() -> queryMissedRegisteredUnblockables("tld2", fakeClock.nowUtc()))) .containsExactly(new DomainLifeSpan("label3.tld2", time2, time2.plusHours(1))); } + + @Test + void batchReadUnblockables_multiBatch() { + ImmutableList firstBatch = batchReadUnblockableDomains(Optional.empty(), 3); + UnblockableDomain lastInFirstBatch = getLast(firstBatch); + assertThat(lastInFirstBatch.domainName()).isEqualTo("label2.page"); + assertThat( + getOnlyElement(batchReadUnblockableDomains(Optional.of(lastInFirstBatch), 3)) + .domainName()) + .isEqualTo("label3.app"); + } }