Browse Source

bug #38245; sql broken on Ant1.7; added expandProperties attribute to expand properties in SQL statements.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@368466 13f79535-47bb-0310-9956-ffa450edef68
master
Steve Loughran 19 years ago
parent
commit
b13256ba3a
6 changed files with 129 additions and 25 deletions
  1. +8
    -3
      WHATSNEW
  2. +27
    -2
      docs/manual/CoreTasks/sql.html
  3. +36
    -11
      docs/manual/api/index.html
  4. +4
    -1
      src/main/org/apache/tools/ant/taskdefs/JDBCTask.java
  5. +46
    -6
      src/main/org/apache/tools/ant/taskdefs/SQLExec.java
  6. +8
    -2
      src/main/org/apache/tools/ant/types/resources/FileResource.java

+ 8
- 3
WHATSNEW View File

@@ -334,20 +334,25 @@ Other changes:
* <xslt> now accepts nested FileNameMappers e.g. <globmapper>. * <xslt> now accepts nested FileNameMappers e.g. <globmapper>.
Bugzilla report 37604. Bugzilla report 37604.


* New task loadresource that accompanies loadfile for non file resources.
* New task <loadresource> that accompanies <loadfile> for non file resources.


* <echo> now supports an encoding when saving to a file. * <echo> now supports an encoding when saving to a file.


* new GreedyInputHandler added. * new GreedyInputHandler added.


* add textfile attribute to the filesmatch condition.
* add textfile attribute to the <filesmatch> condition. When true, the text
contents of the two files are compared, ignoring line ending differences.


* new resourcesmatch condition.
* new <resourcesmatch> condition.


* added the onmissingfiltersfile attribute to filterset. Bugzilla report 19845. * added the onmissingfiltersfile attribute to filterset. Bugzilla report 19845.


* added the inline handler element to the input task. * added the inline handler element to the input task.


* <sql> supports property expansion if you set the expandProperties attribute. By default
it does not expand properties, something we dare not change for fear of breaking complex
SQL operations in existing files.

Changes from Ant 1.6.4 to Ant 1.6.5 Changes from Ant 1.6.4 to Ant 1.6.5
=================================== ===================================




+ 27
- 2
docs/manual/CoreTasks/sql.html View File

@@ -146,10 +146,17 @@ and <b>abort</b> execution and transaction and fail task.</p>
object will perform escape substitution.<br> object will perform escape substitution.<br>
See <a See <a
href="http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Statement.html#setEscapeProcessing(boolean)">Statement's href="http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Statement.html#setEscapeProcessing(boolean)">Statement's
API docs</a> for details. <em>since Ant 1.6</em>.
API docs</a> for details. <emSsince Ant 1.6</em>.
<td width="10%" valign="top">No (default=true)</td> <td width="10%" valign="top">No (default=true)</td>
</tr> </tr>


<tr>
<td width="12%" valign="top">expandproperties</td>
<td width="78%" valign="top">Set to true to turn on property expansion in
nested SQL, inline in the task or nested transactions. <em>Since Ant 1.7</em>.
<td width="10%" valign="top">No (default=false)</td>
</tr>

</table> </table>


<h3>Parameters specified as nested elements</h3> <h3>Parameters specified as nested elements</h3>
@@ -220,7 +227,8 @@ truncate table some_other_table;


<p>Connects to the database given in <i>url</i> as the sa <p>Connects to the database given in <i>url</i> as the sa
user using the org.database.jdbcDriver and executes the two SQL statements user using the org.database.jdbcDriver and executes the two SQL statements
inserting data into some_table and truncating some_other_table </p>
inserting data into some_table and truncating some_other_table. Ant Properties
in the nested text will not be expanded.</p>


<p>Note that you may want to enclose your statements in <p>Note that you may want to enclose your statements in
<code>&lt;![CDATA[</code> ... <code>]]&gt;</code> sections so you don't <code>&lt;![CDATA[</code> ... <code>]]&gt;</code> sections so you don't
@@ -239,6 +247,23 @@ update some_table set column1 = column1 + 1 where column2 &lt; 42;
]]&gt;&lt;/sql&gt; ]]&gt;&lt;/sql&gt;
</pre></blockquote> </pre></blockquote>


The following command turns property expansion in nested text on (it is off purely for backwards
compatibility), then creates a new user in the HSQLDB database using Ant properties.

<blockquote><pre>&lt;sql
driver="org.hsqldb.jdbcDriver";
url="jdbc:hsqldb:file:${database.dir}"
userid="sa"
password=""
expandProperties="true"
&gt;
&lt;transaction&gt;
CREATE USER ${newuser} PASSWORD ${newpassword}
&lt;/transaction&gt;
&lt;/sql&gt;
</pre></blockquote>


<p>The following connects to the database given in url as the sa user using <p>The following connects to the database given in url as the sa user using
the org.database.jdbcDriver and executes the SQL statements contained within the org.database.jdbcDriver and executes the SQL statements contained within
the files data1.sql, data2.sql and data3.sql and then executes the truncate the files data1.sql, data2.sql and data3.sql and then executes the truncate


+ 36
- 11
docs/manual/api/index.html View File

