diff --git a/src/main/org/apache/tools/ant/taskdefs/SQLExec.java b/src/main/org/apache/tools/ant/taskdefs/SQLExec.java index fef51c666..6217209a1 100644 --- a/src/main/org/apache/tools/ant/taskdefs/SQLExec.java +++ b/src/main/org/apache/tools/ant/taskdefs/SQLExec.java @@ -116,6 +116,21 @@ public class SQLExec extends Task { * SQL input command */ private String sqlCommand = ""; + + /** + * Print SQL results. + */ + private boolean print = false; + + /** + * Print header columns. + */ + private boolean showheaders = true; + + /** + * Results Output file. + */ + private File output = null; /** * Set the name of the sql file to be run. @@ -165,6 +180,27 @@ public class SQLExec extends Task { public void setAutocommit(boolean autocommit) { this.autocommit = autocommit; } + + /** + * Set the print flag. + */ + public void setPrint(boolean print) { + this.print = print; + } + + /** + * Set the showheaders flag. + */ + public void setShowheaders(boolean showheaders) { + this.showheaders = showheaders; + } + + /** + * Set the output file. + */ + public void setOutput(File output) { + this.output = output; + } /** * Load the sql file and then execute it @@ -282,12 +318,16 @@ public class SQLExec extends Task { /** * Exec the sql statement. */ - protected void execSQL(String sql) throws SQLException{ + protected void execSQL(String sql) throws SQLException { if (!statement.execute(sql)) { log(statement.getUpdateCount()+" rows affected", Project.MSG_VERBOSE); } + if (print) { + printResults(); + } + SQLWarning warning = conn.getWarnings(); while(warning!=null){ log(warning + " sql warning", Project.MSG_VERBOSE); @@ -296,4 +336,49 @@ public class SQLExec extends Task { conn.clearWarnings(); } + /** + * print any results in the statement. + */ + protected void printResults() throws java.sql.SQLException { + ResultSet rs = null; + PrintStream out = System.out; + try { + if (output != null) { + out = new PrintStream(new BufferedOutputStream(new FileOutputStream(output))); + } + while ((rs = statement.getResultSet()) != null) { + ResultSetMetaData md = rs.getMetaData(); + int columnCount = md.getColumnCount(); + StringBuffer line = new StringBuffer(); + if (showheaders) { + for (int col = 1; col < columnCount; col++) { + line.append(md.getColumnName(col)); + line.append(","); + } + line.append(md.getColumnName(columnCount)); + out.println(line); + line.setLength(0); + } + while (rs.next()) { + for (int col = 1; col < columnCount; col++) { + line.append(rs.getString(col).trim()); + line.append(","); + } + line.append(rs.getString(columnCount).trim()); + out.println(line); + line.setLength(0); + } + statement.getMoreResults(); + } + } + catch (IOException ioe) { + throw new BuildException("Error writing " + output.getAbsolutePath(), ioe, location); + } + finally { + if (out != null) { + out.close(); + } + } + } + }