|
|
@@ -435,14 +435,8 @@ public class SQLExec extends JDBCTask { |
|
|
|
Transaction t = createTransaction(); |
|
|
|
t.setSrc(srcFile); |
|
|
|
t.addText(sqlCommand); |
|
|
|
conn = getConnection(); |
|
|
|
if (!isValidRdbms(conn)) { |
|
|
|
return; |
|
|
|
} |
|
|
|
try { |
|
|
|
statement = conn.createStatement(); |
|
|
|
statement.setEscapeProcessing(escapeProcessing); |
|
|
|
|
|
|
|
try { |
|
|
|
PrintStream out = System.out; |
|
|
|
try { |
|
|
|
if (output != null) { |
|
|
@@ -458,7 +452,7 @@ public class SQLExec extends JDBCTask { |
|
|
|
((Transaction) e.nextElement()).runTransaction(out); |
|
|
|
if (!isAutocommit()) { |
|
|
|
log("Committing transaction", Project.MSG_VERBOSE); |
|
|
|
conn.commit(); |
|
|
|
getConnection().commit(); |
|
|
|
} |
|
|
|
} |
|
|
|
} finally { |
|
|
@@ -476,15 +470,15 @@ public class SQLExec extends JDBCTask { |
|
|
|
} |
|
|
|
} finally { |
|
|
|
try { |
|
|
|
if (statement != null) { |
|
|
|
statement.close(); |
|
|
|
if (getStatement() != null) { |
|
|
|
getStatement().close(); |
|
|
|
} |
|
|
|
} catch (SQLException ex) { |
|
|
|
// ignore |
|
|
|
} |
|
|
|
try { |
|
|
|
if (conn != null) { |
|
|
|
conn.close(); |
|
|
|
if (getConnection() != null) { |
|
|
|
getConnection().close(); |
|
|
|
} |
|
|
|
} catch (SQLException ex) { |
|
|
|
// ignore |
|
|
@@ -575,9 +569,9 @@ public class SQLExec extends JDBCTask { |
|
|
|
boolean ret; |
|
|
|
int updateCount = 0, updateCountTotal = 0; |
|
|
|
|
|
|
|
ret = statement.execute(sql); |
|
|
|
updateCount = statement.getUpdateCount(); |
|
|
|
resultSet = statement.getResultSet(); |
|
|
|
ret = getStatement().execute(sql); |
|
|
|
updateCount = getStatement().getUpdateCount(); |
|
|
|
resultSet = getStatement().getResultSet(); |
|
|
|
do { |
|
|
|
if (!ret) { |
|
|
|
if (updateCount != -1) { |
|
|
@@ -586,10 +580,10 @@ public class SQLExec extends JDBCTask { |
|
|
|
} else if (print) { |
|
|
|
printResults(resultSet, out); |
|
|
|
} |
|
|
|
ret = statement.getMoreResults(); |
|
|
|
ret = getStatement().getMoreResults(); |
|
|
|
if (ret) { |
|
|
|
updateCount = statement.getUpdateCount(); |
|
|
|
resultSet = statement.getResultSet(); |
|
|
|
updateCount = getStatement().getUpdateCount(); |
|
|
|
resultSet = getStatement().getResultSet(); |
|
|
|
} |
|
|
|
} while (ret); |
|
|
|
|
|
|
@@ -598,12 +592,12 @@ public class SQLExec extends JDBCTask { |
|
|
|
if (print && showtrailers) { |
|
|
|
out.println(updateCountTotal + " rows affected"); |
|
|
|
} |
|
|
|
SQLWarning warning = conn.getWarnings(); |
|
|
|
SQLWarning warning = getConnection().getWarnings(); |
|
|
|
while (warning != null) { |
|
|
|
log(warning + " sql warning", Project.MSG_VERBOSE); |
|
|
|
warning = warning.getNextWarning(); |
|
|
|
} |
|
|
|
conn.clearWarnings(); |
|
|
|
getConnection().clearWarnings(); |
|
|
|
goodSql++; |
|
|
|
} catch (SQLException e) { |
|
|
|
log("Failed to execute: " + sql, Project.MSG_ERR); |
|
|
@@ -633,7 +627,7 @@ public class SQLExec extends JDBCTask { |
|
|
|
* @throws SQLException on SQL problems. |
|
|
|
*/ |
|
|
|
protected void printResults(PrintStream out) throws SQLException { |
|
|
|
ResultSet rs = statement.getResultSet(); |
|
|
|
ResultSet rs = getStatement().getResultSet(); |
|
|
|
try { |
|
|
|
printResults(rs, out); |
|
|
|
} finally { |
|
|
@@ -692,15 +686,52 @@ public class SQLExec extends JDBCTask { |
|
|
|
* @since Ant 1.7 |
|
|
|
*/ |
|
|
|
private void closeQuietly() { |
|
|
|
if (!isAutocommit() && conn != null && onError.equals("abort")) { |
|
|
|
if (!isAutocommit() && getConnection() != null && onError.equals("abort")) { |
|
|
|
try { |
|
|
|
conn.rollback(); |
|
|
|
getConnection().rollback(); |
|
|
|
} catch (SQLException ex) { |
|
|
|
// ignore |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Caches the connection returned by the base class's getConnection method. |
|
|
|
* |
|
|
|
* <p>Subclasses that need to provide a different connection than |
|
|
|
* the base class would, should override this method but keep in |
|
|
|
* mind that this class expects to get the same connection |
|
|
|
* instance on consecutive calls.</p> |
|
|
|
*/ |
|
|
|
protected Connection getConnection() { |
|
|
|
if (conn == null) { |
|
|
|
conn = super.getConnection(); |
|
|
|
if (!isValidRdbms(conn)) { |
|
|
|
conn = null; |
|
|
|
} |
|
|
|
} |
|
|
|
return conn; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Creates and configures a Statement instance which is then |
|
|
|
* cached for subsequent calls. |
|
|
|
* |
|
|
|
* <p>Subclasses that want to provide different Statement |
|
|
|
* instances, should override this method but keep in mind that |
|
|
|
* this class expects to get the same connection instance on |
|
|
|
* consecutive calls.</p> |
|
|
|
*/ |
|
|
|
protected Statement getStatement() throws SQLException { |
|
|
|
if (statement == null) { |
|
|
|
statement = getConnection().createStatement(); |
|
|
|
statement.setEscapeProcessing(escapeProcessing); |
|
|
|
} |
|
|
|
|
|
|
|
return statement; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* The action a task should perform on an error, |
|
|
|
* one of "continue", "stop" and "abort" |
|
|
|