diff --git a/src/main/java/org/springframework/data/r2dbc/core/DatabaseClient.java b/src/main/java/org/springframework/data/r2dbc/core/DatabaseClient.java index ccdb35702..9ea8337f0 100644 --- a/src/main/java/org/springframework/data/r2dbc/core/DatabaseClient.java +++ b/src/main/java/org/springframework/data/r2dbc/core/DatabaseClient.java @@ -23,6 +23,7 @@ import reactor.core.publisher.Mono; import java.util.Map; import java.util.function.BiFunction; import java.util.function.Consumer; +import java.util.function.Function; import java.util.function.Supplier; import org.reactivestreams.Publisher; @@ -229,6 +230,15 @@ public interface DatabaseClient { */ TypedExecuteSpec as(Class resultType); + /** + * Configure a result mapping {@link java.util.function.Function function}. + * + * @param mappingFunction must not be {@literal null}. + * @param result type. + * @return a {@link FetchSpec} for configuration what to fetch. Guaranteed to be not {@literal null}. + */ + RowsFetchSpec map(Function mappingFunction); + /** * Configure a result mapping {@link java.util.function.BiFunction function}. * @@ -265,6 +275,15 @@ public interface DatabaseClient { */ TypedExecuteSpec as(Class resultType); + /** + * Configure a result mapping {@link java.util.function.Function function}. + * + * @param mappingFunction must not be {@literal null}. + * @param result type. + * @return a {@link FetchSpec} for configuration what to fetch. Guaranteed to be not {@literal null}. + */ + RowsFetchSpec map(Function mappingFunction); + /** * Configure a result mapping {@link java.util.function.BiFunction function}. * @@ -393,6 +412,15 @@ public interface DatabaseClient { */ TypedSelectSpec as(Class resultType); + /** + * Configure a result mapping {@link java.util.function.Function function}. + * + * @param mappingFunction must not be {@literal null}. + * @param result type. + * @return a {@link FetchSpec} for configuration what to fetch. Guaranteed to be not {@literal null}. + */ + RowsFetchSpec map(Function mappingFunction); + /** * Configure a result mapping {@link java.util.function.BiFunction function}. * @@ -422,6 +450,15 @@ public interface DatabaseClient { */ RowsFetchSpec as(Class resultType); + /** + * Configure a result mapping {@link java.util.function.Function function}. + * + * @param mappingFunction must not be {@literal null}. + * @param result type. + * @return a {@link FetchSpec} for configuration what to fetch. Guaranteed to be not {@literal null}. + */ + RowsFetchSpec map(Function mappingFunction); + /** * Configure a result mapping {@link java.util.function.BiFunction function}. * @@ -556,6 +593,15 @@ public interface DatabaseClient { */ interface InsertSpec { + /** + * Configure a result mapping {@link java.util.function.Function function}. + * + * @param mappingFunction must not be {@literal null}. + * @param result type. + * @return a {@link FetchSpec} for configuration what to fetch. Guaranteed to be not {@literal null}. + */ + RowsFetchSpec map(Function mappingFunction); + /** * Configure a result mapping {@link java.util.function.BiFunction function}. * diff --git a/src/main/java/org/springframework/data/r2dbc/core/DefaultDatabaseClient.java b/src/main/java/org/springframework/data/r2dbc/core/DefaultDatabaseClient.java index 5f7173abf..815a3a4e5 100644 --- a/src/main/java/org/springframework/data/r2dbc/core/DefaultDatabaseClient.java +++ b/src/main/java/org/springframework/data/r2dbc/core/DefaultDatabaseClient.java @@ -486,6 +486,14 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { return createTypedExecuteSpec(this.byIndex, this.byName, this.sqlSupplier, resultType); } + @Override + public FetchSpec map(Function mappingFunction) { + + Assert.notNull(mappingFunction, "Mapping function must not be null!"); + + return exchange(this.sqlSupplier, (row, rowMetadata) -> mappingFunction.apply(row)); + } + @Override public FetchSpec map(BiFunction mappingFunction) { @@ -571,6 +579,14 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { return createTypedExecuteSpec(this.byIndex, this.byName, this.sqlSupplier, resultType); } + @Override + public FetchSpec map(Function mappingFunction) { + + Assert.notNull(mappingFunction, "Mapping function must not be null!"); + + return exchange(this.sqlSupplier, (row, rowMetadata) -> mappingFunction.apply(row)); + } + @Override public FetchSpec map(BiFunction mappingFunction) { @@ -727,6 +743,14 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { resultType, dataAccessStrategy.getRowMapper(resultType)); } + @Override + public FetchSpec map(Function mappingFunction) { + + Assert.notNull(mappingFunction, "Mapping function must not be null!"); + + return exchange((row, rowMetadata) -> mappingFunction.apply(row)); + } + @Override public FetchSpec map(BiFunction mappingFunction) { @@ -816,6 +840,14 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { return exchange(dataAccessStrategy.getRowMapper(resultType)); } + @Override + public FetchSpec map(Function mappingFunction) { + + Assert.notNull(mappingFunction, "Mapping function must not be null!"); + + return exchange((row, rowMetadata) -> mappingFunction.apply(row)); + } + @Override public FetchSpec map(BiFunction mappingFunction) { @@ -935,6 +967,14 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { return new DefaultGenericInsertSpec<>(this.table, byName, this.mappingFunction); } + @Override + public FetchSpec map(Function mappingFunction) { + + Assert.notNull(mappingFunction, "Mapping function must not be null!"); + + return exchange((row, rowMetadata) -> mappingFunction.apply(row)); + } + @Override public FetchSpec map(BiFunction mappingFunction) { @@ -1017,6 +1057,14 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { return new DefaultTypedInsertSpec<>(this.typeToInsert, this.table, objectToInsert, this.mappingFunction); } + @Override + public FetchSpec map(Function mappingFunction) { + + Assert.notNull(mappingFunction, "Mapping function must not be null!"); + + return exchange((row, rowMetadata) -> mappingFunction.apply(row)); + } + @Override public FetchSpec map(BiFunction mappingFunction) { diff --git a/src/test/java/org/springframework/data/r2dbc/core/AbstractDatabaseClientIntegrationTests.java b/src/test/java/org/springframework/data/r2dbc/core/AbstractDatabaseClientIntegrationTests.java index 55d8a5342..1c1f3515f 100644 --- a/src/test/java/org/springframework/data/r2dbc/core/AbstractDatabaseClientIntegrationTests.java +++ b/src/test/java/org/springframework/data/r2dbc/core/AbstractDatabaseClientIntegrationTests.java @@ -332,7 +332,7 @@ public abstract class AbstractDatabaseClientIntegrationTests extends R2dbcIntegr databaseClient.select().from("legoset") // .project("id", "name", "manual") // .orderBy(Sort.by("id")) // - .map((r, md) -> r.get("id", Integer.class)) // + .map((r) -> r.get("id", Integer.class)) // .all() // .as(StepVerifier::create) // .expectNext(42055) // @@ -374,7 +374,7 @@ public abstract class AbstractDatabaseClientIntegrationTests extends R2dbcIntegr .project("id", "name", "manual") // .orderBy(Sort.by("id")) // .matching(where("id").greaterThanOrEquals(42055).and("id").lessThanOrEquals(42055)) - .map((r, md) -> r.get("id", Integer.class)) // + .map((r) -> r.get("id", Integer.class)) // .all() // .as(StepVerifier::create) // .expectNext(42055) //