From f9f351762ca91d52c45a6e762cc2367405ebcbda Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sun, 23 Sep 2012 12:24:07 +0200 Subject: [PATCH] [#1709] Add Map> ResultQuery.fetchGroups(Field[]) - Changed result Map key from List to Record - Fixed some debugger-related issues --- jOOQ-test/src/org/jooq/test/BaseTest.java | 2 - .../jooq/test/_/testcases/DebuggerTests.java | 2 +- .../org/jooq/test/_/testcases/FetchTests.java | 50 +++++++++---------- .../src/org/jooq/test/jOOQAbstractTest.java | 23 +++------ jOOQ/src/main/java/org/jooq/Result.java | 4 +- jOOQ/src/main/java/org/jooq/ResultQuery.java | 4 +- .../jooq/impl/AbstractDelegatingSelect.java | 4 +- .../org/jooq/impl/AbstractResultQuery.java | 4 +- .../main/java/org/jooq/impl/ResultImpl.java | 32 ++++++------ 9 files changed, 60 insertions(+), 65 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/BaseTest.java b/jOOQ-test/src/org/jooq/test/BaseTest.java index 4c8f629a33..269d34acf6 100644 --- a/jOOQ-test/src/org/jooq/test/BaseTest.java +++ b/jOOQ-test/src/org/jooq/test/BaseTest.java @@ -75,7 +75,6 @@ import org.jooq.test._.converters.Boolean_YES_NO_UC; import org.jooq.test._.converters.Boolean_YN_LC; import org.jooq.test._.converters.Boolean_YN_UC; import org.jooq.tools.JooqLogger; -import org.jooq.tools.debug.old.impl.DebugListener; import org.jooq.tools.unsigned.UByte; import org.jooq.tools.unsigned.UInteger; import org.jooq.tools.unsigned.ULong; @@ -682,7 +681,6 @@ public abstract class BaseTest< protected Factory create(Settings settings) { Factory create = delegate.create(settings); create.getSettings().getExecuteListeners().add(TestStatisticsListener.class.getName()); - create.getSettings().getExecuteListeners().add(DebugListener.class.getName()); return create; } diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/DebuggerTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/DebuggerTests.java index d1ad0ac1da..de33b1d3ad 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/DebuggerTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/DebuggerTests.java @@ -106,7 +106,7 @@ extends BaseTest Record // -------------- - Map, B> map3 = create().selectFrom(TBook()).orderBy(TBook_ID()) + Map map3 = create().selectFrom(TBook()).orderBy(TBook_ID()) .fetchMap(new Field[] { TBook_ID(), TBook_LANGUAGE_ID(), TBook_TITLE() }); assertEquals(4, map3.keySet().size()); - for (List keyList : map3.keySet()) { - B record = map3.get(keyList); - assertEquals(keyList.get(0), record.getValue(TBook_ID())); - assertEquals(keyList.get(1), record.getValue(TBook_LANGUAGE_ID())); - assertEquals(keyList.get(2), record.getValue(TBook_TITLE())); + for (Record key : map3.keySet()) { + B record = map3.get(key); + assertEquals(key.getValue(0), record.getValue(TBook_ID())); + assertEquals(key.getValue(1), record.getValue(TBook_LANGUAGE_ID())); + assertEquals(key.getValue(2), record.getValue(TBook_TITLE())); } // List of Map @@ -258,40 +258,40 @@ extends BaseTest Record // -------------- // Grouping by BOOK.AUTHOR_ID, BOOK.LANGUAGE_ID - Map, Result> map5 = create().selectFrom(TBook()).orderBy(TBook_ID()) + Map> map5 = create().selectFrom(TBook()).orderBy(TBook_ID()) .fetchGroups(new Field[] { TBook_AUTHOR_ID(), TBook_LANGUAGE_ID() }); - Iterator, Result>> iterator = map5.entrySet().iterator(); - Entry, Result> entry1_en = iterator.next(); + Iterator>> iterator = map5.entrySet().iterator(); + Entry> entry1_en = iterator.next(); assertEquals(2, entry1_en.getValue().size()); - assertEquals(entry1_en.getKey().get(0), entry1_en.getValue().get(0).getValue(TBook_AUTHOR_ID())); - assertEquals(entry1_en.getKey().get(0), entry1_en.getValue().get(1).getValue(TBook_AUTHOR_ID())); - assertEquals(entry1_en.getKey().get(1), entry1_en.getValue().get(0).getValue(TBook_LANGUAGE_ID())); - assertEquals(entry1_en.getKey().get(1), entry1_en.getValue().get(1).getValue(TBook_LANGUAGE_ID())); + assertEquals(entry1_en.getKey().getValue(0), entry1_en.getValue().get(0).getValue(TBook_AUTHOR_ID())); + assertEquals(entry1_en.getKey().getValue(0), entry1_en.getValue().get(1).getValue(TBook_AUTHOR_ID())); + assertEquals(entry1_en.getKey().getValue(1), entry1_en.getValue().get(0).getValue(TBook_LANGUAGE_ID())); + assertEquals(entry1_en.getKey().getValue(1), entry1_en.getValue().get(1).getValue(TBook_LANGUAGE_ID())); - Entry, Result> entry2_pt = iterator.next(); + Entry> entry2_pt = iterator.next(); assertEquals(1, entry2_pt.getValue().size()); - assertEquals(entry2_pt.getKey().get(0), entry2_pt.getValue().get(0).getValue(TBook_AUTHOR_ID())); - assertEquals(entry2_pt.getKey().get(1), entry2_pt.getValue().get(0).getValue(TBook_LANGUAGE_ID())); + assertEquals(entry2_pt.getKey().getValue(0), entry2_pt.getValue().get(0).getValue(TBook_AUTHOR_ID())); + assertEquals(entry2_pt.getKey().getValue(1), entry2_pt.getValue().get(0).getValue(TBook_LANGUAGE_ID())); - Entry, Result> entry2_de = iterator.next(); + Entry> entry2_de = iterator.next(); assertEquals(1, entry2_de.getValue().size()); - assertEquals(entry2_de.getKey().get(0), entry2_de.getValue().get(0).getValue(TBook_AUTHOR_ID())); - assertEquals(entry2_de.getKey().get(1), entry2_de.getValue().get(0).getValue(TBook_LANGUAGE_ID())); + assertEquals(entry2_de.getKey().getValue(0), entry2_de.getValue().get(0).getValue(TBook_AUTHOR_ID())); + assertEquals(entry2_de.getKey().getValue(1), entry2_de.getValue().get(0).getValue(TBook_LANGUAGE_ID())); assertFalse(iterator.hasNext()); // Grouping by BOOK.AUTHOR_ID, BOOK.LANGUAGE_ID, BOOK.TITLE - Map, Result> map6 = create().selectFrom(TBook()).orderBy(TBook_ID()) + Map> map6 = create().selectFrom(TBook()).orderBy(TBook_ID()) .fetchGroups(new Field[] { TBook_ID(), TBook_LANGUAGE_ID(), TBook_TITLE() }); assertEquals(4, map6.size()); - for (List keyList : map6.keySet()) { - Result result = map6.get(keyList); + for (Record key : map6.keySet()) { + Result result = map6.get(key); assertEquals(1, result.size()); - assertEquals(keyList.get(0), result.get(0).getValue(TBook_ID())); - assertEquals(keyList.get(1), result.get(0).getValue(TBook_LANGUAGE_ID())); - assertEquals(keyList.get(2), result.get(0).getValue(TBook_TITLE())); + assertEquals(key.getValue(0), result.get(0).getValue(TBook_ID())); + assertEquals(key.getValue(1), result.get(0).getValue(TBook_LANGUAGE_ID())); + assertEquals(key.getValue(2), result.get(0).getValue(TBook_TITLE())); } } diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index cbd0b15cc0..214e676bd4 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -118,9 +118,8 @@ import org.jooq.test._.testcases.ThreadSafetyTests; import org.jooq.tools.JooqLogger; import org.jooq.tools.StopWatch; import org.jooq.tools.StringUtils; -import org.jooq.tools.debug.old.Debugger; -import org.jooq.tools.debug.old.impl.DebuggerFactory; -import org.jooq.tools.debug.old.impl.Server; +import org.jooq.tools.debug.Debugger; +import org.jooq.tools.debug.impl.DebuggerFactory; import org.jooq.tools.reflect.ReflectException; import org.jooq.tools.unsigned.UByte; import org.jooq.tools.unsigned.UInteger; @@ -132,7 +131,6 @@ import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.postgresql.util.PSQLException; @@ -213,7 +211,6 @@ public abstract class jOOQAbstractTest< private static final String JDBC_USER = "jdbc.User"; private static final String JDBC_URL = "jdbc.URL"; private static final String JDBC_DRIVER = "jdbc.Driver"; - private static final int DEBUGGER_PORT = 5533; public static final JooqLogger log = JooqLogger.getLogger(jOOQAbstractTest.class); public static final StopWatch testSQLWatch = new StopWatch(); @@ -230,8 +227,8 @@ public abstract class jOOQAbstractTest< public static String jdbcSchema; public static Map scripts = new HashMap(); - private static Server SERVER; - private static boolean RUN_CONSOLE_IN_PROCESS = false; + public static final int DEBUGGER_PORT = 5533; + public static boolean RUN_CONSOLE_IN_PROCESS = false; protected void execute(String script) throws Exception { Statement stmt = null; @@ -377,11 +374,6 @@ public abstract class jOOQAbstractTest< } } - @BeforeClass - public static void sqlConsole() throws Exception { - SERVER = new Server(DEBUGGER_PORT); - } - @Before public void setUp() throws Exception { connection = getConnection(); @@ -407,8 +399,6 @@ public abstract class jOOQAbstractTest< @AfterClass public static void quit() throws Exception { - SERVER.close(); - log.info("QUITTING"); // Issue a log dump on adaptive server. Don't know why this is needed @@ -442,6 +432,9 @@ public abstract class jOOQAbstractTest< connection = getConnection0(null, null); if (RUN_CONSOLE_IN_PROCESS) { + // This workaround will start the server + create().selectOne().fetch(); + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); Debugger debugger = DebuggerFactory.remoteDebugger("127.0.0.1", DEBUGGER_PORT); @@ -748,7 +741,7 @@ public abstract class jOOQAbstractTest< Settings settings = SettingsTools.defaultSettings() .withExecuteDebugging(ExecuteDebugging.SERVER) - .withExecuteDebuggingPort(5555) + .withExecuteDebuggingPort(DEBUGGER_PORT) .withRenderSchema(renderSchema) .withRenderMapping(new RenderMapping() .withDefaultSchema(defaultSchema)) diff --git a/jOOQ/src/main/java/org/jooq/Result.java b/jOOQ/src/main/java/org/jooq/Result.java index d001a01eff..61a147d5e1 100644 --- a/jOOQ/src/main/java/org/jooq/Result.java +++ b/jOOQ/src/main/java/org/jooq/Result.java @@ -1850,7 +1850,7 @@ public interface Result extends FieldProvider, List, Attach * @throws InvalidResultException if the keys are non-unique in the result * set. */ - Map, R> intoMap(Field[] keys); + Map intoMap(Field[] keys); /** * Return a {@link Map} with results grouped by the given key and mapped @@ -1907,7 +1907,7 @@ public interface Result extends FieldProvider, List, Attach * resulting map will contain at most one entry. * @return A Map containing grouped results */ - Map, Result> intoGroups(Field[] keys); + Map> intoGroups(Field[] keys); /** * Return a {@link Map} with results grouped by the given key and mapped diff --git a/jOOQ/src/main/java/org/jooq/ResultQuery.java b/jOOQ/src/main/java/org/jooq/ResultQuery.java index cc5e278d4f..eb1eb0731e 100644 --- a/jOOQ/src/main/java/org/jooq/ResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/ResultQuery.java @@ -517,7 +517,7 @@ public interface ResultQuery extends Query { * result set. * @see Result#intoMap(Field[]) */ - Map, R> fetchMap(Field[] keys) throws DataAccessException; + Map fetchMap(Field[] keys) throws DataAccessException; /** * Execute the query and return a {@link Map} with results grouped by the @@ -585,7 +585,7 @@ public interface ResultQuery extends Query { * @throws DataAccessException if something went wrong executing the query * @see Result#intoGroups(Field[]) */ - Map, Result> fetchGroups(Field[] keys) throws DataAccessException; + Map> fetchGroups(Field[] keys) throws DataAccessException; /** * 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 a7cbc54f4d..6c5c35fe4a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingSelect.java @@ -234,7 +234,7 @@ abstract class AbstractDelegatingSelect } @Override - public final Map, R> fetchMap(Field[] keys) { + public final Map fetchMap(Field[] keys) { return getDelegate().fetchMap(keys); } @@ -264,7 +264,7 @@ abstract class AbstractDelegatingSelect } @Override - public final Map, Result> fetchGroups(Field[] keys) { + public final Map> fetchGroups(Field[] keys) { return getDelegate().fetchGroups(keys); } diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java index f0b143ad59..6555543129 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java @@ -422,7 +422,7 @@ abstract class AbstractResultQuery extends AbstractQuery imple } @Override - public final Map, R> fetchMap(Field[] keys) { + public final Map fetchMap(Field[] keys) { return fetch().intoMap(keys); } @@ -452,7 +452,7 @@ abstract class AbstractResultQuery extends AbstractQuery imple } @Override - public final Map, Result> fetchGroups(Field[] keys) { + public final Map> fetchGroups(Field[] keys) { return fetch().intoGroups(keys); } diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index 6299ce7ff1..522a6e8cf1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -1392,21 +1392,23 @@ class ResultImpl implements Result, AttachableInternal { } @Override - public final Map, R> intoMap(Field[] keys) { + public final Map intoMap(Field[] keys) { if (keys == null) { keys = new Field[0]; } - Map, R> map = new LinkedHashMap, R>(); + Map map = new LinkedHashMap(); + FieldList keyList = new FieldList(keys); for (R record : this) { - List keyList = new ArrayList(); - for (Field key : keys) { - keyList.add(record.getValue(key)); + Record key = new RecordImpl(keyList); + + for (Field field : keys) { + Util.setValue(key, field, record, field); } - if (map.put(keyList, record) != null) { - throw new InvalidResultException("Key list " + keys + " is not unique in Result for " + this); + if (map.put(key, record) != null) { + throw new InvalidResultException("Key list " + keyList + " is not unique in Result for " + this); } } @@ -1466,23 +1468,25 @@ class ResultImpl implements Result, AttachableInternal { } @Override - public final Map, Result> intoGroups(Field[] keys) { + public final Map> intoGroups(Field[] keys) { if (keys == null) { keys = new Field[0]; } - Map, Result> map = new LinkedHashMap, Result>(); + Map> map = new LinkedHashMap>(); + FieldList keyList = new FieldList(keys); for (R record : this) { - List keyList = new ArrayList(); - for (Field key : keys) { - keyList.add(record.getValue(key)); + Record key = new RecordImpl(keyList); + + for (Field field : keys) { + Util.setValue(key, field, record, field); } - Result result = map.get(keyList); + Result result = map.get(key); if (result == null) { result = new ResultImpl(getConfiguration(), this.fields); - map.put(keyList, result); + map.put(key, result); } result.add(record);