diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java index 31eba9a9f..76316002e 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java @@ -44,6 +44,7 @@ import io.ebean.config.dbplatform.sqlanywhere.SqlAnywherePlatform; import io.ebean.config.dbplatform.sqlite.SQLitePlatform; import io.ebean.config.dbplatform.sqlserver.SqlServer16Platform; import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform; +import io.ebean.config.dbplatform.yugabyte.YugabytePlaform; import io.ebean.dbmigration.DbMigration; import io.ebean.util.IOUtils; import io.ebean.util.StringHelper; @@ -900,6 +901,8 @@ public class DefaultDbMigration implements DbMigration { return new Postgres9Platform(); case POSTGRES: return new PostgresPlatform(); + case YUGABYTE: + return new YugabytePlaform(); case MARIADB: return new MariaDbPlatform(); case MYSQL55: diff --git a/ebean-test/src/test/resources/ebean.properties b/ebean-test/src/test/resources/ebean.properties index 39b376be6..52027d197 100644 --- a/ebean-test/src/test/resources/ebean.properties +++ b/ebean-test/src/test/resources/ebean.properties @@ -214,7 +214,7 @@ ebean.migrationtest.migration.run=false ebean.migrationtest.migration.includeIndex=true ebean.migrationtest.migration.generateInit=true ebean.migrationtest.migration.generatePendingDrop=auto -ebean.migrationtest.migration.platforms=db2luw,h2,hsqldb,mysql,mysql55,mariadb,postgres,oracle,sqlite,sqlserver17,hana +ebean.migrationtest.migration.platforms=db2luw,h2,hsqldb,mysql,mysql55,mariadb,postgres,oracle,sqlite,sqlserver17,hana,yugabyte #migration.migrationtest.db2luw.prefix=db2 #migration.migrationtest.sqlserver17.prefix=sqlserver dbmigration.platform.mariadb.useMigrationStoredProcedures=true diff --git a/ebean-test/src/test/resources/migrationtest/dbinit/yugabyte/1.4.sql b/ebean-test/src/test/resources/migrationtest/dbinit/yugabyte/1.4.sql new file mode 100644 index 000000000..53f009767 --- /dev/null +++ b/ebean-test/src/test/resources/migrationtest/dbinit/yugabyte/1.4.sql @@ -0,0 +1,327 @@ +-- Migrationscripts for ebean unittest +-- apply changes +create table migtest_ckey_assoc ( + id integer generated by default as identity not null, + assoc_one varchar(255), + constraint pk_migtest_ckey_assoc primary key (id) +); + +create table migtest_ckey_detail ( + id integer generated by default as identity not null, + something varchar(255), + constraint pk_migtest_ckey_detail primary key (id) +); + +create table migtest_ckey_parent ( + one_key integer not null, + two_key varchar(127) not null, + name varchar(255), + version integer not null, + constraint pk_migtest_ckey_parent primary key (one_key,two_key) +); + +create table migtest_fk_cascade ( + id bigint generated by default as identity not null, + one_id bigint, + constraint pk_migtest_fk_cascade primary key (id) +); + +create table migtest_fk_cascade_one ( + id bigint generated by default as identity not null, + constraint pk_migtest_fk_cascade_one primary key (id) +); + +create table migtest_fk_none ( + id bigint generated by default as identity not null, + one_id bigint, + constraint pk_migtest_fk_none primary key (id) +); + +create table migtest_fk_none_via_join ( + id bigint generated by default as identity not null, + one_id bigint, + constraint pk_migtest_fk_none_via_join primary key (id) +); + +create table migtest_fk_one ( + id bigint generated by default as identity not null, + constraint pk_migtest_fk_one primary key (id) +); + +create table migtest_fk_set_null ( + id bigint generated by default as identity not null, + one_id bigint, + constraint pk_migtest_fk_set_null primary key (id) +); + +create table migtest_e_basic ( + id integer generated by default as identity not null, + status varchar(1), + status2 varchar(1) default 'N' not null, + name varchar(127), + description varchar(127), + some_date timestamptz, + old_boolean boolean default false not null, + old_boolean2 boolean, + eref_id integer, + indextest1 varchar(127), + indextest2 varchar(127), + indextest3 varchar(127), + indextest4 varchar(127), + indextest5 varchar(127), + indextest6 varchar(127), + user_id integer default 23 not null, + constraint ck_migtest_e_basic_status check ( status in ('N','A','I')), + constraint ck_migtest_e_basic_status2 check ( status2 in ('N','A','I')), + constraint uq_migtest_e_basic_indextest2 unique (indextest2), + constraint uq_migtest_e_basic_indextest6 unique (indextest6), + constraint pk_migtest_e_basic primary key (id) +); + +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 bigint, + constraint pk_migtest_e_history primary key (id) +); + +create table migtest_e_history2 ( + id integer generated by default as identity not null, + test_string varchar(255), + obsolete_string1 varchar(255), + obsolete_string2 varchar(255), + constraint pk_migtest_e_history2 primary key (id) +); + +create table migtest_e_history3 ( + id integer generated by default as identity not null, + test_string varchar(255), + constraint pk_migtest_e_history3 primary key (id) +); + +create table migtest_e_history4 ( + id integer generated by default as identity not null, + test_number integer, + constraint pk_migtest_e_history4 primary key (id) +); + +create table migtest_e_history5 ( + id integer generated by default as identity not null, + test_number integer, + constraint pk_migtest_e_history5 primary key (id) +); + +create table migtest_e_history6 ( + id integer generated by default as identity not null, + test_number1 integer, + test_number2 integer default 7 not null, + constraint pk_migtest_e_history6 primary key (id) +); + +create table migtest_e_ref ( + id integer generated by default as identity not null, + name varchar(127) not null, + constraint uq_migtest_e_ref_name unique (name), + constraint pk_migtest_e_ref primary key (id) +); + +create table migtest_e_softdelete ( + id integer generated by default as identity not null, + test_string varchar(255), + constraint pk_migtest_e_softdelete primary key (id) +); + +create table migtest_mtm_c ( + id integer generated by default as identity not null, + name varchar(255), + constraint pk_migtest_mtm_c primary key (id) +); + +create table migtest_mtm_m ( + id bigint generated by default as identity not null, + name varchar(255), + constraint pk_migtest_mtm_m primary key (id) +); + +create table migtest_oto_child ( + id integer generated by default as identity not null, + name varchar(255), + constraint pk_migtest_oto_child primary key (id) +); + +create table migtest_oto_master ( + id bigint generated by default as identity not null, + name varchar(255), + constraint pk_migtest_oto_master primary key (id) +); + +create index if not exists ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); +create index if not exists ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_migtest_fk_cascade_one_id on migtest_fk_cascade (one_id); +alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update restrict; + +create index ix_migtest_fk_set_null_one_id on 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 restrict; + +create index ix_migtest_e_basic_eref_id on migtest_e_basic (eref_id); +alter table migtest_e_basic add constraint fk_migtest_e_basic_eref_id foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict; + +alter table migtest_e_history2 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history2_history( + id integer, + test_string varchar(255), + obsolete_string1 varchar(255), + obsolete_string2 varchar(255), + sys_period tstzrange +); +create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; + +alter table migtest_e_history3 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history3_history( + id integer, + test_string varchar(255), + sys_period tstzrange +); +create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; + +alter table migtest_e_history4 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history4_history( + id integer, + test_number integer, + sys_period tstzrange +); +create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; + +alter table migtest_e_history5 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history5_history( + id integer, + test_number integer, + sys_period tstzrange +); +create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history; + +alter table migtest_e_history6 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history6_history( + id integer, + test_number1 integer, + test_number2 integer, + sys_period tstzrange +); +create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history; + +create or replace function migtest_e_history2_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history2_history (sys_period,id, test_string, obsolete_string2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.obsolete_string2); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history2_history (sys_period,id, test_string, obsolete_string2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.obsolete_string2); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history2_history_upd + before update or delete on migtest_e_history2 + for each row execute procedure migtest_e_history2_history_version(); + +create or replace function migtest_e_history3_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history3_history (sys_period,id, test_string) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history3_history (sys_period,id, test_string) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history3_history_upd + before update or delete on migtest_e_history3 + for each row execute procedure migtest_e_history3_history_version(); + +create or replace function migtest_e_history4_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history4_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history4_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history4_history_upd + before update or delete on migtest_e_history4 + for each row execute procedure migtest_e_history4_history_version(); + +create or replace function migtest_e_history5_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history5_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history5_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history5_history_upd + before update or delete on migtest_e_history5 + for each row execute procedure migtest_e_history5_history_version(); + +create or replace function migtest_e_history6_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history6_history (sys_period,id, test_number1, test_number2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number1, OLD.test_number2); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history6_history (sys_period,id, test_number1, test_number2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number1, OLD.test_number2); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history6_history_upd + before update or delete on migtest_e_history6 + for each row execute procedure migtest_e_history6_history_version(); + diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.0__initial.sql new file mode 100644 index 000000000..702b0317d --- /dev/null +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.0__initial.sql @@ -0,0 +1,327 @@ +-- Migrationscripts for ebean unittest +-- apply changes +create table migtest_ckey_assoc ( + id integer generated by default as identity not null, + assoc_one varchar(255), + constraint pk_migtest_ckey_assoc primary key (id) +); + +create table migtest_ckey_detail ( + id integer generated by default as identity not null, + something varchar(255), + constraint pk_migtest_ckey_detail primary key (id) +); + +create table migtest_ckey_parent ( + one_key integer not null, + two_key varchar(127) not null, + name varchar(255), + version integer not null, + constraint pk_migtest_ckey_parent primary key (one_key,two_key) +); + +create table migtest_fk_cascade ( + id bigint generated by default as identity not null, + one_id bigint, + constraint pk_migtest_fk_cascade primary key (id) +); + +create table migtest_fk_cascade_one ( + id bigint generated by default as identity not null, + constraint pk_migtest_fk_cascade_one primary key (id) +); + +create table migtest_fk_none ( + id bigint generated by default as identity not null, + one_id bigint, + constraint pk_migtest_fk_none primary key (id) +); + +create table migtest_fk_none_via_join ( + id bigint generated by default as identity not null, + one_id bigint, + constraint pk_migtest_fk_none_via_join primary key (id) +); + +create table migtest_fk_one ( + id bigint generated by default as identity not null, + constraint pk_migtest_fk_one primary key (id) +); + +create table migtest_fk_set_null ( + id bigint generated by default as identity not null, + one_id bigint, + constraint pk_migtest_fk_set_null primary key (id) +); + +create table migtest_e_basic ( + id integer generated by default as identity not null, + status varchar(1), + status2 varchar(1) default 'N' not null, + name varchar(127), + description varchar(127), + some_date timestamptz, + old_boolean boolean default false not null, + old_boolean2 boolean, + eref_id integer, + indextest1 varchar(127), + indextest2 varchar(127), + indextest3 varchar(127), + indextest4 varchar(127), + indextest5 varchar(127), + indextest6 varchar(127), + user_id integer not null, + constraint ck_migtest_e_basic_status check ( status in ('N','A','I')), + constraint ck_migtest_e_basic_status2 check ( status2 in ('N','A','I')), + constraint uq_migtest_e_basic_indextest2 unique (indextest2), + constraint uq_migtest_e_basic_indextest6 unique (indextest6), + constraint pk_migtest_e_basic primary key (id) +); + +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), + constraint pk_migtest_e_history primary key (id) +); + +create table migtest_e_history2 ( + id integer generated by default as identity not null, + test_string varchar(255), + obsolete_string1 varchar(255), + obsolete_string2 varchar(255), + constraint pk_migtest_e_history2 primary key (id) +); + +create table migtest_e_history3 ( + id integer generated by default as identity not null, + test_string varchar(255), + constraint pk_migtest_e_history3 primary key (id) +); + +create table migtest_e_history4 ( + id integer generated by default as identity not null, + test_number integer, + constraint pk_migtest_e_history4 primary key (id) +); + +create table migtest_e_history5 ( + id integer generated by default as identity not null, + test_number integer, + constraint pk_migtest_e_history5 primary key (id) +); + +create table migtest_e_history6 ( + id integer generated by default as identity not null, + test_number1 integer, + test_number2 integer not null, + constraint pk_migtest_e_history6 primary key (id) +); + +create table migtest_e_ref ( + id integer generated by default as identity not null, + name varchar(127) not null, + constraint uq_migtest_e_ref_name unique (name), + constraint pk_migtest_e_ref primary key (id) +); + +create table migtest_e_softdelete ( + id integer generated by default as identity not null, + test_string varchar(255), + constraint pk_migtest_e_softdelete primary key (id) +); + +create table migtest_mtm_c ( + id integer generated by default as identity not null, + name varchar(255), + constraint pk_migtest_mtm_c primary key (id) +); + +create table migtest_mtm_m ( + id bigint generated by default as identity not null, + name varchar(255), + constraint pk_migtest_mtm_m primary key (id) +); + +create table migtest_oto_child ( + id integer generated by default as identity not null, + name varchar(255), + constraint pk_migtest_oto_child primary key (id) +); + +create table migtest_oto_master ( + id bigint generated by default as identity not null, + name varchar(255), + constraint pk_migtest_oto_master primary key (id) +); + +create index if not exists ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); +create index if not exists ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_migtest_fk_cascade_one_id on migtest_fk_cascade (one_id); +alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update restrict; + +create index ix_migtest_fk_set_null_one_id on 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 restrict; + +create index ix_migtest_e_basic_eref_id on migtest_e_basic (eref_id); +alter table migtest_e_basic add constraint fk_migtest_e_basic_eref_id foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict; + +alter table migtest_e_history2 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history2_history( + id integer, + test_string varchar(255), + obsolete_string1 varchar(255), + obsolete_string2 varchar(255), + sys_period tstzrange +); +create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; + +alter table migtest_e_history3 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history3_history( + id integer, + test_string varchar(255), + sys_period tstzrange +); +create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; + +alter table migtest_e_history4 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history4_history( + id integer, + test_number integer, + sys_period tstzrange +); +create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; + +alter table migtest_e_history5 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history5_history( + id integer, + test_number integer, + sys_period tstzrange +); +create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history; + +alter table migtest_e_history6 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history6_history( + id integer, + test_number1 integer, + test_number2 integer, + sys_period tstzrange +); +create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history; + +create or replace function migtest_e_history2_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history2_history (sys_period,id, test_string, obsolete_string2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.obsolete_string2); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history2_history (sys_period,id, test_string, obsolete_string2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.obsolete_string2); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history2_history_upd + before update or delete on migtest_e_history2 + for each row execute procedure migtest_e_history2_history_version(); + +create or replace function migtest_e_history3_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history3_history (sys_period,id, test_string) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history3_history (sys_period,id, test_string) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history3_history_upd + before update or delete on migtest_e_history3 + for each row execute procedure migtest_e_history3_history_version(); + +create or replace function migtest_e_history4_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history4_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history4_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history4_history_upd + before update or delete on migtest_e_history4 + for each row execute procedure migtest_e_history4_history_version(); + +create or replace function migtest_e_history5_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history5_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history5_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history5_history_upd + before update or delete on migtest_e_history5 + for each row execute procedure migtest_e_history5_history_version(); + +create or replace function migtest_e_history6_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history6_history (sys_period,id, test_number1, test_number2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number1, OLD.test_number2); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history6_history (sys_period,id, test_number1, test_number2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number1, OLD.test_number2); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history6_history_upd + before update or delete on migtest_e_history6 + for each row execute procedure migtest_e_history6_history_version(); + diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.1.sql new file mode 100644 index 000000000..7a911b54c --- /dev/null +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.1.sql @@ -0,0 +1,243 @@ +-- Migrationscripts for ebean unittest +-- drop dependencies +drop view if exists migtest_e_history2_with_history; +drop view if exists migtest_e_history3_with_history; +drop view if exists migtest_e_history4_with_history; +drop view if exists migtest_e_history5_with_history; + +-- apply changes +create table migtest_e_user ( + id integer generated by default as identity not null, + constraint pk_migtest_e_user primary key (id) +); + +create table migtest_mtm_c_migtest_mtm_m ( + migtest_mtm_c_id integer not null, + migtest_mtm_m_id bigint not null, + constraint pk_migtest_mtm_c_migtest_mtm_m primary key (migtest_mtm_c_id,migtest_mtm_m_id) +); + +create table migtest_mtm_m_migtest_mtm_c ( + migtest_mtm_m_id bigint not null, + migtest_mtm_c_id integer not null, + constraint pk_migtest_mtm_m_migtest_mtm_c primary key (migtest_mtm_m_id,migtest_mtm_c_id) +); + +create table migtest_mtm_m_phone_numbers ( + migtest_mtm_m_id bigint not null, + value varchar(255) not null +); + +alter table migtest_ckey_detail add column one_key integer; +alter table migtest_ckey_detail add column two_key varchar(127); + +alter table migtest_ckey_detail add constraint fk_migtest_ckey_detail_parent foreign key (one_key,two_key) references migtest_ckey_parent (one_key,two_key) on delete restrict on update restrict; +alter table migtest_ckey_parent add column assoc_id integer; + +alter table if exists migtest_fk_cascade drop constraint if exists fk_migtest_fk_cascade_one_id; +alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete restrict on update restrict; +alter table migtest_fk_none add constraint fk_migtest_fk_none_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict; +alter table migtest_fk_none_via_join add constraint fk_migtest_fk_none_via_join_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict; +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 restrict on update restrict; + +update migtest_e_basic set status = 'A' where status is null; +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','?')); +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status2; +alter table migtest_e_basic alter column status2 type varchar(127) using status2::varchar(127); +alter table migtest_e_basic alter column status2 drop default; +alter table migtest_e_basic alter column status2 drop not null; + +-- rename all collisions; +alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description); + +insert into migtest_e_user (id) select distinct user_id from migtest_e_basic; +alter table migtest_e_basic add constraint fk_migtest_e_basic_user_id foreign key (user_id) references migtest_e_user (id) on delete restrict on update restrict; +alter table migtest_e_basic alter column user_id drop not null; +alter table migtest_e_basic add column new_string_field varchar(255) default 'foo''bar' not null; +alter table migtest_e_basic add column new_boolean_field boolean default true not null; +update migtest_e_basic set new_boolean_field = old_boolean; + +alter table migtest_e_basic add column new_boolean_field2 boolean default true not null; +alter table migtest_e_basic add column progress integer default 0 not null; +alter table migtest_e_basic add constraint ck_migtest_e_basic_progress check ( progress in (0,1,2)); +alter table migtest_e_basic add column new_integer integer default 42 not null; + +alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest2; +alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest6; +alter table migtest_e_basic add constraint uq_migtest_e_basic_status_indextest1 unique (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 type bigint using test_string::bigint; +comment on table migtest_e_history is 'We have history now'; + +-- NOTE: table has @History - special migration may be necessary +update migtest_e_history2 set test_string = 'unknown' where test_string is null; +alter table migtest_e_history2 alter column test_string set default 'unknown'; +alter table migtest_e_history2 alter column test_string set not null; +alter table migtest_e_history2 add column test_string2 varchar(255); +alter table migtest_e_history2 add column test_string3 varchar(255) default 'unknown' not null; +alter table migtest_e_history2 add column new_column varchar(20); +alter table migtest_e_history2_history add column test_string2 varchar(255); +alter table migtest_e_history2_history add column test_string3 varchar(255) default 'unknown'; +alter table migtest_e_history2_history add column new_column varchar(20); + +alter table migtest_e_history4 alter column test_number type bigint using test_number::bigint; +alter table migtest_e_history4_history alter column test_number type bigint using test_number::bigint; +alter table migtest_e_history5 add column test_boolean boolean default false not null; +alter table migtest_e_history5_history add column test_boolean boolean default false; + + +-- NOTE: table has @History - special migration may be necessary +update migtest_e_history6 set test_number1 = 42 where test_number1 is null; +alter table migtest_e_history6 alter column test_number1 set default 42; +alter table migtest_e_history6 alter column test_number1 set not null; +alter table migtest_e_history6 alter column test_number2 drop not null; +alter table migtest_e_softdelete add column deleted boolean default false not null; + +alter table migtest_oto_child add column master_id bigint; + +create index if not exists ix_migtest_e_basic_indextest3 on migtest_e_basic (indextest3); +create index if not exists ix_migtest_e_basic_indextest6 on migtest_e_basic (indextest6); +drop index if exists ix_migtest_e_basic_indextest1; +drop index if exists ix_migtest_e_basic_indextest5; +create index ix_migtest_mtm_c_migtest_mtm_m_migtest_mtm_c on migtest_mtm_c_migtest_mtm_m (migtest_mtm_c_id); +alter table migtest_mtm_c_migtest_mtm_m add constraint fk_migtest_mtm_c_migtest_mtm_m_migtest_mtm_c foreign key (migtest_mtm_c_id) references migtest_mtm_c (id) on delete restrict on update restrict; + +create index ix_migtest_mtm_c_migtest_mtm_m_migtest_mtm_m on migtest_mtm_c_migtest_mtm_m (migtest_mtm_m_id); +alter table migtest_mtm_c_migtest_mtm_m add constraint fk_migtest_mtm_c_migtest_mtm_m_migtest_mtm_m foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict; + +create index ix_migtest_mtm_m_migtest_mtm_c_migtest_mtm_m on migtest_mtm_m_migtest_mtm_c (migtest_mtm_m_id); +alter table migtest_mtm_m_migtest_mtm_c add constraint fk_migtest_mtm_m_migtest_mtm_c_migtest_mtm_m foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict; + +create index ix_migtest_mtm_m_migtest_mtm_c_migtest_mtm_c on migtest_mtm_m_migtest_mtm_c (migtest_mtm_c_id); +alter table migtest_mtm_m_migtest_mtm_c add constraint fk_migtest_mtm_m_migtest_mtm_c_migtest_mtm_c foreign key (migtest_mtm_c_id) references migtest_mtm_c (id) on delete restrict on update restrict; + +create index ix_migtest_mtm_m_phone_numbers_migtest_mtm_m_id on migtest_mtm_m_phone_numbers (migtest_mtm_m_id); +alter table migtest_mtm_m_phone_numbers add constraint fk_migtest_mtm_m_phone_numbers_migtest_mtm_m_id foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict; + +create index ix_migtest_ckey_parent_assoc_id on migtest_ckey_parent (assoc_id); +alter table migtest_ckey_parent add constraint fk_migtest_ckey_parent_assoc_id foreign key (assoc_id) references migtest_ckey_assoc (id) on delete restrict on update restrict; + +alter table migtest_oto_child add constraint fk_migtest_oto_child_master_id foreign key (master_id) references migtest_oto_master (id) on delete restrict on update restrict; + +alter table migtest_e_history add column sys_period tstzrange not null default tstzrange(current_timestamp, null); +create table migtest_e_history_history( + id integer, + test_string bigint, + sys_period tstzrange +); +create view migtest_e_history_with_history as select * from migtest_e_history union all select * from migtest_e_history_history; + +create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; + +create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; + +create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; + +create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history; + +create or replace function migtest_e_history_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history_history (sys_period,id, test_string) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history_history (sys_period,id, test_string) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger migtest_e_history_history_upd + before update or delete on migtest_e_history + for each row execute procedure migtest_e_history_history_version(); + +-- changes: [add test_string2, add test_string3, add new_column] +create or replace function migtest_e_history2_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history2_history (sys_period,id, test_string, test_string3, new_column, obsolete_string1, obsolete_string2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.test_string3, OLD.new_column, OLD.obsolete_string1, OLD.obsolete_string2); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history2_history (sys_period,id, test_string, test_string3, new_column, obsolete_string1, obsolete_string2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.test_string3, OLD.new_column, OLD.obsolete_string1, OLD.obsolete_string2); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +-- changes: [exclude test_string] +create or replace function migtest_e_history3_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history3_history (sys_period,id) values (tstzrange(lowerTs,upperTs), OLD.id); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history3_history (sys_period,id) values (tstzrange(lowerTs,upperTs), OLD.id); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +-- changes: [alter test_number] +create or replace function migtest_e_history4_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history4_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history4_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +-- changes: [add test_boolean] +create or replace function migtest_e_history5_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history5_history (sys_period,id, test_number, test_boolean) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number, OLD.test_boolean); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history5_history (sys_period,id, test_number, test_boolean) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number, OLD.test_boolean); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.2__dropsFor_1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.2__dropsFor_1.1.sql new file mode 100644 index 000000000..c9a6d03e6 --- /dev/null +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.2__dropsFor_1.1.sql @@ -0,0 +1,40 @@ +-- Migrationscripts for ebean unittest +-- drop dependencies +drop view if exists migtest_e_history2_with_history; + +-- apply changes +alter table migtest_e_basic drop column old_boolean; + +alter table migtest_e_basic drop column old_boolean2; + +alter table migtest_e_basic drop column eref_id; + +alter table migtest_e_history2 drop column obsolete_string1; +alter table migtest_e_history2_history drop column obsolete_string1; + +alter table migtest_e_history2 drop column obsolete_string2; +alter table migtest_e_history2_history drop column obsolete_string2; + +drop table if exists migtest_e_ref cascade; +drop sequence if exists migtest_e_ref_seq; +create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; + +-- changes: [drop obsolete_string1, drop obsolete_string2] +create or replace function migtest_e_history2_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history2_history (sys_period,id, test_string, test_string3, new_column) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.test_string3, OLD.new_column); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history2_history (sys_period,id, test_string, test_string3, new_column) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.test_string3, OLD.new_column); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.3.sql new file mode 100644 index 000000000..d0e444fc4 --- /dev/null +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.3.sql @@ -0,0 +1,138 @@ +-- Migrationscripts for ebean unittest +-- drop dependencies +drop view if exists migtest_e_history2_with_history; +drop view if exists migtest_e_history3_with_history; +drop view if exists migtest_e_history4_with_history; + +-- apply changes +create table migtest_e_ref ( + id integer generated by default as identity not null, + name varchar(127) not null, + constraint uq_migtest_e_ref_name unique (name), + constraint pk_migtest_e_ref primary key (id) +); + +alter table if exists migtest_ckey_detail drop constraint if exists fk_migtest_ckey_detail_parent; +alter table if exists migtest_fk_cascade drop constraint if exists fk_migtest_fk_cascade_one_id; +alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update restrict; +alter table if exists migtest_fk_none drop constraint if exists fk_migtest_fk_none_one_id; +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 restrict; +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')); + +update migtest_e_basic set status2 = 'N' where status2 is null; +alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status2; +alter table migtest_e_basic alter column status2 type varchar(1) using status2::varchar(1); +alter table migtest_e_basic alter column status2 set default 'N'; +alter table migtest_e_basic alter column status2 set not null; +alter table migtest_e_basic add constraint ck_migtest_e_basic_status2 check ( status2 in ('N','A','I')); +alter table migtest_e_basic drop constraint uq_migtest_e_basic_description; + +update migtest_e_basic set user_id = 23 where user_id is null; +alter table if exists migtest_e_basic drop constraint if exists fk_migtest_e_basic_user_id; +alter table migtest_e_basic alter column user_id set default 23; +alter table migtest_e_basic alter column user_id set not null; +alter table migtest_e_basic add column old_boolean boolean default false not null; +alter table migtest_e_basic add column old_boolean2 boolean; +alter table migtest_e_basic add column eref_id integer; + +alter table migtest_e_basic drop constraint uq_migtest_e_basic_status_indextest1; +alter table migtest_e_basic drop constraint uq_migtest_e_basic_name; +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; +alter table migtest_e_history2 alter column test_string drop not null; +alter table migtest_e_history2 add column obsolete_string1 varchar(255); +alter table migtest_e_history2 add column obsolete_string2 varchar(255); +alter table migtest_e_history2_history add column obsolete_string1 varchar(255); +alter table migtest_e_history2_history add column obsolete_string2 varchar(255); + +alter table migtest_e_history4 alter column test_number type integer using test_number::integer; +alter table migtest_e_history4_history alter column test_number type integer using test_number::integer; +alter table migtest_e_history6 alter column test_number1 drop default; +alter table migtest_e_history6 alter column test_number1 drop not null; + +-- NOTE: table has @History - special migration may be necessary +update migtest_e_history6 set test_number2 = 7 where test_number2 is null; +alter table migtest_e_history6 alter column test_number2 set default 7; +alter table migtest_e_history6 alter column test_number2 set not null; +create index if not exists ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); +create index if not exists ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +drop index if exists ix_migtest_e_basic_indextest3; +drop index if exists ix_migtest_e_basic_indextest6; +create index ix_migtest_e_basic_eref_id on migtest_e_basic (eref_id); +alter table migtest_e_basic add constraint fk_migtest_e_basic_eref_id foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict; + +create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; + +create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; + +create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; + +-- changes: [add obsolete_string1, add obsolete_string2] +create or replace function migtest_e_history2_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history2_history (sys_period,id, test_string, obsolete_string2, test_string2, test_string3, new_column) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.obsolete_string2, OLD.test_string2, OLD.test_string3, OLD.new_column); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history2_history (sys_period,id, test_string, obsolete_string2, test_string2, test_string3, new_column) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.obsolete_string2, OLD.test_string2, OLD.test_string3, OLD.new_column); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +-- changes: [include test_string] +create or replace function migtest_e_history3_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history3_history (sys_period,id, test_string) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history3_history (sys_period,id, test_string) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +-- changes: [alter test_number] +create or replace function migtest_e_history4_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history4_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history4_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.4__dropsFor_1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.4__dropsFor_1.3.sql new file mode 100644 index 000000000..4524d4a40 --- /dev/null +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.4__dropsFor_1.3.sql @@ -0,0 +1,92 @@ +-- Migrationscripts for ebean unittest +-- drop dependencies +drop trigger if exists migtest_e_history_history_upd on migtest_e_history cascade; +drop function if exists migtest_e_history_history_version(); + +drop view migtest_e_history_with_history; +alter table migtest_e_history drop column sys_period; +drop table migtest_e_history_history; + +drop view if exists migtest_e_history2_with_history; +drop view if exists migtest_e_history5_with_history; + +-- apply changes +alter table migtest_ckey_detail drop column one_key; + +alter table migtest_ckey_detail drop column two_key; + +alter table migtest_ckey_parent drop column assoc_id; + +alter table migtest_e_basic drop column new_string_field; + +alter table migtest_e_basic drop column new_boolean_field; + +alter table migtest_e_basic drop column new_boolean_field2; + +alter table migtest_e_basic drop column progress; + +alter table migtest_e_basic drop column new_integer; + +alter table migtest_e_history2 drop column test_string2; +alter table migtest_e_history2_history drop column test_string2; + +alter table migtest_e_history2 drop column test_string3; +alter table migtest_e_history2_history drop column test_string3; + +alter table migtest_e_history2 drop column new_column; +alter table migtest_e_history2_history drop column new_column; + +alter table migtest_e_history5 drop column test_boolean; +alter table migtest_e_history5_history drop column test_boolean; + +alter table migtest_e_softdelete drop column deleted; + +alter table migtest_oto_child drop column master_id; + +drop table if exists migtest_e_user cascade; +drop sequence if exists migtest_e_user_seq; +drop table if exists migtest_mtm_c_migtest_mtm_m cascade; +drop table if exists migtest_mtm_m_migtest_mtm_c cascade; +drop table if exists migtest_mtm_m_phone_numbers cascade; +create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; + +create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history; + +-- changes: [drop test_string2, drop test_string3, drop new_column] +create or replace function migtest_e_history2_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history2_history (sys_period,id, test_string, obsolete_string2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.obsolete_string2); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history2_history (sys_period,id, test_string, obsolete_string2) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_string, OLD.obsolete_string2); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +-- changes: [drop test_boolean] +create or replace function migtest_e_history5_history_version() returns trigger as $$ +declare + lowerTs timestamptz; + upperTs timestamptz; +begin + lowerTs = lower(OLD.sys_period); + upperTs = greatest(lowerTs + '1 microsecond',current_timestamp); + if (TG_OP = 'UPDATE') then + insert into migtest_e_history5_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into migtest_e_history5_history (sys_period,id, test_number) values (tstzrange(lowerTs,upperTs), OLD.id, OLD.test_number); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/R__order_views.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/R__order_views.sql new file mode 100644 index 000000000..ccf30a2c6 --- /dev/null +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/R__order_views.sql @@ -0,0 +1,7 @@ + + create or replace view order_agg_vw as + select d.order_id, sum(d.order_qty * d.unit_price) as order_total, + sum(d.ship_qty * d.unit_price) as ship_total + from o_order_detail d + group by d.order_id + \ No newline at end of file diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/idx_yugabyte.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/idx_yugabyte.migrations new file mode 100644 index 000000000..4dd2bc71e --- /dev/null +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/idx_yugabyte.migrations @@ -0,0 +1,7 @@ +-1449071956, 1.0__initial.sql +1985413053, 1.1.sql +-1861367028, 1.2__dropsFor_1.1.sql +2034977550, 1.3.sql +-1991941691, 1.4__dropsFor_1.3.sql +561281075, R__order_views.sql +