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: [email protected]
For additional commands, e-mail: [email protected]