We are using dbdeploy and are very happy with the results. You can read more about it at http://dbdeploy.com/
<taskdef name="dbdeploy" classname="com.dbdeploy.AntTarget" classpathref="dbdeploy.classpath"/> <path id="dbdeploy-db-classpath"> <fileset dir="${dbdeploy.dir}/dbjars"> <include name="**/*.jar"/> </fileset> </path> <path id="dbdeploy.classpath"> <fileset dir="${dbdeploy.dir}"> <include name="dbdeploy-ant-*.jar"/> </fileset> <!-- the dbdeploy task also needs the database driver jar on the classpath --> <path refid="dbdeploy-db-classpath" /> </path> <target name="updateDB" description="automatically runs the sql scripts on db" > <dbdeploy driver="${db.driver}" url="${db.url}" userid="${db.username}" password="${db.password}" dir="${deployJob}/sqlScripts" /> </target> On Mon, 2010-11-08 at 07:19 -0800, Java Jboss wrote: > Hi, > > Thank you to all for the suggestions. I have now got an ANT script that > checks the current database version and then runs a set of mysql scripts to > upgrade the database to the next version. What I am struggling with is when > it goes through the list="${db.upgrade.path.list}. On the first run the > folder exists and runs the scripts then on the second run it checks for the > next folder(it doesn't exist at the moment) and it should drop out echoing > the new current version but in my case it tries to run every occurrence as > per the list="${db.upgrade.path.list}. I want it to stop when it can't meet > the next condition. The output I am getting is as below: > > <!-- *************************************** > Restore MySQL database > **************************************** --> > <target name="restore-db" > > <!-- Clean up the database by deleting and then creating it. --> > <antcall target="delete_db"/> > <antcall target="create_db"/> > <!-- Import data from the backup file. --> > <exec executable="${my.sql}" input="db_dumps/db1.sql"> > <arg value="--user=root"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="<newschema1>"/> > </exec> > <exec executable="${my.sql}" input="db_dumps/db2.sql"> > <arg value="--user=root"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="<newschema2>"/> > </exec> > <exec executable="${my.sql}" input="db_dumps/db3.sql"> > <arg value="--user=root"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="<newschema3>"/> > </exec> > <exec executable="${my.sql}" input="db_dumps/db4.sql"> > <arg value="--user=root"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="<newschema4>"/> > </exec> > </target> > > <target name="delete_db"> > <exec executable="${my.sql}"> > <arg value="--user=root"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="--force"/> > <arg value="drop"/> > <arg value="<newschema1>"/> > <arg value="<newschema2>"/> > <arg value="<newschema3>"/> > <arg value="<newschema4>"/> > </exec> > </target> > > <target name="create_db"> > <exec executable="${my.sql}"> > <arg value="--user=root"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="--force"/> > <arg value="create"/> > <arg value="<newschema1>"/> > <arg value="<newschema2>"/> > <arg value="<newschema3>"/> > <arg value="<newschema4>"/> > </exec> > </target> > > <!-- *************************************** > Get database version > **************************************** --> > <target name="get-db-version" > > <exec executable="${my.sql}" outputproperty="get-db-version.out" > input="getdbver.sql"> > <arg line="--host=${server.ip}"/> > <arg line="--user=root"/> > <arg line="--password=<password>"/> > <arg line="-D${newschema1}"/> > </exec> > <echo>Is at ${get-db-version.out}</echo> > </target> > > <!-- ************************************************ > Check database upgrade scripts exists > *********************************************** --> > <target name="db-version" if="get-db-version.out" depends="get-db-version" > > <echo>Running upgrade from ${get-db-version.out}</echo> > > <condition property="script1.exists"> > <available filepath="<directory>" file="script1.sql"/> > </condition> > <antcall target="run-script1"/> > <condition property="script2.exists"> > <available filepath="<directory>" file="script2.sql"/> > </condition> > <antcall target="run-script2"/> > <condition property="script3.exists"> > <available filepath="<directory>" file="script3.sql"/> > </condition> > <antcall target="run-script3"/> > <condition property="script4.exists"> > <available filepath="<directory>" file="script4.sql"/> > </condition> > <antcall target="run-script4"/> > </target> > > <!-- *************************************** > Run database upgrade scripts > **************************************** --> > <target name="run-script1" if="script1.exists" > > <echo>Running sql in dir <directory></echo> > <exec executable="${my.sql}" input="<directory>/script1.sql" > failonerror="true"> > <arg value="--user=<username>"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="<newschema1>"/> > </exec> > </target> > <target name="run-script2" if="script2.exists" > > <echo>Running sql in dir <directory></echo> > <exec executable="${my.sql}" input="<directory>/script2.sql" > failonerror="true"> > <arg value="--user=<username>"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="<newschema1>"/> > </exec> > </target> > <target name="run-script3" if="script3.exists" > > <echo>Running sql in dir <directory></echo> > <exec executable="${my.sql}" input="<directory>/script3.sql" > failonerror="true"> > <arg value="--user=<username>"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="<newschema1>"/> > </exec> > </target> > <target name="run-script4" if="script4.exists" > > <echo>Running sql in dir <directory></echo> > <exec executable="${my.sql}" input="<directory>/script4.sql" > failonerror="true"> > <arg value="--user=<username>"/> > <arg value="--password=<password>"/> > <arg value="--host=localhost" /> > <arg value="--port=3306" /> > <arg value="<newschema1>"/> > </exec> > </target> > > > OUTPUT > > get-db-version: > [echo] Current database version: 1.00 > > db-upgrade: > [echo] Current Version: 1.00 > [echo] Upgrade path : 1.0-2.0 > [echo] database......... mysql > [echo] tx............... standalone > [echo] mail.smtp.host... localhost > > get-db-version: > [echo] Current database version: 1.01 > > db-upgrade: > [echo] Current Version: 1.01 > [echo] Upgrade path : 2.0-3.0 > [exec] Failed to open > ../build/dir-upgrade-2.0-3.0/Upgrade-1.01-1-Pre.sql > [exec] Failed to open > ../build/dir-upgrade-2.0-3.0/Upgrade-1.01-2-Data.sql > [exec] Failed to open > ../build/dir-upgrade-2.0-3.0/Upgrade-1.01-3-Post.sql > [exec] Failed to open > ../build/dir-upgrade-2.0-3.0/Upgrade-1.01-4-Version.sql > [echo] database......... mysql > [echo] tx............... standalone > [echo] mail.smtp.host... localhost > > get-db-version: > [echo] Current database version: 1.01 > > db-upgrade: > [echo] Current Version: 1.01 > [echo] Upgrade path : 3.0-4.0 > [exec] Failed to open > ../build/dir-upgrade-3.0-4.0/Upgrade-1.01-1-Pre.sql > [exec] Failed to open > ../build/dir-upgrade-3.0-4.0/Upgrade-1.01-2-Data.sql > [exec] Failed to open > ../build/dir-upgrade-3.0-4.0/Upgrade-1.01-3-Post.sql > [exec] Failed to open > ../build/dir-upgrade-3.0-4.0/Upgrade-1.01-4-Version.sql > > BUILD SUCCESSFUL > > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@ant.apache.org For additional commands, e-mail: user-h...@ant.apache.org