@@ -1,12 +1,37 @@
<html>
<head>
<meta http-equiv="refresh" content="1; URL=packages.html">
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
<title>Apache Ant API</title>
</head>
<body>
Redirecting to <a href="packages.html">Apache Ant API ...</a>
</body>
</html>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc on Mon Jan 09 14:48:52 GMT 2006-->
<TITLE>
Apache Ant API
</TITLE>
<SCRIPT type="text/javascript">
targetPage = "" + window.location.search;
if (targetPage != "" && targetPage != "undefined")
targetPage = targetPage.substring(1);
function loadFrames() {
if (targetPage != "" && targetPage != "undefined")
top.classFrame.location = top.targetPage;
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
<FRAMESET rows="30%,70%" title="" onLoad="top.loadFrames()">
<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">
<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
</FRAMESET>
<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
<NOFRAMES>
<H2>
Frame Alert</H2>


<P>
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
<BR>
Link to<A HREF="overview-summary.html">Non-frame version.</A>
</NOFRAMES>
</FRAMESET>
</HTML>

+ 4
- 1
src/main/org/apache/tools/ant/taskdefs/JDBCTask.java View File

@@ -300,7 +300,7 @@ public abstract class JDBCTask extends Task {
*/ */
protected Connection getConnection() throws BuildException { protected Connection getConnection() throws BuildException {
if (userId == null) { if (userId == null) {
throw new BuildException("User Id attribute must be set!", getLocation());
throw new BuildException("UserId attribute must be set!", getLocation());
} }
if (password == null) { if (password == null) {
throw new BuildException("Password attribute must be set!", getLocation()); throw new BuildException("Password attribute must be set!", getLocation());
@@ -378,14 +378,17 @@ public abstract class JDBCTask extends Task {
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
throw new BuildException( throw new BuildException(
"Class Not Found: JDBC driver " + driver + " could not be loaded", "Class Not Found: JDBC driver " + driver + " could not be loaded",
e,
getLocation()); getLocation());
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
throw new BuildException( throw new BuildException(
"Illegal Access: JDBC driver " + driver + " could not be loaded", "Illegal Access: JDBC driver " + driver + " could not be loaded",
e,
getLocation()); getLocation());
} catch (InstantiationException e) { } catch (InstantiationException e) {
throw new BuildException( throw new BuildException(
"Instantiation Exception: JDBC driver " + driver + " could not be loaded", "Instantiation Exception: JDBC driver " + driver + " could not be loaded",
e,
getLocation()); getLocation());
} }
return driverInstance; return driverInstance;


+ 46
- 6
src/main/org/apache/tools/ant/taskdefs/SQLExec.java View File

@@ -180,6 +180,14 @@ public class SQLExec extends JDBCTask {
*/ */
private boolean escapeProcessing = true; private boolean escapeProcessing = true;


/**
* should properties be expanded in text?
* false for backwards compatibility
*
* @since Ant 1.7
*/
private boolean expandProperties = false;

/** /**
* Set the name of the SQL file to be run. * Set the name of the SQL file to be run.
* Required unless statements are enclosed in the build file * Required unless statements are enclosed in the build file
@@ -189,12 +197,35 @@ public class SQLExec extends JDBCTask {
this.srcFile = srcFile; this.srcFile = srcFile;
} }


/**
* Enable property expansion inside nested text
*
* @param expandProperties
* @since Ant 1.7
*/
public void setExpandProperties(boolean expandProperties) {
this.expandProperties = expandProperties;
}

/**
* is property expansion inside inline text enabled?
*
* @return true if properties are to be expanded.
* @since Ant 1.7
*/
public boolean getExpandProperties() {
return expandProperties;
}

/** /**
* Set an inline SQL command to execute. * Set an inline SQL command to execute.
* NB: Properties are not expanded in this text.
* @param sql a inline string containing the SQL command.
* NB: Properties are not expanded in this text unless {@link #expandProperties}
* is set.
* @param sql an inline string containing the SQL command.
*/ */
public void addText(String sql) { public void addText(String sql) {
//there is no need to expand properties here as that happens when Transaction.addText is
//called; to do so here would be an error.
this.sqlCommand += sql; this.sqlCommand += sql;
} }


@@ -209,7 +240,7 @@ public class SQLExec extends JDBCTask {


/** /**
* Adds a collection of resources (nested element). * Adds a collection of resources (nested element).
* @param set a collection of resources containing SQL commands,
* @param rc a collection of resources containing SQL commands,
* each resource is run in a separate transaction. * each resource is run in a separate transaction.
* @since Ant 1.7 * @since Ant 1.7
*/ */
@@ -664,11 +695,15 @@ public class SQLExec extends JDBCTask {
* @param src the source file * @param src the source file
*/ */
public void setSrc(File src) { public void setSrc(File src) {
setSrcResource(new FileResource(src));
//there are places (in this file, and perhaps elsewhere, where it is assumed
//that null is an acceptable parameter.
if(src!=null) {
setSrcResource(new FileResource(src));
}
} }


/** /**
* Set the source file attribute.
* Set the source resource attribute.
* @param src the source file * @param src the source file
* @since Ant 1.7 * @since Ant 1.7
*/ */
@@ -684,7 +719,12 @@ public class SQLExec extends JDBCTask {
* @param sql the inline text * @param sql the inline text
*/ */
public void addText(String sql) { public void addText(String sql) {
this.tSqlCommand += sql;
if (sql != null) {
if (getExpandProperties()) {
sql = getProject().replaceProperties(sql);
}
this.tSqlCommand += sql;
}
} }


/** /**


+ 8
- 2
src/main/org/apache/tools/ant/types/resources/FileResource.java View File

@@ -277,8 +277,14 @@ public class FileResource extends Resource implements Touchable {
* @return this FileResource formatted as a String. * @return this FileResource formatted as a String.
*/ */
public String toString() { public String toString() {
return isReference() ? getCheckedRef().toString()
: FILE_UTILS.normalize(file.getAbsolutePath()).getAbsolutePath();
if(isReference()) {
return getCheckedRef().toString();
}
if(file==null) {
return "(unbound file resource)";
}
String absolutePath = file.getAbsolutePath();
return FILE_UTILS.normalize(absolutePath).getAbsolutePath();
} }


/** /**


Loading…
Cancel
Save