package liquibase.sqlgenerator.core;
import liquibase.database.core.OracleDatabase;
import liquibase.sql.Sql;
import liquibase.statement.core.SetNullableStatement;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class SetNullableGeneratorTest {
private final SetNullableGenerator generator = new SetNullableGenerator();
private final OracleDatabase oracle = new OracleDatabase();
@Test
public void testGenerateOracleNotNullSql() throws Exception {
final Sql[] sqls = generator.generateSql(
new SetNullableStatement(null, "schema_name", "table_name", "column_name", null, false), oracle, null);
assertEquals(1, sqls.length);
final Sql sql = sqls[0];
assertEquals("ALTER TABLE schema_name.table_name MODIFY column_name NOT NULL", sql.toSql());
}
@Test
public void testGenerateOracleNotNullSqlWithConstraintName() throws Exception {
final Sql[] sqls = generator.generateSql(
new SetNullableStatement(null, "schema_name", "table_name", "column_name", null, false, "constraint_name"),
oracle, null);
assertEquals(1, sqls.length);
final Sql sql = sqls[0];
assertEquals("ALTER TABLE schema_name.table_name MODIFY column_name CONSTRAINT constraint_name NOT NULL", sql.toSql());
}
//// @Test
//// public void supports() throws Exception {
//// new DatabaseTestTemplate().testOnAllDatabases(new DatabaseTest() {
////
//// public void performTest(Database database) throws Exception {
//// SetNullableStatement statement = createGeneratorUnderTest();
////
//// if (database instanceof FirebirdDatabase) {
//// assertFalse(statement.supportsDatabase(database));
//// } else {
//// assertTrue(statement.supportsDatabase(database));
//// }
//// }
//// });
//// }
//
// @Test
// public void execute_nowNotNullNoSchema() throws Exception {
// new DatabaseTestTemplate().testOnAvailableDatabases(
// new SqlStatementDatabaseTest(null, new SetNullableStatement(null, NOTNULL_TABLE_NAME, COLUMN_NAME, "varchar(50)", false)) {
//
// protected void preExecuteAssert(DatabaseSnapshotGenerator snapshot) {
// assertTrue(snapshot.getTable(NOTNULL_TABLE_NAME).getColumn(COLUMN_NAME).isNullable());
// }
//
// protected void postExecuteAssert(DatabaseSnapshotGenerator snapshot) {
// assertFalse(snapshot.getTable(NOTNULL_TABLE_NAME).getColumn(COLUMN_NAME).isNullable());
// }
// });
// }
//
// @Test
// public void execute_withSchema() throws Exception {
// new DatabaseTestTemplate().testOnAvailableDatabases(
// new SqlStatementDatabaseTest(TestContext.ALT_SCHEMA, new SetNullableStatement(TestContext.ALT_SCHEMA, NOTNULL_TABLE_NAME, COLUMN_NAME, "varchar(50)", false)) {
//
// protected void preExecuteAssert(DatabaseSnapshotGenerator snapshot) {
// assertTrue(snapshot.getTable(NOTNULL_TABLE_NAME).getColumn(COLUMN_NAME).isNullable());
// }
//
// protected void postExecuteAssert(DatabaseSnapshotGenerator snapshot) {
// assertFalse(snapshot.getTable(NOTNULL_TABLE_NAME).getColumn(COLUMN_NAME).isNullable());
// }
// });
// }
//
// @Test
// public void execute_nowNullNoSchema() throws Exception {
// new DatabaseTestTemplate().testOnAvailableDatabases(
// new SqlStatementDatabaseTest(null, new SetNullableStatement(null, NULLABLE_TABLE_NAME, COLUMN_NAME, "varchar(50)", true)) {
//
// protected void preExecuteAssert(DatabaseSnapshotGenerator snapshot) {
// assertFalse(snapshot.getTable(NULLABLE_TABLE_NAME).getColumn(COLUMN_NAME).isNullable());
// }
//
// protected void postExecuteAssert(DatabaseSnapshotGenerator snapshot) {
// assertTrue(snapshot.getTable(NULLABLE_TABLE_NAME).getColumn(COLUMN_NAME).isNullable());
// }
// });
// }
//
// @Test
// public void execute_nowNullableWithSchema() throws Exception {
// new DatabaseTestTemplate().testOnAvailableDatabases(
// new SqlStatementDatabaseTest(TestContext.ALT_SCHEMA, new SetNullableStatement(TestContext.ALT_SCHEMA, NULLABLE_TABLE_NAME, COLUMN_NAME, "varchar(50)", true)) {
//
// protected void preExecuteAssert(DatabaseSnapshotGenerator snapshot) {
// assertFalse(snapshot.getTable(NULLABLE_TABLE_NAME).getColumn(COLUMN_NAME).isNullable());
// }
//
// protected void postExecuteAssert(DatabaseSnapshotGenerator snapshot) {
// assertTrue(snapshot.getTable(NULLABLE_TABLE_NAME).getColumn(COLUMN_NAME).isNullable());
// }
// });
// }
}