DATACASS-696 - Fix return of null values through selectOne(…) and event emission.
Null values are now correctly handled when selecting a single element. We also suppress event emission in CassandraTemplate if the loaded entity is null.
This commit is contained in:
@@ -350,9 +350,8 @@ public class AsyncCassandraTemplate
|
||||
*/
|
||||
@Override
|
||||
public <T> ListenableFuture<T> selectOne(Statement statement, Class<T> entityClass) {
|
||||
|
||||
return new MappingListenableFutureAdapter<>(select(statement, entityClass),
|
||||
list -> list.stream().findFirst().orElse(null));
|
||||
list -> list.isEmpty() ? null : list.get(0));
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -343,7 +343,9 @@ public class CassandraTemplate implements CassandraOperations, ApplicationEventP
|
||||
*/
|
||||
@Override
|
||||
public <T> T selectOne(Statement statement, Class<T> entityClass) {
|
||||
return select(statement, entityClass).stream().findFirst().orElse(null);
|
||||
|
||||
List<T> result = select(statement, entityClass);
|
||||
return result.isEmpty() ? null : result.get(0);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -913,7 +915,9 @@ public class CassandraTemplate implements CassandraOperations, ApplicationEventP
|
||||
|
||||
T result = (T) (targetType.isInterface() ? getProjectionFactory().createProjection(targetType, source) : source);
|
||||
|
||||
maybeEmitEvent(new AfterConvertEvent<>(row, result, tableName));
|
||||
if (result != null) {
|
||||
maybeEmitEvent(new AfterConvertEvent<>(row, result, tableName));
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
@@ -860,7 +860,9 @@ public class ReactiveCassandraTemplate
|
||||
|
||||
T result = (T) (targetType.isInterface() ? getProjectionFactory().createProjection(targetType, source) : source);
|
||||
|
||||
maybeEmitEvent(new AfterConvertEvent<>(row, result, tableName));
|
||||
if (result != null) {
|
||||
maybeEmitEvent(new AfterConvertEvent<>(row, result, tableName));
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
@@ -213,6 +213,16 @@ public class AsyncCassandraTemplateUnitTests {
|
||||
assertThat(statementCaptor.getValue().toString()).isEqualTo("SELECT * FROM users WHERE id='myid';");
|
||||
}
|
||||
|
||||
@Test // DATACASS-696
|
||||
public void selectOneShouldNull() {
|
||||
|
||||
when(resultSet.iterator()).thenReturn(Collections.singleton(row).iterator());
|
||||
|
||||
ListenableFuture<String> future = template.selectOne("SELECT id FROM users WHERE id='myid';", String.class);
|
||||
|
||||
assertThat(getUninterruptibly(future)).isNull();
|
||||
}
|
||||
|
||||
@Test // DATACASS-292
|
||||
public void existsShouldReturnExistingElement() {
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
|
||||
@@ -158,6 +158,16 @@ public class CassandraTemplateUnitTests {
|
||||
assertThat(statementCaptor.getValue().toString()).isEqualTo("SELECT * FROM users WHERE id='myid';");
|
||||
}
|
||||
|
||||
@Test // DATACASS-696
|
||||
public void selectOneShouldNull() {
|
||||
|
||||
when(resultSet.iterator()).thenReturn(Collections.singleton(row).iterator());
|
||||
|
||||
String nullValue = template.selectOne("SELECT id FROM users WHERE id='myid';", String.class);
|
||||
|
||||
assertThat(nullValue).isNull();
|
||||
}
|
||||
|
||||
@Test // DATACASS-292
|
||||
public void selectOneByIdShouldReturnMappedResults() {
|
||||
|
||||
|
||||
@@ -178,6 +178,15 @@ public class ReactiveCassandraTemplateUnitTests {
|
||||
assertThat(statementCaptor.getValue().toString()).isEqualTo("SELECT firstname FROM users LIMIT 1;");
|
||||
}
|
||||
|
||||
@Test // DATACASS-696
|
||||
public void selectOneShouldNull() {
|
||||
|
||||
when(reactiveResultSet.rows()).thenReturn(Flux.just(row));
|
||||
|
||||
template.selectOne("SELECT id FROM users WHERE id='myid';", String.class).as(StepVerifier::create) //
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
@Test // DATACASS-335
|
||||
public void existsShouldReturnExistingElement() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user