package liquibase.statementexecute;
import liquibase.statement.SqlStatement;
import liquibase.statement.core.CreateDatabaseChangeLogLockTableStatement;
import liquibase.statement.core.UnlockDatabaseChangeLogStatement;
import liquibase.statement.core.MarkChangeSetRanStatement;
import liquibase.statement.core.CreateDatabaseChangeLogTableStatement;
import liquibase.database.Database;
import liquibase.database.core.CacheDatabase;
import liquibase.database.core.DB2Database;
import liquibase.database.core.DerbyDatabase;
import liquibase.database.core.FirebirdDatabase;
import liquibase.database.core.H2Database;
import liquibase.database.core.HsqlDatabase;
import liquibase.database.core.InformixDatabase;
import liquibase.database.core.MSSQLDatabase;
import liquibase.database.core.MaxDBDatabase;
import liquibase.database.core.MySQLDatabase;
import liquibase.database.core.OracleDatabase;
import liquibase.database.core.PostgresDatabase;
import liquibase.database.core.SybaseASADatabase;
import liquibase.database.core.SybaseDatabase;
import liquibase.changelog.ChangeSet;
import liquibase.util.LiquibaseUtil;
import java.util.List;
import java.util.Arrays;
import org.junit.Test;
public class MarkChangeSetRanExecuteTest extends AbstractExecuteTest {
@Override
protected List<? extends SqlStatement> setupStatements(Database database) {
return Arrays.asList(new CreateDatabaseChangeLogTableStatement());
}
@Test
public void generateSql_insert() throws Exception {
this.statementUnderTest = new MarkChangeSetRanStatement(new ChangeSet("a", "b", false, false, "c", "e", "f"), ChangeSet.ExecType.EXECUTED);
String version = LiquibaseUtil.getBuildVersion().replaceAll("SNAPSHOT", "SNP");
assertCorrect("insert into [dbo].[databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', getdate(), 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)", MSSQLDatabase.class);
assertCorrect("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', timestamp, 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)",MaxDBDatabase.class);
assertCorrect("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', sysdate, 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)",CacheDatabase.class);
assertCorrect("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', SYSTIMESTAMP, 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)",OracleDatabase.class);
assertCorrect("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', getdate(), 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)",SybaseDatabase.class);
assertCorrect("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', current year to fraction(5), 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)",InformixDatabase.class);
assertCorrect("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', current timestamp, 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)",DB2Database.class);
assertCorrect("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', current_timestamp, 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)",FirebirdDatabase.class, DerbyDatabase.class);
assertCorrect("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', now, 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)",HsqlDatabase.class);
assertCorrect("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', now(), 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)",MySQLDatabase.class,PostgresDatabase.class,SybaseASADatabase.class,H2Database.class);
assertCorrectOnRest("insert into [databasechangelog] ([author], [comments], [dateexecuted], [description], [exectype], [filename], [id], [liquibase], [md5sum], [orderexecuted]) values ('b', '', now(), 'empty', 'executed', 'c', 'a', '" + version + "', '3:d41d8cd98f00b204e9800998ecf8427e', 1)");
}
@Test
public void generateSql_update() throws Exception {
this.statementUnderTest = new MarkChangeSetRanStatement(new ChangeSet("a", "b", false, false, "c", "e", "f"), ChangeSet.ExecType.RERAN);
assertCorrect("update [dbo].[databasechangelog] set [dateexecuted] = NOW(), [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'", MSSQLDatabase.class);
assertCorrect("update [databasechangelog] set [dateexecuted] = timestamp, [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'", MaxDBDatabase.class);
assertCorrect("update [databasechangelog] set [dateexecuted] = sysdate, [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'", CacheDatabase.class);
assertCorrect("update [databasechangelog] set [dateexecuted] = SYSTIMESTAMP, [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'", OracleDatabase.class);
assertCorrect("update [databasechangelog] set [dateexecuted] = getdate(), [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'", SybaseDatabase.class);
assertCorrect("update [databasechangelog] set [dateexecuted] = current year to fraction(5), [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'", InformixDatabase.class);
assertCorrect("update [databasechangelog] set [dateexecuted] = current timestamp, [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'", DB2Database.class);
assertCorrect("update [databasechangelog] set [dateexecuted] = current_timestamp, [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'", FirebirdDatabase.class, DerbyDatabase.class);
assertCorrect("update [databasechangelog] set [dateexecuted] = NOW(), [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'", MySQLDatabase.class,HsqlDatabase.class,PostgresDatabase.class,SybaseASADatabase.class,H2Database.class);
assertCorrectOnRest("update [databasechangelog] set [dateexecuted] = NOW(), [exectype] = 'reran', [md5sum] = '3:d41d8cd98f00b204e9800998ecf8427e' where id='a' and author='b' and filename='c'");
}
}