IDEMPIERE-1206 Drop obsolete QueryTimeout workaround for PostgreSQL JDBC Driver.
This commit is contained in:
parent
194cd9f05e
commit
3c80de243c
|
@ -322,15 +322,6 @@ public interface AdempiereDatabase
|
||||||
*/
|
*/
|
||||||
public String addPagingSQL(String sql, int start, int end);
|
public String addPagingSQL(String sql, int start, int end);
|
||||||
|
|
||||||
/**
|
|
||||||
* set statement/query timeout for connection
|
|
||||||
* @param conn
|
|
||||||
* @param timeout
|
|
||||||
* @return original timeout setting
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
public int setStatementTimeout(Connection conn, int timeout) throws SQLException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lock PO for update
|
* Lock PO for update
|
||||||
* @param po
|
* @param po
|
||||||
|
|
|
@ -143,13 +143,7 @@ public class MSequence extends X_AD_Sequence
|
||||||
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
|
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
|
||||||
pstmt.setString(1, TableName);
|
pstmt.setString(1, TableName);
|
||||||
//
|
//
|
||||||
//postgresql use special syntax instead of the setQueryTimeout method
|
if (DB.getDatabase().isQueryTimeoutSupported())
|
||||||
if (DB.isPostgreSQL())
|
|
||||||
{
|
|
||||||
timeoutStatement = conn.createStatement();
|
|
||||||
timeoutStatement.execute("SET LOCAL statement_timeout TO " + ( QUERY_TIME_OUT * 1000 ));
|
|
||||||
}
|
|
||||||
else if (DB.getDatabase().isQueryTimeoutSupported())
|
|
||||||
{
|
{
|
||||||
pstmt.setQueryTimeout(QUERY_TIME_OUT);
|
pstmt.setQueryTimeout(QUERY_TIME_OUT);
|
||||||
}
|
}
|
||||||
|
@ -434,13 +428,7 @@ public class MSequence extends X_AD_Sequence
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
//postgresql use special syntax instead of the setQueryTimeout method
|
if (DB.getDatabase().isQueryTimeoutSupported())
|
||||||
if (DB.isPostgreSQL())
|
|
||||||
{
|
|
||||||
timeoutStatement = conn.createStatement();
|
|
||||||
timeoutStatement.execute("SET LOCAL statement_timeout TO " + ( QUERY_TIME_OUT * 1000 ));
|
|
||||||
}
|
|
||||||
else if (DB.getDatabase().isQueryTimeoutSupported())
|
|
||||||
{
|
{
|
||||||
pstmt.setQueryTimeout(QUERY_TIME_OUT);
|
pstmt.setQueryTimeout(QUERY_TIME_OUT);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1017,16 +1017,12 @@ public final class DB
|
||||||
CPreparedStatement cs = ProxyFactory.newCPreparedStatement(ResultSet.TYPE_FORWARD_ONLY,
|
CPreparedStatement cs = ProxyFactory.newCPreparedStatement(ResultSet.TYPE_FORWARD_ONLY,
|
||||||
ResultSet.CONCUR_UPDATABLE, sql, trxName); // converted in call
|
ResultSet.CONCUR_UPDATABLE, sql, trxName); // converted in call
|
||||||
|
|
||||||
int currentTimeout = -1;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
setParameters(cs, params);
|
setParameters(cs, params);
|
||||||
//set timeout
|
//set timeout
|
||||||
if (timeOut > 0)
|
if (timeOut > 0)
|
||||||
{
|
{
|
||||||
if (DB.isPostgreSQL())
|
|
||||||
currentTimeout = DB.getDatabase().setStatementTimeout(cs.getConnection(), timeOut);
|
|
||||||
else
|
|
||||||
cs.setQueryTimeout(timeOut);
|
cs.setQueryTimeout(timeOut);
|
||||||
}
|
}
|
||||||
no = cs.executeUpdate();
|
no = cs.executeUpdate();
|
||||||
|
@ -1050,14 +1046,6 @@ public final class DB
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (DB.isPostgreSQL() && timeOut > 0)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DB.getDatabase().setStatementTimeout(cs.getConnection(), currentTimeout);
|
|
||||||
}
|
|
||||||
catch (SQLException e) {}
|
|
||||||
}
|
|
||||||
// Always close cursor
|
// Always close cursor
|
||||||
close(cs);
|
close(cs);
|
||||||
cs = null;
|
cs = null;
|
||||||
|
@ -1097,52 +1085,11 @@ public final class DB
|
||||||
CPreparedStatement cs = ProxyFactory.newCPreparedStatement(ResultSet.TYPE_FORWARD_ONLY,
|
CPreparedStatement cs = ProxyFactory.newCPreparedStatement(ResultSet.TYPE_FORWARD_ONLY,
|
||||||
ResultSet.CONCUR_UPDATABLE, sql, trxName); // converted in call
|
ResultSet.CONCUR_UPDATABLE, sql, trxName); // converted in call
|
||||||
|
|
||||||
boolean autoCommit = false;
|
|
||||||
int currentTimeout = 0;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
autoCommit = cs.getConnection().getAutoCommit();
|
|
||||||
setParameters(cs, params);
|
setParameters(cs, params);
|
||||||
if (timeOut > 0)
|
if (timeOut > 0)
|
||||||
{
|
{
|
||||||
if (DB.isPostgreSQL())
|
|
||||||
{
|
|
||||||
Statement timeoutStatement = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Connection conn = cs.getConnection();
|
|
||||||
if (autoCommit)
|
|
||||||
{
|
|
||||||
conn.setAutoCommit(false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ResultSet rs = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
rs = conn.createStatement().executeQuery("select current_setting('statement_timeout')");
|
|
||||||
if (rs.next())
|
|
||||||
currentTimeout = rs.getInt(1);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
close(rs.getStatement());
|
|
||||||
close(rs);rs = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
timeoutStatement = conn.createStatement();
|
|
||||||
timeoutStatement.execute("SET LOCAL statement_timeout TO " + ( timeOut * 1000 ));
|
|
||||||
if (log.isLoggable(Level.FINEST))
|
|
||||||
{
|
|
||||||
log.finest("Set statement timeout to " + timeOut);
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {}
|
|
||||||
finally{
|
|
||||||
DB.close(timeoutStatement);
|
|
||||||
timeoutStatement = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
cs.setQueryTimeout(timeOut);
|
cs.setQueryTimeout(timeOut);
|
||||||
}
|
}
|
||||||
|
@ -1160,43 +1107,6 @@ public final class DB
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (DB.isPostgreSQL() && timeOut > 0)
|
|
||||||
{
|
|
||||||
Statement timeoutStatement = null;
|
|
||||||
try {
|
|
||||||
if (autoCommit)
|
|
||||||
{
|
|
||||||
cs.getConnection().setAutoCommit(true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (currentTimeout > 0)
|
|
||||||
{
|
|
||||||
timeoutStatement = cs.getConnection().createStatement();
|
|
||||||
timeoutStatement.execute("SET LOCAL statement_timeout TO " + ( currentTimeout * 1000 ));
|
|
||||||
if (log.isLoggable(Level.FINEST))
|
|
||||||
{
|
|
||||||
log.finest("Reset statement timeout to " + currentTimeout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
timeoutStatement = cs.getConnection().createStatement();
|
|
||||||
timeoutStatement.execute("SET LOCAL statement_timeout TO Default");
|
|
||||||
if (log.isLoggable(Level.FINEST))
|
|
||||||
{
|
|
||||||
log.finest("Reset statement timeout to default");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
}
|
|
||||||
finally{
|
|
||||||
close(timeoutStatement);
|
|
||||||
timeoutStatement = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(cs);
|
close(cs);
|
||||||
cs = null;
|
cs = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1319,12 +1319,6 @@ public class DB_Oracle implements AdempiereDatabase
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int setStatementTimeout(Connection conn, int timeout) throws SQLException {
|
|
||||||
//not supported by oracle
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean forUpdate(PO po, int timeout) {
|
public boolean forUpdate(PO po, int timeout) {
|
||||||
//only can lock for update if using trx
|
//only can lock for update if using trx
|
||||||
|
|
|
@ -1036,46 +1036,6 @@ public class DB_PostgreSQL implements AdempiereDatabase
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int setStatementTimeout(Connection conn, int timeOut) throws SQLException {
|
|
||||||
int currentTimeout = 0;
|
|
||||||
boolean autoCommit = conn.getAutoCommit();
|
|
||||||
ResultSet rs = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
rs = conn.createStatement().executeQuery("select extract(epoch from current_setting('statement_timeout')::interval)*1000");
|
|
||||||
if (rs.next()) {
|
|
||||||
currentTimeout = rs.getInt(1) / 1000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (rs != null)
|
|
||||||
DB.close(rs.getStatement());
|
|
||||||
DB.close(rs);
|
|
||||||
rs = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Statement timeoutStatement = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
timeoutStatement = conn.createStatement();
|
|
||||||
String sql = "SET " + (autoCommit ? "SESSION" : "LOCAL") + " statement_timeout TO " + ( timeOut > 0 ? Integer.toString(timeOut * 1000) : " DEFAULT ");
|
|
||||||
timeoutStatement.execute(sql);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
DB.close(timeoutStatement);
|
|
||||||
timeoutStatement = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (log.isLoggable(Level.FINEST))
|
|
||||||
{
|
|
||||||
log.finest("Set statement timeout to " + timeOut);
|
|
||||||
}
|
|
||||||
return currentTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean forUpdate(PO po, int timeout) {
|
public boolean forUpdate(PO po, int timeout) {
|
||||||
//only can lock for update if using trx
|
//only can lock for update if using trx
|
||||||
|
@ -1110,14 +1070,13 @@ public class DB_PostgreSQL implements AdempiereDatabase
|
||||||
|
|
||||||
PreparedStatement stmt = null;
|
PreparedStatement stmt = null;
|
||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
int currentTimeout = -1;
|
|
||||||
try {
|
try {
|
||||||
stmt = DB.prepareStatement(sqlBuffer.toString(),
|
stmt = DB.prepareStatement(sqlBuffer.toString(),
|
||||||
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE, po.get_TrxName());
|
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE, po.get_TrxName());
|
||||||
for(int i = 0; i < keyColumns.length; i++) {
|
for(int i = 0; i < keyColumns.length; i++) {
|
||||||
stmt.setObject(i+1, parameters[i]);
|
stmt.setObject(i+1, parameters[i]);
|
||||||
}
|
}
|
||||||
currentTimeout = setStatementTimeout(stmt.getConnection(), (timeout > 0 ? timeout : LOCK_TIME_OUT));
|
stmt.setQueryTimeout(timeout > 0 ? timeout : LOCK_TIME_OUT);
|
||||||
|
|
||||||
rs = stmt.executeQuery();
|
rs = stmt.executeQuery();
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
|
@ -1129,9 +1088,6 @@ public class DB_PostgreSQL implements AdempiereDatabase
|
||||||
if (log.isLoggable(Level.INFO))log.log(Level.INFO, e.getLocalizedMessage(), e);
|
if (log.isLoggable(Level.INFO))log.log(Level.INFO, e.getLocalizedMessage(), e);
|
||||||
throw new DBException("Could not lock record for " + po.toString() + " caused by " + e.getLocalizedMessage());
|
throw new DBException("Could not lock record for " + po.toString() + " caused by " + e.getLocalizedMessage());
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
|
||||||
if(stmt!=null)setStatementTimeout(stmt.getConnection(), currentTimeout);
|
|
||||||
} catch (SQLException e) {}
|
|
||||||
DB.close(rs, stmt);
|
DB.close(rs, stmt);
|
||||||
rs = null;stmt = null;
|
rs = null;stmt = null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue