blob: 80a7b8b1fae8948e2db013a50a725416c3f956f2 [file] [log] [blame]
package org.apache.ddlutils.task;
/*
* 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.
*/
import java.io.File;
import java.io.IOException;
import org.apache.ddlutils.io.DatabaseIO;
import org.apache.ddlutils.model.Database;
import org.apache.tools.ant.BuildException;
/**
* Tests the writeSchemaToFile sub task.
*
* @version $Revision: $
*/
public class TestWriteSchemaToFileCommand extends TestTaskBase
{
/**
* Adds the writeSchemaToFile sub task to the given task, executes it, and checks its output.
*
* @param task The task
* @param useDelimitedIdentifiers Whether to run with delimited identifiers
* @param expectedModel The expected model
*/
private void runTask(DatabaseToDdlTask task, boolean useDelimitedIdentifiers, Database expectedModel) throws IOException
{
WriteSchemaToFileCommand subTask = new WriteSchemaToFileCommand();
File tmpFile = File.createTempFile("schema", ".xml");
try
{
subTask.setOutputFile(tmpFile);
task.setUseDelimitedSqlIdentifiers(useDelimitedIdentifiers);
task.addWriteSchemaToFile(subTask);
task.setModelName("roundtriptest");
task.execute();
assertEquals(expectedModel,
new DatabaseIO().read(tmpFile),
useDelimitedIdentifiers);
}
finally
{
if (!tmpFile.delete())
{
getLog().warn("Could not delete temporary file " + tmpFile.getAbsolutePath());
}
}
}
/**
* Tests the task against an empty database.
*/
public void testEmptyDatabase() throws IOException
{
runTask(getDatabaseToDdlTaskInstance(), false, new Database("roundtriptest"));
}
/**
* Tests against a model with two tables and a FK.
*/
public void testSimpleModel() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(modelXml);
runTask(getDatabaseToDdlTaskInstance(), false, readModelFromDatabase("roundtriptest"));
}
/**
* Tests against a model with two tables and a FK.
*/
public void testSimpleModelWithDelimitedIdentifiers() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='A PK' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='A Value' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 2'>\n"+
" <reference local='A Value' foreign='A PK'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='A PK' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='A Value' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='Roundtrip 1'>\n"+
" <reference local='A Value' foreign='A PK'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(modelXml);
runTask(getDatabaseToDdlTaskInstance(), true, readModelFromDatabase("roundtriptest"));
}
/**
* Tests of the includeTables filter.
*/
public void testIncludeSingleTable() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTables("roundtrip1");
runTask(task, false, parseDatabaseFromString(model2Xml));
}
/**
* Tests of the includeTables filter in the presence of a foreign key to the indicated table.
*/
public void testIncludeSingleTableWithFk() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(modelXml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTables("roundtrip1");
try
{
runTask(task, false, readModelFromDatabase("roundtriptest"));
fail();
}
catch (BuildException ex)
{
// expected
}
}
/**
* Tests of the includeTableFilter filter.
*/
public void testIncludeSingleTableViaRegExp() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTableFilter("Round.*\\s1");
runTask(task, true, parseDatabaseFromString(model2Xml));
}
/**
* Tests of the includeTableFilter filter in the presence of a foreign key to the indicated table.
*/
public void testIncludeSingleTableWithFkViaRegExp() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='Roundtrip 1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(modelXml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTableFilter("Round.*\\s1");
try
{
runTask(task, true, readModelFromDatabase("roundtriptest"));
fail();
}
catch (BuildException ex)
{
// expected
}
}
/**
* Tests of the includeTables filter for multiple tables.
*/
public void testIncludeMultipleTables() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" </table>\n"+
" <table name='roundtrip3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTables("roundtrip1,roundtrip3");
runTask(task, false, parseDatabaseFromString(model2Xml));
}
/**
* Tests of the includeTables filter for multiple tables.
*/
public void testIncludeMultipleTablesWithFKPointingToThem() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(modelXml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTables("roundtrip1,roundtrip3");
try
{
runTask(task, false, readModelFromDatabase("roundtriptest"));
fail();
}
catch (BuildException ex)
{
// expected
}
}
/**
* Tests of the includeTableFilter filter for multiple tables.
*/
public void testIncludeMultipleTablesViaRegExp() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='Roundtrip 1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='Roundtrip 1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTableFilter(".*trip [1|3]");
runTask(task, true, parseDatabaseFromString(model2Xml));
}
/**
* Tests of the includeTables filter for multiple tables via reg exp.
*/
public void testIncludeMultipleTablesWithFKPointingToThemViaRegExp() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='Roundtrip 1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(modelXml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTableFilter(".*trip\\s*[1|3]");
try
{
runTask(task, true, readModelFromDatabase("roundtriptest"));
fail();
}
catch (BuildException ex)
{
// expected
}
}
/**
* Tests of the excludeTables filter.
*/
public void testExcludeSingleTable() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setExcludeTables("roundtrip2");
runTask(task, false, parseDatabaseFromString(model2Xml));
}
/**
* Tests of the excludeTables filter in the presence of a foreign key to the indicated table.
*/
public void testExcludeSingleTableWithFk() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(modelXml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setExcludeTables("roundtrip1");
try
{
runTask(task, false, readModelFromDatabase("roundtriptest"));
fail();
}
catch (BuildException ex)
{
// expected
}
}
/**
* Tests of the excludeTableFilter filter.
*/
public void testExcludeSingleTableViaRegExp() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setExcludeTableFilter("Round.*\\s2");
runTask(task, true, parseDatabaseFromString(model2Xml));
}
/**
* Tests of the excludeTableFilter filter in the presence of a foreign key to the indicated table.
*/
public void testExcludeSingleTableWithFkViaRegExp() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='Roundtrip 1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(modelXml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setExcludeTableFilter("Round.*\\s2");
try
{
runTask(task, true, readModelFromDatabase("roundtriptest"));
fail();
}
catch (BuildException ex)
{
// expected
}
}
/**
* Tests of the excludeTables filter for multiple tables.
*/
public void testExcludeMultipleTables() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" </table>\n"+
" <table name='roundtrip3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setExcludeTables("roundtrip1,roundtrip3");
runTask(task, false, parseDatabaseFromString(model2Xml));
}
/**
* Tests of the excludeTables filter for multiple tables.
*/
public void testExcludeMultipleTablesWithFKPointingToThem() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
createDatabase(modelXml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setExcludeTables("roundtrip1,roundtrip3");
try
{
runTask(task, false, readModelFromDatabase("roundtriptest"));
fail();
}
catch (BuildException ex)
{
// expected
}
}
/**
* Tests of the excludeTableFilter filter for multiple tables.
*/
public void testExcludeMultipleTablesViaRegExp() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='Roundtrip 1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setExcludeTableFilter(".*trip [1|3]");
runTask(task, true, parseDatabaseFromString(model2Xml));
}
/**
* Tests of the excludeTables filter for multiple tables via reg exp.
*/
public void testExcludeMultipleTablesWithFKPointingToThemViaRegExp() throws IOException
{
final String modelXml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='Roundtrip 1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(modelXml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setExcludeTableFilter(".*trip\\s*[1|3]");
try
{
runTask(task, true, readModelFromDatabase("roundtriptest"));
fail();
}
catch (BuildException ex)
{
// expected
}
}
/**
* Tests of the includeTables and excludeTables filters for multiple tables.
*/
public void testIncludeAndExcludeMultipleTables() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='Roundtrip 2'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='Roundtrip 1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='Roundtrip 4'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='Roundtrip 4'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" </table>\n"+
"</database>";
getPlatform().setDelimitedIdentifierModeOn(true);
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTables("Roundtrip 1,Roundtrip 3,Roundtrip 4");
task.setExcludeTables("Roundtrip 1,Roundtrip 3");
runTask(task, true, parseDatabaseFromString(model2Xml));
}
/**
* Tests of the includeTableFilter and excludeTableFilter filters for multiple tables.
*/
public void testIncludeAndExcludeMultipleTablesViaRegExp() throws IOException
{
final String model1Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip1'>\n"+
" <column name='pk' type='VARCHAR' size='32' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='INTEGER'/>\n"+
" <foreign-key foreignTable='roundtrip3'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" </table>\n"+
" <table name='roundtrip3'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" <foreign-key foreignTable='roundtrip1'>\n"+
" <reference local='avalue' foreign='pk'/>\n"+
" </foreign-key>\n"+
" </table>\n"+
" <table name='roundtrip4'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" </table>\n"+
"</database>";
final String model2Xml =
"<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
"<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n"+
" <table name='roundtrip2'>\n"+
" <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"+
" <column name='avalue' type='VARCHAR' size='32'/>\n"+
" </table>\n"+
"</database>";
createDatabase(model1Xml);
DatabaseToDdlTask task = getDatabaseToDdlTaskInstance();
task.setIncludeTableFilter(".*[1|2|3]");
task.setExcludeTableFilter(".*[1|3]");
runTask(task, false, parseDatabaseFromString(model2Xml));
}
}