diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java index 498e3ec949..806f5525e9 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java @@ -69,6 +69,7 @@ import java.util.concurrent.TimeUnit; import org.jooq.Cursor; import org.jooq.Field; +import org.jooq.FieldProvider; import org.jooq.Record; import org.jooq.Record1; import org.jooq.Record2; @@ -1518,48 +1519,100 @@ extends BaseTest R into(Table table); + /** + * Generate an in-memory JDBC {@link ResultSet} containing the data of this + * Record. + *

+ * Use this as an adapter for JDBC-compliant code that expects a + * {@link ResultSet} to operate on, rather than a jOOQ {@link Result}. The + * returned ResultSet allows for the following behaviour + * according to the JDBC specification: + *

+ *

+ * You may use {@link FactoryOperations#fetch(ResultSet)} to unwind this + * wrapper again. + *

+ * This is the same as creating a new {@link Result} with this + * Record only, and then calling {@link Result#intoResultSet()} + * on that Result + * + * @return A wrapper JDBC ResultSet + */ + ResultSet intoResultSet(); + /** * Map this record into a custom mapper callback * diff --git a/jOOQ/src/main/java/org/jooq/Result.java b/jOOQ/src/main/java/org/jooq/Result.java index a7e9bde762..c4c5b057d9 100644 --- a/jOOQ/src/main/java/org/jooq/Result.java +++ b/jOOQ/src/main/java/org/jooq/Result.java @@ -674,14 +674,6 @@ public interface Result extends FieldProvider, List, Attach */ > H into(H handler); - /** - * Map results into a custom mapper callback - * - * @param mapper The mapper callback - * @return The custom mapped records - */ - List map(RecordMapper mapper); - /** * Generate an in-memory JDBC {@link ResultSet} containing the data of this * Result. @@ -710,6 +702,14 @@ public interface Result extends FieldProvider, List, Attach */ ResultSet intoResultSet(); + /** + * Map results into a custom mapper callback + * + * @param mapper The mapper callback + * @return The custom mapped records + */ + List map(RecordMapper mapper); + /** * Sort this result by one of its contained fields. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java index 291b9d6a16..5411020a36 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java @@ -51,6 +51,7 @@ import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.sql.ResultSet; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -664,6 +665,13 @@ abstract class AbstractRecord extends AbstractStore implements Record { } } + @Override + public final ResultSet intoResultSet() { + ResultImpl result = new ResultImpl(getConfiguration(), getFieldProvider()); + result.add(this); + return result.intoResultSet(); + } + @Override public final E map(RecordMapper mapper) { return mapper.map(this); diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index cad516b2fc..f032d827e4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -1025,6 +1025,11 @@ class ResultImpl implements Result, AttachableInternal { return handler; } + @Override + public final ResultSet intoResultSet() { + return new ResultSetImpl(this); + } + @Override public final List map(RecordMapper mapper) { List result = new ArrayList(); @@ -1036,11 +1041,6 @@ class ResultImpl implements Result, AttachableInternal { return result; } - @Override - public final ResultSet intoResultSet() { - return new ResultSetImpl(this); - } - @Override public final > Result sortAsc(Field field) { return sortAsc(field, new NaturalComparator());