[jOOQ/jOOQ#14205] ResultSet diagnostics don't work for PreparedStatement

This commit is contained in:
Lukas Eder 2022-11-11 12:50:40 +01:00
parent fe5def0b3e
commit 8045342b5f
3 changed files with 62 additions and 9 deletions

View File

@ -0,0 +1,39 @@
package org.jooq.conf;
import jakarta.xml.bind.annotation.XmlEnum;
import jakarta.xml.bind.annotation.XmlType;
/**
* <p>Java class for DiagnosticsConnection.
*
* <p>The following schema fragment specifies the expected content contained within this class.
* <pre>
* &lt;simpleType name="DiagnosticsConnection"&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
* &lt;enumeration value="DEFAULT"/&gt;
* &lt;enumeration value="ON"/&gt;
* &lt;enumeration value="OFF"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* </pre>
*
*/
@XmlType(name = "DiagnosticsConnection")
@XmlEnum
public enum DiagnosticsConnection {
DEFAULT,
ON,
OFF;
public String value() {
return name();
}
public static DiagnosticsConnection fromValue(String v) {
return valueOf(v);
}
}

View File

@ -130,47 +130,47 @@ final class DiagnosticsConnection extends DefaultConnection {
@Override
public final PreparedStatement prepareStatement(String sql) throws SQLException {
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql)));
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql)), sql);
}
@Override
public final PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), resultSetType, resultSetConcurrency));
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), resultSetType, resultSetConcurrency), sql);
}
@Override
public final PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), resultSetType, resultSetConcurrency, resultSetHoldability));
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), resultSetType, resultSetConcurrency, resultSetHoldability), sql);
}
@Override
public final PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException {
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), autoGeneratedKeys));
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), autoGeneratedKeys), sql);
}
@Override
public final PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException {
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), columnIndexes));
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), columnIndexes), sql);
}
@Override
public final PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException {
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), columnNames));
return new DiagnosticsStatement(this, getDelegate().prepareStatement(parse(sql), columnNames), sql);
}
@Override
public final CallableStatement prepareCall(String sql) throws SQLException {
return new DiagnosticsStatement(this, getDelegate().prepareCall(parse(sql)));
return new DiagnosticsStatement(this, getDelegate().prepareCall(parse(sql)), sql);
}
@Override
public final CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
return new DiagnosticsStatement(this, getDelegate().prepareCall(parse(sql), resultSetType, resultSetConcurrency));
return new DiagnosticsStatement(this, getDelegate().prepareCall(parse(sql), resultSetType, resultSetConcurrency), sql);
}
@Override
public final CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
return new DiagnosticsStatement(this, getDelegate().prepareCall(parse(sql), resultSetType, resultSetConcurrency, resultSetHoldability));
return new DiagnosticsStatement(this, getDelegate().prepareCall(parse(sql), resultSetType, resultSetConcurrency, resultSetHoldability), sql);
}
@Override

View File

@ -50,11 +50,17 @@ import org.jooq.tools.jdbc.DefaultCallableStatement;
final class DiagnosticsStatement extends DefaultCallableStatement {
final DiagnosticsConnection connection;
final String actualStatement;
DiagnosticsStatement(DiagnosticsConnection connection, Statement statement) {
this(connection, statement, null);
}
DiagnosticsStatement(DiagnosticsConnection connection, Statement statement, String actualStatement) {
super(statement);
this.connection = connection;
this.actualStatement = actualStatement;
}
@Override
@ -65,6 +71,14 @@ final class DiagnosticsStatement extends DefaultCallableStatement {
return new DiagnosticsResultSet(super.executeQuery(connection.parse(sql)), sql, this, connection);
}
@Override
public ResultSet executeQuery() throws SQLException {
if (connection.disabled())
return super.executeQuery();
else
return new DiagnosticsResultSet(super.executeQuery(), actualStatement, this, connection);
}
@Override
public final int executeUpdate(String sql) throws SQLException {
return super.executeUpdate(connection.parse(sql));