[jOOQ/jOOQ#8993] NullPointerException when JDBC driver returns null on getGeneratedKeys call using ZDAL5 driver on MySQL

This commit is contained in:
Lukas Eder 2019-08-13 11:35:39 +02:00
parent 621ba842ed
commit e2a761e8d2
2 changed files with 16 additions and 4 deletions

View File

@ -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

View File

@ -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