diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.0__initial.sql index ae003966b..f8dcf1b54 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.0__initial.sql @@ -171,35 +171,6 @@ alter table migtest_e_history6 add column sys_period tstzrange not null default -- apply post alter create table migtest_e_history2_history(like migtest_e_history2); create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; - -create table migtest_e_history3_history(like migtest_e_history3); -create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; - -create table migtest_e_history4_history(like migtest_e_history4); -create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; - -create table migtest_e_history5_history(like migtest_e_history5); -create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history; - -create table migtest_e_history6_history(like migtest_e_history6); -create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history; - --- foreign keys and indices -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; - -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 idxd_migtest_0 on migtest_oto_child using hash (upper(name)) where upper(name) = 'JIM'; -create index concurrently if not exists ix_migtest_oto_child_lowername_id on migtest_oto_child (lower(name),id); -create index if not exists ix_migtest_oto_child_lowername on migtest_oto_child (lower(name)); --- apply history trigger create or replace function migtest_e_history2_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -222,6 +193,9 @@ 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 table migtest_e_history3_history(like migtest_e_history3); +create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; create or replace function migtest_e_history3_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -244,6 +218,9 @@ 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 table migtest_e_history4_history(like migtest_e_history4); +create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; create or replace function migtest_e_history4_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -266,6 +243,9 @@ 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 table migtest_e_history5_history(like migtest_e_history5); +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_history5_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -288,6 +268,9 @@ 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 table migtest_e_history6_history(like migtest_e_history6); +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_history6_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -310,3 +293,19 @@ 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(); + +-- foreign keys and indices +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; + +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 idxd_migtest_0 on migtest_oto_child using hash (upper(name)) where upper(name) = 'JIM'; +create index concurrently if not exists ix_migtest_oto_child_lowername_id on migtest_oto_child (lower(name),id); +create index if not exists ix_migtest_oto_child_lowername on migtest_oto_child (lower(name)); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.1.sql index b585cc248..a04a4d1b2 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.1.sql @@ -12,10 +12,6 @@ drop index if exists ix_migtest_e_basic_indextest5; drop index if exists idxd_migtest_0; drop index concurrently if exists ix_migtest_oto_child_lowername_id; drop index if exists ix_migtest_oto_child_lowername; -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, @@ -50,6 +46,22 @@ alter table migtest_e_history alter column test_string TYPE bigint USING (test_s -- NOTE: table has @History - special migration may be necessary update migtest_e_history2 set test_string = 'unknown' where test_string is null; +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; +drop trigger if exists migtest_e_history3_history_upd on migtest_e_history3 cascade; +drop function if exists migtest_e_history3_history_version(); + +drop view migtest_e_history3_with_history; +drop trigger if exists migtest_e_history4_history_upd on migtest_e_history4 cascade; +drop function if exists migtest_e_history4_history_version(); + +drop view migtest_e_history4_with_history; +drop trigger if exists migtest_e_history5_history_upd on migtest_e_history5 cascade; +drop function if exists migtest_e_history5_history_version(); + +drop view migtest_e_history5_with_history; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; @@ -100,9 +112,123 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); create table migtest_e_history_history(like migtest_e_history); create view migtest_e_history_with_history as select * from migtest_e_history union all select * from migtest_e_history_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(); + comment on column migtest_e_history.test_string is 'Column altered to long now'; comment on table migtest_e_history is 'We have history now'; +create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_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, 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; + +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 view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; +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; + +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 view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; +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 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_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; + +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(); + -- foreign keys and indices 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; @@ -133,111 +259,3 @@ alter table migtest_oto_child add constraint fk_migtest_oto_child_master_id fore 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); create index if not exists ix_migtest_oto_child_name on migtest_oto_child (name); --- apply history view -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; - --- apply history trigger -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/postgres/1.2__dropsFor_1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.2__dropsFor_1.1.sql index f3eb208a1..a9fef454c 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.2__dropsFor_1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.2__dropsFor_1.1.sql @@ -1,6 +1,9 @@ -- Migrationscripts for ebean unittest --- drop dependencies -drop view if exists migtest_e_history2_with_history; +-- apply changes +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; -- apply alter tables alter table migtest_e_basic drop column description_file; alter table migtest_e_basic drop column old_boolean; @@ -11,13 +14,7 @@ alter table migtest_e_history2 drop column obsolete_string2; alter table migtest_e_history2_history drop column obsolete_string1; alter table migtest_e_history2_history drop column obsolete_string2; -- apply post alter -drop table if exists migtest_e_ref cascade; -drop sequence if exists migtest_e_ref_seq; --- apply history view create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; - --- apply history trigger --- changes: [drop obsolete_string1, drop obsolete_string2] create or replace function migtest_e_history2_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -36,3 +33,9 @@ begin 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(); + +drop table if exists migtest_e_ref cascade; +drop sequence if exists migtest_e_ref_seq; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.3.sql index 3d0f451f9..eb67a9670 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.3.sql @@ -16,9 +16,6 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest5; alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; drop index if exists ix_migtest_e_basic_indextest3; drop index if exists ix_migtest_e_basic_indextest6; -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, @@ -31,6 +28,18 @@ create table migtest_e_ref ( update migtest_e_basic set status2 = 'N' where status2 is null; update migtest_e_basic set user_id = 23 where user_id is null; +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; +drop trigger if exists migtest_e_history3_history_upd on migtest_e_history3 cascade; +drop function if exists migtest_e_history3_history_version(); + +drop view migtest_e_history3_with_history; +drop trigger if exists migtest_e_history4_history_upd on migtest_e_history4 cascade; +drop function if exists migtest_e_history4_history_version(); + +drop view migtest_e_history4_with_history; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number2 = 7 where test_number2 is null; @@ -66,26 +75,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique 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 ''; --- foreign keys and indices -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 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; - -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 if not exists ix_m12_otoc71 on migtest_oto_child (name); -create unique index if not exists uq_m12_otoc71 on migtest_oto_child (lower(name)); -create unique index if not exists ix_migtest_oto_master_lowername on migtest_oto_master (lower(name)); --- apply history view 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; - --- apply history trigger --- changes: [add obsolete_string1, add obsolete_string2] create or replace function migtest_e_history2_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -104,7 +94,11 @@ begin end; $$ LANGUAGE plpgsql; --- changes: [include test_string] +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 view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; create or replace function migtest_e_history3_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -123,7 +117,11 @@ begin end; $$ LANGUAGE plpgsql; --- changes: [alter test_number] +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 view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; create or replace function migtest_e_history4_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -142,3 +140,18 @@ begin 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(); + +-- foreign keys and indices +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 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; + +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 if not exists ix_m12_otoc71 on migtest_oto_child (name); +create unique index if not exists uq_m12_otoc71 on migtest_oto_child (lower(name)); +create unique index if not exists ix_migtest_oto_master_lowername on migtest_oto_master (lower(name)); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.4__dropsFor_1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.4__dropsFor_1.3.sql index bea42a3cf..822e9f61a 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.4__dropsFor_1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/1.4__dropsFor_1.3.sql @@ -6,8 +6,15 @@ drop function if exists migtest_e_history_history_version(); drop view migtest_e_history_with_history; 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 +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; +drop trigger if exists migtest_e_history5_history_upd on migtest_e_history5 cascade; +drop function if exists migtest_e_history5_history_version(); + +drop view migtest_e_history5_with_history; -- apply alter tables alter table migtest_ckey_detail drop column one_key; alter table migtest_ckey_detail drop column two_key; @@ -29,18 +36,7 @@ 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; -- apply post alter -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; --- apply history view 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; - --- apply history trigger --- 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; @@ -59,7 +55,11 @@ begin end; $$ LANGUAGE plpgsql; --- changes: [drop test_boolean] +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 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_history5_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -78,3 +78,12 @@ begin 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(); + +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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/idx_postgres.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/idx_postgres.migrations index 784ddf976..54ec929dc 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/idx_postgres.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres/idx_postgres.migrations @@ -1,8 +1,8 @@ -1040369575, 1.0__initial.sql -45294494, 1.1.sql -1770819182, 1.2__dropsFor_1.1.sql --223959883, 1.3.sql -739723472, 1.4__dropsFor_1.3.sql +-125847545, 1.0__initial.sql +1782158364, 1.1.sql +-1098989118, 1.2__dropsFor_1.1.sql +-1852757328, 1.3.sql +1729345905, 1.4__dropsFor_1.3.sql 783227075, R__multi_comments.sql 561281075, R__order_views.sql 283077354, R__pg_indexes.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.0__initial.sql index 6ab514bf2..b64178f90 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.0__initial.sql @@ -171,35 +171,6 @@ alter table migtest_e_history6 add column sys_period tstzrange not null default -- apply post alter create table migtest_e_history2_history(like migtest_e_history2); create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; - -create table migtest_e_history3_history(like migtest_e_history3); -create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; - -create table migtest_e_history4_history(like migtest_e_history4); -create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; - -create table migtest_e_history5_history(like migtest_e_history5); -create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history; - -create table migtest_e_history6_history(like migtest_e_history6); -create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history; - --- foreign keys and indices -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; - -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 idxd_migtest_0 on migtest_oto_child using hash (upper(name)) where upper(name) = 'JIM'; -create index concurrently if not exists ix_migtest_oto_child_lowername_id on migtest_oto_child (lower(name),id); -create index if not exists ix_migtest_oto_child_lowername on migtest_oto_child (lower(name)); --- apply history trigger create or replace function migtest_e_history2_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -222,6 +193,9 @@ 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 table migtest_e_history3_history(like migtest_e_history3); +create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; create or replace function migtest_e_history3_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -244,6 +218,9 @@ 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 table migtest_e_history4_history(like migtest_e_history4); +create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; create or replace function migtest_e_history4_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -266,6 +243,9 @@ 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 table migtest_e_history5_history(like migtest_e_history5); +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_history5_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -288,6 +268,9 @@ 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 table migtest_e_history6_history(like migtest_e_history6); +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_history6_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -310,3 +293,19 @@ 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(); + +-- foreign keys and indices +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; + +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 idxd_migtest_0 on migtest_oto_child using hash (upper(name)) where upper(name) = 'JIM'; +create index concurrently if not exists ix_migtest_oto_child_lowername_id on migtest_oto_child (lower(name),id); +create index if not exists ix_migtest_oto_child_lowername on migtest_oto_child (lower(name)); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.1.sql index dbace0ad1..7f0aa76ec 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.1.sql @@ -12,10 +12,6 @@ drop index if exists ix_migtest_e_basic_indextest5; drop index if exists idxd_migtest_0; drop index concurrently if exists ix_migtest_oto_child_lowername_id; drop index if exists ix_migtest_oto_child_lowername; -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 serial not null, @@ -50,6 +46,22 @@ alter table migtest_e_history alter column test_string TYPE bigint USING (test_s -- NOTE: table has @History - special migration may be necessary update migtest_e_history2 set test_string = 'unknown' where test_string is null; +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; +drop trigger if exists migtest_e_history3_history_upd on migtest_e_history3 cascade; +drop function if exists migtest_e_history3_history_version(); + +drop view migtest_e_history3_with_history; +drop trigger if exists migtest_e_history4_history_upd on migtest_e_history4 cascade; +drop function if exists migtest_e_history4_history_version(); + +drop view migtest_e_history4_with_history; +drop trigger if exists migtest_e_history5_history_upd on migtest_e_history5 cascade; +drop function if exists migtest_e_history5_history_version(); + +drop view migtest_e_history5_with_history; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; @@ -100,9 +112,123 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); create table migtest_e_history_history(like migtest_e_history); create view migtest_e_history_with_history as select * from migtest_e_history union all select * from migtest_e_history_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(); + comment on column migtest_e_history.test_string is 'Column altered to long now'; comment on table migtest_e_history is 'We have history now'; +create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_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, 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; + +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 view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; +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; + +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 view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; +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 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_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; + +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(); + -- foreign keys and indices 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; @@ -133,111 +259,3 @@ alter table migtest_oto_child add constraint fk_migtest_oto_child_master_id fore 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); create index if not exists ix_migtest_oto_child_name on migtest_oto_child (name); --- apply history view -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; - --- apply history trigger -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/postgres9/1.2__dropsFor_1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.2__dropsFor_1.1.sql index f3eb208a1..a9fef454c 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.2__dropsFor_1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.2__dropsFor_1.1.sql @@ -1,6 +1,9 @@ -- Migrationscripts for ebean unittest --- drop dependencies -drop view if exists migtest_e_history2_with_history; +-- apply changes +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; -- apply alter tables alter table migtest_e_basic drop column description_file; alter table migtest_e_basic drop column old_boolean; @@ -11,13 +14,7 @@ alter table migtest_e_history2 drop column obsolete_string2; alter table migtest_e_history2_history drop column obsolete_string1; alter table migtest_e_history2_history drop column obsolete_string2; -- apply post alter -drop table if exists migtest_e_ref cascade; -drop sequence if exists migtest_e_ref_seq; --- apply history view create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; - --- apply history trigger --- changes: [drop obsolete_string1, drop obsolete_string2] create or replace function migtest_e_history2_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -36,3 +33,9 @@ begin 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(); + +drop table if exists migtest_e_ref cascade; +drop sequence if exists migtest_e_ref_seq; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.3.sql index 0f24e4551..c1215359c 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.3.sql @@ -16,9 +16,6 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest5; alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; drop index if exists ix_migtest_e_basic_indextest3; drop index if exists ix_migtest_e_basic_indextest6; -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 serial not null, @@ -31,6 +28,18 @@ create table migtest_e_ref ( update migtest_e_basic set status2 = 'N' where status2 is null; update migtest_e_basic set user_id = 23 where user_id is null; +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; +drop trigger if exists migtest_e_history3_history_upd on migtest_e_history3 cascade; +drop function if exists migtest_e_history3_history_version(); + +drop view migtest_e_history3_with_history; +drop trigger if exists migtest_e_history4_history_upd on migtest_e_history4 cascade; +drop function if exists migtest_e_history4_history_version(); + +drop view migtest_e_history4_with_history; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number2 = 7 where test_number2 is null; @@ -66,26 +75,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique 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 ''; --- foreign keys and indices -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 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; - -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 if not exists ix_m12_otoc71 on migtest_oto_child (name); -create unique index if not exists uq_m12_otoc71 on migtest_oto_child (lower(name)); -create unique index if not exists ix_migtest_oto_master_lowername on migtest_oto_master (lower(name)); --- apply history view 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; - --- apply history trigger --- changes: [add obsolete_string1, add obsolete_string2] create or replace function migtest_e_history2_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -104,7 +94,11 @@ begin end; $$ LANGUAGE plpgsql; --- changes: [include test_string] +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 view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; create or replace function migtest_e_history3_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -123,7 +117,11 @@ begin end; $$ LANGUAGE plpgsql; --- changes: [alter test_number] +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 view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; create or replace function migtest_e_history4_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -142,3 +140,18 @@ begin 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(); + +-- foreign keys and indices +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 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; + +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 if not exists ix_m12_otoc71 on migtest_oto_child (name); +create unique index if not exists uq_m12_otoc71 on migtest_oto_child (lower(name)); +create unique index if not exists ix_migtest_oto_master_lowername on migtest_oto_master (lower(name)); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.4__dropsFor_1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.4__dropsFor_1.3.sql index bea42a3cf..822e9f61a 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.4__dropsFor_1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/1.4__dropsFor_1.3.sql @@ -6,8 +6,15 @@ drop function if exists migtest_e_history_history_version(); drop view migtest_e_history_with_history; 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 +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; +drop trigger if exists migtest_e_history5_history_upd on migtest_e_history5 cascade; +drop function if exists migtest_e_history5_history_version(); + +drop view migtest_e_history5_with_history; -- apply alter tables alter table migtest_ckey_detail drop column one_key; alter table migtest_ckey_detail drop column two_key; @@ -29,18 +36,7 @@ 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; -- apply post alter -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; --- apply history view 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; - --- apply history trigger --- 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; @@ -59,7 +55,11 @@ begin end; $$ LANGUAGE plpgsql; --- changes: [drop test_boolean] +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 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_history5_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -78,3 +78,12 @@ begin 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(); + +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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/idx_postgres.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/idx_postgres.migrations index 89cdeaa30..78bf4574e 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/idx_postgres.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/postgres9/idx_postgres.migrations @@ -1,8 +1,8 @@ -1333804171, 1.0__initial.sql --1691146639, 1.1.sql -1770819182, 1.2__dropsFor_1.1.sql -1654255380, 1.3.sql -739723472, 1.4__dropsFor_1.3.sql +-1050466540, 1.0__initial.sql +-480020430, 1.1.sql +-1098989118, 1.2__dropsFor_1.1.sql +-762160636, 1.3.sql +1729345905, 1.4__dropsFor_1.3.sql 783227075, R__multi_comments.sql 561281075, R__order_views.sql 283077354, R__pg_indexes.sql 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 index ff8393190..e804f6651 100644 --- 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 @@ -177,49 +177,6 @@ create table migtest_e_history2_history( sys_period tstzrange ); create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; - -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; - -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; - -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; - -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; - --- foreign keys and indices -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; - -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); --- apply history trigger create or replace function migtest_e_history2_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -242,6 +199,13 @@ 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 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; create or replace function migtest_e_history3_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -264,6 +228,13 @@ 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 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; create or replace function migtest_e_history4_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -286,6 +257,13 @@ 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 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; create or replace function migtest_e_history5_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -308,6 +286,14 @@ 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 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_history6_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -330,3 +316,16 @@ 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(); + +-- foreign keys and indices +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; + +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); 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 index 6fbffe731..4d431443b 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.1.sql @@ -9,10 +9,6 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest6; alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; drop index if exists ix_migtest_e_basic_indextest1; drop index if exists ix_migtest_e_basic_indextest5; -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, @@ -45,6 +41,22 @@ insert into migtest_e_user (id) select distinct user_id from migtest_e_basic; -- NOTE: table has @History - special migration may be necessary update migtest_e_history2 set test_string = 'unknown' where test_string is null; +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; +drop trigger if exists migtest_e_history3_history_upd on migtest_e_history3 cascade; +drop function if exists migtest_e_history3_history_version(); + +drop view migtest_e_history3_with_history; +drop trigger if exists migtest_e_history4_history_upd on migtest_e_history4 cascade; +drop function if exists migtest_e_history4_history_version(); + +drop view migtest_e_history4_with_history; +drop trigger if exists migtest_e_history5_history_upd on migtest_e_history5 cascade; +drop function if exists migtest_e_history5_history_version(); + +drop view migtest_e_history5_with_history; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; @@ -99,9 +111,123 @@ create table migtest_e_history_history( 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 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(); + comment on column migtest_e_history.test_string is 'Column altered to long now'; comment on table migtest_e_history is 'We have history now'; +create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_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, 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; + +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 view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; +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; + +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 view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; +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 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_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; + +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(); + -- foreign keys and indices 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; @@ -131,111 +257,3 @@ alter table migtest_oto_child add constraint fk_migtest_oto_child_master_id fore 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); --- apply history view -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; - --- apply history trigger -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 index f3eb208a1..a9fef454c 100644 --- 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 @@ -1,6 +1,9 @@ -- Migrationscripts for ebean unittest --- drop dependencies -drop view if exists migtest_e_history2_with_history; +-- apply changes +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; -- apply alter tables alter table migtest_e_basic drop column description_file; alter table migtest_e_basic drop column old_boolean; @@ -11,13 +14,7 @@ alter table migtest_e_history2 drop column obsolete_string2; alter table migtest_e_history2_history drop column obsolete_string1; alter table migtest_e_history2_history drop column obsolete_string2; -- apply post alter -drop table if exists migtest_e_ref cascade; -drop sequence if exists migtest_e_ref_seq; --- apply history view create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history; - --- apply history trigger --- changes: [drop obsolete_string1, drop obsolete_string2] create or replace function migtest_e_history2_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -36,3 +33,9 @@ begin 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(); + +drop table if exists migtest_e_ref cascade; +drop sequence if exists migtest_e_ref_seq; 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 index df3848efc..8ceab575a 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/1.3.sql @@ -16,9 +16,6 @@ alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest5; alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status; drop index if exists ix_migtest_e_basic_indextest3; drop index if exists ix_migtest_e_basic_indextest6; -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, @@ -31,6 +28,18 @@ create table migtest_e_ref ( update migtest_e_basic set status2 = 'N' where status2 is null; update migtest_e_basic set user_id = 23 where user_id is null; +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; +drop trigger if exists migtest_e_history3_history_upd on migtest_e_history3 cascade; +drop function if exists migtest_e_history3_history_version(); + +drop view migtest_e_history3_with_history; +drop trigger if exists migtest_e_history4_history_upd on migtest_e_history4 cascade; +drop function if exists migtest_e_history4_history_version(); + +drop view migtest_e_history4_with_history; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number2 = 7 where test_number2 is null; @@ -66,23 +75,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique 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 ''; --- foreign keys and indices -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 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; - -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); --- apply history view 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; - --- apply history trigger --- changes: [add obsolete_string1, add obsolete_string2] create or replace function migtest_e_history2_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -101,7 +94,11 @@ begin end; $$ LANGUAGE plpgsql; --- changes: [include test_string] +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 view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history; create or replace function migtest_e_history3_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -120,7 +117,11 @@ begin end; $$ LANGUAGE plpgsql; --- changes: [alter test_number] +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 view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history; create or replace function migtest_e_history4_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -139,3 +140,15 @@ begin 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(); + +-- foreign keys and indices +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 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; + +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); 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 index bea42a3cf..822e9f61a 100644 --- 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 @@ -6,8 +6,15 @@ drop function if exists migtest_e_history_history_version(); drop view migtest_e_history_with_history; 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 +drop trigger if exists migtest_e_history2_history_upd on migtest_e_history2 cascade; +drop function if exists migtest_e_history2_history_version(); + +drop view migtest_e_history2_with_history; +drop trigger if exists migtest_e_history5_history_upd on migtest_e_history5 cascade; +drop function if exists migtest_e_history5_history_version(); + +drop view migtest_e_history5_with_history; -- apply alter tables alter table migtest_ckey_detail drop column one_key; alter table migtest_ckey_detail drop column two_key; @@ -29,18 +36,7 @@ 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; -- apply post alter -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; --- apply history view 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; - --- apply history trigger --- 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; @@ -59,7 +55,11 @@ begin end; $$ LANGUAGE plpgsql; --- changes: [drop test_boolean] +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 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_history5_history_version() returns trigger as $$ declare lowerTs timestamptz; @@ -78,3 +78,12 @@ begin 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(); + +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; 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 index ceed1a0fb..cf1a79ac0 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/idx_yugabyte.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/yugabyte/idx_yugabyte.migrations @@ -1,7 +1,7 @@ -1260183516, 1.0__initial.sql -1193452475, 1.1.sql -1770819182, 1.2__dropsFor_1.1.sql -456034327, 1.3.sql -739723472, 1.4__dropsFor_1.3.sql +-1111753161, 1.0__initial.sql +-794033493, 1.1.sql +-1098989118, 1.2__dropsFor_1.1.sql +1468123571, 1.3.sql +1729345905, 1.4__dropsFor_1.3.sql 561281075, R__order_views.sql