diff --git a/jOOQ/src/main/java/org/jooq/ResultQuery.java b/jOOQ/src/main/java/org/jooq/ResultQuery.java index 4d7fba0152..a4cc7aa285 100644 --- a/jOOQ/src/main/java/org/jooq/ResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/ResultQuery.java @@ -457,6 +457,17 @@ public interface ResultQuery extends Query, Iterable { */ R fetchOne() throws DataAccessException, InvalidResultException; + /** + * Execute the query and return at most one resulting value into a + * custom mapper callback. + * + * @return The custom mapped record or null if the query returned no + * records. + * @throws DataAccessException if something went wrong executing the query + * @throws InvalidResultException if the query returned more than one record + */ + E fetchOne(RecordMapper mapper) throws DataAccessException, InvalidResultException; + /** * Execute the query and return at most one resulting record as a name/value * map. diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java index a37688395b..35faa317ce 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java @@ -440,6 +440,12 @@ abstract class AbstractResultQuery extends AbstractQuery imple return Utils.fetchOne(fetchLazy()); } + @Override + public final E fetchOne(RecordMapper mapper) { + R record = fetchOne(); + return record == null ? null : mapper.map(record); + } + @Override public final Map fetchOneMap() { R record = fetchOne(); diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java index c801bfa72a..c6f3fcb077 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java @@ -2436,6 +2436,11 @@ class SelectImpl E fetchOne(RecordMapper mapper) { + return getDelegate().fetchOne(mapper); + } + @Override public final Map fetchOneMap() { return getDelegate().fetchOneMap();