From cdccbceb6140eefe71fff92264da4a22ac0123a0 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 12 Oct 2012 14:03:15 +0200 Subject: [PATCH] [#1710] Add Map> ResultQuery.fetchGroups(Field[], Class) - Aligned API with other fetchGroups() methods --- .../org/jooq/test/_/testcases/FetchTests.java | 36 +++++++++---------- jOOQ/src/main/java/org/jooq/Result.java | 2 +- jOOQ/src/main/java/org/jooq/ResultQuery.java | 2 +- .../jooq/impl/AbstractDelegatingSelect.java | 2 +- .../org/jooq/impl/AbstractResultQuery.java | 2 +- .../main/java/org/jooq/impl/ResultImpl.java | 16 +++++---- 6 files changed, 31 insertions(+), 29 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java index 9ed9b2fcf8..5edd020429 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java @@ -1803,40 +1803,40 @@ extends BaseTest POJO // Grouping by BOOK.AUTHOR_ID, BOOK.LANGUAGE_ID - Map, List> map3 = create().selectFrom(TBook()).orderBy(TBook_ID()) + Map> map3 = create().selectFrom(TBook()).orderBy(TBook_ID()) .fetchGroups(new Field[] { TBook_AUTHOR_ID(), TBook_LANGUAGE_ID() }, TBookPojo()); - Iterator, List>> iterator = map3.entrySet().iterator(); - Entry, List> entry1_en = iterator.next(); + Iterator>> iterator = map3.entrySet().iterator(); + Entry> entry1_en = iterator.next(); assertEquals(2, entry1_en.getValue().size()); - assertEquals(entry1_en.getKey().get(0), on(entry1_en.getValue().get(0)).call("getAuthorId").get()); - assertEquals(entry1_en.getKey().get(0), on(entry1_en.getValue().get(1)).call("getAuthorId").get()); - assertEquals(entry1_en.getKey().get(1), on(entry1_en.getValue().get(0)).call("getLanguageId").get()); - assertEquals(entry1_en.getKey().get(1), on(entry1_en.getValue().get(1)).call("getLanguageId").get()); + assertEquals(entry1_en.getKey().getValue(0), on(entry1_en.getValue().get(0)).call("getAuthorId").get()); + assertEquals(entry1_en.getKey().getValue(0), on(entry1_en.getValue().get(1)).call("getAuthorId").get()); + assertEquals(entry1_en.getKey().getValue(1), on(entry1_en.getValue().get(0)).call("getLanguageId").get()); + assertEquals(entry1_en.getKey().getValue(1), on(entry1_en.getValue().get(1)).call("getLanguageId").get()); - Entry, List> entry2_pt = iterator.next(); + Entry> entry2_pt = iterator.next(); assertEquals(1, entry2_pt.getValue().size()); - assertEquals(entry2_pt.getKey().get(0), on(entry2_pt.getValue().get(0)).call("getAuthorId").get()); - assertEquals(entry2_pt.getKey().get(1), on(entry2_pt.getValue().get(0)).call("getLanguageId").get()); + assertEquals(entry2_pt.getKey().getValue(0), on(entry2_pt.getValue().get(0)).call("getAuthorId").get()); + assertEquals(entry2_pt.getKey().getValue(1), on(entry2_pt.getValue().get(0)).call("getLanguageId").get()); - Entry, List> entry2_de = iterator.next(); + Entry> entry2_de = iterator.next(); assertEquals(1, entry2_de.getValue().size()); - assertEquals(entry2_de.getKey().get(0), on(entry2_de.getValue().get(0)).call("getAuthorId").get()); - assertEquals(entry2_de.getKey().get(1), on(entry2_de.getValue().get(0)).call("getLanguageId").get()); + assertEquals(entry2_de.getKey().getValue(0), on(entry2_de.getValue().get(0)).call("getAuthorId").get()); + assertEquals(entry2_de.getKey().getValue(1), on(entry2_de.getValue().get(0)).call("getLanguageId").get()); assertFalse(iterator.hasNext()); // Grouping by BOOK.AUTHOR_ID, BOOK.LANGUAGE_ID, BOOK.TITLE - Map, List> map4 = create().selectFrom(TBook()).orderBy(TBook_ID()) + Map> map4 = create().selectFrom(TBook()).orderBy(TBook_ID()) .fetchGroups(new Field[] { TBook_ID(), TBook_LANGUAGE_ID(), TBook_TITLE() }, TBookPojo()); assertEquals(4, map4.size()); - for (List keyList : map4.keySet()) { + for (Record keyList : map4.keySet()) { List result = map4.get(keyList); assertEquals(1, result.size()); - assertEquals(keyList.get(0), on(result.get(0)).call("getId").get()); - assertEquals(keyList.get(1), on(result.get(0)).call("getLanguageId").get()); - assertEquals(keyList.get(2), on(result.get(0)).call("getTitle").get()); + assertEquals(keyList.getValue(0), on(result.get(0)).call("getId").get()); + assertEquals(keyList.getValue(1), on(result.get(0)).call("getLanguageId").get()); + assertEquals(keyList.getValue(2), on(result.get(0)).call("getTitle").get()); } } diff --git a/jOOQ/src/main/java/org/jooq/Result.java b/jOOQ/src/main/java/org/jooq/Result.java index 000fce7d2f..ac33b5ac04 100644 --- a/jOOQ/src/main/java/org/jooq/Result.java +++ b/jOOQ/src/main/java/org/jooq/Result.java @@ -1955,7 +1955,7 @@ public interface Result extends FieldProvider, List, Attach * @throws MappingException wrapping any reflection or data type conversion * exception that might have occurred while mapping records */ - Map, List> intoGroups(Field[] keys, Class type) throws MappingException; + Map> intoGroups(Field[] keys, Class type) throws MappingException; /** diff --git a/jOOQ/src/main/java/org/jooq/ResultQuery.java b/jOOQ/src/main/java/org/jooq/ResultQuery.java index caec62359d..c768cb34b0 100644 --- a/jOOQ/src/main/java/org/jooq/ResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/ResultQuery.java @@ -623,7 +623,7 @@ public interface ResultQuery extends Query { * exception that might have occurred while mapping records * @see Result#intoGroups(Field[], Class) */ - Map, List> fetchGroups(Field[] keys, Class type) throws MappingException; + Map> fetchGroups(Field[] keys, Class type) throws MappingException; /** * Return a {@link Map} with results grouped by the given key and mapped diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java index 377d056817..76a5bff468 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java @@ -285,7 +285,7 @@ abstract class AbstractDelegatingSelect } @Override - public final Map, List> fetchGroups(Field[] keys, Class type) { + public final Map> fetchGroups(Field[] keys, Class type) { return getDelegate().fetchGroups(keys, type); } diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java index 2924b5dfba..32946c16e1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java @@ -481,7 +481,7 @@ abstract class AbstractResultQuery extends AbstractQuery imple } @Override - public final Map, List> fetchGroups(Field[] keys, Class type) { + public final Map> fetchGroups(Field[] keys, Class type) { return fetch().intoGroups(keys, type); } diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index ab5aad2fe9..c27bbe1c91 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -1538,23 +1538,25 @@ class ResultImpl implements Result, AttachableInternal { } @Override - public final Map, List> intoGroups(Field[] keys, Class type) { + public final Map> intoGroups(Field[] keys, Class type) { if (keys == null) { keys = new Field[0]; } - Map, List> map = new LinkedHashMap, List>(); + Map> map = new LinkedHashMap>(); + FieldList keyList = new FieldList(keys); for (R record : this) { - List keyValueList = new ArrayList(); - for (Field key : keys) { - keyValueList.add(record.getValue(key)); + Record key = new RecordImpl(keyList); + + for (Field field : keys) { + Util.setValue(key, field, record, field); } - List list = map.get(keyValueList); + List list = map.get(key); if (list == null) { list = new ArrayList(); - map.put(keyValueList, list); + map.put(key, list); } list.add(record.into(type));