#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:
Mark Paluch
2019-05-22 09:41:23 +02:00
parent 972bc09606
commit 46082147d3
9 changed files with 70 additions and 17 deletions

View File

@@ -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() {

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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