diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java index 1e68124d6..47930bce1 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java @@ -840,12 +840,15 @@ public class BaseTableDdl implements TableDdl { if (hasValue(alterColumn.getComment())) { alterColumnComment(writer, alterColumn); } + if (hasValue(alterColumn.getDropCheckConstraint())) { + dropCheckConstraint(writer, alterColumn, alterColumn.getDropCheckConstraint()); + } boolean alterCheckConstraint = hasValue(alterColumn.getCheckConstraint()); if (alterCheckConstraint) { // drop constraint before altering type etc - dropCheckConstraint(writer, alterColumn); + dropCheckConstraint(writer, alterColumn, alterColumn.getCheckConstraintName()); } boolean alterBaseAttributes = false; if (hasValue(alterColumn.getType())) { @@ -922,9 +925,9 @@ public class BaseTableDdl implements TableDdl { } } - protected void dropCheckConstraint(DdlWrite writer, AlterColumn alter) throws IOException { + protected void dropCheckConstraint(DdlWrite writer, AlterColumn alter, String constraintName) throws IOException { - String ddl = platformDdl.alterTableDropConstraint(alter.getTableName(), alter.getCheckConstraintName()); + String ddl = platformDdl.alterTableDropConstraint(alter.getTableName(), constraintName); if (hasValue(ddl)) { writer.apply().append(ddl).endOfStatement(); } diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java index 7c2507873..dd6fc1ae8 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java @@ -40,7 +40,8 @@ public class MySqlDdl extends PlatformDdl { @Override public String alterTableDropConstraint(String tableName, String constraintName) { - // drop constraint not supported + // drop constraint not supported in MySQL 5.7 and 8.0 but starting with MariaDB 10.2.1 CHECK is evaluated + // TODO: Implement for MariaDB >= 10.2.1 return null; } diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java index f0c33c5a4..8edd3b990 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java @@ -79,8 +79,6 @@ public class PlatformDdl { protected String alterColumn = "alter column"; - protected String dropConstraint = "drop constraint"; - protected String dropUniqueConstraint = "drop constraint"; protected String addConstraint = "add constraint"; @@ -420,7 +418,7 @@ public class PlatformDdl { * Drop a unique constraint from the table. */ public String alterTableDropConstraint(String tableName, String constraintName) { - return "alter table " + tableName + " " + dropConstraint + " " + maxConstraintName(constraintName); + return "alter table " + tableName + " " + dropConstraintIfExists + " " + maxConstraintName(constraintName); } /** diff --git a/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java b/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java index bf2d10bdd..4a50d6f34 100644 --- a/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java +++ b/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java @@ -61,6 +61,7 @@ public class DbMigrationTest extends BaseTestCase { "migtest_ckey_detail", "migtest_ckey_parent", "migtest_e_basic", + "migtest_e_enum", "migtest_e_history", "migtest_e_history2", "migtest_e_history3", diff --git a/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java b/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java index f23dafb49..d36abb449 100644 --- a/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java +++ b/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java @@ -41,7 +41,7 @@ public class BaseTableDdlTest { ddlGen.generate(write, alterColumn); String ddl = write.apply().getBuffer(); - assertThat(ddl).contains("alter table mytab drop constraint ck_mytab_acol"); + assertThat(ddl).contains("alter table mytab drop constraint if exists ck_mytab_acol"); assertThat(ddl).contains("alter table mytab add constraint ck_mytab_acol check (acol in ('A','B'))"); } diff --git a/src/test/java/misc/migration/v1_0/EEnum.java b/src/test/java/misc/migration/v1_0/EEnum.java new file mode 100644 index 000000000..f2db733e7 --- /dev/null +++ b/src/test/java/misc/migration/v1_0/EEnum.java @@ -0,0 +1,29 @@ +package misc.migration.v1_0; + + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +import io.ebean.annotation.EnumValue; + +@Entity +@Table(name = "migtest_e_enum") +public class EEnum { + + public enum Status { + @EnumValue("N") + NEW, + + @EnumValue("A") + ACTIVE, + + @EnumValue("I") + INACTIVE, + } + + @Id + Integer id; + + Status testStatus; +} diff --git a/src/test/java/misc/migration/v1_1/EEnum.java b/src/test/java/misc/migration/v1_1/EEnum.java new file mode 100644 index 000000000..577ede01d --- /dev/null +++ b/src/test/java/misc/migration/v1_1/EEnum.java @@ -0,0 +1,18 @@ +package misc.migration.v1_1; + + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.Size; + +@Entity +@Table(name = "migtest_e_enum") +public class EEnum { + + @Id + Integer id; + + @Size (max = 1) + String testStatus; // change to String from Enum Status +} diff --git a/src/test/java/misc/migration/v1_2/EEnum.java b/src/test/java/misc/migration/v1_2/EEnum.java new file mode 100644 index 000000000..26f2a5d31 --- /dev/null +++ b/src/test/java/misc/migration/v1_2/EEnum.java @@ -0,0 +1,29 @@ +package misc.migration.v1_2; + + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +import io.ebean.annotation.EnumValue; + +@Entity +@Table(name = "migtest_e_enum") +public class EEnum { + + public enum Status { + @EnumValue("N") + NEW, + + @EnumValue("A") + ACTIVE, + + @EnumValue("I") + INACTIVE, + } + + @Id + Integer id; + + Status testStatus; +} diff --git a/src/test/resources/dbmigration/migrationtest/db2/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest/db2/1.0__initial.sql index 386774eb5..b1046c7bf 100644 --- a/src/test/resources/dbmigration/migrationtest/db2/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest/db2/1.0__initial.sql @@ -76,6 +76,13 @@ create table migtest_e_basic ( -- NOT SUPPORTED alter table migtest_e_basic add constraint uq_mgtst__b_4aybzy unique (indextest2); -- NOT SUPPORTED alter table migtest_e_basic add constraint uq_mgtst__b_4ayc02 unique (indextest6); +create table migtest_e_enum ( + id integer generated by default as identity not null, + test_status varchar(1), + constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')), + constraint pk_migtest_e_enum primary key (id) +); + create table migtest_e_history ( id integer generated by default as identity not null, test_string varchar(255), diff --git a/src/test/resources/dbmigration/migrationtest/db2/1.1.sql b/src/test/resources/dbmigration/migrationtest/db2/1.1.sql index cf2b1e276..685773be7 100644 --- a/src/test/resources/dbmigration/migrationtest/db2/1.1.sql +++ b/src/test/resources/dbmigration/migrationtest/db2/1.1.sql @@ -61,6 +61,7 @@ alter table migtest_e_basic drop constraint uq_mgtst__b_4ayc02; -- NOT SUPPORTED alter table migtest_e_basic add constraint uq_mgtst__bsc_nm unique (name); -- NOT SUPPORTED alter table migtest_e_basic add constraint uq_mgtst__b_4ayc00 unique (indextest4); -- NOT SUPPORTED alter table migtest_e_basic add constraint uq_mgtst__b_4ayc01 unique (indextest5); +alter table migtest_e_enum drop constraint ck_mgtst__n_773sok; comment on column migtest_e_history.test_string is 'Column altered to long now'; alter table migtest_e_history alter column test_string bigint; comment on table migtest_e_history is 'We have history now'; diff --git a/src/test/resources/dbmigration/migrationtest/db2/1.3.sql b/src/test/resources/dbmigration/migrationtest/db2/1.3.sql index 4b08010eb..13005cf1f 100644 --- a/src/test/resources/dbmigration/migrationtest/db2/1.3.sql +++ b/src/test/resources/dbmigration/migrationtest/db2/1.3.sql @@ -36,6 +36,8 @@ alter table migtest_e_basic drop constraint uq_mgtst__b_4ayc00; alter table migtest_e_basic drop constraint uq_mgtst__b_4ayc01; -- NOT SUPPORTED alter table migtest_e_basic add constraint uq_mgtst__b_4aybzy unique (indextest2); -- NOT SUPPORTED alter table migtest_e_basic add constraint uq_mgtst__b_4ayc02 unique (indextest6); +alter table migtest_e_enum drop constraint ck_mgtst__n_773sok; +alter table migtest_e_enum add constraint ck_mgtst__n_773sok check ( test_status in ('N','A','I')); comment on column migtest_e_history.test_string is ''; comment on table migtest_e_history is ''; alter table migtest_e_history2 alter column test_string drop default; diff --git a/src/test/resources/dbmigration/migrationtest/h2/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest/h2/1.0__initial.sql index 38edf4d47..63543a2d2 100644 --- a/src/test/resources/dbmigration/migrationtest/h2/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest/h2/1.0__initial.sql @@ -76,6 +76,13 @@ create table migtest_e_basic ( constraint pk_migtest_e_basic primary key (id) ); +create table migtest_e_enum ( + id integer auto_increment not null, + test_status varchar(1), + constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')), + constraint pk_migtest_e_enum primary key (id) +); + create table migtest_e_history ( id integer auto_increment not null, test_string varchar(255), diff --git a/src/test/resources/dbmigration/migrationtest/h2/1.1.sql b/src/test/resources/dbmigration/migrationtest/h2/1.1.sql index d6f916d89..c3e1a6313 100644 --- a/src/test/resources/dbmigration/migrationtest/h2/1.1.sql +++ b/src/test/resources/dbmigration/migrationtest/h2/1.1.sql @@ -37,7 +37,7 @@ alter table migtest_fk_set_null drop constraint if exists fk_migtest_fk_set_null alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict; update migtest_e_basic set status = 'A' where status is null; -alter table migtest_e_basic drop constraint ck_migtest_e_basic_status; +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status; alter table migtest_e_basic alter column status set default 'A'; alter table migtest_e_basic alter column status set not null; alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); @@ -67,6 +67,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_status_indextest1 alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); +alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; comment on column migtest_e_history.test_string is 'Column altered to long now'; alter table migtest_e_history alter column test_string bigint; comment on table migtest_e_history is 'We have history now'; diff --git a/src/test/resources/dbmigration/migrationtest/h2/1.3.sql b/src/test/resources/dbmigration/migrationtest/h2/1.3.sql index e8a90cb8f..0bf536155 100644 --- a/src/test/resources/dbmigration/migrationtest/h2/1.3.sql +++ b/src/test/resources/dbmigration/migrationtest/h2/1.3.sql @@ -19,7 +19,7 @@ alter table migtest_fk_none drop constraint if exists fk_migtest_fk_none_one_id; alter table migtest_fk_none_via_join drop constraint if exists fk_migtest_fk_none_via_join_one_id; alter table migtest_fk_set_null drop constraint if exists fk_migtest_fk_set_null_one_id; alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete set null on update set null; -alter table migtest_e_basic drop constraint ck_migtest_e_basic_status; +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status; alter table migtest_e_basic alter column status drop default; alter table migtest_e_basic alter column status set null; alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I')); @@ -41,6 +41,8 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest4; alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest5; alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest2 unique (indextest2); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique (indextest6); +alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; +alter table migtest_e_enum add constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')); comment on column migtest_e_history.test_string is ''; comment on table migtest_e_history is ''; alter table migtest_e_history2 alter column test_string drop default; diff --git a/src/test/resources/dbmigration/migrationtest/hsqldb/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest/hsqldb/1.0__initial.sql index a8af75d02..1de75c5eb 100644 --- a/src/test/resources/dbmigration/migrationtest/hsqldb/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest/hsqldb/1.0__initial.sql @@ -76,6 +76,13 @@ create table migtest_e_basic ( constraint pk_migtest_e_basic primary key (id) ); +create table migtest_e_enum ( + id integer generated by default as identity (start with 1) not null, + test_status varchar(1), + constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')), + constraint pk_migtest_e_enum primary key (id) +); + create table migtest_e_history ( id integer generated by default as identity (start with 1) not null, test_string varchar(255), diff --git a/src/test/resources/dbmigration/migrationtest/hsqldb/1.1.sql b/src/test/resources/dbmigration/migrationtest/hsqldb/1.1.sql index b1e21443c..75e7798b7 100644 --- a/src/test/resources/dbmigration/migrationtest/hsqldb/1.1.sql +++ b/src/test/resources/dbmigration/migrationtest/hsqldb/1.1.sql @@ -31,7 +31,7 @@ alter table migtest_fk_set_null drop constraint if exists fk_migtest_fk_set_null alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict; update migtest_e_basic set status = 'A' where status is null; -alter table migtest_e_basic drop constraint ck_migtest_e_basic_status; +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status; alter table migtest_e_basic alter column status set default 'A'; alter table migtest_e_basic alter column status set not null; alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); @@ -61,6 +61,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_status_indextest1 alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); +alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; comment on column migtest_e_history.test_string is 'Column altered to long now'; alter table migtest_e_history alter column test_string bigint; comment on table migtest_e_history is 'We have history now'; diff --git a/src/test/resources/dbmigration/migrationtest/hsqldb/1.3.sql b/src/test/resources/dbmigration/migrationtest/hsqldb/1.3.sql index 9ec91f4f2..57f0c0341 100644 --- a/src/test/resources/dbmigration/migrationtest/hsqldb/1.3.sql +++ b/src/test/resources/dbmigration/migrationtest/hsqldb/1.3.sql @@ -14,7 +14,7 @@ alter table migtest_fk_none drop constraint if exists fk_migtest_fk_none_one_id; alter table migtest_fk_none_via_join drop constraint if exists fk_migtest_fk_none_via_join_one_id; alter table migtest_fk_set_null drop constraint if exists fk_migtest_fk_set_null_one_id; alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete set null on update set null; -alter table migtest_e_basic drop constraint ck_migtest_e_basic_status; +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status; alter table migtest_e_basic alter column status drop default; alter table migtest_e_basic alter column status set null; alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I')); @@ -36,6 +36,8 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest4; alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest5; alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest2 unique (indextest2); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique (indextest6); +alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; +alter table migtest_e_enum add constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')); comment on column migtest_e_history.test_string is ''; comment on table migtest_e_history is ''; alter table migtest_e_history2 alter column test_string drop default; diff --git a/src/test/resources/dbmigration/migrationtest/model/1.0__initial.model.xml b/src/test/resources/dbmigration/migrationtest/model/1.0__initial.model.xml index a41e37358..1d6458497 100644 --- a/src/test/resources/dbmigration/migrationtest/model/1.0__initial.model.xml +++ b/src/test/resources/dbmigration/migrationtest/model/1.0__initial.model.xml @@ -56,6 +56,10 @@ + + + + diff --git a/src/test/resources/dbmigration/migrationtest/model/1.1.model.xml b/src/test/resources/dbmigration/migrationtest/model/1.1.model.xml index 1f437cb14..3e5d0c1af 100644 --- a/src/test/resources/dbmigration/migrationtest/model/1.1.model.xml +++ b/src/test/resources/dbmigration/migrationtest/model/1.1.model.xml @@ -36,6 +36,7 @@ + alter table ${table} alter column ${column} TYPE bigint USING (${column}::integer) diff --git a/src/test/resources/dbmigration/migrationtest/model/1.3.model.xml b/src/test/resources/dbmigration/migrationtest/model/1.3.model.xml index 96cde72c8..5713508cc 100644 --- a/src/test/resources/dbmigration/migrationtest/model/1.3.model.xml +++ b/src/test/resources/dbmigration/migrationtest/model/1.3.model.xml @@ -21,6 +21,7 @@ + diff --git a/src/test/resources/dbmigration/migrationtest/mysql/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest/mysql/1.0__initial.sql index ae4936281..97cf5f7d2 100644 --- a/src/test/resources/dbmigration/migrationtest/mysql/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest/mysql/1.0__initial.sql @@ -76,6 +76,13 @@ create table migtest_e_basic ( constraint pk_migtest_e_basic primary key (id) ); +create table migtest_e_enum ( + id integer auto_increment not null, + test_status varchar(1), + constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')), + constraint pk_migtest_e_enum primary key (id) +); + create table migtest_e_history ( id integer auto_increment not null, test_string varchar(255), diff --git a/src/test/resources/dbmigration/migrationtest/mysql/1.3.sql b/src/test/resources/dbmigration/migrationtest/mysql/1.3.sql index e0a81437d..71cf77c91 100644 --- a/src/test/resources/dbmigration/migrationtest/mysql/1.3.sql +++ b/src/test/resources/dbmigration/migrationtest/mysql/1.3.sql @@ -38,6 +38,7 @@ alter table migtest_e_basic drop index uq_migtest_e_basic_indextest4; alter table migtest_e_basic drop index uq_migtest_e_basic_indextest5; alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest2 unique (indextest2); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique (indextest6); +alter table migtest_e_enum add constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')); alter table migtest_e_history comment = ''; alter table migtest_e_history2 alter test_string drop default; alter table migtest_e_history2 add column obsolete_string1 varchar(255); diff --git a/src/test/resources/dbmigration/migrationtest/oracle/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest/oracle/1.0__initial.sql index 0a2bbb648..e215dc485 100644 --- a/src/test/resources/dbmigration/migrationtest/oracle/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest/oracle/1.0__initial.sql @@ -85,6 +85,14 @@ create table migtest_e_basic ( ); create sequence migtest_e_basic_seq; +create table migtest_e_enum ( + id number(10) not null, + test_status varchar2(1), + constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')), + constraint pk_migtest_e_enum primary key (id) +); +create sequence migtest_e_enum_seq; + create table migtest_e_history ( id number(10) not null, test_string varchar2(255), diff --git a/src/test/resources/dbmigration/migrationtest/oracle/1.1.sql b/src/test/resources/dbmigration/migrationtest/oracle/1.1.sql index 63adc8dbf..9786d2401 100644 --- a/src/test/resources/dbmigration/migrationtest/oracle/1.1.sql +++ b/src/test/resources/dbmigration/migrationtest/oracle/1.1.sql @@ -62,6 +62,7 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest6; -- NOT YET IMPLEMENTED: alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name); -- NOT YET IMPLEMENTED: alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); -- NOT YET IMPLEMENTED: alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); +alter table migtest_e_enum drop constraint ck_migtest_e_enum_test_status; comment on column migtest_e_history.test_string is 'Column altered to long now'; alter table migtest_e_history modify test_string number(19); comment on table migtest_e_history is 'We have history now'; diff --git a/src/test/resources/dbmigration/migrationtest/oracle/1.3.sql b/src/test/resources/dbmigration/migrationtest/oracle/1.3.sql index 4ba0b1242..e4f5064cd 100644 --- a/src/test/resources/dbmigration/migrationtest/oracle/1.3.sql +++ b/src/test/resources/dbmigration/migrationtest/oracle/1.3.sql @@ -37,6 +37,8 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest4; alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest5; -- NOT YET IMPLEMENTED: alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest2 unique (indextest2); -- NOT YET IMPLEMENTED: alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique (indextest6); +alter table migtest_e_enum drop constraint ck_migtest_e_enum_test_status; +alter table migtest_e_enum add constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')); comment on column migtest_e_history.test_string is ''; comment on table migtest_e_history is ''; alter table migtest_e_history2 modify test_string drop default; diff --git a/src/test/resources/dbmigration/migrationtest/postgres/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest/postgres/1.0__initial.sql index 92439eac6..ea3b65d03 100644 --- a/src/test/resources/dbmigration/migrationtest/postgres/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest/postgres/1.0__initial.sql @@ -76,6 +76,13 @@ create table migtest_e_basic ( constraint pk_migtest_e_basic primary key (id) ); +create table migtest_e_enum ( + id serial not null, + test_status varchar(1), + constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')), + constraint pk_migtest_e_enum primary key (id) +); + create table migtest_e_history ( id serial not null, test_string varchar(255), diff --git a/src/test/resources/dbmigration/migrationtest/postgres/1.1.sql b/src/test/resources/dbmigration/migrationtest/postgres/1.1.sql index 7e13e6924..80e049568 100644 --- a/src/test/resources/dbmigration/migrationtest/postgres/1.1.sql +++ b/src/test/resources/dbmigration/migrationtest/postgres/1.1.sql @@ -37,7 +37,7 @@ alter table if exists migtest_fk_set_null drop constraint if exists fk_migtest_f alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict; update migtest_e_basic set status = 'A' where status is null; -alter table migtest_e_basic drop constraint ck_migtest_e_basic_status; +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status; alter table migtest_e_basic alter column status set default 'A'; alter table migtest_e_basic alter column status set not null; alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); @@ -67,6 +67,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_status_indextest1 alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); +alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; alter table migtest_e_history alter column test_string TYPE bigint USING (test_string::integer); comment on column migtest_e_history.test_string is 'Column altered to long now'; diff --git a/src/test/resources/dbmigration/migrationtest/postgres/1.3.sql b/src/test/resources/dbmigration/migrationtest/postgres/1.3.sql index cdd4d2bd6..406991599 100644 --- a/src/test/resources/dbmigration/migrationtest/postgres/1.3.sql +++ b/src/test/resources/dbmigration/migrationtest/postgres/1.3.sql @@ -19,7 +19,7 @@ alter table if exists migtest_fk_none drop constraint if exists fk_migtest_fk_no alter table if exists migtest_fk_none_via_join drop constraint if exists fk_migtest_fk_none_via_join_one_id; alter table if exists migtest_fk_set_null drop constraint if exists fk_migtest_fk_set_null_one_id; alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete set null on update set null; -alter table migtest_e_basic drop constraint ck_migtest_e_basic_status; +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status; alter table migtest_e_basic alter column status drop default; alter table migtest_e_basic alter column status drop not null; alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I')); @@ -41,6 +41,8 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest4; alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest5; alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest2 unique (indextest2); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique (indextest6); +alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; +alter table migtest_e_enum add constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')); comment on column migtest_e_history.test_string is ''; comment on table migtest_e_history is ''; alter table migtest_e_history2 alter column test_string drop default; diff --git a/src/test/resources/dbmigration/migrationtest/sqlite/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest/sqlite/1.0__initial.sql index 40b1d0dcc..897032ac5 100644 --- a/src/test/resources/dbmigration/migrationtest/sqlite/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest/sqlite/1.0__initial.sql @@ -79,6 +79,13 @@ create table migtest_e_basic ( foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict ); +create table migtest_e_enum ( + id integer not null, + test_status varchar(1), + constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')), + constraint pk_migtest_e_enum primary key (id) +); + create table migtest_e_history ( id integer not null, test_string varchar(255), diff --git a/src/test/resources/dbmigration/migrationtest/sqlite/1.1.sql b/src/test/resources/dbmigration/migrationtest/sqlite/1.1.sql index 950e740da..6c32de45d 100644 --- a/src/test/resources/dbmigration/migrationtest/sqlite/1.1.sql +++ b/src/test/resources/dbmigration/migrationtest/sqlite/1.1.sql @@ -30,7 +30,7 @@ alter table migtest_fk_cascade drop constraint if exists fk_migtest_fk_cascade_o alter table migtest_fk_set_null drop constraint if exists fk_migtest_fk_set_null_one_id; update migtest_e_basic set status = 'A' where status is null; -alter table migtest_e_basic drop constraint ck_migtest_e_basic_status; +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status; alter table migtest_e_basic alter column status set default 'A'; alter table migtest_e_basic alter column status set not null; alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); @@ -59,6 +59,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_status_indextest1 alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); +alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; alter table migtest_e_history alter column test_string integer; -- NOTE: table has @History - special migration may be necessary diff --git a/src/test/resources/dbmigration/migrationtest/sqlite/1.3.sql b/src/test/resources/dbmigration/migrationtest/sqlite/1.3.sql index 77d4552b6..b8da78f83 100644 --- a/src/test/resources/dbmigration/migrationtest/sqlite/1.3.sql +++ b/src/test/resources/dbmigration/migrationtest/sqlite/1.3.sql @@ -12,7 +12,7 @@ alter table migtest_fk_cascade drop constraint if exists fk_migtest_fk_cascade_o alter table migtest_fk_none drop constraint if exists fk_migtest_fk_none_one_id; alter table migtest_fk_none_via_join drop constraint if exists fk_migtest_fk_none_via_join_one_id; alter table migtest_fk_set_null drop constraint if exists fk_migtest_fk_set_null_one_id; -alter table migtest_e_basic drop constraint ck_migtest_e_basic_status; +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status; alter table migtest_e_basic alter column status drop default; alter table migtest_e_basic alter column status set null; alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I')); @@ -34,6 +34,8 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest4; alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest5; alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest2 unique (indextest2); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique (indextest6); +alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; +alter table migtest_e_enum add constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')); alter table migtest_e_history2 alter column test_string drop default; alter table migtest_e_history2 alter column test_string set null; alter table migtest_e_history2 add column obsolete_string1 varchar(255); diff --git a/src/test/resources/dbmigration/migrationtest/sqlserver17/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest/sqlserver17/1.0__initial.sql index 3c6ebff79..99a41e4a5 100644 --- a/src/test/resources/dbmigration/migrationtest/sqlserver17/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest/sqlserver17/1.0__initial.sql @@ -85,6 +85,14 @@ create unique nonclustered index uq_migtest_e_basic_indextest2 on migtest_e_basi create unique nonclustered index uq_migtest_e_basic_indextest6 on migtest_e_basic(indextest6) where indextest6 is not null; create sequence migtest_e_basic_seq as bigint start with 1 ; +create table migtest_e_enum ( + id integer not null, + test_status nvarchar(1), + constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')), + constraint pk_migtest_e_enum primary key (id) +); +create sequence migtest_e_enum_seq as bigint start with 1 ; + create table migtest_e_history ( id integer not null, test_string nvarchar(255), diff --git a/src/test/resources/dbmigration/migrationtest/sqlserver17/1.1.sql b/src/test/resources/dbmigration/migrationtest/sqlserver17/1.1.sql index 447a80dfc..ad3a60c73 100644 --- a/src/test/resources/dbmigration/migrationtest/sqlserver17/1.1.sql +++ b/src/test/resources/dbmigration/migrationtest/sqlserver17/1.1.sql @@ -64,6 +64,7 @@ create unique nonclustered index uq_migtest_e_basic_status_indextest1 on migtest create unique nonclustered index uq_migtest_e_basic_name on migtest_e_basic(name) where name is not null; create unique nonclustered index uq_migtest_e_basic_indextest4 on migtest_e_basic(indextest4) where indextest4 is not null; create unique nonclustered index uq_migtest_e_basic_indextest5 on migtest_e_basic(indextest5) where indextest5 is not null; +IF (OBJECT_ID('ck_migtest_e_enum_test_status', 'C') IS NOT NULL) alter table migtest_e_enum drop constraint ck_migtest_e_enum_test_status; alter table migtest_e_history alter column test_string numeric(19); -- NOTE: table has @History - special migration may be necessary diff --git a/src/test/resources/dbmigration/migrationtest/sqlserver17/1.3.sql b/src/test/resources/dbmigration/migrationtest/sqlserver17/1.3.sql index 2294b9c01..473805780 100644 --- a/src/test/resources/dbmigration/migrationtest/sqlserver17/1.3.sql +++ b/src/test/resources/dbmigration/migrationtest/sqlserver17/1.3.sql @@ -48,6 +48,8 @@ IF (OBJECT_ID('uq_migtest_e_basic_indextest5', 'UQ') IS NOT NULL) alter table mi IF EXISTS (SELECT name FROM sys.indexes WHERE object_id = OBJECT_ID('migtest_e_basic','U') AND name = 'uq_migtest_e_basic_indextest5') drop index uq_migtest_e_basic_indextest5 ON migtest_e_basic; create unique nonclustered index uq_migtest_e_basic_indextest2 on migtest_e_basic(indextest2) where indextest2 is not null; create unique nonclustered index uq_migtest_e_basic_indextest6 on migtest_e_basic(indextest6) where indextest6 is not null; +IF (OBJECT_ID('ck_migtest_e_enum_test_status', 'C') IS NOT NULL) alter table migtest_e_enum drop constraint ck_migtest_e_enum_test_status; +alter table migtest_e_enum add constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')); delimiter $$ DECLARE @Tmp nvarchar(200);select @Tmp = t1.name from sys.default_constraints t1 join sys.columns t2 on t1.object_id = t2.default_object_id