Skip to content

Commit 3bc8a3e

Browse files
committed
creates paginate
1 parent fd59173 commit 3bc8a3e

File tree

3 files changed

+61
-2
lines changed

3 files changed

+61
-2
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import jakarta.nosql.column.ColumnCondition;
2121
import jakarta.nosql.column.ColumnQuery;
2222

23+
import java.nio.ByteBuffer;
24+
import java.nio.charset.StandardCharsets;
2325
import java.util.List;
2426
import java.util.Objects;
2527
import java.util.Optional;
@@ -60,6 +62,16 @@ public Optional<String> getPagingState() {
6062
return Optional.ofNullable(pagingState);
6163
}
6264

65+
Optional<ByteBuffer> toPaginate() {
66+
return getPagingState().filter(NOT_EQUALS).map(s -> ByteBuffer.wrap(s.getBytes(StandardCharsets.UTF_8)));
67+
}
68+
69+
void setPagingState(ByteBuffer pagingState) {
70+
if (pagingState != null) {
71+
this.pagingState = StandardCharsets.UTF_8.decode(pagingState).toString();
72+
}
73+
}
74+
6375

6476
void setExhausted(boolean exhausted) {
6577
synchronized (this) {

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

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,62 @@
1616

1717
import com.datastax.oss.driver.api.core.ConsistencyLevel;
1818
import com.datastax.oss.driver.api.core.cql.ResultSet;
19+
import com.datastax.oss.driver.api.core.cql.Row;
1920
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
21+
import com.datastax.oss.driver.api.querybuilder.select.Select;
2022
import jakarta.nosql.column.ColumnEntity;
2123
import jakarta.nosql.column.ColumnQuery;
2224

25+
import java.nio.ByteBuffer;
26+
import java.util.ArrayList;
27+
import java.util.List;
2328
import java.util.Objects;
2429
import java.util.stream.Stream;
2530

2631
enum QueryExecutorType implements QueryExecutor {
32+
PAGING_STATE {
33+
@Override
34+
public Stream<ColumnEntity> execute(String keyspace, ColumnQuery query, DefaultCassandraColumnFamilyManager manager) {
35+
return execute(keyspace, query, null, manager);
36+
}
37+
38+
@Override
39+
public Stream<ColumnEntity> execute(String keyspace, ColumnQuery q, ConsistencyLevel level,
40+
DefaultCassandraColumnFamilyManager manager) {
41+
42+
CassandraQuery query = CassandraQuery.class.cast(q);
43+
44+
if (query.isExhausted()) {
45+
return Stream.empty();
46+
}
47+
Select select = QueryUtils.select(query, keyspace);
48+
SimpleStatement simpleStatement = select.build();
49+
if (Objects.nonNull(level)) {
50+
simpleStatement = simpleStatement.setConsistencyLevel(level);
51+
}
52+
53+
if (query.toPaginate().isPresent()) {
54+
simpleStatement = simpleStatement.setPagingState(query.toPaginate().get());
55+
}
56+
57+
ResultSet resultSet = manager.getSession().execute(simpleStatement);
58+
59+
final ByteBuffer pagingState = resultSet.getExecutionInfo().getPagingState();
60+
query.setPagingState(pagingState);
61+
62+
List<ColumnEntity> entities = new ArrayList<>();
63+
64+
for (Row row : resultSet) {
65+
entities.add(CassandraConverter.toDocumentEntity(row));
66+
if (resultSet.getAvailableWithoutFetching() == 0) {
67+
query.setExhausted(resultSet.isFullyFetched());
68+
break;
69+
}
70+
}
71+
return entities.stream();
72+
}
2773

74+
},
2875
DEFAULT {
2976
@Override
3077
public Stream<ColumnEntity> execute(String keyspace, ColumnQuery query, DefaultCassandraColumnFamilyManager manager) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ public void shouldCount() {
476476
assertTrue(contacts > 0);
477477
}
478478

479-
/* @Test
479+
@Test
480480
public void shouldPagingState() {
481481
for (long index = 1; index < 10; index++) {
482482
ColumnEntity columnFamily = getColumnFamily();
@@ -505,7 +505,7 @@ public void shouldPagingState() {
505505
assertTrue(entities.isEmpty());
506506
assertTrue(cassandraQuery.getPagingState().isPresent());
507507

508-
}*/
508+
}
509509

510510
private ColumnEntity createEntityWithIterable() {
511511
ColumnEntity entity = ColumnEntity.of("contacts");

0 commit comments

Comments
 (0)