From e2a761e8d2007b2306057cb0c094be66c7ecedb4 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 13 Aug 2019 11:35:39 +0200 Subject: [PATCH] [jOOQ/jOOQ#8993] NullPointerException when JDBC driver returns null on getGeneratedKeys call using ZDAL5 driver on MySQL --- .../tools/jdbc/DefaultPreparedStatement.java | 2 +- .../org/jooq/tools/jdbc/DefaultStatement.java | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/tools/jdbc/DefaultPreparedStatement.java b/jOOQ/src/main/java/org/jooq/tools/jdbc/DefaultPreparedStatement.java index e6d14e5050..e6cc5c5604 100644 --- a/jOOQ/src/main/java/org/jooq/tools/jdbc/DefaultPreparedStatement.java +++ b/jOOQ/src/main/java/org/jooq/tools/jdbc/DefaultPreparedStatement.java @@ -91,7 +91,7 @@ public class DefaultPreparedStatement extends DefaultStatement implements Prepar @Override public ResultSet executeQuery() throws SQLException { - return new DefaultResultSet(getDelegatePreparedStatement().executeQuery(), this); + return wrap(getDelegatePreparedStatement().executeQuery()); } @Override diff --git a/jOOQ/src/main/java/org/jooq/tools/jdbc/DefaultStatement.java b/jOOQ/src/main/java/org/jooq/tools/jdbc/DefaultStatement.java index 7383be86d8..3d64e93ddc 100644 --- a/jOOQ/src/main/java/org/jooq/tools/jdbc/DefaultStatement.java +++ b/jOOQ/src/main/java/org/jooq/tools/jdbc/DefaultStatement.java @@ -71,6 +71,18 @@ public class DefaultStatement extends JDBC41Statement implements Statement { return delegate; } + // ------------------------------------------------------------------------ + // XXX Auxiliary methods + // ------------------------------------------------------------------------ + + protected ResultSet wrap(ResultSet wrapped) { + + // [#8993] Some JDBC drivers produce null ResultSets where they shouldn't. + // This method allows for passing along this null result value + // rather than wrapping it, leading to unrelated NPEs later. + return wrapped == null ? null : new DefaultResultSet(wrapped, this); + } + // ------------------------------------------------------------------------ // XXX Executing the statement // ------------------------------------------------------------------------ @@ -102,7 +114,7 @@ public class DefaultStatement extends JDBC41Statement implements Statement { @Override public ResultSet executeQuery(String sql) throws SQLException { - return new DefaultResultSet(getDelegateStatement().executeQuery(sql), this); + return wrap(getDelegateStatement().executeQuery(sql)); } @Override @@ -201,7 +213,7 @@ public class DefaultStatement extends JDBC41Statement implements Statement { @Override public ResultSet getResultSet() throws SQLException { - return new DefaultResultSet(getDelegateStatement().getResultSet(), this); + return wrap(getDelegateStatement().getResultSet()); } @Override @@ -266,7 +278,7 @@ public class DefaultStatement extends JDBC41Statement implements Statement { @Override public ResultSet getGeneratedKeys() throws SQLException { - return new DefaultResultSet(getDelegateStatement().getGeneratedKeys(), this); + return wrap(getDelegateStatement().getGeneratedKeys()); } @Override