From 7f8c99be573c76f8ad905e94f514803f6a199972 Mon Sep 17 00:00:00 2001 From: David Stringer Date: Tue, 25 Feb 2025 21:27:46 -0800 Subject: [PATCH] CASSJAVA-3 Fix Ordering for LIMIT and PER PARTITION LIMIT on Select Queries The order of the literals LIMIT and PER PARTITION LIMIT were placed in the wrong order for select queries. Patch fixes the order. --- .../querybuilder/select/DefaultSelect.java | 18 +++++++++--------- .../querybuilder/select/SelectLimitTest.java | 6 ++++++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/query-builder/src/main/java/com/datastax/oss/driver/internal/querybuilder/select/DefaultSelect.java b/query-builder/src/main/java/com/datastax/oss/driver/internal/querybuilder/select/DefaultSelect.java index 5daf252a9eb..59f1bd85ef6 100644 --- a/query-builder/src/main/java/com/datastax/oss/driver/internal/querybuilder/select/DefaultSelect.java +++ b/query-builder/src/main/java/com/datastax/oss/driver/internal/querybuilder/select/DefaultSelect.java @@ -457,15 +457,6 @@ public String asCql() { } } - if (limit != null) { - builder.append(" LIMIT "); - if (limit instanceof BindMarker) { - ((BindMarker) limit).appendTo(builder); - } else { - builder.append(limit); - } - } - if (perPartitionLimit != null) { builder.append(" PER PARTITION LIMIT "); if (perPartitionLimit instanceof BindMarker) { @@ -475,6 +466,15 @@ public String asCql() { } } + if (limit != null) { + builder.append(" LIMIT "); + if (limit instanceof BindMarker) { + ((BindMarker) limit).appendTo(builder); + } else { + builder.append(limit); + } + } + if (allowsFiltering) { builder.append(" ALLOW FILTERING"); } diff --git a/query-builder/src/test/java/com/datastax/oss/driver/api/querybuilder/select/SelectLimitTest.java b/query-builder/src/test/java/com/datastax/oss/driver/api/querybuilder/select/SelectLimitTest.java index d617aa5673f..baef745b481 100644 --- a/query-builder/src/test/java/com/datastax/oss/driver/api/querybuilder/select/SelectLimitTest.java +++ b/query-builder/src/test/java/com/datastax/oss/driver/api/querybuilder/select/SelectLimitTest.java @@ -49,4 +49,10 @@ public void should_use_last_per_partition_limit_if_called_multiple_times() { assertThat(selectFrom("foo").all().perPartitionLimit(1).perPartitionLimit(2)) .hasCql("SELECT * FROM foo PER PARTITION LIMIT 2"); } + + @Test + public void should_put_limit_after_partition_limit() { + assertThat(selectFrom("foo").all().perPartitionLimit(1).limit(1)) + .hasCql("SELECT * FROM foo PER PARTITION LIMIT 1 LIMIT 1"); + } }