Skip to content

Commit b01ea19

Browse files
committed
fixes pagination
1 parent 3bc8a3e commit b01ea19

File tree

4 files changed

+19
-24
lines changed

4 files changed

+19
-24
lines changed

cassandra-driver/src/main/java/org/eclipse/jnosql/diana/cassandra/column/QueryExecutor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
interface QueryExecutor {
2424

2525
static QueryExecutor of(ColumnQuery query) {
26+
if (CassandraQuery.class.isInstance(query)) {
27+
return QueryExecutorType.PAGING_STATE;
28+
}
2629
return QueryExecutorType.DEFAULT;
2730
}
2831

cassandra-driver/src/main/java/org/eclipse/jnosql/diana/cassandra/column/QueryExecutorType.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.datastax.oss.driver.api.core.cql.ResultSet;
1919
import com.datastax.oss.driver.api.core.cql.Row;
2020
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
21+
import com.datastax.oss.driver.api.core.paging.OffsetPager;
2122
import com.datastax.oss.driver.api.querybuilder.select.Select;
2223
import jakarta.nosql.column.ColumnEntity;
2324
import jakarta.nosql.column.ColumnQuery;
@@ -81,11 +82,22 @@ public Stream<ColumnEntity> execute(String keyspace, ColumnQuery query, DefaultC
8182
@Override
8283
public Stream<ColumnEntity> execute(String keyspace, ColumnQuery query, ConsistencyLevel level,
8384
DefaultCassandraColumnFamilyManager manager) {
84-
SimpleStatement select = QueryUtils.select(query, keyspace).build();
85+
86+
final Select cassandraSelect = QueryUtils.select(query, keyspace);
87+
88+
89+
if (query.getLimit() > 0 && query.getSkip() == 0) {
90+
cassandraSelect.limit((int) query.getLimit());
91+
}
92+
93+
SimpleStatement select = cassandraSelect.build();
8594
if (Objects.nonNull(level)) {
8695
select = select.setConsistencyLevel(level);
8796
}
8897
ResultSet resultSet = manager.getSession().execute(select);
98+
if (query.getLimit() > 0 && query.getSkip() > 0) {
99+
return resultSet.all().stream().skip(query.getSkip()).limit(query.getLimit()).map(CassandraConverter::toDocumentEntity);
100+
}
89101
return resultSet.all().stream().map(CassandraConverter::toDocumentEntity);
90102
}
91103
}

cassandra-driver/src/main/java/org/eclipse/jnosql/diana/cassandra/column/QueryUtils.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,6 @@ public static Select select(ColumnQuery query, String keyspace) {
8585
select = QueryBuilder.selectFrom(keyspace, columnFamily).columns(columns);
8686
}
8787

88-
if (query.getLimit() > 0) {
89-
if (CassandraQuery.class.isInstance(query)) {
90-
//
91-
} else {
92-
select = select.limit((int) query.getLimit());
93-
}
94-
}
9588
select = select.where(Relations.createClause(query.getCondition().orElse(null)));
9689
final Map<String, ClusteringOrder> sort = query.getSorts().stream().collect(Collectors.toMap(s -> s.getName(), mapSort()));
9790
select = select.orderBy(sort);

cassandra-driver/src/test/java/org/eclipse/jnosql/diana/cassandra/column/CassandraColumnFamilyManagerTest.java

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -478,33 +478,20 @@ public void shouldCount() {
478478

479479
@Test
480480
public void shouldPagingState() {
481-
for (long index = 1; index < 10; index++) {
481+
for (long index = 1; index <= 10; index++) {
482482
ColumnEntity columnFamily = getColumnFamily();
483483
columnFamily.add("id", index);
484484
entityManager.insert(columnFamily);
485485
}
486486

487-
ColumnQuery query = select().from(Constants.COLUMN_FAMILY).limit(6).build();
487+
ColumnQuery query = select().from(Constants.COLUMN_FAMILY).build();
488488
CassandraQuery cassandraQuery = CassandraQuery.of(query);
489489

490490
assertFalse(cassandraQuery.getPagingState().isPresent());
491491

492492
List<ColumnEntity> entities = entityManager.select(cassandraQuery).collect(toList());
493-
assertEquals(6, entities.size());
494-
assertTrue(cassandraQuery.getPagingState().isPresent());
495-
496-
entities = entityManager.select(cassandraQuery).collect(toList());
497-
assertEquals(3, entities.size());
498-
assertTrue(cassandraQuery.getPagingState().isPresent());
499-
500-
entities = entityManager.select(cassandraQuery).collect(toList());
501-
assertTrue(entities.isEmpty());
493+
assertEquals(10, entities.size());
502494
assertTrue(cassandraQuery.getPagingState().isPresent());
503-
504-
entities = entityManager.select(cassandraQuery).collect(toList());
505-
assertTrue(entities.isEmpty());
506-
assertTrue(cassandraQuery.getPagingState().isPresent());
507-
508495
}
509496

510497
private ColumnEntity createEntityWithIterable() {

0 commit comments

Comments
 (0)