ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mugdha Acharya <mugdha.acha...@mir3.com>
Subject Re: How to script database upgrade using ANT script
Date Mon, 08 Nov 2010 16:51:29 GMT
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-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message