From 25e42c2737eb007d4bd735977ad3dc9eb89adcf9 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 16 Feb 2022 16:39:31 +0100 Subject: [PATCH] [jOOQ/jOOQ#12515] Support for RowN.mapping(Function) --- jOOQ/src/main/java/org/jooq/RowN.java | 25 +++++++++++++++++++ .../src/main/java/org/jooq/impl/RowImplN.java | 15 +++++++++++ 2 files changed, 40 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/RowN.java b/jOOQ/src/main/java/org/jooq/RowN.java index c230e3a4b3..0ae4d37b6b 100644 --- a/jOOQ/src/main/java/org/jooq/RowN.java +++ b/jOOQ/src/main/java/org/jooq/RowN.java @@ -85,6 +85,31 @@ import org.jetbrains.annotations.NotNull; */ public interface RowN extends Row, SelectField { + // ------------------------------------------------------------------------ + // Mapping convenience methods + // ------------------------------------------------------------------------ + + /** + * A convenience method to define a local {@link Record} to custom type + * {@link RecordMapper} that can be used when projecting {@link Row} types + * in SELECT or RETURNING clauses. + *

+ * Unlike {@link #mapping(Class, Function)}, this method attempts to work + * without an explicit {@link Class} reference for the underlying + * {@link Converter#toType()}, e.g. when nesting rows in arrays, the class + * literal is required for reflective array creation. + */ + @NotNull + SelectField mapping(Function function); + + /** + * A convenience method to define a local {@link Record} to custom type + * {@link RecordMapper} that can be used when projecting {@link Row} types in + * SELECT or RETURNING clauses. + */ + @NotNull + SelectField mapping(Class uType, Function function); + // ------------------------------------------------------------------------ // Generic comparison predicates // ------------------------------------------------------------------------ diff --git a/jOOQ/src/main/java/org/jooq/impl/RowImplN.java b/jOOQ/src/main/java/org/jooq/impl/RowImplN.java index 699c65ebe9..e785110609 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RowImplN.java +++ b/jOOQ/src/main/java/org/jooq/impl/RowImplN.java @@ -41,6 +41,7 @@ import static org.jooq.impl.DSL.row; import java.util.Arrays; import java.util.Collection; +import java.util.function.Function; import org.jooq.BetweenAndStepN; import org.jooq.Comparator; @@ -75,6 +76,20 @@ final class RowImplN extends AbstractRow implements RowN { super((FieldsImpl) fields); } + // ------------------------------------------------------------------------ + // Mapping convenience methods + // ------------------------------------------------------------------------ + + @Override + public final SelectField mapping(Function function) { + return rf().convertFrom(r -> r == null ? null : function.apply(r.intoArray())); + } + + @Override + public final SelectField mapping(Class uType, Function function) { + return rf().convertFrom(uType, r -> r == null ? null : function.apply(r.intoArray())); + } + // ------------------------------------------------------------------------ // Generic comparison predicates // ------------------------------------------------------------------------