From 8f96a58c7d36d7bbc6c8f967a8c6a8e2f3e199ad Mon Sep 17 00:00:00 2001 From: lukaseder Date: Thu, 25 Jan 2018 12:31:04 +0100 Subject: [PATCH] [#7097] Avoid consuming result sets that aren't being closed or scrollable --- .../java/org/jooq/impl/DefaultDiagnosticsContext.java | 10 +++++++--- .../main/java/org/jooq/impl/DiagnosticsResultSet.java | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDiagnosticsContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDiagnosticsContext.java index c7097e41ee..c53017c92f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDiagnosticsContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDiagnosticsContext.java @@ -51,6 +51,7 @@ import org.jooq.DiagnosticsContext; final class DefaultDiagnosticsContext implements DiagnosticsContext { ResultSet resultSet; + boolean resultSetClosing; int resultSetFetchedColumns; int resultSetActualColumns; int resultSetFetchedRows; @@ -90,12 +91,15 @@ final class DefaultDiagnosticsContext implements DiagnosticsContext { return -1; try { - while (resultSet.next()) - resultSetActualRows++; + if (resultSetClosing || resultSet.getType() != ResultSet.TYPE_FORWARD_ONLY) { + while (resultSet.next()) + resultSetActualRows++; - resultSet.absolute(resultSetFetchedRows); + resultSet.absolute(resultSetFetchedRows); + } } catch (SQLException ignore) {} + return resultSetActualRows; } diff --git a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsResultSet.java b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsResultSet.java index 9f6e3dcffe..e61326be32 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsResultSet.java +++ b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsResultSet.java @@ -745,6 +745,7 @@ final class DiagnosticsResultSet extends DefaultResultSet { super.absolute(current = rows); DefaultDiagnosticsContext ctx = ctx(); + ctx.resultSetClosing = true; if (super.next()) connection.listeners.tooManyRowsFetched(ctx);