From d8c25cd1fcb3bbc909409182a20e93e709a451b2 Mon Sep 17 00:00:00 2001 From: Arnaud THOREL <146101071+arnaud-thorel-of@users.noreply.github.com> Date: Wed, 21 Aug 2024 15:34:28 +0200 Subject: [PATCH] fix: postgrest range is not correctly returned (#41) * fix: postgrest range is not correctly returned --- .../querydsl/postgrest/model/HeaderRange.java | 9 +++++++-- .../querydsl/postgrest/model/RangeTest.java | 12 ++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/querydsl-postgrest/src/main/java/fr/ouestfrance/querydsl/postgrest/model/HeaderRange.java b/querydsl-postgrest/src/main/java/fr/ouestfrance/querydsl/postgrest/model/HeaderRange.java index b32a0fa..42c4bc0 100644 --- a/querydsl-postgrest/src/main/java/fr/ouestfrance/querydsl/postgrest/model/HeaderRange.java +++ b/querydsl-postgrest/src/main/java/fr/ouestfrance/querydsl/postgrest/model/HeaderRange.java @@ -19,7 +19,7 @@ public class HeaderRange { * Range regexp */ @SuppressWarnings("java:S5852") - private static final Pattern REGEXP = Pattern.compile("(?\\d+)-(?\\d+)/(?\\d+)"); + private static final Pattern REGEXP = Pattern.compile("(?\\d+)-(?\\d+)/(?[*\\d]+)"); /** * Start of the range */ @@ -45,7 +45,12 @@ public static HeaderRange of(String rangeString) { if (matcher.find()) { range.offset = Integer.parseInt(matcher.group("offset")); range.limit = Integer.parseInt(matcher.group("limit")); - range.totalElements = Long.parseLong(matcher.group("total")); + String total = matcher.group("total"); + if (total.startsWith("*")) { + range.totalElements = range.limit - range.offset + 1; + } else { + range.totalElements = Long.parseLong(total); + } } return range; } diff --git a/querydsl-postgrest/src/test/java/fr/ouestfrance/querydsl/postgrest/model/RangeTest.java b/querydsl-postgrest/src/test/java/fr/ouestfrance/querydsl/postgrest/model/RangeTest.java index 0fc1303..3198a3e 100644 --- a/querydsl-postgrest/src/test/java/fr/ouestfrance/querydsl/postgrest/model/RangeTest.java +++ b/querydsl-postgrest/src/test/java/fr/ouestfrance/querydsl/postgrest/model/RangeTest.java @@ -20,4 +20,16 @@ void shouldCreateRange() { assertEquals(25, count); } + @Test + void shouldCreateRangeFromUnlimited() { + HeaderRange range = HeaderRange.of("0-24/*"); + assertNotNull(range); + assertEquals(0, range.getOffset()); + assertEquals(24, range.getLimit()); + assertEquals(25, range.getTotalElements()); + + long count = range.getCount(); + assertEquals(25, count); + } + }