From 381a218038923dd5a477b0322ef824d44ca2f8db Mon Sep 17 00:00:00 2001 From: lukaseder Date: Tue, 20 Feb 2018 12:45:23 +0100 Subject: [PATCH] [#6358] Add ResultQuery.fetchSet(RecordMapper) --- jOOQ/src/main/java/org/jooq/Result.java | 8 ++++ jOOQ/src/main/java/org/jooq/ResultQuery.java | 9 +++++ .../org/jooq/impl/AbstractResultQuery.java | 6 +++ .../main/java/org/jooq/impl/ResultImpl.java | 37 ++++++++++--------- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Result.java b/jOOQ/src/main/java/org/jooq/Result.java index 9c1e7b5fc0..8aee765403 100644 --- a/jOOQ/src/main/java/org/jooq/Result.java +++ b/jOOQ/src/main/java/org/jooq/Result.java @@ -2809,6 +2809,14 @@ public interface Result extends List, Attachable { U[] intoArray(Field field, Converter converter) throws IllegalArgumentException, DataTypeException; + /** + * Map results into a custom mapper callback. + * + * @param mapper The mapper callback + * @return The custom mapped records + */ + Set intoSet(RecordMapper mapper); + /** * Return all values for a field index from the result. * diff --git a/jOOQ/src/main/java/org/jooq/ResultQuery.java b/jOOQ/src/main/java/org/jooq/ResultQuery.java index 2b1f7ef158..29f4ded785 100644 --- a/jOOQ/src/main/java/org/jooq/ResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/ResultQuery.java @@ -3418,6 +3418,15 @@ public interface ResultQuery extends Query, Iterable { */ U[] fetchArray(Field field, Converter converter) throws DataAccessException; + /** + * Fetch results into a custom mapper callback. + * + * @param mapper The mapper callback + * @return The result. This will never be null. + * @throws DataAccessException if something went wrong executing the query + */ + Set fetchSet(RecordMapper mapper) throws DataAccessException; + /** * Execute the query and return all values for a field index from the * generated result. diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java index dc37da06e6..923f2816d9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java @@ -86,6 +86,7 @@ import org.jooq.Results; import org.jooq.SQLDialect; import org.jooq.Table; import org.jooq.conf.SettingsTools; +import org.jooq.exception.DataAccessException; import org.jooq.tools.Convert; import org.jooq.tools.JooqLogger; import org.jooq.tools.jdbc.MockResultSet; @@ -1349,6 +1350,11 @@ abstract class AbstractResultQuery extends AbstractQuery imple return fetch().intoArray(field, converter); } + @Override + public final Set fetchSet(RecordMapper mapper) throws DataAccessException { + return fetch().intoSet(mapper); + } + @Override public final Set fetchSet(int fieldIndex) { return fetch().intoSet(fieldIndex); diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index 70cbac606b..d46f3d151f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -343,9 +343,8 @@ final class ResultImpl implements Result { public final List getValues(int fieldIndex) { List result = new ArrayList(size()); - for (R record : this) { + for (R record : this) result.add(record.get(fieldIndex)); - } return result; } @@ -1750,9 +1749,8 @@ final class ResultImpl implements Result { public final List> intoMaps() { List> list = new ArrayList>(); - for (R record : this) { + for (R record : this) list.add(record.intoMap()); - } return list; } @@ -2567,6 +2565,16 @@ final class ResultImpl implements Result { return Convert.convertArray(intoArray(field), converter); } + @Override + public final Set intoSet(RecordMapper mapper) { + Set result = new LinkedHashSet(); + + for (R record : this) + result.add(mapper.map(record)); + + return result; + } + @Override public final Set intoSet(int fieldIndex) { return new LinkedHashSet(getValues(fieldIndex)); @@ -2756,9 +2764,8 @@ final class ResultImpl implements Result { List list = new ArrayList(size()); RecordMapper mapper = Tools.configuration(this).recordMapperProvider().provide(fields, type); - for (R record : this) { + for (R record : this) list.add(mapper.map(record)); - } return list; } @@ -2767,18 +2774,16 @@ final class ResultImpl implements Result { public final Result into(Table table) { Result list = new ResultImpl(configuration(), table.fields()); - for (R record : this) { + for (R record : this) list.add(record.into(table)); - } return list; } @Override public final > H into(H handler) { - for (R record : this) { + for (R record : this) handler.next(record); - } return handler; } @@ -2792,9 +2797,8 @@ final class ResultImpl implements Result { public final List map(RecordMapper mapper) { List result = new ArrayList(); - for (R record : this) { + for (R record : this) result.add(mapper.map(record)); - } return result; } @@ -2897,13 +2901,10 @@ final class ResultImpl implements Result { @Override public final Result intern(int... fieldIndexes) { - for (int fieldIndex : fieldIndexes) { - if (fields.fields[fieldIndex].getType() == String.class) { - for (Record record : this) { + for (int fieldIndex : fieldIndexes) + if (fields.fields[fieldIndex].getType() == String.class) + for (Record record : this) ((AbstractRecord) record).intern0(fieldIndex); - } - } - } return this; }