/** * Create a {@link EntityWriteResult} from {@link WriteResult} and an entity. * * @param result must not be {@literal null}. * @param entity must not be {@literal null}. * @return the {@link EntityWriteResult} for {@link WriteResult} and an entity. */ static <T> EntityWriteResult<T> of(WriteResult result, T entity) { return new EntityWriteResult<>(result.getExecutionInfo(), result.wasApplied(), result.getRows(), entity); }
/** * Create a {@link WriteResult} from {@link ResultSet}. * * @param resultSet must not be {@literal null}. * @return the {@link WriteResult} for {@link ResultSet}. */ public static WriteResult of(ResultSet resultSet) { Assert.notNull(resultSet, "ResultSet must not be null"); return new WriteResult(resultSet); }
@Override public WriteResult doInSession(Session session) throws DriverException, DataAccessException { return WriteResult.of(session.execute(statement)); }
@Test public void testCassandraBatchInsertAndSelectStatement() { List<Book> books = BookSampler.getBookList(5); this.cassandraMessageHandler2.send(new GenericMessage<>(books)); Message<?> message = MessageBuilder.withPayload("Cassandra Puppy Guru").setHeader("limit", 2).build(); this.inputChannel.send(message); Mono<Integer> testMono = Mono.from(this.resultChannel) .map(Message::getPayload) .cast(WriteResult.class) .map(r -> r.getRows().size()); StepVerifier.create(testMono) .expectNext(2) .expectComplete() .verify(); this.cassandraMessageHandler1.send(new GenericMessage<>(QueryBuilder.truncate("book"))); }
@Override public boolean delete(Query query, Class<?> entityClass) throws DataAccessException { Assert.notNull(query, "Query must not be null"); Assert.notNull(entityClass, "Entity type must not be null"); WriteResult result = doDelete(query, entityClass, getTableName(entityClass)); return result != null && result.wasApplied(); }
@Test public void testCassandraBatchInsertAndSelectStatement() { List<Book> books = BookSampler.getBookList(5); this.cassandraMessageHandler2.handleMessage(new GenericMessage<>(books)); Message<?> message = MessageBuilder.withPayload("Cassandra Guru").setHeader("limit", 2).build(); this.cassandraMessageHandler4.handleMessage(message); Mono<Integer> testMono = Mono.from(this.resultChannel) .map(Message::getPayload) .cast(WriteResult.class) .map(r -> r.getRows().size()); StepVerifier.create(testMono) .expectNext(1) .expectComplete() .verify(); this.cassandraMessageHandler1.handleMessage(new GenericMessage<>(QueryBuilder.truncate("book"))); }
private static Mono<WriteResult> toWriteResult(ReactiveResultSet resultSet) { return resultSet.rows().collectList() .map(rows -> new WriteResult(resultSet.getAllExecutionInfo(), resultSet.wasApplied(), rows)); } }
@Override public WriteResult execute() { if (executed.compareAndSet(false, true)) { return WriteResult.of(operations.getCqlOperations().queryForResultSet(batch)); } throw new IllegalStateException("This Cassandra Batch was already executed"); }
@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")); }); }
@Override public ListenableFuture<WriteResult> delete(Object entity, QueryOptions options) { Assert.notNull(entity, "Entity must not be null"); Assert.notNull(options, "QueryOptions must not be null"); CqlIdentifier tableName = getTableName(entity); Delete delete = QueryUtils.createDeleteQuery(tableName.toCql(), entity, options, getConverter()); maybeEmitEvent(new BeforeDeleteEvent<>(delete, entity.getClass(), tableName)); return new MappingListenableFutureAdapter<>(getAsyncCqlOperations().execute(new AsyncStatementCallback(delete)), resultSet -> { maybeEmitEvent(new AfterDeleteEvent<>(delete, entity.getClass(), tableName)); return WriteResult.of(resultSet); }); }