package liquibase.sqlgenerator.core; import static org.junit.Assert.assertEquals; import liquibase.database.core.HsqlDatabase; import liquibase.database.core.MSSQLDatabase; import liquibase.sql.Sql; import liquibase.sqlgenerator.SqlGeneratorFactory; import liquibase.statement.core.TagDatabaseStatement; import org.junit.Test; public class TagDatabaseGeneratorTest { //// @Test //// public void supports() throws Exception { //// new DatabaseTestTemplate().testOnAllDatabases(new DatabaseTest() { //// public void performTest(Database database) throws Exception { //// assertTrue(createGeneratorUnderTest().supportsDatabase(database)); //// } //// }); //// } // // @Test // public void execute() throws Exception { // new DatabaseTestTemplate().testOnAvailableDatabases( // new SqlStatementDatabaseTest(null, new TagDatabaseStatement("TAG_NAME")) { // protected void setup(Database database) throws Exception { // new Liquibase("changelogs/common/common.tests.changelog.xml", new JUnitResourceAccessor(), database).update(null); // } // // protected void preExecuteAssert(DatabaseSnapshotGenerator snapshot) throws DatabaseException { // assertFalse(snapshot.getDatabase().doesTagExist("TAG_NAME")); // } // // protected void postExecuteAssert(DatabaseSnapshotGenerator snapshot) throws DatabaseException { // assertTrue(snapshot.getDatabase().doesTagExist("TAG_NAME")); // } // // }); // } @Test public void testMSSQL() throws Exception { TagDatabaseStatement statement = new TagDatabaseStatement("v1.0"); Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(statement, new MSSQLDatabase()); assertEquals(1, sql.length); assertEquals( "UPDATE [changelog] " + "SET [TAG] = 'v1.0' " + "FROM [DATABASECHANGELOG] AS [changelog] " + "INNER JOIN (" + "SELECT TOP (1) [ID], [AUTHOR], [FILENAME] " + "FROM [DATABASECHANGELOG] " + "ORDER BY [DATEEXECUTED] DESC, [ORDEREXECUTED] DESC" + ") AS [latest] " + "ON [latest].[ID] = [changelog].[ID] " + "AND [latest].[AUTHOR] = [changelog].[AUTHOR] " + "AND [latest].[FILENAME] = [changelog].[FILENAME]", sql[0].toSql()); } @Test public void testHsql() throws Exception { TagDatabaseStatement statement = new TagDatabaseStatement("v1.0"); Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(statement, new HsqlDatabase()); assertEquals(1, sql.length); assertEquals( "UPDATE DATABASECHANGELOG " + "SET TAG = 'v1.0' " + "WHERE DATEEXECUTED = (" + "SELECT MAX(DATEEXECUTED) " + "FROM DATABASECHANGELOG" + ")", sql[0].toSql()); } }