@Override public Mono<WriteResult> execute() { return Mono.defer(() -> { if (executed.compareAndSet(false, true)) { return Flux.merge(batchMonos) // .flatMapIterable(Function.identity()) // .collectList() // .flatMap(statements -> { statements.forEach(batch::add); return operations.getReactiveCqlOperations().queryForResultSet(batch); }).flatMap(resultSet -> resultSet.rows().collectList() .map(rows -> new WriteResult(resultSet.getAllExecutionInfo(), resultSet.wasApplied(), rows))); } return Mono.error(new IllegalStateException("This Cassandra Batch was already executed")); }); }
private Mono<WriteResult> handleStatement(Message<?> requestMessage) { Object payload = requestMessage.getPayload(); Mono<ReactiveResultSet> resultSetMono; if (payload instanceof Statement) { resultSetMono = this.cassandraOperations.getReactiveCqlOperations().queryForResultSet((Statement) payload); } else { resultSetMono = this.cassandraOperations.getReactiveCqlOperations() .execute((ReactiveSessionCallback<ReactiveResultSet>) session -> this.sessionMessageCallback.doInSession(session, requestMessage)) .next(); } return resultSetMono.transform(this::transformToWriteResult); }
private Mono<WriteResult> handleStatement(Message<?> requestMessage) { Object payload = requestMessage.getPayload(); Mono<ReactiveResultSet> resultSetMono; if (payload instanceof Statement) { resultSetMono = this.cassandraOperations.getReactiveCqlOperations().queryForResultSet((Statement) payload); } else { resultSetMono = this.cassandraOperations.getReactiveCqlOperations() .execute((ReactiveSessionCallback<ReactiveResultSet>) session -> this.sessionMessageCallback.doInSession(session, requestMessage)) .next(); } return resultSetMono.transform(this::transformToWriteResult); }
@Override public <T> Mono<Slice<T>> slice(Statement statement, Class<T> entityClass) { Assert.notNull(statement, "Statement must not be null"); Assert.notNull(entityClass, "Entity type must not be null"); Mono<ReactiveResultSet> resultSetMono = getReactiveCqlOperations().queryForResultSet(statement); Mono<Integer> effectiveFetchSizeMono = getEffectiveFetchSize(statement); RowMapper<T> rowMapper = (row, i) -> getConverter().read(entityClass, row); return resultSetMono.zipWith(effectiveFetchSizeMono).flatMap(tuple -> { ReactiveResultSet resultSet = tuple.getT1(); Integer effectiveFetchSize = tuple.getT2(); return resultSet.availableRows().collectList().map(it -> { return QueryUtils.readSlice(it, resultSet.getExecutionInfo().getPagingState(), rowMapper, 1, effectiveFetchSize); }); }).defaultIfEmpty(new SliceImpl<>(Collections.emptyList())); }