<?xml version="1.0" encoding="UTF-8"?>
<!-- 
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<project default="writeSchemaSqlToFile"
	     name="DdlUtils"
	     basedir=".">
  <!-- Allow values set at the commandline or in the environment to override the defaults -->
  <property environment="env"/>
  <!-- Load the jdbc properties as specified by the jdbc.properties.file variable-->
  <property file="${jdbc.properties.file}"/>
  <!-- Load the build properties -->
  <property file="build.properties"/>

  <!-- These properties can be overriden on the commandline using -D --> 
  <property name="schemafiles" value="testmodel.xml"/>
  <property name="datafile" value="testdata.xml"/>
  <property name="catalogpattern" value=""/>
  <property name="schemapattern" value=""/>
  <property name="sqloutputfile" value="schema.sql"/>
  <property name="platform" value=""/>
  <property name="alterdatabase" value="true"/>
  <property name="delimitedsqlidentifiers" value="false"/>
  <property name="verbosity" value="info"/>
  <property name="useexplicitidentityvalues" value="false"/>
  
  <!-- The classpath used for running the tasks -->
  <path id="project-classpath">
    <fileset dir="${lib.dir}">
        <include name="**/*.jar"/>
        <include name="**/*.zip"/>
    </fileset>
    <pathelement path="${build.java.dir}"/>
  </path>

  <taskdef classname="org.apache.ddlutils.task.DdlToDatabaseTask"
           name="ddlToDatabase"
           classpathref="project-classpath"/>
  <taskdef classname="org.apache.ddlutils.task.DatabaseToDdlTask"
           name="databaseToDdl"
           classpathref="project-classpath"/>
	
  <target name="createDb">
    <ddlToDatabase usedelimitedsqlidentifiers="${delimitedsqlidentifiers}"
                   catalogpattern="${catalogpattern}"
                   schemapattern="${schemapattern}"
                   databasetype="${platform}"
                   verbosity="${verbosity}">
      <database driverclassname="${datasource.driverClassName}"
                url="${datasource.url}"
                username="${datasource.username}"
                password="${datasource.password}"/> 
      <createdatabase failonerror="false"/> 
    </ddlToDatabase> 
  </target>

  <target name="writeSchemaToDb">
    <ddlToDatabase validatexml="false" 
                   usedelimitedsqlidentifiers="${delimitedsqlidentifiers}"
                   catalogpattern="${catalogpattern}"
                   schemapattern="${schemapattern}"
                   databasetype="${platform}"
                   verbosity="${verbosity}">
      <database driverclassname="${datasource.driverClassName}"
                url="${datasource.url}"
                username="${datasource.username}"
                password="${datasource.password}"/> 
      <fileset dir=".">
        <include name="${schemafiles}"/> 
      </fileset> 

      <writeschematodatabase alterdatabase="${alterdatabase}"
                             dodrops="true"
                             failonerror="false"/> 
    </ddlToDatabase> 
  </target>

  <target name="writeSchemaSqlToFile">
    <ddlToDatabase validatexml="false" 
                   usedelimitedsqlidentifiers="${delimitedsqlidentifiers}"
                   catalogpattern="${catalogpattern}"
                   schemapattern="${schemapattern}"
                   databasetype="${platform}"
                   verbosity="${verbosity}">
      <database driverclassname="${datasource.driverClassName}"
                url="${datasource.url}"
                username="${datasource.username}"
                password="${datasource.password}"/> 
      <fileset dir=".">
        <include name="${schemafiles}"/> 
      </fileset> 

      <writeschemasqltofile alterdatabase="${alterdatabase}"
                            dodrops="true"
                            failonerror="false"
                            outputfile="${sqloutputfile}"/> 
    </ddlToDatabase> 
  </target>

  <target name="writeDataToDb">
    <ddlToDatabase validatexml="false" 
                   usedelimitedsqlidentifiers="${delimitedsqlidentifiers}"
                   catalogpattern="${catalogpattern}"
                   schemapattern="${schemapattern}"
                   databasetype="${platform}"
                   verbosity="${verbosity}">
      <database driverclassname="${datasource.driverClassName}"
                url="${datasource.url}"
                username="${datasource.username}"
                password="${datasource.password}"/> 
      <fileset dir=".">
        <include name="${schemafiles}"/> 
      </fileset> 

      <writedatatodatabase datafile="${datafile}"
                           usebatchmode="false"
                           useexplicitidentityvalues="${useexplicitidentityvalues}"/>
    </ddlToDatabase> 
  </target>

  <target name="readDataFromDb">
    <databaseToDdl usedelimitedsqlidentifiers="${delimitedsqlidentifiers}"
                   catalogpattern="${catalogpattern}"
                   schemapattern="${schemapattern}"
                   databasetype="${platform}"
                   verbosity="${verbosity}">
      <database driverclassname="${datasource.driverClassName}"
                url="${datasource.url}"
                username="${datasource.username}"
                password="${datasource.password}"/> 
      <writedatatofile outputfile="${datafile}"/>
    </databaseToDdl> 
  </target>
</project>
