From a40f111195d6186e2888f2c30debdc9edd66a628 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sun, 19 Aug 2012 12:28:47 +0200 Subject: [PATCH] [#1723] Add Factory.fetchLazy(ResultSet) --- .../org/jooq/test/_/testcases/FetchTests.java | 15 +++++++++++++++ .../main/java/org/jooq/FactoryOperations.java | 19 +++++++++++++++++++ jOOQ/src/main/java/org/jooq/impl/Factory.java | 17 ++++++++++------- .../main/java/org/jooq/impl/FactoryProxy.java | 5 +++++ 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java index 3fc9313b6c..31cdaabb36 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/FetchTests.java @@ -1132,10 +1132,25 @@ extends BaseTest c1 = create().fetchLazy("select * from t_author order by id"); + Cursor c2 = create().fetchLazy(create().resultQuery("select * from t_author order by id").fetchResultSet()); + + for (int j = 0; j < 2; j++) { + assertTrue(c1.hasNext()); + assertTrue(c2.hasNext()); + assertEquals(c1.fetchOne(), c2.fetchOne()); + } + + assertFalse(c1.hasNext()); + assertFalse(c2.hasNext()); + + // Fetching ResultSets ResultSet rs = create().resultQuery("select * from t_author order by id").fetchResultSet(); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); diff --git a/jOOQ/src/main/java/org/jooq/FactoryOperations.java b/jOOQ/src/main/java/org/jooq/FactoryOperations.java index a2e1107c11..44e3bf029c 100644 --- a/jOOQ/src/main/java/org/jooq/FactoryOperations.java +++ b/jOOQ/src/main/java/org/jooq/FactoryOperations.java @@ -221,6 +221,10 @@ public interface FactoryOperations extends Configuration { * Fetch all data from a JDBC {@link ResultSet} and transform it to a jOOQ * {@link Result}. After fetching all data, the JDBC ResultSet will be * closed. + *

+ * Use {@link #fetchLazy(ResultSet)}, to fetch one Record at a + * time, instead of load the entire ResultSet into a jOOQ + * Result at once. * * @param rs The JDBC ResultSet to fetch data from * @return The resulting jOOQ Result @@ -229,6 +233,21 @@ public interface FactoryOperations extends Configuration { @Support Result fetch(ResultSet rs) throws DataAccessException; + /** + * Fetch all data from a JDBC {@link ResultSet} and transform it to a jOOQ + * {@link Result}. After fetching all data, the JDBC ResultSet will be + * closed. + *

+ * Use {@link #fetch(ResultSet)}, to load the entire ResultSet + * into a jOOQ Result at once. + * + * @param rs The JDBC ResultSet to fetch data from + * @return The resulting jOOQ Result + * @throws DataAccessException if something went wrong executing the query + */ + @Support + Cursor fetchLazy(ResultSet rs) throws DataAccessException; + /** * Fetch all data from a CSV string. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/Factory.java b/jOOQ/src/main/java/org/jooq/impl/Factory.java index 1301bb0131..480a22811c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Factory.java +++ b/jOOQ/src/main/java/org/jooq/impl/Factory.java @@ -1682,15 +1682,18 @@ public class Factory implements FactoryOperations { // ------------------------------------------------------------------------- /** - * Fetch all data from a JDBC {@link ResultSet} and transform it to a jOOQ - * {@link Result}. After fetching all data, the JDBC ResultSet will be - * closed. - * - * @param rs The JDBC ResultSet to fetch data from - * @return The resulting jOOQ Result + * {@inheritDoc} */ @Override public final Result fetch(ResultSet rs) { + return fetchLazy(rs).fetch(); + } + + /** + * {@inheritDoc} + */ + @Override + public final Cursor fetchLazy(ResultSet rs) { ExecuteContext ctx = new DefaultExecuteContext(this); ExecuteListener listener = new ExecuteListeners(ctx); @@ -1698,7 +1701,7 @@ public class Factory implements FactoryOperations { FieldProvider fields = new MetaDataFieldProvider(this, rs.getMetaData()); ctx.resultSet(rs); - return new CursorImpl(ctx, listener, fields).fetch(); + return new CursorImpl(ctx, listener, fields); } catch (SQLException e) { ctx.sqlException(e); diff --git a/jOOQ/src/main/java/org/jooq/impl/FactoryProxy.java b/jOOQ/src/main/java/org/jooq/impl/FactoryProxy.java index a1be44d7cc..eb6020fc3e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FactoryProxy.java +++ b/jOOQ/src/main/java/org/jooq/impl/FactoryProxy.java @@ -397,6 +397,11 @@ public final class FactoryProxy implements FactoryOperations { return getDelegate().fetch(rs); } + @Override + public final Cursor fetchLazy(ResultSet rs) { + return getDelegate().fetchLazy(rs); + } + @Override public final Result fetchFromCSV(String string) { return null;