git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@368466 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -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 | ||||
| =================================== | =================================== | ||||
| @@ -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><![CDATA[</code> ... <code>]]></code> sections so you don't | <code><![CDATA[</code> ... <code>]]></code> sections so you don't | ||||
| @@ -239,6 +247,23 @@ update some_table set column1 = column1 + 1 where column2 < 42; | |||||
| ]]></sql> | ]]></sql> | ||||
| </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><sql | |||||
| driver="org.hsqldb.jdbcDriver"; | |||||
| url="jdbc:hsqldb:file:${database.dir}" | |||||
| userid="sa" | |||||
| password="" | |||||
| expandProperties="true" | |||||
| > | |||||
| <transaction> | |||||
| CREATE USER ${newuser} PASSWORD ${newpassword} | |||||
| </transaction> | |||||
| </sql> | |||||
| </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 | ||||
| @@ -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> | |||||
| @@ -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; | ||||
| @@ -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; | |||||
| } | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -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(); | |||||
| } | } | ||||
| /** | /** | ||||