#69 - Allow object creation with a subset of columns.
We now allow object creation when not all columns are present by leveraging R2DBC RowMetadata. A column subset is necessary for projections.
This commit is contained in:
@@ -7,13 +7,15 @@ import io.r2dbc.spi.Row;
|
||||
import io.r2dbc.spi.RowMetadata;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import org.springframework.data.r2dbc.convert.EntityRowMapper;
|
||||
|
||||
import org.springframework.data.r2dbc.core.DefaultReactiveDataAccessStrategy;
|
||||
import org.springframework.data.r2dbc.dialect.PostgresDialect;
|
||||
|
||||
@@ -30,6 +32,14 @@ public class EntityRowMapperUnitTests {
|
||||
|
||||
Row rowMock = mock(Row.class);
|
||||
RowMetadata metadata = mock(RowMetadata.class);
|
||||
Collection<String> columns = mock(Collection.class);
|
||||
|
||||
@Before
|
||||
public void before() {
|
||||
|
||||
when(columns.contains(anyString())).thenReturn(true);
|
||||
when(metadata.getColumnNames()).thenReturn(columns);
|
||||
}
|
||||
|
||||
@Test // gh-22
|
||||
public void shouldMapSimpleEntity() {
|
||||
|
||||
@@ -29,13 +29,13 @@ import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.data.r2dbc.core.DefaultReactiveDataAccessStrategy;
|
||||
import org.springframework.data.r2dbc.core.ReactiveDataAccessStrategy;
|
||||
|
||||
import org.springframework.data.r2dbc.dialect.Dialect;
|
||||
import org.springframework.data.r2dbc.mapping.SettableValue;
|
||||
|
||||
@@ -177,6 +177,9 @@ public abstract class ReactiveDataAccessStrategyTestSupport {
|
||||
ReactiveDataAccessStrategy strategy = getStrategy();
|
||||
Row rowMock = mock(Row.class);
|
||||
RowMetadata metadataMock = mock(RowMetadata.class);
|
||||
Collection<String> columnNames = mock(Collection.class);
|
||||
when(metadataMock.getColumnNames()).thenReturn(columnNames);
|
||||
when(columnNames.contains(fieldname)).thenReturn(true);
|
||||
|
||||
PrimitiveTypes toSave = new PrimitiveTypes();
|
||||
setter.accept(toSave, testValue);
|
||||
|
||||
@@ -81,7 +81,7 @@ public class H2R2dbcRepositoryIntegrationTests extends AbstractR2dbcRepositoryIn
|
||||
Flux<LegoSet> findByNameContains(String name);
|
||||
|
||||
@Override
|
||||
@Query("SELECT * FROM legoset")
|
||||
@Query("SELECT name FROM legoset")
|
||||
Flux<Named> findAsProjection();
|
||||
|
||||
@Override
|
||||
|
||||
@@ -85,7 +85,7 @@ public class MySqlR2dbcRepositoryIntegrationTests extends AbstractR2dbcRepositor
|
||||
Flux<LegoSet> findByNameContains(String name);
|
||||
|
||||
@Override
|
||||
@Query("SELECT * FROM legoset")
|
||||
@Query("SELECT name FROM legoset")
|
||||
Flux<Named> findAsProjection();
|
||||
|
||||
@Override
|
||||
|
||||
@@ -85,7 +85,7 @@ public class PostgresR2dbcRepositoryIntegrationTests extends AbstractR2dbcReposi
|
||||
Flux<LegoSet> findByNameContains(String name);
|
||||
|
||||
@Override
|
||||
@Query("SELECT * FROM legoset")
|
||||
@Query("SELECT name FROM legoset")
|
||||
Flux<Named> findAsProjection();
|
||||
|
||||
@Override
|
||||
|
||||
@@ -90,7 +90,7 @@ public class SqlServerR2dbcRepositoryIntegrationTests extends AbstractR2dbcRepos
|
||||
Flux<LegoSet> findByNameContains(String name);
|
||||
|
||||
@Override
|
||||
@Query("SELECT * FROM legoset")
|
||||
@Query("SELECT name FROM legoset")
|
||||
Flux<Named> findAsProjection();
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user