From c44ae96e09aa604a1bbfabf7920bdf4aaebcb0f3 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Fri, 18 Mar 2022 11:08:11 +1300 Subject: [PATCH 01/15] Add badge to README for JDK EA --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5ae53a456..d324a6276 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/ebean-orm/ebean/blob/master/LICENSE) [![Multi-JDK Build](https://github.com/ebean-orm/ebean/actions/workflows/multi-jdk-build.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/multi-jdk-build.yml) [![JDK 18-ea](https://github.com/ebean-orm/ebean/actions/workflows/jdk-18-ea.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/jdk-18-ea.yml) +[![JDK EA](https://github.com/ebean-orm/ebean/actions/workflows/jdk-ea.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/jdk-ea.yml) [![H2Database](https://github.com/ebean-orm/ebean/actions/workflows/h2database.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/h2database.yml) [![Postgres](https://github.com/ebean-orm/ebean/actions/workflows/postgres.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/postgres.yml) From a8ad93823aae5c14dbdb5ace4b45d98741fc9aec Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Fri, 18 Mar 2022 08:56:43 +0100 Subject: [PATCH 02/15] Removed 'lowerTableName' and 'lowerColumnName' --- .../io/ebean/config/DbConstraintNaming.java | 13 -------- .../ebean/config/DbConstraintNormalise.java | 20 ------------- .../ddlgeneration/platform/BaseTableDdl.java | 22 +++----------- .../ddlgeneration/platform/DB2Ddl.java | 5 ++-- .../ddlgeneration/platform/Db2HistoryDdl.java | 2 +- .../platform/DbTriggerBasedHistoryDdl.java | 2 +- .../platform/HanaHistoryDdl.java | 2 +- .../ddlgeneration/platform/PlatformDdl.java | 30 ++++--------------- .../ebean/config/DbConstraintNamingTest.java | 12 -------- 9 files changed, 15 insertions(+), 93 deletions(-) diff --git a/ebean-api/src/main/java/io/ebean/config/DbConstraintNaming.java b/ebean-api/src/main/java/io/ebean/config/DbConstraintNaming.java index 63f672ad0..7b23244cb 100644 --- a/ebean-api/src/main/java/io/ebean/config/DbConstraintNaming.java +++ b/ebean-api/src/main/java/io/ebean/config/DbConstraintNaming.java @@ -184,17 +184,4 @@ public class DbConstraintNaming { return normalise.normaliseColumn(tableName); } - /** - * Lower case the table name checking for quoted identifiers. - */ - public String lowerTableName(String tableName) { - return normalise.lowerTableName(tableName); - } - - /** - * Lower case the column name checking for quoted identifiers. - */ - public String lowerColumnName(String name) { - return normalise.lowerColumnName(name); - } } diff --git a/ebean-api/src/main/java/io/ebean/config/DbConstraintNormalise.java b/ebean-api/src/main/java/io/ebean/config/DbConstraintNormalise.java index 43e27166b..71b6f8aff 100644 --- a/ebean-api/src/main/java/io/ebean/config/DbConstraintNormalise.java +++ b/ebean-api/src/main/java/io/ebean/config/DbConstraintNormalise.java @@ -55,26 +55,6 @@ public class DbConstraintNormalise { return value.replace("(","").replace(")",""); } - /** - * Lower case the table name checking for quoted identifiers. - */ - public String lowerTableName(String tableName) { - if (lowerCaseTables && notQuoted(tableName)) { - return tableName.toLowerCase(); - } - return tableName; - } - - /** - * Lower case the column name checking for quoted identifiers. - */ - public String lowerColumnName(String name) { - if (lowerCaseColumns && notQuoted(name)) { - return name.toLowerCase(); - } - return name; - } - /** * Trim off the platform quoted identifier quotes like [ ' and ". */ diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java index be02f18e7..de29da880 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java @@ -204,7 +204,7 @@ public class BaseTableDdl implements TableDdl { public void generate(DdlWrite writer, CreateTable createTable) { reset(); - String tableName = lowerTableName(createTable.getName()); + String tableName = createTable.getName(); List columns = createTable.getColumn(); List pk = determinePrimaryKeyColumns(columns); @@ -398,7 +398,7 @@ public class BaseTableDdl implements TableDdl { protected void writeForeignKey(DdlWrite writer, WriteForeignKey request) { DdlBuffer fkeyBuffer = writer.applyForeignKeys(); - String tableName = lowerTableName(request.table()); + String tableName = request.table(); if (request.indexName() != null) { // no matching unique constraint so add the index fkeyBuffer.appendStatement(platformDdl.createIndex(new WriteCreateIndex(request.indexName(), tableName, request.cols(), false))); @@ -423,7 +423,7 @@ public class BaseTableDdl implements TableDdl { if (i > 0) { buffer.append(","); } - buffer.append(lowerColumnName(columns[i].trim())); + buffer.append(columns[i].trim()); } buffer.append(")"); } @@ -490,7 +490,7 @@ public class BaseTableDdl implements TableDdl { buffer.append(",").newLine(); buffer.append(" constraint ").append(uqName).append(" unique "); buffer.append("("); - buffer.append(lowerColumnName(column.getName())); + buffer.append(column.getName()); buffer.append(")"); } @@ -514,20 +514,6 @@ public class BaseTableDdl implements TableDdl { return cols; } - /** - * Convert the table lower case. - */ - protected String lowerTableName(String name) { - return naming.lowerTableName(name); - } - - /** - * Convert the column name to lower case. - */ - protected String lowerColumnName(String name) { - return naming.lowerColumnName(name); - } - /** * Return the list of columns that make the primary key. */ diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java index d9f2745e4..874bcc88f 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java @@ -95,9 +95,10 @@ public class DB2Ddl extends PlatformDdl { .append("begin\n") .append("if exists (select constname from syscat.tabconst where tabschema = current_schema and constname = '") .append(maxConstraintName(constraintName).toUpperCase()) - .append("' and tabname = '").append(lowerTableName(tableName).toUpperCase()).append("') then\n") - .append(" prepare stmt from 'alter table ").append(lowerTableName(tableName)) + .append("' and tabname = '").append(naming.normaliseTable(tableName).toUpperCase()).append("') then\n") + + .append(" prepare stmt from 'alter table ").append(tableName) .append(" drop constraint ").append(maxConstraintName(constraintName)).append("';\n") .append(" execute stmt;\n") diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Db2HistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Db2HistoryDdl.java index f1409974d..8a4056013 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Db2HistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Db2HistoryDdl.java @@ -120,7 +120,7 @@ public class Db2HistoryDdl implements PlatformHistoryDdl { protected void writeColumnDefinition(DdlBuffer buffer, String columnName, String type, boolean isNotNull) { String platformType = platformDdl.convert(type); - buffer.append(" ").append(platformDdl.lowerColumnName(columnName)); + buffer.append(" ").append(columnName); buffer.append(" ").append(platformType); if (isNotNull) { buffer.append(" not null"); diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java index a7457b0ae..0e6185781 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java @@ -195,7 +195,7 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { String platformType = platformDdl.convert(type); buffer.append(" "); - buffer.append(platformDdl.lowerColumnName(columnName), 29); + buffer.append(columnName, 29); buffer.append(platformType); } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaHistoryDdl.java index f0f4cf8ac..c1d6601d1 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaHistoryDdl.java @@ -112,7 +112,7 @@ public class HanaHistoryDdl implements PlatformHistoryDdl { boolean isNotNull, String generated) { String platformType = platformDdl.convert(type); - buffer.append(" ").append(platformDdl.lowerColumnName(columnName)); + buffer.append(" ").append(columnName); buffer.append(" ").append(platformType); if (defaultValue != null) { buffer.append(" default ").append(defaultValue); diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java index 588b2c7e7..e27edd762 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java @@ -258,7 +258,7 @@ public class PlatformDdl { } buffer.append(" "); - buffer.append(lowerColumnName(column.getName()), 29); + buffer.append(column.getName(), 29); buffer.append(columnDefn); if (!Boolean.TRUE.equals(column.isPrimaryKey())) { String defaultValue = convertDefaultValue(column.getDefaultValue()); @@ -435,7 +435,7 @@ public class PlatformDdl { StringBuilder buffer = new StringBuilder(90); buffer.append("foreign key"); appendColumns(request.cols(), buffer); - buffer.append(" references ").append(lowerTableName(request.refTable())); + buffer.append(" references ").append(request.refTable()); appendColumns(request.refCols(), buffer); appendForeignKeySuffix(request, buffer); return buffer.toString(); @@ -448,13 +448,13 @@ public class PlatformDdl { StringBuilder buffer = new StringBuilder(90); buffer - .append("alter table ").append(lowerTableName(request.table())) + .append("alter table ").append(request.table()) .append(" add constraint ").append(maxConstraintName(request.fkName())) .append(" foreign key"); appendColumns(request.cols(), buffer); buffer .append(" references ") - .append(lowerTableName(request.refTable())); + .append(request.refTable()); appendColumns(request.refCols(), buffer); appendForeignKeySuffix(request, buffer); if (options.isForeignKeySkipCheck()) { @@ -665,31 +665,11 @@ public class PlatformDdl { if (i > 0) { buffer.append(","); } - buffer.append(lowerColumnName(columns[i].trim())); + buffer.append(columns[i].trim()); } buffer.append(")"); } - /** - * Convert the table to lower case. - *

- * Override as desired. Generally lower case with underscore is a good cross database - * choice for column/table names. - */ - protected String lowerTableName(String name) { - return naming.lowerTableName(name); - } - - /** - * Convert the column name to lower case. - *

- * Override as desired. Generally lower case with underscore is a good cross database - * choice for column/table names. - */ - protected String lowerColumnName(String name) { - return naming.lowerColumnName(name); - } - public DatabasePlatform getPlatform() { return platform; } diff --git a/ebean-test/src/test/java/io/ebean/config/DbConstraintNamingTest.java b/ebean-test/src/test/java/io/ebean/config/DbConstraintNamingTest.java index 9153b2f74..842395369 100644 --- a/ebean-test/src/test/java/io/ebean/config/DbConstraintNamingTest.java +++ b/ebean-test/src/test/java/io/ebean/config/DbConstraintNamingTest.java @@ -33,10 +33,6 @@ public class DbConstraintNamingTest { @Test public void testDefaultToLower() { assertThat(naming.normaliseTable("SCH.FOO_BAR]")).isEqualTo("foo_bar"); - assertThat(naming.lowerTableName("SCH.FOO_BAR]")).isEqualTo("SCH.FOO_BAR]"); - assertThat(naming.lowerTableName("SCH.FOO_BAR")).isEqualTo("sch.foo_bar"); - assertThat(naming.lowerColumnName("SCH.FOO_BAR]")).isEqualTo("SCH.FOO_BAR]"); - assertThat(naming.lowerColumnName("SCH.FOO_BAR")).isEqualTo("sch.foo_bar"); } @Test @@ -44,11 +40,7 @@ public class DbConstraintNamingTest { DbConstraintNaming naming = new DbConstraintNaming(false, true); assertThat(naming.normaliseTable("SCH.FOO_BAR]")).isEqualTo("FOO_BAR"); assertThat(naming.normaliseColumn("SCH.FOO_BAR]")).isEqualTo("sch.foo_bar"); - assertThat(naming.lowerTableName("SCH.FOO_BAR]")).isEqualTo("SCH.FOO_BAR]"); // table name not lowered - assertThat(naming.lowerTableName("SCH.FOO_BAR")).isEqualTo("SCH.FOO_BAR"); - assertThat(naming.lowerColumnName("SCH.FOO_BAR]")).isEqualTo("SCH.FOO_BAR]"); - assertThat(naming.lowerColumnName("SCH.FOO_BAR")).isEqualTo("sch.foo_bar"); } @Test @@ -56,11 +48,7 @@ public class DbConstraintNamingTest { DbConstraintNaming naming = new DbConstraintNaming(true, false); assertThat(naming.normaliseTable("SCH.FOO_BAR]")).isEqualTo("foo_bar"); assertThat(naming.normaliseColumn("SCH.FOO_BAR]")).isEqualTo("SCH.FOO_BAR"); - assertThat(naming.lowerTableName("SCH.FOO_BAR]")).isEqualTo("SCH.FOO_BAR]"); - assertThat(naming.lowerTableName("SCH.FOO_BAR")).isEqualTo("sch.foo_bar"); - assertThat(naming.lowerColumnName("SCH.FOO_BAR]")).isEqualTo("SCH.FOO_BAR]"); // column name not lowered - assertThat(naming.lowerColumnName("SCH.FOO_BAR")).isEqualTo("SCH.FOO_BAR"); } @Test From a2e27b9e003d2a7abce3be46cf77672d314603d9 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 11:02:14 +0100 Subject: [PATCH 03/15] fixed test case --- .../ModelBuild_explicitSequencesTest/apply.sql | 16 ++++++++-------- .../pg-apply.sql | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ebean-ddl-generator/src/test/resources/assert/ModelBuild_explicitSequencesTest/apply.sql b/ebean-ddl-generator/src/test/resources/assert/ModelBuild_explicitSequencesTest/apply.sql index bc0f0635f..a5900e800 100644 --- a/ebean-ddl-generator/src/test/resources/assert/ModelBuild_explicitSequencesTest/apply.sql +++ b/ebean-ddl-generator/src/test/resources/assert/ModelBuild_explicitSequencesTest/apply.sql @@ -1,11 +1,11 @@ -create table persons ( - id bigint generated by default as identity (start with 1000 increment by 40) not null, - surname varchar(64) not null, - name varchar(64) not null, - constraint pk_persons primary key (id) +create table PERSONS ( + ID bigint generated by default as identity (start with 1000 increment by 40) not null, + SURNAME varchar(64) not null, + NAME varchar(64) not null, + constraint pk_persons primary key (ID) ); -create table phones ( +create table PHONES ( id bigint generated by default as identity not null, phone_number varchar(7) not null, person_id bigint not null, @@ -14,6 +14,6 @@ create table phones ( ); -- foreign keys and indices -create index ix_phones_person_id on phones (person_id); -alter table phones add constraint fk_phones_person_id foreign key (person_id) references persons (id) on delete restrict on update restrict; +create index ix_phones_person_id on PHONES (person_id); +alter table PHONES add constraint fk_phones_person_id foreign key (person_id) references PERSONS (ID) on delete restrict on update restrict; diff --git a/ebean-ddl-generator/src/test/resources/assert/ModelBuild_explicitSequencesTest/pg-apply.sql b/ebean-ddl-generator/src/test/resources/assert/ModelBuild_explicitSequencesTest/pg-apply.sql index e0063a84e..5978992d3 100644 --- a/ebean-ddl-generator/src/test/resources/assert/ModelBuild_explicitSequencesTest/pg-apply.sql +++ b/ebean-ddl-generator/src/test/resources/assert/ModelBuild_explicitSequencesTest/pg-apply.sql @@ -1,11 +1,11 @@ -create table persons ( - id bigint generated by default as identity (start with 1000 increment by 40) not null, - surname varchar(64) not null, - name varchar(64) not null, - constraint pk_persons primary key (id) +create table PERSONS ( + ID bigint generated by default as identity (start with 1000 increment by 40) not null, + SURNAME varchar(64) not null, + NAME varchar(64) not null, + constraint pk_persons primary key (ID) ); -create table phones ( +create table PHONES ( id bigint generated by default as identity not null, phone_number varchar(7) not null, person_id bigint not null, @@ -14,6 +14,6 @@ create table phones ( ); -- foreign keys and indices -create index ix_phones_person_id on phones (person_id); -alter table phones add constraint fk_phones_person_id foreign key (person_id) references persons (id) on delete restrict on update restrict not valid; +create index ix_phones_person_id on PHONES (person_id); +alter table PHONES add constraint fk_phones_person_id foreign key (person_id) references PERSONS (ID) on delete restrict on update restrict not valid; From 0a1acb3f9bb1216891df3e9d04286e382ddbd93c Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 11:08:41 +0100 Subject: [PATCH 04/15] Fix: DB2-History table must be an exact copy --- .../ddlgeneration/platform/Db2HistoryDdl.java | 55 ++++++------------- 1 file changed, 17 insertions(+), 38 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Db2HistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Db2HistoryDdl.java index 8a4056013..17855e8fa 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Db2HistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Db2HistoryDdl.java @@ -1,14 +1,12 @@ package io.ebeaninternal.dbmigration.ddlgeneration.platform; -import java.util.Collection; - import io.ebean.config.DatabaseConfig; +import io.ebean.config.DbConstraintNaming; import io.ebeaninternal.dbmigration.ddlgeneration.DdlAlterTable; import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer; import io.ebeaninternal.dbmigration.ddlgeneration.DdlWrite; import io.ebeaninternal.dbmigration.migration.AddHistoryTable; import io.ebeaninternal.dbmigration.migration.DropHistoryTable; -import io.ebeaninternal.dbmigration.model.MColumn; import io.ebeaninternal.dbmigration.model.MTable; /** @@ -22,6 +20,7 @@ public class Db2HistoryDdl implements PlatformHistoryDdl { private String systemPeriodEnd; private String transactionId; private PlatformDdl platformDdl; + private DbConstraintNaming constraintNaming; private String historySuffix; @Override @@ -30,35 +29,21 @@ public class Db2HistoryDdl implements PlatformHistoryDdl { this.systemPeriodEnd = config.getAsOfSysPeriod() + "_end"; this.transactionId = config.getAsOfSysPeriod() + "_txn"; // required for DB2 this.platformDdl = platformDdl; + this.constraintNaming = config.getConstraintNaming(); this.historySuffix = config.getHistoryTableSuffix(); } @Override public void createWithHistory(DdlWrite writer, MTable table) { String tableName = table.getName(); - String historyTableName = tableName + historySuffix; + String historyTableName = historyTable(tableName); - DdlBuffer apply = writer.applyPostAlter(); - apply.append(platformDdl.getCreateTableCommandPrefix()).append(" ").append(historyTableName).append(" (").newLine(); - - // create history table - Collection cols = table.allColumns(); - for (MColumn column : cols) { - if (!column.isDraftOnly()) { - writeColumnDefinition(apply, column.getName(), column.getType(), column.isNotnull() || column.isPrimaryKey()); - apply.append(",").newLine(); - } - } - writeColumnDefinition(apply, systemPeriodStart, "timestamp(12)", true); - apply.append(",").newLine(); - writeColumnDefinition(apply, systemPeriodEnd, "timestamp(12)", true); - apply.append(",").newLine(); - writeColumnDefinition(apply, transactionId, "timestamp(12)", false); - apply.newLine().append(")").endOfStatement(); - - // enable system versioning + // DB2 requires an EXACT copy (same column types with null/non-null, same order) addSysPeriodColumns(writer, tableName); - enableSystemVersioning(apply, tableName); + writer.applyPostAlter().append("create table ").append(historyTableName) + .append(" as (select * from ").append(tableName).append(") with no data").endOfStatement(); + + enableSystemVersioning(writer.applyPostAlter(), tableName); platformDdl.alterTable(writer, tableName).setHistoryHandled(); // drop all: We do not drop columns here, as the whole table will be dropped @@ -76,10 +61,10 @@ public class Db2HistoryDdl implements PlatformHistoryDdl { @Override public void dropHistoryTable(DdlWrite writer, DropHistoryTable dropHistoryTable) { - dropHistoryTable(writer, dropHistoryTable.getBaseTable(), dropHistoryTable.getBaseTable() + historySuffix); + dropHistoryTable(writer, dropHistoryTable.getBaseTable()); } - protected void dropHistoryTable(DdlWrite writer, String baseTable, String historyTable) { + protected void dropHistoryTable(DdlWrite writer, String baseTable) { disableSystemVersioning(writer.apply(), baseTable); writer.apply().append("alter table ").append(baseTable).append(" drop period system_time").endOfStatement(); @@ -89,7 +74,7 @@ public class Db2HistoryDdl implements PlatformHistoryDdl { platformDdl.alterTableDropColumn(writer, baseTable, transactionId); // drop the history table - writer.applyPostAlter().append("drop table ").append(historyTable).endOfStatement(); + writer.applyPostAlter().append("drop table ").append(historyTable(baseTable)).endOfStatement(); } @Override @@ -117,22 +102,16 @@ public class Db2HistoryDdl implements PlatformHistoryDdl { } } - protected void writeColumnDefinition(DdlBuffer buffer, String columnName, String type, boolean isNotNull) { - - String platformType = platformDdl.convert(type); - buffer.append(" ").append(columnName); - buffer.append(" ").append(platformType); - if (isNotNull) { - buffer.append(" not null"); - } - } - public void disableSystemVersioning(DdlBuffer apply, String tableName) { apply.append("alter table ").append(tableName).append(" drop versioning").endOfStatement(); } public void enableSystemVersioning(DdlBuffer apply, String tableName) { - apply.append("alter table ").append(tableName).append(" add versioning use history table ").append(tableName).append(historySuffix).endOfStatement(); + apply.append("alter table ").append(tableName).append(" add versioning use history table ").append(historyTable(tableName)).endOfStatement(); + } + + protected String historyTable(String tableName) { + return constraintNaming.normaliseTable(tableName) + historySuffix; } } From 327babbfa2cf680e0db8c039af6ed58dd5cadce1 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 11:08:54 +0100 Subject: [PATCH 05/15] Reference scripts --- .../dbmigration/db2fori/1.0__initial.sql | 43 +++---------------- .../migrationtest/dbmigration/db2fori/1.1.sql | 8 +--- .../dbmigration/db2fori/idx_db2.migrations | 4 +- .../dbmigration/db2legacy/1.0__initial.sql | 43 +++---------------- .../dbmigration/db2legacy/1.1.sql | 8 +--- .../dbmigration/db2legacy/idx_db2.migrations | 4 +- .../dbmigration/db2luw/1.0__initial.sql | 43 +++---------------- .../migrationtest/dbmigration/db2luw/1.1.sql | 8 +--- .../dbmigration/db2luw/idx_db2.migrations | 4 +- .../dbmigration/db2zos/1.0__initial.sql | 43 +++---------------- .../migrationtest/dbmigration/db2zos/1.1.sql | 8 +--- .../dbmigration/db2zos/idx_db2.migrations | 4 +- 12 files changed, 32 insertions(+), 188 deletions(-) diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.0__initial.sql index 8792984ed..b20611369 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.0__initial.sql @@ -185,48 +185,15 @@ alter table migtest_e_history6 add period system_time (sys_period_start,sys_peri -- apply post alter create unique index uq_migtest_e_basic_indextest2 on migtest_e_basic(indextest2) exclude null keys; create unique index uq_migtest_e_basic_indextest6 on migtest_e_basic(indextest6) exclude null keys; -create table migtest_e_history2_history ( - id integer not null, - test_string varchar(255), - obsolete_string1 varchar(255), - obsolete_string2 varchar(255), - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history2_history as (select * from migtest_e_history2) with no data; alter table migtest_e_history2 add versioning use history table migtest_e_history2_history; -create table migtest_e_history3_history ( - id integer not null, - test_string varchar(255), - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history3_history as (select * from migtest_e_history3) with no data; alter table migtest_e_history3 add versioning use history table migtest_e_history3_history; -create table migtest_e_history4_history ( - id integer not null, - test_number integer, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history4_history as (select * from migtest_e_history4) with no data; alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; -create table migtest_e_history5_history ( - id integer not null, - test_number integer, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history5_history as (select * from migtest_e_history5) with no data; alter table migtest_e_history5 add versioning use history table migtest_e_history5_history; -create table migtest_e_history6_history ( - id integer not null, - test_number1 integer, - test_number2 integer not null, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history6_history as (select * from migtest_e_history6) with no data; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; alter table migtest_e_ref add constraint uq_migtest_e_ref_name unique (name); -- foreign keys and indices diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.1.sql index 100aed067..cbe873d8b 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.1.sql @@ -179,13 +179,7 @@ create unique index uq_migtest_e_basic_status_indextest1 on migtest_e_basic(stat create unique index uq_migtest_e_basic_name on migtest_e_basic(name) exclude null keys; create unique index uq_migtest_e_basic_indextest4 on migtest_e_basic(indextest4) exclude null keys; create unique index uq_migtest_e_basic_indextest5 on migtest_e_basic(indextest5) exclude null keys; -create table migtest_e_history_history ( - id integer not null, - test_string bigint, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history_history as (select * from migtest_e_history) with no data; alter table migtest_e_history add versioning use history table migtest_e_history_history; 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'; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/idx_db2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/idx_db2.migrations index 7e5fe8d26..c4967d055 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/idx_db2.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/idx_db2.migrations @@ -1,5 +1,5 @@ -841482576, 1.0__initial.sql -2115993112, 1.1.sql +1907884988, 1.0__initial.sql +-2103050574, 1.1.sql 364066694, 1.2__dropsFor_1.1.sql -144532085, 1.3.sql -1199420632, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql index dd3910a5a..029e6b2b8 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql @@ -185,48 +185,15 @@ alter table migtest_e_history6 add period system_time (sys_period_start,sys_peri -- apply post alter create unique index uq_mgtst__b_4aybzy on migtest_e_basic(indextest2) exclude null keys; create unique index uq_mgtst__b_4ayc02 on migtest_e_basic(indextest6) exclude null keys; -create table migtest_e_history2_history ( - id integer not null, - test_string varchar(255), - obsolete_string1 varchar(255), - obsolete_string2 varchar(255), - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history2_history as (select * from migtest_e_history2) with no data; alter table migtest_e_history2 add versioning use history table migtest_e_history2_history; -create table migtest_e_history3_history ( - id integer not null, - test_string varchar(255), - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history3_history as (select * from migtest_e_history3) with no data; alter table migtest_e_history3 add versioning use history table migtest_e_history3_history; -create table migtest_e_history4_history ( - id integer not null, - test_number integer, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history4_history as (select * from migtest_e_history4) with no data; alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; -create table migtest_e_history5_history ( - id integer not null, - test_number integer, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history5_history as (select * from migtest_e_history5) with no data; alter table migtest_e_history5 add versioning use history table migtest_e_history5_history; -create table migtest_e_history6_history ( - id integer not null, - test_number1 integer, - test_number2 integer not null, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history6_history as (select * from migtest_e_history6) with no data; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; alter table migtest_e_ref add constraint uq_mgtst__rf_nm unique (name); -- foreign keys and indices diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql index 80bfa41b8..f173fb6cc 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql @@ -179,13 +179,7 @@ create unique index uq_mgtst__b_ucfcne on migtest_e_basic(status,indextest1) exc create unique index uq_mgtst__bsc_nm on migtest_e_basic(name) exclude null keys; create unique index uq_mgtst__b_4ayc00 on migtest_e_basic(indextest4) exclude null keys; create unique index uq_mgtst__b_4ayc01 on migtest_e_basic(indextest5) exclude null keys; -create table migtest_e_history_history ( - id integer not null, - test_string bigint, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history_history as (select * from migtest_e_history) with no data; alter table migtest_e_history add versioning use history table migtest_e_history_history; 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'; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations index 7c89c8a49..b45072284 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations @@ -1,5 +1,5 @@ --1701286706, 1.0__initial.sql --1965264933, 1.1.sql +-1510441716, 1.0__initial.sql +-318724769, 1.1.sql 364066694, 1.2__dropsFor_1.1.sql 1221811961, 1.3.sql -1199420632, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.0__initial.sql index c87758872..8e2a6ff17 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.0__initial.sql @@ -185,48 +185,15 @@ alter table migtest_e_history6 add period system_time (sys_period_start,sys_peri -- apply post alter create unique index uq_migtest_e_basic_indextest2 on migtest_e_basic(indextest2) exclude null keys; create unique index uq_migtest_e_basic_indextest6 on migtest_e_basic(indextest6) exclude null keys; -create table migtest_e_history2_history ( - id integer not null, - test_string varchar(255), - obsolete_string1 varchar(255), - obsolete_string2 varchar(255), - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history2_history as (select * from migtest_e_history2) with no data; alter table migtest_e_history2 add versioning use history table migtest_e_history2_history; -create table migtest_e_history3_history ( - id integer not null, - test_string varchar(255), - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history3_history as (select * from migtest_e_history3) with no data; alter table migtest_e_history3 add versioning use history table migtest_e_history3_history; -create table migtest_e_history4_history ( - id integer not null, - test_number integer, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history4_history as (select * from migtest_e_history4) with no data; alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; -create table migtest_e_history5_history ( - id integer not null, - test_number integer, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history5_history as (select * from migtest_e_history5) with no data; alter table migtest_e_history5 add versioning use history table migtest_e_history5_history; -create table migtest_e_history6_history ( - id integer not null, - test_number1 integer, - test_number2 integer not null, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history6_history as (select * from migtest_e_history6) with no data; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; alter table migtest_e_ref add constraint uq_migtest_e_ref_name unique (name); -- foreign keys and indices diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.1.sql index e8ac4cf36..a3967a721 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.1.sql @@ -179,13 +179,7 @@ create unique index uq_migtest_e_basic_status_indextest1 on migtest_e_basic(stat create unique index uq_migtest_e_basic_name on migtest_e_basic(name) exclude null keys; create unique index uq_migtest_e_basic_indextest4 on migtest_e_basic(indextest4) exclude null keys; create unique index uq_migtest_e_basic_indextest5 on migtest_e_basic(indextest5) exclude null keys; -create table migtest_e_history_history ( - id integer not null, - test_string bigint, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history_history as (select * from migtest_e_history) with no data; alter table migtest_e_history add versioning use history table migtest_e_history_history; 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'; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/idx_db2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/idx_db2.migrations index 071372b00..396c500c1 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/idx_db2.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/idx_db2.migrations @@ -1,5 +1,5 @@ --1211384725, 1.0__initial.sql --336858597, 1.1.sql +-1381050106, 1.0__initial.sql +-960600780, 1.1.sql 364066694, 1.2__dropsFor_1.1.sql -688071658, 1.3.sql -1199420632, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.0__initial.sql index c87758872..8e2a6ff17 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.0__initial.sql @@ -185,48 +185,15 @@ alter table migtest_e_history6 add period system_time (sys_period_start,sys_peri -- apply post alter create unique index uq_migtest_e_basic_indextest2 on migtest_e_basic(indextest2) exclude null keys; create unique index uq_migtest_e_basic_indextest6 on migtest_e_basic(indextest6) exclude null keys; -create table migtest_e_history2_history ( - id integer not null, - test_string varchar(255), - obsolete_string1 varchar(255), - obsolete_string2 varchar(255), - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history2_history as (select * from migtest_e_history2) with no data; alter table migtest_e_history2 add versioning use history table migtest_e_history2_history; -create table migtest_e_history3_history ( - id integer not null, - test_string varchar(255), - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history3_history as (select * from migtest_e_history3) with no data; alter table migtest_e_history3 add versioning use history table migtest_e_history3_history; -create table migtest_e_history4_history ( - id integer not null, - test_number integer, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history4_history as (select * from migtest_e_history4) with no data; alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; -create table migtest_e_history5_history ( - id integer not null, - test_number integer, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history5_history as (select * from migtest_e_history5) with no data; alter table migtest_e_history5 add versioning use history table migtest_e_history5_history; -create table migtest_e_history6_history ( - id integer not null, - test_number1 integer, - test_number2 integer not null, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history6_history as (select * from migtest_e_history6) with no data; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; alter table migtest_e_ref add constraint uq_migtest_e_ref_name unique (name); -- foreign keys and indices diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.1.sql index e8ac4cf36..a3967a721 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.1.sql @@ -179,13 +179,7 @@ create unique index uq_migtest_e_basic_status_indextest1 on migtest_e_basic(stat create unique index uq_migtest_e_basic_name on migtest_e_basic(name) exclude null keys; create unique index uq_migtest_e_basic_indextest4 on migtest_e_basic(indextest4) exclude null keys; create unique index uq_migtest_e_basic_indextest5 on migtest_e_basic(indextest5) exclude null keys; -create table migtest_e_history_history ( - id integer not null, - test_string bigint, - sys_period_start timestamp(12) not null, - sys_period_end timestamp(12) not null, - sys_period_txn timestamp(12) -); +create table migtest_e_history_history as (select * from migtest_e_history) with no data; alter table migtest_e_history add versioning use history table migtest_e_history_history; 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'; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/idx_db2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/idx_db2.migrations index 071372b00..396c500c1 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/idx_db2.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/idx_db2.migrations @@ -1,5 +1,5 @@ --1211384725, 1.0__initial.sql --336858597, 1.1.sql +-1381050106, 1.0__initial.sql +-960600780, 1.1.sql 364066694, 1.2__dropsFor_1.1.sql -688071658, 1.3.sql -1199420632, 1.4__dropsFor_1.3.sql From 3db9a17c6acaa5db9d805285b18b1b0d7924aa2e Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 11:15:13 +0100 Subject: [PATCH 06/15] Refactored DbTriggerBasedHistory: always use historyTableName --- .../platform/DbTriggerBasedHistoryDdl.java | 34 +++++++++---------- .../dbmigration/model/MTable.java | 7 ++++ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java index 0e6185781..ab8723609 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java @@ -127,11 +127,15 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { } protected String historyTableName(String baseTableName) { - return baseTableName + historySuffix; + return normalise(baseTableName) + historySuffix; + } + + protected String historyViewName(String baseTableName) { + return normalise(baseTableName) + viewSuffix; } protected String procedureName(String baseTableName) { - return baseTableName + "_history_version"; + return normalise(baseTableName) + "_history_version"; } protected String triggerName(String baseTableName) { @@ -146,16 +150,6 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { return normalise(baseTableName) + "_history_del"; } - protected void addHistoryTable(DdlWrite writer, MTable table, String whenCreatedColumn) { - - String baseTableName = table.getName(); - - - addSysPeriodColumns(writer, baseTableName, whenCreatedColumn); - createHistoryTable(writer.applyPostAlter(), table); - createWithHistoryView(writer.applyPostAlter(), baseTableName); - } - protected void addSysPeriodColumns(DdlWrite writer, String baseTableName, String whenCreatedColumn) { platformDdl.alterTableAddColumn(writer, baseTableName, sysPeriodStart, sysPeriodType, now); @@ -172,13 +166,17 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { } protected void createHistoryTableAs(DdlBuffer apply, MTable table) { - apply.append(platformDdl.getCreateTableCommandPrefix()).append(" ").append(table.getName()).append(historySuffix).append("(").newLine(); + apply.append(platformDdl.getCreateTableCommandPrefix()).append(" ").append(historyTableName(table.getName())).append("(").newLine(); for (MColumn column : table.allColumns()) { if (!column.isDraftOnly()) { writeColumnDefinition(apply, column.getName(), column.getType()); apply.append(",").newLine(); } } + // TODO: We must apply also pending dropped columns. Let's do that in a later step + if (table.hasDroppedColumns()) { + throw new IllegalStateException(table.getName() + " has dropped columns. Please generate drop script before enabling history"); + } } protected void createHistoryTableWithPeriod(DdlBuffer apply) { @@ -202,9 +200,9 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { protected void createWithHistoryView(DdlBuffer apply, String baseTableName) { apply - .append("create view ").append(baseTableName).append(viewSuffix) + .append("create view ").append(historyViewName(baseTableName)) .append(" as select * from ").append(baseTableName) - .append(" union all select * from ").append(baseTableName).append(historySuffix) + .append(" union all select * from ").append(historyTableName(baseTableName)) .endOfStatement(); } @@ -214,11 +212,11 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { } protected void dropWithHistoryView(DdlBuffer apply, String baseTableName) { - apply.append("drop view ").append(baseTableName).append(viewSuffix).endOfStatement(); + apply.append("drop view ").append(historyViewName(baseTableName)).endOfStatement(); } protected void dropHistoryTable(DdlBuffer apply, String baseTableName) { - apply.append("drop table ").append(baseTableName).append(historySuffix).endOfStatement().end(); + apply.append("drop table ").append(historyTableName(baseTableName)).endOfStatement().end(); } protected void dropSysPeriodColumns(DdlWrite writer, String baseTableName) { @@ -228,7 +226,7 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { protected void appendInsertIntoHistory(DdlBuffer buffer, String baseTable, List columns) { - buffer.append(" insert into ").append(baseTable).append(historySuffix).append(" (").append(sysPeriodStart).append(",").append(sysPeriodEnd).append(","); + buffer.append(" insert into ").append(historyTableName(baseTable)).append(" (").append(sysPeriodStart).append(",").append(sysPeriodEnd).append(","); appendColumnNames(buffer, columns, ""); buffer.append(") values (OLD.").append(sysPeriodStart).append(", ").append(sysPeriodEndValue).append(","); appendColumnNames(buffer, columns, "OLD."); diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java index 90fd27228..324246377 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java @@ -455,6 +455,13 @@ public class MTable { return columnNames; } + /** + * Returns true, if there are pending dropped columns. + */ + public boolean hasDroppedColumns() { + return !droppedColumns.isEmpty(); + } + /** * Return all the columns (excluding columns marked as dropped). */ From 7e3fbbba623e71b1161bd6aea23d72363f904115 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 11:32:27 +0100 Subject: [PATCH 07/15] Refactor: use normalized table names for history --- .../ddlgeneration/platform/BaseTableDdl.java | 2 +- .../platform/HanaHistoryDdl.java | 13 +++-- .../platform/PostgresHistoryDdl.java | 2 +- .../platform/SqlServerHistoryDdl.java | 48 ++++++++++++------- .../platform/SqlServerHistoryDdlTest.java | 13 +++-- 5 files changed, 53 insertions(+), 25 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java index de29da880..c3bc5f791 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java @@ -741,7 +741,7 @@ public class BaseTableDdl implements TableDdl { * Return the name of the history table given the base table name. */ protected String historyTable(String baseTable) { - return baseTable + historyTableSuffix; + return naming.normaliseTable(baseTable) + historyTableSuffix; } /** diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaHistoryDdl.java index c1d6601d1..d8877e596 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaHistoryDdl.java @@ -1,6 +1,7 @@ package io.ebeaninternal.dbmigration.ddlgeneration.platform; import io.ebean.config.DatabaseConfig; +import io.ebean.config.DbConstraintNaming; import io.ebeaninternal.dbmigration.ddlgeneration.DdlAlterTable; import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer; import io.ebeaninternal.dbmigration.ddlgeneration.DdlWrite; @@ -16,6 +17,7 @@ public class HanaHistoryDdl implements PlatformHistoryDdl { private String systemPeriodStart; private String systemPeriodEnd; private PlatformDdl platformDdl; + private DbConstraintNaming constraintNaming; private String historySuffix; @Override @@ -23,13 +25,14 @@ public class HanaHistoryDdl implements PlatformHistoryDdl { this.systemPeriodStart = config.getAsOfSysPeriod() + "_start"; this.systemPeriodEnd = config.getAsOfSysPeriod() + "_end"; this.platformDdl = platformDdl; + this.constraintNaming = config.getConstraintNaming(); this.historySuffix = config.getHistoryTableSuffix(); } @Override public void createWithHistory(DdlWrite writer, MTable table) { String tableName = table.getName(); - String historyTableName = tableName + historySuffix; + String historyTableName = historyTableName(tableName); DdlBuffer apply = writer.applyPostAlter(); apply.append(platformDdl.getCreateTableCommandPrefix()).append(" ").append(historyTableName).append(" (").newLine(); @@ -66,7 +69,7 @@ public class HanaHistoryDdl implements PlatformHistoryDdl { @Override public void dropHistoryTable(DdlWrite writer, DropHistoryTable dropHistoryTable) { dropHistoryTable(writer.applyDropDependencies(), dropHistoryTable.getBaseTable(), - dropHistoryTable.getBaseTable() + historySuffix); + historyTableName(dropHistoryTable.getBaseTable())); } protected void dropHistoryTable(DdlBuffer apply, String baseTable, String historyTable) { @@ -130,11 +133,15 @@ public class HanaHistoryDdl implements PlatformHistoryDdl { } public void enableSystemVersioning(DdlBuffer apply, String tableName, boolean validated) { - apply.append("alter table ").append(tableName).append(" add system versioning history table ").append(tableName).append(historySuffix); + apply.append("alter table ").append(tableName).append(" add system versioning history table ").append(historyTableName(tableName)); if (!validated) { apply.append(" not validated"); } apply.endOfStatement(); } + protected String historyTableName(String tableName) { + return constraintNaming.normaliseTable(tableName) + historySuffix; + } + } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresHistoryDdl.java index 135324899..4a54edd92 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresHistoryDdl.java @@ -21,7 +21,7 @@ public class PostgresHistoryDdl extends DbTriggerBasedHistoryDdl { */ @Override protected void createHistoryTable(DdlBuffer apply, MTable table) { - apply.append("create table ").append(table.getName()).append(historySuffix) + apply.append("create table ").append(historyTableName(table.getName())) .append("(like ").append(table.getName()).append(")").endOfStatement(); } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdl.java index c0b1eaebc..e2faa5ace 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdl.java @@ -1,6 +1,7 @@ package io.ebeaninternal.dbmigration.ddlgeneration.platform; import io.ebean.config.DatabaseConfig; +import io.ebean.config.DbConstraintNaming; import io.ebeaninternal.dbmigration.ddlgeneration.DdlAlterTable; import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer; import io.ebeaninternal.dbmigration.ddlgeneration.DdlWrite; @@ -17,12 +18,17 @@ public class SqlServerHistoryDdl implements PlatformHistoryDdl { private String systemPeriodStart; private String systemPeriodEnd; private PlatformDdl platformDdl; + protected DbConstraintNaming constraintNaming; + protected String historySuffix; @Override public void configure(DatabaseConfig config, PlatformDdl platformDdl) { this.systemPeriodStart = config.getAsOfSysPeriod() + "From"; this.systemPeriodEnd = config.getAsOfSysPeriod() + "To"; this.platformDdl = platformDdl; + + this.constraintNaming = config.getConstraintNaming(); + this.historySuffix = config.getHistoryTableSuffix(); } @Override @@ -31,18 +37,6 @@ public class SqlServerHistoryDdl implements PlatformHistoryDdl { enableSystemVersioning(writer, baseTable); } - String getHistoryTable(String baseTable) { - String historyTable = baseTable + "_history"; - if (baseTable.startsWith("[")) { - historyTable = historyTable.replace("]", "") + "]"; - } - if (historyTable.indexOf('.') == -1) { - // history must contain schema, add the default schema if none was specified - historyTable = "dbo." + historyTable; - } - return historyTable; - } - private void enableSystemVersioning(DdlWrite writer, String baseTable) { DdlBuffer apply = writer.applyPostAlter(); apply.append("alter table ").append(baseTable).newLine() @@ -51,11 +45,12 @@ public class SqlServerHistoryDdl implements PlatformHistoryDdl { .append("period for system_time (").append(systemPeriodStart).append(", ").append(systemPeriodEnd).append(")").endOfStatement(); apply.append("alter table ").append(baseTable).append(" set (system_versioning = on (history_table=") - .append(getHistoryTable(baseTable)).append("))").endOfStatement(); + .append(historyTableWithSchema(baseTable)).append("))").endOfStatement(); DdlBuffer drop = writer.dropAll(); drop.append("IF OBJECT_ID('").append(baseTable).append("', 'U') IS NOT NULL alter table ").append(baseTable).append(" set (system_versioning = off)").endOfStatement(); - drop.append("IF OBJECT_ID('").append(baseTable).append("_history', 'U') IS NOT NULL drop table ").append(baseTable).append("_history").endOfStatement(); + drop.append("IF OBJECT_ID('").append(historyTableName(baseTable)).append("', 'U') IS NOT NULL drop table ") + .append(historyTableName(baseTable)).endOfStatement(); } @Override @@ -79,7 +74,7 @@ public class SqlServerHistoryDdl implements PlatformHistoryDdl { // now drop tables & columns, they will go to alter table/post alter buffers platformDdl.alterTableDropColumn(writer, baseTable, systemPeriodStart); platformDdl.alterTableDropColumn(writer, baseTable, systemPeriodEnd); - writer.applyPostAlter().appendStatement(platformDdl.dropTable(baseTable + "_history")); + writer.applyPostAlter().appendStatement(platformDdl.dropTable(historyTableName(baseTable))); } @Override @@ -96,12 +91,31 @@ public class SqlServerHistoryDdl implements PlatformHistoryDdl { // SQL Server 2016 does not need triggers DdlBuffer apply = writer.apply(); apply.append("-- alter table ").append(tableName).append(" set (system_versioning = off (history_table=") - .append(getHistoryTable(tableName)).append("))").endOfStatement(); + .append(historyTableWithSchema(tableName)).append("))").endOfStatement(); apply.append("-- history migration goes here").newLine(); apply.append("-- alter table ").append(tableName).append(" set (system_versioning = on (history_table=") - .append(getHistoryTable(tableName)).append("))").endOfStatement(); + .append(historyTableWithSchema(tableName)).append("))").endOfStatement(); } alter.setHistoryHandled(); } + protected String normalise(String tableName) { + return constraintNaming.normaliseTable(tableName); + } + + protected String historyTableName(String baseTableName) { + return normalise(baseTableName) + historySuffix; + } + + protected String historyTableWithSchema(String baseTableName) { + String historyTable = historyTableName(baseTableName); + int lastPeriod = baseTableName.lastIndexOf('.'); + if (lastPeriod == -1) { + // history must contain schema, add the default schema if none was specified + return "dbo." + historyTable; + } else { + return baseTableName.substring(0, lastPeriod + 1) + historyTable; + } + } + } diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdlTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdlTest.java index 73dd7c57f..0cc69865e 100644 --- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdlTest.java +++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdlTest.java @@ -2,6 +2,9 @@ package io.ebeaninternal.dbmigration.ddlgeneration.platform; import org.junit.jupiter.api.Test; +import io.ebean.config.DatabaseConfig; +import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform; + import static org.assertj.core.api.Assertions.assertThat; public class SqlServerHistoryDdlTest { @@ -10,8 +13,12 @@ public class SqlServerHistoryDdlTest { public void getHistoryTable() { SqlServerHistoryDdl ddl = new SqlServerHistoryDdl(); - assertThat(ddl.getHistoryTable("foo")).isEqualTo("dbo.foo_history"); - assertThat(ddl.getHistoryTable("bar.foo")).isEqualTo("bar.foo_history"); - assertThat(ddl.getHistoryTable("[Foo]")).isEqualTo("dbo.[Foo_history]"); + ddl.configure(new DatabaseConfig(), new SqlServerDdl(new SqlServer17Platform())); + assertThat(ddl.historyTableWithSchema("foo")).isEqualTo("dbo.foo_history"); + assertThat(ddl.historyTableWithSchema("bar.foo")).isEqualTo("bar.foo_history"); + // test with reserved keywords in quotes + assertThat(ddl.historyTableWithSchema("[select]")).isEqualTo("dbo.select_history"); + assertThat(ddl.historyTableWithSchema("\"select\"")).isEqualTo("dbo.select_history"); + assertThat(ddl.historyTableWithSchema("`select`")).isEqualTo("dbo.select_history"); } } From 4077d906d1539fbb82df1bc89f8df9b6070cd880 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 13:34:29 +0100 Subject: [PATCH 08/15] ADD: Support for quoted identifiers --- .../ebean/config/DbConstraintNormalise.java | 22 ++-------- .../config/dbplatform/DatabasePlatform.java | 15 +++++-- .../platform/AbstractHanaDdl.java | 4 +- .../platform/BaseAlterTableWrite.java | 9 ++-- .../ddlgeneration/platform/BaseTableDdl.java | 6 +-- .../ddlgeneration/platform/DB2Ddl.java | 4 +- .../ddlgeneration/platform/MySqlDdl.java | 9 ++-- .../ddlgeneration/platform/PlatformDdl.java | 41 +++++++++++-------- .../ddlgeneration/platform/SQLiteDdl.java | 4 +- .../platform/SqlServerHistoryDdl.java | 17 +++++--- 10 files changed, 70 insertions(+), 61 deletions(-) diff --git a/ebean-api/src/main/java/io/ebean/config/DbConstraintNormalise.java b/ebean-api/src/main/java/io/ebean/config/DbConstraintNormalise.java index 71b6f8aff..c8dd4da60 100644 --- a/ebean-api/src/main/java/io/ebean/config/DbConstraintNormalise.java +++ b/ebean-api/src/main/java/io/ebean/config/DbConstraintNormalise.java @@ -58,30 +58,16 @@ public class DbConstraintNormalise { /** * Trim off the platform quoted identifier quotes like [ ' and ". */ - public boolean notQuoted(String tableName) { + public String trimQuotes(String identifier) { - // remove quoted identifier characters - for (String quotedIdentifier : quotedIdentifiers) { - if (tableName.contains(quotedIdentifier)) { - return false; - } - } - return true; - } - - /** - * Trim off the platform quoted identifier quotes like [ ' and ". - */ - public String trimQuotes(String tableName) { - - if (tableName == null) { + if (identifier == null) { return ""; } // remove quoted identifier characters for (String quotedIdentifier : quotedIdentifiers) { - tableName = tableName.replace(quotedIdentifier, ""); + identifier = identifier.replace(quotedIdentifier, ""); } - return tableName; + return identifier; } diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java index 276151075..d73d760a6 100644 --- a/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java +++ b/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java @@ -165,7 +165,7 @@ public class DatabasePlatform { * want to use quoted identifiers for. The backticks get converted to the * appropriate characters in convertQuotedIdentifiers */ - private static final char BACK_TICK = '`'; + private static final char[] QUOTED_IDENTIFIERS = new char[] { '"', '\'', '[', ']', '`' }; /** * The non-escaped like clause (to stop slash being escaped on some platforms). @@ -662,8 +662,8 @@ public class DatabasePlatform { public String convertQuotedIdentifiers(String dbName) { // Ignore null values e.g. schema name or catalog if (dbName != null && !dbName.isEmpty()) { - if (dbName.charAt(0) == BACK_TICK) { - if (dbName.charAt(dbName.length() - 1) == BACK_TICK) { + if (isQuote(dbName.charAt(0))) { + if (isQuote(dbName.charAt(dbName.length() - 1))) { return openQuote + dbName.substring(1, dbName.length() - 1) + closeQuote; } else { log.error("Missing backquote on [" + dbName + "]"); @@ -675,6 +675,15 @@ public class DatabasePlatform { return dbName; } + private boolean isQuote(char ch) { + for (char identifer : QUOTED_IDENTIFIERS) { + if (identifer == ch) { + return true; + } + } + return false; + } + /** * Remove quoted identifier quotes from the table or column name if present. */ diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/AbstractHanaDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/AbstractHanaDdl.java index 69d0d2816..58e071a5d 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/AbstractHanaDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/AbstractHanaDdl.java @@ -200,10 +200,10 @@ public abstract class AbstractHanaDdl extends PlatformDdl { /** * Joins alter table commands and add open/closing brackets for the alter statements */ - private static class HanaAlterTableWrite extends BaseAlterTableWrite { + class HanaAlterTableWrite extends BaseAlterTableWrite { public HanaAlterTableWrite(String tableName) { - super(tableName); + super(tableName, AbstractHanaDdl.this); } @Override diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseAlterTableWrite.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseAlterTableWrite.java index bd777d5a5..1bdcfdc30 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseAlterTableWrite.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseAlterTableWrite.java @@ -17,6 +17,8 @@ public class BaseAlterTableWrite implements DdlAlterTable { protected static final String RAW_OPERATION = "$RAW"; + protected final PlatformDdl platformDdl; + public class AlterCmd { // the command (e.g. "alter", "modify" private final String operation; @@ -58,9 +60,9 @@ public class BaseAlterTableWrite implements DdlAlterTable { // of all alter commands target.append(getAlternation()); } else { - target.append("alter table ").append(tableName).append(' ').append(operation); + target.append("alter table ").append(platformDdl.quote(tableName)).append(' ').append(operation); if (column != null) { - target.append(' ').append(column); + target.append(' ').append(platformDdl.quote(column)); } if (!getAlternation().isEmpty()) { target.append(' ').append(getAlternation()); @@ -85,8 +87,9 @@ public class BaseAlterTableWrite implements DdlAlterTable { private boolean historyHandled; - public BaseAlterTableWrite(String tableName) { + public BaseAlterTableWrite(String tableName, PlatformDdl platformDdl) { this.tableName = tableName; + this.platformDdl = platformDdl; } public String tableName() { diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java index c3bc5f791..60b22552c 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java @@ -222,7 +222,7 @@ public class BaseTableDdl implements TableDdl { String partitionMode = createTable.getPartitionMode(); DdlBuffer apply = writer.apply(); - apply.append(platformDdl.getCreateTableCommandPrefix()).append(" ").append(tableName).append(" ("); + apply.append(platformDdl.getCreateTableCommandPrefix()).append(" ").append(platformDdl.quote(tableName)).append(" ("); writeTableColumns(apply, columns, identity); writeUniqueConstraints(apply, createTable); writeCompoundUniqueConstraints(apply, createTable); @@ -423,7 +423,7 @@ public class BaseTableDdl implements TableDdl { if (i > 0) { buffer.append(","); } - buffer.append(columns[i].trim()); + buffer.append(platformDdl.quote(columns[i].trim())); } buffer.append(")"); } @@ -490,7 +490,7 @@ public class BaseTableDdl implements TableDdl { buffer.append(",").newLine(); buffer.append(" constraint ").append(uqName).append(" unique "); buffer.append("("); - buffer.append(column.getName()); + buffer.append(platformDdl.quote(column.getName())); buffer.append(")"); } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java index 874bcc88f..b8ad7ca2d 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DB2Ddl.java @@ -161,10 +161,10 @@ public class DB2Ddl extends PlatformDdl { return writer.applyAlterTable(tableName, Db2AlterTableWrite::new); }; - static class Db2AlterTableWrite extends BaseAlterTableWrite { + class Db2AlterTableWrite extends BaseAlterTableWrite { public Db2AlterTableWrite(String tableName) { - super(tableName); + super(tableName, DB2Ddl.this); } @Override diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java index d8ec08128..987303b20 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java @@ -32,13 +32,14 @@ public class MySqlDdl extends PlatformDdl { */ @Override public String dropIndex(String indexName, String tableName, boolean concurrent) { - return "drop index " + maxConstraintName(indexName) + " on " + tableName; + return "drop index " + maxConstraintName(indexName) + " on " + quote(tableName); } @Override public void alterTableDropColumn(DdlWrite writer, String tableName, String columnName) { if (this.useMigrationStoredProcedures) { - alterTable(writer, tableName).raw("CALL usp_ebean_drop_column('").append(tableName).append("', '").append(columnName).append("')"); + alterTable(writer, tableName).raw("CALL usp_ebean_drop_column('").append(naming.normaliseTable(tableName)) + .append("', '").append(naming.normaliseColumn(columnName)).append("')"); } else { super.alterTableDropColumn(writer, tableName, columnName); } @@ -49,7 +50,7 @@ public class MySqlDdl extends PlatformDdl { */ @Override public String alterTableDropForeignKey(String tableName, String fkName) { - return "alter table " + tableName + " drop foreign key " + maxConstraintName(fkName); + return "alter table " + quote(tableName) + " drop foreign key " + maxConstraintName(fkName); } @Override @@ -146,7 +147,7 @@ public class MySqlDdl extends PlatformDdl { if (DdlHelp.isDropComment(tableComment)) { tableComment = ""; } - apply.append(String.format("alter table %s comment = '%s'", tableName, tableComment)).endOfStatement(); + apply.append(String.format("alter table %s comment = '%s'", quote(tableName), tableComment)).endOfStatement(); } @Override diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java index e27edd762..3141ca3fb 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java @@ -258,7 +258,7 @@ public class PlatformDdl { } buffer.append(" "); - buffer.append(column.getName(), 29); + buffer.append(quote(column.getName()), 29); buffer.append(columnDefn); if (!Boolean.TRUE.equals(column.isPrimaryKey())) { String defaultValue = convertDefaultValue(column.getDefaultValue()); @@ -278,7 +278,7 @@ public class PlatformDdl { * Returns the check constraint. */ public String createCheckConstraint(String ckName, String checkConstraint) { - return " constraint " + ckName + " " + checkConstraint; + return " constraint " + maxConstraintName(ckName) + " " + checkConstraint; } /** @@ -292,7 +292,7 @@ public class PlatformDdl { * Return the drop foreign key clause. */ public String alterTableDropForeignKey(String tableName, String fkName) { - return "alter table " + alterTableIfExists + tableName + " " + dropConstraintIfExists + " " + maxConstraintName(fkName); + return "alter table " + alterTableIfExists + quote(tableName) + " " + dropConstraintIfExists + " " + maxConstraintName(fkName); } /** @@ -372,7 +372,7 @@ public class PlatformDdl { */ public String createSequence(String sequenceName, DdlIdentity identity) { StringBuilder sb = new StringBuilder("create sequence "); - sb.append(sequenceName); + sb.append(quote(sequenceName)); sb.append(identity.sequenceOptions(sequenceStartWith, sequenceIncrementBy, sequenceCache)); sb.append(";"); return sb.toString(); @@ -382,14 +382,14 @@ public class PlatformDdl { * Return the drop sequence statement (potentially with if exists clause). */ public String dropSequence(String sequenceName) { - return dropSequenceIfExists + sequenceName; + return dropSequenceIfExists + quote(sequenceName); } /** * Return the drop table statement (potentially with if exists clause). */ public String dropTable(String tableName) { - return dropTableIfExists + tableName + dropTableCascade; + return dropTableIfExists + quote(tableName) + dropTableCascade; } /** @@ -422,7 +422,7 @@ public class PlatformDdl { if (create.isNotExistsCheck()) { buffer.append(createIndexIfNotExists); } - buffer.append(maxConstraintName(create.getIndexName())).append(" on ").append(create.getTableName()); + buffer.append(maxConstraintName(create.getIndexName())).append(" on ").append(quote(create.getTableName())); appendColumns(create.getColumns(), buffer); return buffer.toString(); } @@ -435,7 +435,7 @@ public class PlatformDdl { StringBuilder buffer = new StringBuilder(90); buffer.append("foreign key"); appendColumns(request.cols(), buffer); - buffer.append(" references ").append(request.refTable()); + buffer.append(" references ").append(quote(request.refTable())); appendColumns(request.refCols(), buffer); appendForeignKeySuffix(request, buffer); return buffer.toString(); @@ -448,13 +448,13 @@ public class PlatformDdl { StringBuilder buffer = new StringBuilder(90); buffer - .append("alter table ").append(request.table()) + .append("alter table ").append(quote(request.table())) .append(" add constraint ").append(maxConstraintName(request.fkName())) .append(" foreign key"); appendColumns(request.cols(), buffer); buffer .append(" references ") - .append(request.refTable()); + .append(quote(request.refTable())); appendColumns(request.refCols(), buffer); appendForeignKeySuffix(request, buffer); if (options.isForeignKeySkipCheck()) { @@ -503,14 +503,14 @@ public class PlatformDdl { * Drop a unique constraint from the table (Sometimes this is an index). */ public String alterTableDropUniqueConstraint(String tableName, String uniqueConstraintName) { - return "alter table " + tableName + " " + dropUniqueConstraint + " " + maxConstraintName(uniqueConstraintName); + return "alter table " + quote(tableName) + " " + dropUniqueConstraint + " " + maxConstraintName(uniqueConstraintName); } /** * Drop a unique constraint from the table. */ public String alterTableDropConstraint(String tableName, String constraintName) { - return "alter table " + tableName + " " + dropConstraintIfExists + " " + maxConstraintName(constraintName); + return "alter table " + quote(tableName) + " " + dropConstraintIfExists + " " + maxConstraintName(constraintName); } /** @@ -521,7 +521,7 @@ public class PlatformDdl { public String alterTableAddUniqueConstraint(String tableName, String uqName, String[] columns, String[] nullableColumns) { StringBuilder buffer = new StringBuilder(90); - buffer.append("alter table ").append(tableName).append(" add constraint ").append(maxConstraintName(uqName)).append(" unique "); + buffer.append("alter table ").append(quote(tableName)).append(" add constraint ").append(maxConstraintName(uqName)).append(" unique "); appendColumns(columns, buffer); return buffer.toString(); } @@ -612,7 +612,7 @@ public class PlatformDdl { * Alter table adding the check constraint. */ public String alterTableAddCheckConstraint(String tableName, String checkConstraintName, String checkConstraint) { - return "alter table " + tableName + " " + addConstraint + " " + maxConstraintName(checkConstraintName) + " " + checkConstraint; + return "alter table " + quote(tableName) + " " + addConstraint + " " + maxConstraintName(checkConstraintName) + " " + checkConstraint; } /** @@ -656,7 +656,7 @@ public class PlatformDdl { * Creates or replace a new DdlAlterTable for given tableName. */ protected DdlAlterTable alterTable(DdlWrite writer, String tableName) { - return writer.applyAlterTable(tableName, BaseAlterTableWrite::new); + return writer.applyAlterTable(tableName, k -> new BaseAlterTableWrite(k, this)); } protected void appendColumns(String[] columns, StringBuilder buffer) { @@ -665,7 +665,7 @@ public class PlatformDdl { if (i > 0) { buffer.append(","); } - buffer.append(columns[i].trim()); + buffer.append(quote(columns[i].trim())); } buffer.append(")"); } @@ -713,7 +713,7 @@ public class PlatformDdl { if (DdlHelp.isDropComment(tableComment)) { tableComment = ""; } - apply.append(String.format("comment on table %s is '%s'", tableName, tableComment)).endOfStatement(); + apply.append(String.format("comment on table %s is '%s'", quote(tableName), tableComment)).endOfStatement(); } /** @@ -723,7 +723,7 @@ public class PlatformDdl { if (DdlHelp.isDropComment(comment)) { comment = ""; } - apply.append(String.format("comment on column %s.%s is '%s'", table, column, comment)).endOfStatement(); + apply.append(String.format("comment on column %s.%s is '%s'", quote(table), quote(column), comment)).endOfStatement(); } /** @@ -777,4 +777,9 @@ public class PlatformDdl { public void addTablePartition(DdlBuffer apply, String partitionMode, String partitionColumn) { // only supported by postgres initially } + + protected String quote(String dbName) { + return platform.convertQuotedIdentifiers(dbName); + } + } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SQLiteDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SQLiteDdl.java index 50ce99d25..c24dcff45 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SQLiteDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SQLiteDdl.java @@ -68,9 +68,9 @@ public class SQLiteDdl extends PlatformDdl { return writer.applyAlterTable(tableName, SQLiteAlterTableWrite::new); } - static class SQLiteAlterTableWrite extends BaseAlterTableWrite { + class SQLiteAlterTableWrite extends BaseAlterTableWrite { public SQLiteAlterTableWrite(String tableName) { - super(tableName); + super(tableName, SQLiteDdl.this); } @Override diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdl.java index e2faa5ace..06aeff157 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdl.java @@ -39,7 +39,7 @@ public class SqlServerHistoryDdl implements PlatformHistoryDdl { private void enableSystemVersioning(DdlWrite writer, String baseTable) { DdlBuffer apply = writer.applyPostAlter(); - apply.append("alter table ").append(baseTable).newLine() + apply.append("alter table ").append(quote(baseTable)).newLine() .append(" add ").append(systemPeriodStart).append(" datetime2 GENERATED ALWAYS AS ROW START NOT NULL DEFAULT SYSUTCDATETIME(),").newLine() .append(" ").append(systemPeriodEnd).append(" datetime2 GENERATED ALWAYS AS ROW END NOT NULL DEFAULT '9999-12-31T23:59:59.9999999',").newLine() .append("period for system_time (").append(systemPeriodStart).append(", ").append(systemPeriodEnd).append(")").endOfStatement(); @@ -48,7 +48,8 @@ public class SqlServerHistoryDdl implements PlatformHistoryDdl { .append(historyTableWithSchema(baseTable)).append("))").endOfStatement(); DdlBuffer drop = writer.dropAll(); - drop.append("IF OBJECT_ID('").append(baseTable).append("', 'U') IS NOT NULL alter table ").append(baseTable).append(" set (system_versioning = off)").endOfStatement(); + drop.append("IF OBJECT_ID('").append(quote(baseTable)).append("', 'U') IS NOT NULL alter table ") + .append(quote(baseTable)).append(" set (system_versioning = off)").endOfStatement(); drop.append("IF OBJECT_ID('").append(historyTableName(baseTable)).append("', 'U') IS NOT NULL drop table ") .append(historyTableName(baseTable)).endOfStatement(); } @@ -68,8 +69,8 @@ public class SqlServerHistoryDdl implements PlatformHistoryDdl { // switch of versioning & period - must be done before altering DdlBuffer apply = writer.apply(); apply.append("-- dropping history support for ").append(baseTable).endOfStatement(); - apply.append("alter table ").append(baseTable).append(" set (system_versioning = off)").endOfStatement(); - apply.append("alter table ").append(baseTable).append(" drop period for system_time").endOfStatement(); + apply.append("alter table ").append(quote(baseTable)).append(" set (system_versioning = off)").endOfStatement(); + apply.append("alter table ").append(quote(baseTable)).append(" drop period for system_time").endOfStatement(); apply.end(); // now drop tables & columns, they will go to alter table/post alter buffers platformDdl.alterTableDropColumn(writer, baseTable, systemPeriodStart); @@ -90,15 +91,19 @@ public class SqlServerHistoryDdl implements PlatformHistoryDdl { if (!alter.isHistoryHandled()) { // SQL Server 2016 does not need triggers DdlBuffer apply = writer.apply(); - apply.append("-- alter table ").append(tableName).append(" set (system_versioning = off (history_table=") + apply.append("-- alter table ").append(quote(tableName)).append(" set (system_versioning = off (history_table=") .append(historyTableWithSchema(tableName)).append("))").endOfStatement(); apply.append("-- history migration goes here").newLine(); - apply.append("-- alter table ").append(tableName).append(" set (system_versioning = on (history_table=") + apply.append("-- alter table ").append(quote(tableName)).append(" set (system_versioning = on (history_table=") .append(historyTableWithSchema(tableName)).append("))").endOfStatement(); } alter.setHistoryHandled(); } + protected String quote(String baseTable) { + return platformDdl.quote(baseTable); + } + protected String normalise(String tableName) { return constraintNaming.normaliseTable(tableName); } From 04d2a20945629d3293eccafbc43b66716b3a7935 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 13:48:48 +0100 Subject: [PATCH 09/15] Add testcase, that uses all kinds of reserved keywords --- .../dbmigration/DbMigrationTest.java | 34 ++++++- .../test/java/misc/migration/v1_0/ETable.java | 90 +++++++++++++++++++ .../test/java/misc/migration/v1_1/ETable.java | 49 ++++++++++ .../test/java/misc/migration/v1_2/ETable.java | 55 ++++++++++++ .../dbmigration/clickhouse/1.0__initial.sql | 8 ++ .../dbmigration/clickhouse/1.1.sql | 2 + .../clickhouse/idx_clickhouse.migrations | 4 +- .../dbmigration/cockroach/1.0__initial.sql | 15 ++++ .../dbmigration/cockroach/1.1.sql | 2 + .../cockroach/idx_cockroach.migrations | 4 +- .../dbmigration/db2fori/1.0__initial.sql | 22 +++++ .../migrationtest/dbmigration/db2fori/1.1.sql | 6 ++ .../migrationtest/dbmigration/db2fori/1.3.sql | 1 + .../dbmigration/db2fori/idx_db2.migrations | 6 +- .../dbmigration/db2legacy/1.0__initial.sql | 22 +++++ .../dbmigration/db2legacy/1.1.sql | 6 ++ .../dbmigration/db2legacy/1.3.sql | 1 + .../dbmigration/db2legacy/idx_db2.migrations | 6 +- .../dbmigration/db2luw/1.0__initial.sql | 22 +++++ .../migrationtest/dbmigration/db2luw/1.1.sql | 6 ++ .../migrationtest/dbmigration/db2luw/1.3.sql | 1 + .../dbmigration/db2luw/idx_db2.migrations | 6 +- .../dbmigration/db2zos/1.0__initial.sql | 22 +++++ .../migrationtest/dbmigration/db2zos/1.1.sql | 6 ++ .../migrationtest/dbmigration/db2zos/1.3.sql | 1 + .../dbmigration/db2zos/idx_db2.migrations | 6 +- .../dbmigration/generic/1.0__initial.sql | 16 ++++ .../migrationtest/dbmigration/generic/1.1.sql | 3 + .../migrationtest/dbmigration/generic/1.3.sql | 1 + .../generic/idx_generic.migrations | 6 +- .../dbmigration/h2/1.0__initial.sql | 30 +++++++ .../migrationtest/dbmigration/h2/1.1.sql | 8 ++ .../migrationtest/dbmigration/h2/1.3.sql | 1 + .../dbmigration/h2/idx_h2.migrations | 6 +- .../dbmigration/hana/1.0__initial.sql | 31 +++++++ .../migrationtest/dbmigration/hana/1.1.sql | 6 ++ .../migrationtest/dbmigration/hana/1.3.sql | 1 + .../dbmigration/hana/idx_hana.migrations | 6 +- .../dbmigration/hsqldb/1.0__initial.sql | 16 ++++ .../migrationtest/dbmigration/hsqldb/1.1.sql | 3 + .../migrationtest/dbmigration/hsqldb/1.3.sql | 1 + .../dbmigration/hsqldb/idx_hsqldb.migrations | 6 +- .../mariadb-noprocs/1.0__initial.sql | 16 ++++ .../dbmigration/mariadb-noprocs/1.1.sql | 2 + .../mariadb-noprocs/idx_mariadb.migrations | 4 +- .../dbmigration/mariadb/1.0__initial.sql | 16 ++++ .../migrationtest/dbmigration/mariadb/1.1.sql | 2 + .../mariadb/idx_mariadb.migrations | 4 +- .../dbmigration/model/1.0__initial.model.xml | 10 +++ .../dbmigration/model/1.1.model.xml | 5 ++ .../dbmigration/model/1.3.model.xml | 1 + .../dbmigration/mysql/1.0__initial.sql | 39 ++++++++ .../migrationtest/dbmigration/mysql/1.1.sql | 18 ++++ .../dbmigration/mysql/idx_mysql.migrations | 4 +- .../dbmigration/mysql55/1.0__initial.sql | 39 ++++++++ .../migrationtest/dbmigration/mysql55/1.1.sql | 18 ++++ .../dbmigration/mysql55/idx_mysql.migrations | 4 +- .../dbmigration/nuodb/1.0__initial.sql | 41 +++++++++ .../migrationtest/dbmigration/nuodb/1.1.sql | 20 +++++ .../dbmigration/nuodb/idx_nuodb.migrations | 4 +- .../dbmigration/oracle/1.0__initial.sql | 16 ++++ .../migrationtest/dbmigration/oracle/1.1.sql | 3 + .../migrationtest/dbmigration/oracle/1.3.sql | 1 + .../dbmigration/oracle/idx_oracle.migrations | 6 +- .../dbmigration/oracle11/1.0__initial.sql | 16 ++++ .../dbmigration/oracle11/1.1.sql | 3 + .../dbmigration/oracle11/1.3.sql | 1 + .../oracle11/idx_oracle.migrations | 6 +- .../dbmigration/postgres/1.0__initial.sql | 42 +++++++++ .../dbmigration/postgres/1.1.sql | 31 +++++++ .../dbmigration/postgres/1.3.sql | 1 + .../postgres/idx_postgres.migrations | 6 +- .../dbmigration/postgres9/1.0__initial.sql | 42 +++++++++ .../dbmigration/postgres9/1.1.sql | 31 +++++++ .../dbmigration/postgres9/1.3.sql | 1 + .../postgres9/idx_postgres.migrations | 6 +- .../dbmigration/sqlanywhere/1.0__initial.sql | 16 ++++ .../dbmigration/sqlanywhere/1.1.sql | 3 + .../dbmigration/sqlanywhere/1.3.sql | 1 + .../sqlanywhere/idx_sqlanywhere.migrations | 6 +- .../dbmigration/sqlite/1.0__initial.sql | 13 +++ .../migrationtest/dbmigration/sqlite/1.1.sql | 2 + .../dbmigration/sqlite/idx_sqlite.migrations | 4 +- .../dbmigration/sqlserver16/1.0__initial.sql | 20 +++++ .../dbmigration/sqlserver16/1.1.sql | 5 ++ .../sqlserver16/idx_sqlserver.migrations | 4 +- .../dbmigration/sqlserver17/1.0__initial.sql | 20 +++++ .../dbmigration/sqlserver17/1.1.sql | 5 ++ .../sqlserver17/idx_sqlserver.migrations | 4 +- .../dbmigration/yugabyte/1.0__initial.sql | 49 ++++++++++ .../dbmigration/yugabyte/1.1.sql | 31 +++++++ .../dbmigration/yugabyte/1.3.sql | 1 + .../yugabyte/idx_yugabyte.migrations | 6 +- 93 files changed, 1129 insertions(+), 64 deletions(-) create mode 100644 ebean-test/src/test/java/misc/migration/v1_0/ETable.java create mode 100644 ebean-test/src/test/java/misc/migration/v1_1/ETable.java create mode 100644 ebean-test/src/test/java/misc/migration/v1_2/ETable.java diff --git a/ebean-test/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java b/ebean-test/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java index df309a65a..a7461173e 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java +++ b/ebean-test/src/test/java/io/ebeaninternal/dbmigration/DbMigrationTest.java @@ -6,6 +6,7 @@ import io.ebean.annotation.Platform; import io.ebean.config.DatabaseConfig; import io.ebean.config.dbplatform.DbHistorySupport; import io.ebean.datasource.pool.ConnectionPool; +import misc.migration.v1_0.ETable; import misc.migration.v1_1.EHistory; import misc.migration.v1_1.EHistory2; import org.junit.jupiter.api.Test; @@ -84,7 +85,10 @@ public class DbMigrationTest extends BaseTestCase { "migtest_mtm_c_migtest_mtm_m", "migtest_mtm_m_migtest_mtm_c", "migtest_oto_child", - "migtest_oto_master"); + "migtest_oto_master", + "table", + "\"table\"", + "`table`"); ((ConnectionPool)server().dataSource()).offline(); ((ConnectionPool)server().dataSource()).online(); @@ -113,7 +117,7 @@ public class DbMigrationTest extends BaseTestCase { assertThat(server().execute(update)).isEqualTo(2); } - + testReservedKeywords(); createHistoryEntities(); if (isOracle()) { // Oracle does not like to convert varchar to integer @@ -258,6 +262,32 @@ public class DbMigrationTest extends BaseTestCase { } } + // do some history tests with V1.1 models + private void testReservedKeywords() { + DatabaseConfig config = new DatabaseConfig(); + config.setName(server().name()); + config.loadFromProperties(server().pluginApi().config().getProperties()); + config.setDataSource(server().dataSource()); + config.setReadOnlyDataSource(server().dataSource()); + config.setDdlGenerate(false); + config.setDdlRun(false); + config.setRegister(false); + config.setPackages(Collections.singletonList("misc.migration.v1_0")); + + Database tmpServer = DatabaseFactory.create(config); + try { + ETable table = new misc.migration.v1_0.ETable(); + table.setFrom("foo"); + table.setTo("bar"); + table.setIndex("id"); + tmpServer.save(table); + table = tmpServer.find(ETable.class).where().eq("index", "id").findOne(); + assert table != null; + } finally { + tmpServer.shutdown(false, false); + } + } + private void createHistoryEntities() { SqlUpdate update = server().sqlUpdate("insert into migtest_e_history (id, test_string) values (1, '42')"); assertThat(server().execute(update)).isEqualTo(1); diff --git a/ebean-test/src/test/java/misc/migration/v1_0/ETable.java b/ebean-test/src/test/java/misc/migration/v1_0/ETable.java new file mode 100644 index 000000000..7dfd5948e --- /dev/null +++ b/ebean-test/src/test/java/misc/migration/v1_0/ETable.java @@ -0,0 +1,90 @@ +package misc.migration.v1_0; + +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import io.ebean.annotation.DbComment; +import io.ebean.annotation.History; +import io.ebean.annotation.Index; + +@Table(name = "`table`") +@Entity +@History +public class ETable { + + @Column(name = "`index`") + @DbComment("this is a comment") + @Id + private String index; + + @Column(name = "`from`") + @Index + private String from; + + @Column(name = "`to`") + @Index(unique = true) + private String to; + + @Column(name = "`varchar`") + @Index(unique = true) + private String varchar; + + @ManyToOne + @JoinColumn(name = "`foreign`") + ETable foreign; + + @OneToMany(mappedBy = "foreign") + List foreigns; + + public String getIndex() { + return index; + } + + public void setIndex(String index) { + this.index = index; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getVarchar() { + return varchar; + } + + public void setVarchar(String varchar) { + this.varchar = varchar; + } + + public ETable getForeign() { + return foreign; + } + + public void setForeign(ETable foreign) { + this.foreign = foreign; + } + + public List getForeigns() { + return foreigns; + } + +} diff --git a/ebean-test/src/test/java/misc/migration/v1_1/ETable.java b/ebean-test/src/test/java/misc/migration/v1_1/ETable.java new file mode 100644 index 000000000..cbca4b4b2 --- /dev/null +++ b/ebean-test/src/test/java/misc/migration/v1_1/ETable.java @@ -0,0 +1,49 @@ +package misc.migration.v1_1; + +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import io.ebean.annotation.DbComment; +import io.ebean.annotation.History; +import io.ebean.annotation.Index; + +@Table(name = "`table`") +@Entity +@History // FIXME: remove later +public class ETable { + + @Column(name = "`index`") + @DbComment("this is an other comment") + @Id + private String index; + + @Column(name = "`from`") + @Index + private String from; + + @Column(name = "`to`") + @Index(unique = true) + private String to; + + @Column(name = "`varchar`") + @Index(unique = true) + private String varchar; + + @Column(name = "`select`") + @Index(unique = true) + private String select; + + @ManyToOne + @JoinColumn(name = "`foreign`") + ETable foreign; + + @OneToMany(mappedBy = "foreign") + List foreigns; +} diff --git a/ebean-test/src/test/java/misc/migration/v1_2/ETable.java b/ebean-test/src/test/java/misc/migration/v1_2/ETable.java new file mode 100644 index 000000000..4fff00ce3 --- /dev/null +++ b/ebean-test/src/test/java/misc/migration/v1_2/ETable.java @@ -0,0 +1,55 @@ +package misc.migration.v1_2; + +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import io.ebean.annotation.DbComment; +import io.ebean.annotation.History; +import io.ebean.annotation.Index; + +@Table(name = "`table`") +@Entity +@History +public class ETable { + + @Column(name = "`index`") + @DbComment("this is a comment") + @Id + private String index; + + @Column(name = "`from`") + @Index + private String from; + + @Column(name = "`to`") + @Index(unique = true) + private String to; + + @Column(name = "`varchar`") + @Index(unique = true) + private String varchar; + + // Note: This column should be removed, (as it is also not present in V1.0) + // There is a limitation in history generation, that you cannot enable history while you have pending drops + // History-table will be generyted in V1.3 - SQL without that column, while base table still contains that column + // When creating the "with_history" view, the DB complains, because the tables do not match. + // In V1.4 the column will be dropped in base table AND history table. + // This could be probably fixed, by generating history table also with dropped columns + @Column(name = "`select`") + @Index(unique = true) + private String select; + + @ManyToOne + @JoinColumn(name = "`foreign`") + ETable foreign; + + @OneToMany(mappedBy = "foreign") + List foreigns; +} diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/1.0__initial.sql index 399008e81..976eaa3cd 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/1.0__initial.sql @@ -115,6 +115,14 @@ create table migtest_e_softdelete ( test_string String ) ENGINE = Log(); +create table "table" ( + "index" String, + "from" String, + "to" String, + "varchar" String, + "foreign" String +) ENGINE = Log(); + create table migtest_mtm_c ( id UInt32, name String diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/1.1.sql index 8031d4b61..d2d1e7044 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/1.1.sql @@ -38,6 +38,7 @@ update migtest_e_history2 set test_string = 'unknown' where test_string is null; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table "table" add column "select" String; alter table migtest_ckey_detail add column one_key UInt32; alter table migtest_ckey_detail add column two_key String; alter table migtest_ckey_parent add column assoc_id UInt32; @@ -78,3 +79,4 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_status_indextest1 alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); +alter table "table" add constraint uq_table_select unique ("select"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/idx_clickhouse.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/idx_clickhouse.migrations index e9f16f1b3..e6e04dafd 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/idx_clickhouse.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/clickhouse/idx_clickhouse.migrations @@ -1,5 +1,5 @@ --1091512932, 1.0__initial.sql -308282323, 1.1.sql +863321871, 1.0__initial.sql +1903846331, 1.1.sql 1279151426, 1.2__dropsFor_1.1.sql 1630693278, 1.3.sql 80209848, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/1.0__initial.sql index 23cb015c1..faa10a8c2 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/1.0__initial.sql @@ -140,6 +140,17 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); + create table migtest_mtm_c ( id integer generated by default as identity not null, name varchar(255), @@ -174,5 +185,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/1.1.sql index 01d009c38..785bcda3a 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/1.1.sql @@ -45,6 +45,7 @@ update migtest_e_history2 set test_string = 'unknown' where test_string is null; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -85,6 +86,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_status_indextest1 alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); +alter table "table" add constraint uq_table_select unique ("select"); -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/idx_cockroach.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/idx_cockroach.migrations index 24af9d68d..69de34b1f 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/idx_cockroach.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/cockroach/idx_cockroach.migrations @@ -1,5 +1,5 @@ -150261101, 1.0__initial.sql --968104039, 1.1.sql +1636200128, 1.0__initial.sql +356413151, 1.1.sql 240919209, 1.2__dropsFor_1.1.sql -430000356, 1.3.sql -820814009, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.0__initial.sql index b20611369..a64383897 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.0__initial.sql @@ -137,6 +137,16 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer generated by default as identity not null, name varchar(255), @@ -162,6 +172,10 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table "table" add column sys_period_start timestamp(12) not null generated always as row begin; +alter table "table" add column sys_period_end timestamp(12) not null generated always as row end; +alter table "table" add column sys_period_txn timestamp(12) generated always as transaction start id; +alter table "table" add period system_time (sys_period_start,sys_period_end); alter table migtest_e_history2 add column sys_period_start timestamp(12) not null generated always as row begin; alter table migtest_e_history2 add column sys_period_end timestamp(12) not null generated always as row end; alter table migtest_e_history2 add column sys_period_txn timestamp(12) generated always as transaction start id; @@ -196,6 +210,10 @@ alter table migtest_e_history5 add versioning use history table migtest_e_histor create table migtest_e_history6_history as (select * from migtest_e_history6) with no data; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; alter table migtest_e_ref add constraint uq_migtest_e_ref_name unique (name); +create unique index uq_table_to on "table"("to") exclude null keys; +create unique index uq_table_varchar on "table"("varchar") exclude null keys; +create table table_history as (select * from "table") with no data; +alter table "table" add versioning use history table table_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; @@ -206,5 +224,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.1.sql index cbe873d8b..1cc7b4b1d 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.1.sql @@ -118,7 +118,9 @@ alter table migtest_e_history5 drop versioning; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; alter table migtest_e_history6 drop versioning; +alter table "table" drop versioning; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -168,6 +170,7 @@ alter table migtest_e_history6_history alter column test_number2 drop not null; call sysproc.admin_cmd('reorg table migtest_e_history6_history'); alter table migtest_e_softdelete add column deleted smallint default 0 default false not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column "select" varchar(255); -- apply post alter alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); create unique index uq_migtest_e_basic_description on migtest_e_basic(description) exclude null keys; @@ -188,6 +191,9 @@ alter table migtest_e_history3 add versioning use history table migtest_e_histor alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; alter table migtest_e_history5 add versioning use history table migtest_e_history5_history; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; +comment on column "table"."index" is 'this is an other comment'; +alter table "table" add versioning use history table table_history; +create unique index uq_table_select on "table"("select") exclude null keys; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.3.sql index d8778ad59..2fcd77858 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/1.3.sql @@ -217,6 +217,7 @@ alter table migtest_e_history2 add versioning use history table migtest_e_histor alter table migtest_e_history3 add versioning use history table migtest_e_history3_history; alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; +comment on column "table"."index" is 'this is a comment'; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/idx_db2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/idx_db2.migrations index c4967d055..69a27f3a5 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/idx_db2.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2fori/idx_db2.migrations @@ -1,7 +1,7 @@ -1907884988, 1.0__initial.sql --2103050574, 1.1.sql +-1073246286, 1.0__initial.sql +2043476851, 1.1.sql 364066694, 1.2__dropsFor_1.1.sql --144532085, 1.3.sql +1155358918, 1.3.sql -1199420632, 1.4__dropsFor_1.3.sql 561281075, R__order_views.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql index 029e6b2b8..578d7cdff 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql @@ -137,6 +137,16 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer generated by default as identity not null, name varchar(255), @@ -162,6 +172,10 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table "table" add column sys_period_start timestamp(12) not null generated always as row begin; +alter table "table" add column sys_period_end timestamp(12) not null generated always as row end; +alter table "table" add column sys_period_txn timestamp(12) generated always as transaction start id; +alter table "table" add period system_time (sys_period_start,sys_period_end); alter table migtest_e_history2 add column sys_period_start timestamp(12) not null generated always as row begin; alter table migtest_e_history2 add column sys_period_end timestamp(12) not null generated always as row end; alter table migtest_e_history2 add column sys_period_txn timestamp(12) generated always as transaction start id; @@ -196,6 +210,10 @@ alter table migtest_e_history5 add versioning use history table migtest_e_histor create table migtest_e_history6_history as (select * from migtest_e_history6) with no data; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; alter table migtest_e_ref add constraint uq_mgtst__rf_nm unique (name); +create unique index uq_table_to on "table"("to") exclude null keys; +create unique index uq_table_varchar on "table"("varchar") exclude null keys; +create table table_history as (select * from "table") with no data; +alter table "table" add versioning use history table table_history; -- foreign keys and indices create index ix_mgtst_fk_mok1xj on migtest_fk_cascade (one_id); alter table migtest_fk_cascade add constraint fk_mgtst_fk_65kf6l foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update restrict; @@ -206,5 +224,9 @@ alter table migtest_fk_set_null add constraint fk_mgtst_fk_wicx8x foreign key (o create index ix_mgtst__bsc_rf_d on migtest_e_basic (eref_id); alter table migtest_e_basic add constraint fk_mgtst__bsc_rf_d foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict; +create index ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + create index ix_mgtst__b_eu8csq on migtest_e_basic (indextest1); create index ix_mgtst__b_eu8csu on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql index f173fb6cc..21013eea0 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql @@ -118,7 +118,9 @@ alter table migtest_e_history5 drop versioning; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; alter table migtest_e_history6 drop versioning; +alter table "table" drop versioning; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -168,6 +170,7 @@ alter table migtest_e_history6_history alter column test_number2 drop not null; call sysproc.admin_cmd('reorg table migtest_e_history6_history'); alter table migtest_e_softdelete add column deleted boolean default false not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column "select" varchar(255); -- apply post alter alter table migtest_e_basic add constraint ck_mgtst__bsc_stts check ( status in ('N','A','I','?')); create unique index uq_mgtst__b_vs45xo on migtest_e_basic(description) exclude null keys; @@ -188,6 +191,9 @@ alter table migtest_e_history3 add versioning use history table migtest_e_histor alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; alter table migtest_e_history5 add versioning use history table migtest_e_history5_history; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; +comment on column "table"."index" is 'this is an other comment'; +alter table "table" add versioning use history table table_history; +create unique index uq_table_select on "table"("select") exclude null keys; -- foreign keys and indices create index ix_mgtst_mt_3ug4ok on migtest_mtm_c_migtest_mtm_m (migtest_mtm_c_id); alter table migtest_mtm_c_migtest_mtm_m add constraint fk_mgtst_mt_93awga foreign key (migtest_mtm_c_id) references migtest_mtm_c (id) on delete restrict on update restrict; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.3.sql index d69577404..358d219a8 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.3.sql @@ -217,6 +217,7 @@ alter table migtest_e_history2 add versioning use history table migtest_e_histor alter table migtest_e_history3 add versioning use history table migtest_e_history3_history; alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; +comment on column "table"."index" is 'this is a comment'; -- foreign keys and indices alter table migtest_fk_cascade add constraint fk_mgtst_fk_65kf6l 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_mgtst_fk_wicx8x foreign key (one_id) references migtest_fk_one (id) on delete set null on update restrict; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations index b45072284..880eb4bf6 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations @@ -1,7 +1,7 @@ --1510441716, 1.0__initial.sql --318724769, 1.1.sql +2054922533, 1.0__initial.sql +1256892738, 1.1.sql 364066694, 1.2__dropsFor_1.1.sql -1221811961, 1.3.sql +1760988648, 1.3.sql -1199420632, 1.4__dropsFor_1.3.sql 561281075, R__order_views.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.0__initial.sql index 8e2a6ff17..c2235d9c9 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.0__initial.sql @@ -137,6 +137,16 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer generated by default as identity not null, name varchar(255), @@ -162,6 +172,10 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table "table" add column sys_period_start timestamp(12) not null generated always as row begin; +alter table "table" add column sys_period_end timestamp(12) not null generated always as row end; +alter table "table" add column sys_period_txn timestamp(12) generated always as transaction start id; +alter table "table" add period system_time (sys_period_start,sys_period_end); alter table migtest_e_history2 add column sys_period_start timestamp(12) not null generated always as row begin; alter table migtest_e_history2 add column sys_period_end timestamp(12) not null generated always as row end; alter table migtest_e_history2 add column sys_period_txn timestamp(12) generated always as transaction start id; @@ -196,6 +210,10 @@ alter table migtest_e_history5 add versioning use history table migtest_e_histor create table migtest_e_history6_history as (select * from migtest_e_history6) with no data; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; alter table migtest_e_ref add constraint uq_migtest_e_ref_name unique (name); +create unique index uq_table_to on "table"("to") exclude null keys; +create unique index uq_table_varchar on "table"("varchar") exclude null keys; +create table table_history as (select * from "table") with no data; +alter table "table" add versioning use history table table_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; @@ -206,5 +224,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.1.sql index a3967a721..2fb812410 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.1.sql @@ -118,7 +118,9 @@ alter table migtest_e_history5 drop versioning; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; alter table migtest_e_history6 drop versioning; +alter table "table" drop versioning; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -168,6 +170,7 @@ alter table migtest_e_history6_history alter column test_number2 drop not null; call sysproc.admin_cmd('reorg table migtest_e_history6_history'); alter table migtest_e_softdelete add column deleted boolean default false not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column "select" varchar(255); -- apply post alter alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); create unique index uq_migtest_e_basic_description on migtest_e_basic(description) exclude null keys; @@ -188,6 +191,9 @@ alter table migtest_e_history3 add versioning use history table migtest_e_histor alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; alter table migtest_e_history5 add versioning use history table migtest_e_history5_history; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; +comment on column "table"."index" is 'this is an other comment'; +alter table "table" add versioning use history table table_history; +create unique index uq_table_select on "table"("select") exclude null keys; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.3.sql index 5d90ff7af..9dbb719d6 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/1.3.sql @@ -217,6 +217,7 @@ alter table migtest_e_history2 add versioning use history table migtest_e_histor alter table migtest_e_history3 add versioning use history table migtest_e_history3_history; alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; +comment on column "table"."index" is 'this is a comment'; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/idx_db2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/idx_db2.migrations index 396c500c1..9d4b61aa7 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/idx_db2.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2luw/idx_db2.migrations @@ -1,7 +1,7 @@ --1381050106, 1.0__initial.sql --960600780, 1.1.sql +-1519091511, 1.0__initial.sql +-370964456, 1.1.sql 364066694, 1.2__dropsFor_1.1.sql --688071658, 1.3.sql +591329540, 1.3.sql -1199420632, 1.4__dropsFor_1.3.sql 561281075, R__order_views.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.0__initial.sql index 8e2a6ff17..c2235d9c9 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.0__initial.sql @@ -137,6 +137,16 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer generated by default as identity not null, name varchar(255), @@ -162,6 +172,10 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table "table" add column sys_period_start timestamp(12) not null generated always as row begin; +alter table "table" add column sys_period_end timestamp(12) not null generated always as row end; +alter table "table" add column sys_period_txn timestamp(12) generated always as transaction start id; +alter table "table" add period system_time (sys_period_start,sys_period_end); alter table migtest_e_history2 add column sys_period_start timestamp(12) not null generated always as row begin; alter table migtest_e_history2 add column sys_period_end timestamp(12) not null generated always as row end; alter table migtest_e_history2 add column sys_period_txn timestamp(12) generated always as transaction start id; @@ -196,6 +210,10 @@ alter table migtest_e_history5 add versioning use history table migtest_e_histor create table migtest_e_history6_history as (select * from migtest_e_history6) with no data; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; alter table migtest_e_ref add constraint uq_migtest_e_ref_name unique (name); +create unique index uq_table_to on "table"("to") exclude null keys; +create unique index uq_table_varchar on "table"("varchar") exclude null keys; +create table table_history as (select * from "table") with no data; +alter table "table" add versioning use history table table_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; @@ -206,5 +224,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.1.sql index a3967a721..2fb812410 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.1.sql @@ -118,7 +118,9 @@ alter table migtest_e_history5 drop versioning; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; alter table migtest_e_history6 drop versioning; +alter table "table" drop versioning; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -168,6 +170,7 @@ alter table migtest_e_history6_history alter column test_number2 drop not null; call sysproc.admin_cmd('reorg table migtest_e_history6_history'); alter table migtest_e_softdelete add column deleted boolean default false not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column "select" varchar(255); -- apply post alter alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); create unique index uq_migtest_e_basic_description on migtest_e_basic(description) exclude null keys; @@ -188,6 +191,9 @@ alter table migtest_e_history3 add versioning use history table migtest_e_histor alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; alter table migtest_e_history5 add versioning use history table migtest_e_history5_history; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; +comment on column "table"."index" is 'this is an other comment'; +alter table "table" add versioning use history table table_history; +create unique index uq_table_select on "table"("select") exclude null keys; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.3.sql index 5d90ff7af..9dbb719d6 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/1.3.sql @@ -217,6 +217,7 @@ alter table migtest_e_history2 add versioning use history table migtest_e_histor alter table migtest_e_history3 add versioning use history table migtest_e_history3_history; alter table migtest_e_history4 add versioning use history table migtest_e_history4_history; alter table migtest_e_history6 add versioning use history table migtest_e_history6_history; +comment on column "table"."index" is 'this is a comment'; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/idx_db2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/idx_db2.migrations index 396c500c1..9d4b61aa7 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/idx_db2.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2zos/idx_db2.migrations @@ -1,7 +1,7 @@ --1381050106, 1.0__initial.sql --960600780, 1.1.sql +-1519091511, 1.0__initial.sql +-370964456, 1.1.sql 364066694, 1.2__dropsFor_1.1.sql --688071658, 1.3.sql +591329540, 1.3.sql -1199420632, 1.4__dropsFor_1.3.sql 561281075, R__order_views.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.0__initial.sql index 262ebd5ff..0ac3d868a 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.0__initial.sql @@ -140,6 +140,18 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer auto_increment not null, name varchar(255), @@ -174,5 +186,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.1.sql index 59709f02d..dc9bed0c0 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.1.sql @@ -45,6 +45,7 @@ update migtest_e_history2 set test_string = 'unknown' where test_string is null; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -87,6 +88,8 @@ 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); 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'; +comment on column "table"."index" is 'this is an other comment'; +alter table "table" add constraint uq_table_select unique ("select"); -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.3.sql index cb972294f..ec207d6a4 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/generic/1.3.sql @@ -65,6 +65,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 ''; +comment on column "table"."index" is 'this is a comment'; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/generic/idx_generic.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/generic/idx_generic.migrations index 24d932206..a6df69810 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/generic/idx_generic.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/generic/idx_generic.migrations @@ -1,6 +1,6 @@ -2034298647, 1.0__initial.sql -294462857, 1.1.sql +-1347475412, 1.0__initial.sql +2132717520, 1.1.sql 1279151426, 1.2__dropsFor_1.1.sql -465616489, 1.3.sql +-796269364, 1.3.sql 80209848, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.0__initial.sql index 0bf405740..e3b222262 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.0__initial.sql @@ -140,6 +140,18 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer generated by default as identity not null, name varchar(255), @@ -165,6 +177,8 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table "table" add column sys_period_start timestamp default now(); +alter table "table" add column sys_period_end timestamp; alter table migtest_e_history2 add column sys_period_start timestamp default now(); alter table migtest_e_history2 add column sys_period_end timestamp; alter table migtest_e_history3 add column sys_period_start timestamp default now(); @@ -224,6 +238,18 @@ create table migtest_e_history6_history( create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history; create trigger migtest_e_history6_history_upd before update,delete on migtest_e_history6 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger"; +create table table_history( + "index" varchar(255), + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + sys_period_start timestamp, + sys_period_end timestamp +); +create view table_with_history as select * from "table" union all select * from table_history; +create trigger table_history_upd before update,delete on "table" for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger"; + -- 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; @@ -234,5 +260,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.1.sql index 6b9679661..f34c6996f 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.1.sql @@ -54,7 +54,10 @@ drop view migtest_e_history5_with_history; update migtest_e_history6 set test_number1 = 42 where test_number1 is null; drop trigger migtest_e_history6_history_upd; drop view migtest_e_history6_with_history; +drop trigger table_history_upd; +drop view table_with_history; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -92,6 +95,7 @@ alter table migtest_e_history6 alter column test_number2 set null; alter table migtest_e_history6_history alter column test_number2 set null; alter table migtest_e_softdelete add column deleted boolean default false not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column "select" varchar(255); -- apply post alter alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description); @@ -124,6 +128,10 @@ create view migtest_e_history5_with_history as select * from migtest_e_history5 create trigger migtest_e_history5_history_upd before update,delete on migtest_e_history5 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger"; create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history; create trigger migtest_e_history6_history_upd before update,delete on migtest_e_history6 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger"; +comment on column "table"."index" is 'this is an other comment'; +create view table_with_history as select * from "table" union all select * from table_history; +create trigger table_history_upd before update,delete on "table" for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger"; +alter table "table" add constraint uq_table_select unique ("select"); -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.3.sql index e10ccf4e3..80d4f9aa0 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.3.sql @@ -86,6 +86,7 @@ create view migtest_e_history4_with_history as select * from migtest_e_history4 create trigger migtest_e_history4_history_upd before update,delete on migtest_e_history4 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger"; create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history; create trigger migtest_e_history6_history_upd before update,delete on migtest_e_history6 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger"; +comment on column "table"."index" is 'this is a comment'; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/idx_h2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/idx_h2.migrations index 9d9acbb8e..7a87fc386 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/idx_h2.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/idx_h2.migrations @@ -1,7 +1,7 @@ -2132375128, 1.0__initial.sql -393141788, 1.1.sql +-1179806373, 1.0__initial.sql +398205555, 1.1.sql -1366392410, 1.2__dropsFor_1.1.sql --1336073109, 1.3.sql +-523874424, 1.3.sql -1382108238, 1.4__dropsFor_1.3.sql 783227075, R__multi_comments.sql 561281075, R__order_views.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.0__initial.sql index 6c528f6ce..c0df03053 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.0__initial.sql @@ -140,6 +140,18 @@ create column table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create column table "table" ( + "index" nvarchar(255) not null, + "from" nvarchar(255), + "to" nvarchar(255), + "varchar" nvarchar(255), + "foreign" nvarchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create column table migtest_mtm_c ( id integer generated by default as identity not null, name nvarchar(255), @@ -229,6 +241,21 @@ alter table migtest_e_history6 add ( ); alter table migtest_e_history6 add period for system_time(sys_period_start,sys_period_end); alter table migtest_e_history6 add system versioning history table migtest_e_history6_history; +create column table table_history ( + "index" nvarchar(255), + "from" nvarchar(255), + "to" nvarchar(255), + "varchar" nvarchar(255), + "foreign" nvarchar(255), + sys_period_start timestamp, + sys_period_end timestamp +); +alter table "table" add ( + sys_period_start TIMESTAMP NOT NULL GENERATED ALWAYS AS ROW START, + sys_period_end TIMESTAMP NOT NULL GENERATED ALWAYS AS ROW END +); +alter table "table" add period for system_time(sys_period_start,sys_period_end); +alter table "table" add system versioning history table table_history; -- foreign keys and indices -- explicit index "ix_migtest_fk_cascade_one_id" for single column "one_id" of table "migtest_fk_cascade" is not necessary; 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; @@ -239,5 +266,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for -- explicit index "ix_migtest_e_basic_eref_id" for single column "eref_id" of table "migtest_e_basic" is not necessary; 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; +-- explicit index "ix_table_foreign" for single column ""foreign"" of table ""table"" is not necessary; +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + -- explicit index "ix_migtest_e_basic_indextest1" for single column "indextest1" of table "migtest_e_basic" is not necessary; -- explicit index "ix_migtest_e_basic_indextest5" for single column "indextest5" of table "migtest_e_basic" is not necessary; +-- explicit index "ix_table_from" for single column ""from"" of table ""table"" is not necessary; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.1.sql index dd18de917..8de138abb 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.1.sql @@ -91,7 +91,9 @@ alter table migtest_e_history5 drop system versioning; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; alter table migtest_e_history6 drop system versioning; +alter table "table" drop system versioning; -- apply alter tables +alter table "table" add ("select" nvarchar(255)); alter table migtest_ckey_detail add (one_key integer, two_key nvarchar(127)); alter table migtest_ckey_parent add (assoc_id integer); @@ -121,6 +123,7 @@ alter table migtest_e_history6 alter (test_number1 integer default 42 not null, alter table migtest_e_history6_history alter (test_number2 integer); alter table migtest_e_softdelete add (deleted boolean default false not null); alter table migtest_oto_child add (master_id bigint); +alter table table_history add ("select" nvarchar(255)); -- apply post alter alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); -- cannot create unique index "uq_migtest_e_basic_description" on table "migtest_e_basic" with nullable columns; @@ -151,6 +154,9 @@ alter table migtest_e_history3 add system versioning history table migtest_e_his alter table migtest_e_history4 add system versioning history table migtest_e_history4_history not validated; alter table migtest_e_history5 add system versioning history table migtest_e_history5_history not validated; alter table migtest_e_history6 add system versioning history table migtest_e_history6_history not validated; +comment on column "table"."index" is 'this is an other comment'; +alter table "table" add system versioning history table table_history not validated; +-- cannot create unique index "uq_table_select" on table ""table"" with nullable columns; -- foreign keys and indices -- explicit index "ix_migtest_mtm_c_migtest_mtm_m_migtest_mtm_c" for single column "migtest_mtm_c_id" of table "migtest_mtm_c_migtest_mtm_m" is not necessary; 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.3.sql index 43ea9ef1d..b44e90abe 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/hana/1.3.sql @@ -132,6 +132,7 @@ alter table migtest_e_history2 add system versioning history table migtest_e_his alter table migtest_e_history3 add system versioning history table migtest_e_history3_history not validated; alter table migtest_e_history4 add system versioning history table migtest_e_history4_history not validated; alter table migtest_e_history6 add system versioning history table migtest_e_history6_history not validated; +comment on column "table"."index" is 'this is a comment'; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/hana/idx_hana.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/hana/idx_hana.migrations index 78e20a03f..b88d4fd3d 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/hana/idx_hana.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/hana/idx_hana.migrations @@ -1,8 +1,8 @@ -745347271, I__create_procs.sql --1191817607, 1.0__initial.sql -975653326, 1.1.sql +1934891896, 1.0__initial.sql +187688059, 1.1.sql 197547825, 1.2__dropsFor_1.1.sql --98538062, 1.3.sql +-1989736027, 1.3.sql 1812245353, 1.4__dropsFor_1.3.sql 1906063401, R__order_views_hana.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.0__initial.sql index e9edea850..47015f010 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.0__initial.sql @@ -140,6 +140,18 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer generated by default as identity (start with 1) not null, name varchar(255), @@ -174,5 +186,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.1.sql index f5c26a888..04d1379e5 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.1.sql @@ -45,6 +45,7 @@ update migtest_e_history2 set test_string = 'unknown' where test_string is null; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -87,6 +88,8 @@ 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); 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'; +comment on column "table"."index" is 'this is an other comment'; +alter table "table" add constraint uq_table_select unique ("select"); -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.3.sql index a997ec73a..4658ed476 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/1.3.sql @@ -65,6 +65,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 ''; +comment on column "table"."index" is 'this is a comment'; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/idx_hsqldb.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/idx_hsqldb.migrations index cb5d8ea27..8cd03776b 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/idx_hsqldb.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/hsqldb/idx_hsqldb.migrations @@ -1,7 +1,7 @@ -614593077, 1.0__initial.sql --788233032, 1.1.sql +-917796012, 1.0__initial.sql +-838725141, 1.1.sql -300925212, 1.2__dropsFor_1.1.sql -121126259, 1.3.sql +-1549893170, 1.3.sql -972999284, 1.4__dropsFor_1.3.sql 861001272, R__order_views_hsqldb.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/1.0__initial.sql index 9b0587dc3..871dfe2de 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/1.0__initial.sql @@ -137,6 +137,17 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table `table` ( + `index` varchar(255) not null comment 'this is a comment', + `from` varchar(255), + `to` varchar(255), + `varchar` varchar(255), + `foreign` varchar(255), + constraint uq_table_to unique (`to`), + constraint uq_table_varchar unique (`varchar`), + constraint pk_table primary key (`index`) +); + create table migtest_mtm_c ( id integer auto_increment not null, name varchar(255), @@ -162,6 +173,7 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table `table` add system versioning; alter table migtest_e_history2 add system versioning; alter table migtest_e_history3 add system versioning; alter table migtest_e_history4 add system versioning; @@ -177,5 +189,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on `table` (`foreign`); +alter table `table` add constraint fk_table_foreign foreign key (`foreign`) references `table` (`index`) on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on `table` (`from`); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/1.1.sql index eb8551ab3..a47607fa6 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/1.1.sql @@ -43,6 +43,7 @@ SET @@system_versioning_alter_history = 1; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table `table` add column `select` varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -77,6 +78,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); alter table migtest_e_history comment = 'We have history now'; +alter table `table` add constraint uq_table_select unique (`select`); -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/idx_mariadb.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/idx_mariadb.migrations index 400a152ee..f94e6b123 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/idx_mariadb.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb-noprocs/idx_mariadb.migrations @@ -1,5 +1,5 @@ -1992643861, 1.0__initial.sql --1677772226, 1.1.sql +675320779, 1.0__initial.sql +840323734, 1.1.sql -828985759, 1.2__dropsFor_1.1.sql -1470028617, 1.3.sql -446860935, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/1.0__initial.sql index 9b0587dc3..871dfe2de 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/1.0__initial.sql @@ -137,6 +137,17 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table `table` ( + `index` varchar(255) not null comment 'this is a comment', + `from` varchar(255), + `to` varchar(255), + `varchar` varchar(255), + `foreign` varchar(255), + constraint uq_table_to unique (`to`), + constraint uq_table_varchar unique (`varchar`), + constraint pk_table primary key (`index`) +); + create table migtest_mtm_c ( id integer auto_increment not null, name varchar(255), @@ -162,6 +173,7 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table `table` add system versioning; alter table migtest_e_history2 add system versioning; alter table migtest_e_history3 add system versioning; alter table migtest_e_history4 add system versioning; @@ -177,5 +189,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on `table` (`foreign`); +alter table `table` add constraint fk_table_foreign foreign key (`foreign`) references `table` (`index`) on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on `table` (`from`); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/1.1.sql index eb8551ab3..a47607fa6 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/1.1.sql @@ -43,6 +43,7 @@ SET @@system_versioning_alter_history = 1; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table `table` add column `select` varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -77,6 +78,7 @@ alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); alter table migtest_e_history comment = 'We have history now'; +alter table `table` add constraint uq_table_select unique (`select`); -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/idx_mariadb.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/idx_mariadb.migrations index 1d88de14f..241588a15 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/idx_mariadb.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mariadb/idx_mariadb.migrations @@ -1,6 +1,6 @@ 1835064798, I__create_procs.sql -1992643861, 1.0__initial.sql --1677772226, 1.1.sql +675320779, 1.0__initial.sql +840323734, 1.1.sql 2123392915, 1.2__dropsFor_1.1.sql -1470028617, 1.3.sql -692020559, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.0__initial.model.xml b/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.0__initial.model.xml index 9ff836afb..001f3797f 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.0__initial.model.xml +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.0__initial.model.xml @@ -100,6 +100,15 @@ + + + + + + + + + @@ -118,6 +127,7 @@ + diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.1.model.xml b/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.1.model.xml index 157488bc3..410615793 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.1.model.xml +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.1.model.xml @@ -71,6 +71,11 @@ + + + + + diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.3.model.xml b/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.3.model.xml index 25c5fedb2..1c266ccae 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.3.model.xml +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/model/1.3.model.xml @@ -40,6 +40,7 @@ + diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql index d7110e23e..1f9cffbb1 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql @@ -137,6 +137,17 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table `table` ( + `index` varchar(255) not null comment 'this is a comment', + `from` varchar(255), + `to` varchar(255), + `varchar` varchar(255), + `foreign` varchar(255), + constraint uq_table_to unique (`to`), + constraint uq_table_varchar unique (`varchar`), + constraint pk_table primary key (`index`) +); + create table migtest_mtm_c ( id integer auto_increment not null, name varchar(255), @@ -162,6 +173,8 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table `table` add column sys_period_start datetime(6) default now(6); +alter table `table` add column sys_period_end datetime(6); alter table migtest_e_history2 add column sys_period_start datetime(6) default now(6); alter table migtest_e_history2 add column sys_period_end datetime(6); alter table migtest_e_history3 add column sys_period_start datetime(6) default now(6); @@ -271,6 +284,28 @@ create trigger migtest_e_history6_history_del before delete on migtest_e_history end$$ unlock tables; +create table table_history( + "index" varchar(255), + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + sys_period_start datetime(6), + sys_period_end datetime(6) +); +create view table_with_history as select * from "table" union all select * from table_history; +lock tables "table" write; +delimiter $$ +create trigger table_history_upd before update on "table" for each row begin + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); + set NEW.sys_period_start = now(6); +end$$ +delimiter $$ +create trigger table_history_del before delete on "table" for each row begin + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); +end$$ +unlock tables; + -- 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; @@ -281,5 +316,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on `table` (`foreign`); +alter table `table` add constraint fk_table_foreign foreign key (`foreign`) references `table` (`index`) on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on `table` (`from`); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql index b006574e9..a310948ea 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql @@ -56,7 +56,11 @@ update migtest_e_history6 set test_number1 = 42 where test_number1 is null; drop trigger migtest_e_history6_history_upd; drop trigger migtest_e_history6_history_del; drop view migtest_e_history6_with_history; +drop trigger table_history_upd; +drop trigger table_history_del; +drop view table_with_history; -- apply alter tables +alter table `table` add column `select` varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -88,6 +92,7 @@ alter table migtest_e_history6 modify test_number2 integer; alter table migtest_e_history6_history modify test_number2 integer; alter table migtest_e_softdelete add column deleted tinyint(1) default 0 not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column `select` varchar(255); -- apply post alter alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description); -- NOTE: table has @History - special migration may be necessary @@ -177,6 +182,19 @@ create trigger migtest_e_history6_history_del before delete on migtest_e_history insert into migtest_e_history6_history (sys_period_start,sys_period_end,id, test_number1, test_number2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number1, OLD.test_number2); end$$ unlock tables; +create view table_with_history as select * from "table" union all select * from table_history; +lock tables "table" write; +delimiter $$ +create trigger table_history_upd before update on "table" for each row begin + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); + set NEW.sys_period_start = now(6); +end$$ +delimiter $$ +create trigger table_history_del before delete on "table" for each row begin + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); +end$$ +unlock tables; +alter table `table` add constraint uq_table_select unique (`select`); -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations index 1cc1f5865..cd0db5cbe 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations @@ -1,6 +1,6 @@ 1835064798, I__create_procs.sql -1531575623, 1.0__initial.sql -418413355, 1.1.sql +-2109016895, 1.0__initial.sql +-2062071756, 1.1.sql -1332434945, 1.2__dropsFor_1.1.sql -105506677, 1.3.sql 379252952, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql index f3da85ec0..6a76c8b5c 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql @@ -137,6 +137,17 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table `table` ( + `index` varchar(255) not null comment 'this is a comment', + `from` varchar(255), + `to` varchar(255), + `varchar` varchar(255), + `foreign` varchar(255), + constraint uq_table_to unique (`to`), + constraint uq_table_varchar unique (`varchar`), + constraint pk_table primary key (`index`) +); + create table migtest_mtm_c ( id integer auto_increment not null, name varchar(255), @@ -162,6 +173,8 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table `table` add column sys_period_start datetime(6) default now(6); +alter table `table` add column sys_period_end datetime(6); alter table migtest_e_history2 add column sys_period_start datetime(6) default now(6); alter table migtest_e_history2 add column sys_period_end datetime(6); alter table migtest_e_history3 add column sys_period_start datetime(6) default now(6); @@ -271,6 +284,28 @@ create trigger migtest_e_history6_history_del before delete on migtest_e_history end$$ unlock tables; +create table table_history( + "index" varchar(255), + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + sys_period_start datetime(6), + sys_period_end datetime(6) +); +create view table_with_history as select * from "table" union all select * from table_history; +lock tables "table" write; +delimiter $$ +create trigger table_history_upd before update on "table" for each row begin + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); + set NEW.sys_period_start = now(6); +end$$ +delimiter $$ +create trigger table_history_del before delete on "table" for each row begin + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); +end$$ +unlock tables; + -- 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; @@ -281,5 +316,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on `table` (`foreign`); +alter table `table` add constraint fk_table_foreign foreign key (`foreign`) references `table` (`index`) on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on `table` (`from`); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql index b006574e9..a310948ea 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql @@ -56,7 +56,11 @@ update migtest_e_history6 set test_number1 = 42 where test_number1 is null; drop trigger migtest_e_history6_history_upd; drop trigger migtest_e_history6_history_del; drop view migtest_e_history6_with_history; +drop trigger table_history_upd; +drop trigger table_history_del; +drop view table_with_history; -- apply alter tables +alter table `table` add column `select` varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -88,6 +92,7 @@ alter table migtest_e_history6 modify test_number2 integer; alter table migtest_e_history6_history modify test_number2 integer; alter table migtest_e_softdelete add column deleted tinyint(1) default 0 not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column `select` varchar(255); -- apply post alter alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description); -- NOTE: table has @History - special migration may be necessary @@ -177,6 +182,19 @@ create trigger migtest_e_history6_history_del before delete on migtest_e_history insert into migtest_e_history6_history (sys_period_start,sys_period_end,id, test_number1, test_number2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number1, OLD.test_number2); end$$ unlock tables; +create view table_with_history as select * from "table" union all select * from table_history; +lock tables "table" write; +delimiter $$ +create trigger table_history_upd before update on "table" for each row begin + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); + set NEW.sys_period_start = now(6); +end$$ +delimiter $$ +create trigger table_history_del before delete on "table" for each row begin + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, now(6),OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); +end$$ +unlock tables; +alter table `table` add constraint uq_table_select unique (`select`); -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations index 6c192bb8e..229084523 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations @@ -1,6 +1,6 @@ 1835064798, I__create_procs.sql -1425786329, 1.0__initial.sql -418413355, 1.1.sql +-73920359, 1.0__initial.sql +-2062071756, 1.1.sql -1332434945, 1.2__dropsFor_1.1.sql -105506677, 1.3.sql 379252952, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/1.0__initial.sql index 568e5bb21..b9c859753 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/1.0__initial.sql @@ -140,6 +140,17 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); + create table migtest_mtm_c ( id integer generated by default as identity not null, name varchar(255), @@ -165,6 +176,8 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table "table" add column sys_period_start datetime(6) default now(); +alter table "table" add column sys_period_end datetime(6); alter table migtest_e_history2 add column sys_period_start datetime(6) default now(); alter table migtest_e_history2 add column sys_period_end datetime(6); alter table migtest_e_history3 add column sys_period_start datetime(6) default now(); @@ -284,6 +297,30 @@ end_trigger; $$ +create table table_history( + "index" varchar(255), + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + sys_period_start datetime(6), + sys_period_end datetime(6) +); +create view table_with_history as select * from "table" union all select * from table_history; +delimiter $$ +create or replace trigger table_history_upd for "table" before update for each row as + NEW.sys_period_start = greatest(current_timestamp, date_add(OLD.sys_period_start, interval 1 microsecond)); + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, NEW.sys_period_start,OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); +end_trigger; +$$ + +delimiter $$ +create or replace trigger table_history_del for "table" before delete for each row as + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "foreign") values (OLD.sys_period_start, NEW.sys_period_start,OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); +end_trigger; +$$ + + -- 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; @@ -294,5 +331,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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); +create index ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index"); + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/1.1.sql index b618a9587..7fff62c51 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/1.1.sql @@ -59,7 +59,11 @@ update migtest_e_history6 set test_number1 = 42 where test_number1 is null; drop trigger migtest_e_history6_history_upd; drop trigger migtest_e_history6_history_del; drop view migtest_e_history6_with_history; +drop trigger table_history_upd; +drop trigger table_history_del; +drop view table_with_history; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -97,6 +101,7 @@ alter table migtest_e_history6 alter column test_number2 set null; alter table migtest_e_history6_history alter column test_number2 set null; alter table migtest_e_softdelete add column deleted boolean default false not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column "select" varchar(255); -- apply post alter alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description); @@ -199,6 +204,21 @@ create or replace trigger migtest_e_history6_history_del for migtest_e_history6 end_trigger; $$ +create view table_with_history as select * from "table" union all select * from table_history; +delimiter $$ +create or replace trigger table_history_upd for "table" before update for each row as + NEW.sys_period_start = greatest(current_timestamp, date_add(OLD.sys_period_start, interval 1 microsecond)); + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, NEW.sys_period_start,OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); +end_trigger; +$$ + +delimiter $$ +create or replace trigger table_history_del for "table" before delete for each row as + insert into table_history (sys_period_start,sys_period_end,"index", "from", "to", "varchar", "select", "foreign") values (OLD.sys_period_start, NEW.sys_period_start,OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); +end_trigger; +$$ + +alter table "table" add constraint uq_table_select unique ("select"); -- 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); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/idx_nuodb.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/idx_nuodb.migrations index d3d0fd96b..51fdb15a3 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/idx_nuodb.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/nuodb/idx_nuodb.migrations @@ -1,5 +1,5 @@ -1842042513, 1.0__initial.sql --1628340454, 1.1.sql +-357978944, 1.0__initial.sql +1244774121, 1.1.sql -424253630, 1.2__dropsFor_1.1.sql -1988156517, 1.3.sql -1189704269, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.0__initial.sql index 528727be2..02c9883f7 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.0__initial.sql @@ -140,6 +140,18 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar2(255) not null, + "from" varchar2(255), + "to" varchar2(255), + "varchar" varchar2(255), + "foreign" varchar2(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id number(10) generated by default as identity not null, name varchar2(255), @@ -174,5 +186,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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); +create index ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index"); + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.1.sql index 662e1dd33..2dc2c5aff 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.1.sql @@ -90,6 +90,7 @@ update migtest_e_history2 set test_string = 'unknown' where test_string is null; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table "table" add "select" varchar2(255); alter table migtest_ckey_detail add one_key number(10); alter table migtest_ckey_detail add two_key varchar2(127); alter table migtest_ckey_parent add assoc_id number(10); @@ -132,6 +133,8 @@ alter table migtest_e_basic add constraint ck_migtest_e_basic_progress check ( p -- NOT YET IMPLEMENTED: alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); 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'; +comment on column "table"."index" is 'this is an other comment'; +-- NOT YET IMPLEMENTED: alter table "table" add constraint uq_table_select unique ("select"); -- foreign keys and indices create index ix_mgtst_mtm_c_mgtst_mt_3ug4ok on migtest_mtm_c_migtest_mtm_m (migtest_mtm_c_id); alter table migtest_mtm_c_migtest_mtm_m add constraint fk_mgtst_mtm_c_mgtst_mt_93awga foreign key (migtest_mtm_c_id) references migtest_mtm_c (id); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.3.sql index 38dad644b..e84773a9b 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/1.3.sql @@ -137,6 +137,7 @@ alter table migtest_e_basic add constraint ck_migtest_e_basic_status2 check ( st 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 ''; +comment on column "table"."index" is 'this is a comment'; -- 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; 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/idx_oracle.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/idx_oracle.migrations index 0176dd762..c00b2991b 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/idx_oracle.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle/idx_oracle.migrations @@ -1,7 +1,7 @@ -2058445079, 1.0__initial.sql --406177058, 1.1.sql +-2071028889, 1.0__initial.sql +-1556388339, 1.1.sql -582436324, 1.2__dropsFor_1.1.sql -245787021, 1.3.sql +-712179623, 1.3.sql 663051206, 1.4__dropsFor_1.3.sql 1357801733, R__oracle_only_views.sql 561281075, R__order_views.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.0__initial.sql index 4daef7bce..d978faf0e 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.0__initial.sql @@ -158,6 +158,18 @@ create table migtest_e_softdelete ( ); create sequence migtest_e_softdelete_seq; +create table "table" ( + "index" varchar2(255) not null, + "from" varchar2(255), + "to" varchar2(255), + "varchar" varchar2(255), + "foreign" varchar2(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id number(10) not null, name varchar2(255), @@ -196,5 +208,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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); +create index ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index"); + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.1.sql index d5c198c6b..ef694fac8 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.1.sql @@ -91,6 +91,7 @@ update migtest_e_history2 set test_string = 'unknown' where test_string is null; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table "table" add "select" varchar2(255); alter table migtest_ckey_detail add one_key number(10); alter table migtest_ckey_detail add two_key varchar2(127); alter table migtest_ckey_parent add assoc_id number(10); @@ -133,6 +134,8 @@ alter table migtest_e_basic add constraint ck_migtest_e_basic_progress check ( p -- NOT YET IMPLEMENTED: alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); 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'; +comment on column "table"."index" is 'this is an other comment'; +-- NOT YET IMPLEMENTED: alter table "table" add constraint uq_table_select unique ("select"); -- foreign keys and indices create index ix_mgtst_mtm_c_mgtst_mt_3ug4ok on migtest_mtm_c_migtest_mtm_m (migtest_mtm_c_id); alter table migtest_mtm_c_migtest_mtm_m add constraint fk_mgtst_mtm_c_mgtst_mt_93awga foreign key (migtest_mtm_c_id) references migtest_mtm_c (id); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.3.sql index f4ea1b1ee..5c7882368 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/1.3.sql @@ -138,6 +138,7 @@ alter table migtest_e_basic add constraint ck_migtest_e_basic_status2 check ( st 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 ''; +comment on column "table"."index" is 'this is a comment'; -- 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; 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/idx_oracle.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/idx_oracle.migrations index 163871480..09ea3293a 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/idx_oracle.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/oracle11/idx_oracle.migrations @@ -1,7 +1,7 @@ --1132728964, 1.0__initial.sql -1635736608, 1.1.sql +-1110489114, 1.0__initial.sql +1800537955, 1.1.sql -582436324, 1.2__dropsFor_1.1.sql -2103586605, 1.3.sql +-253819510, 1.3.sql 663051206, 1.4__dropsFor_1.3.sql 1357801733, R__oracle_only_views.sql 561281075, R__order_views.sql 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 9e0e21cbc..65e967ce4 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 @@ -140,6 +140,18 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer generated by default as identity not null, name varchar(255), @@ -165,6 +177,7 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table "table" add column sys_period tstzrange not null default tstzrange(current_timestamp, null); alter table migtest_e_history2 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); alter table migtest_e_history3 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); alter table migtest_e_history4 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); @@ -296,6 +309,31 @@ create trigger migtest_e_history6_history_upd for each row execute procedure migtest_e_history6_history_version(); +create table table_history(like "table"); +create view table_with_history as select * from "table" union all select * from table_history; +create or replace function table_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 table_history (sys_period,"index", "from", "to", "varchar", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into table_history (sys_period,"index", "from", "to", "varchar", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger table_history_upd + before update or delete on "table" + for each row execute procedure table_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; @@ -306,8 +344,12 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") 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_table_from on "table" ("from"); 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 7d7940d6c..b513afc92 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 @@ -69,7 +69,12 @@ drop trigger if exists migtest_e_history6_history_upd on migtest_e_history6 casc drop function if exists migtest_e_history6_history_version(); drop view migtest_e_history6_with_history; +drop trigger if exists table_history_upd on "table" cascade; +drop function if exists table_history_version(); + +drop view table_with_history; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -106,6 +111,7 @@ alter table migtest_e_history6 alter column test_number2 drop not null; alter table migtest_e_history6_history alter column test_number2 drop not null; alter table migtest_e_softdelete add column deleted boolean default false not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column "select" varchar(255); -- apply post alter alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description); @@ -259,6 +265,31 @@ 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(); +comment on column "table"."index" is 'this is an other comment'; +create view table_with_history as select * from "table" union all select * from table_history; +create or replace function table_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 table_history (sys_period,"index", "from", "to", "varchar", "select", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into table_history (sys_period,"index", "from", "to", "varchar", "select", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger table_history_upd + before update or delete on "table" + for each row execute procedure table_history_version(); + +alter table "table" add constraint uq_table_select unique ("select"); -- 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; 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 40c43d938..7ce64dc07 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 @@ -178,6 +178,7 @@ 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(); +comment on column "table"."index" is 'this is a comment'; -- 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; 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 e62ed906f..c226913cb 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,7 +1,7 @@ --1277453273, 1.0__initial.sql --2141665406, 1.1.sql +-1738052304, 1.0__initial.sql +376807442, 1.1.sql -1098989118, 1.2__dropsFor_1.1.sql -199465792, 1.3.sql +691388965, 1.3.sql 1729345905, 1.4__dropsFor_1.3.sql 783227075, R__multi_comments.sql 561281075, R__order_views.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 e088febde..c07f369a7 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 @@ -140,6 +140,18 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id serial not null, name varchar(255), @@ -165,6 +177,7 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table "table" add column sys_period tstzrange not null default tstzrange(current_timestamp, null); alter table migtest_e_history2 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); alter table migtest_e_history3 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); alter table migtest_e_history4 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); @@ -296,6 +309,31 @@ create trigger migtest_e_history6_history_upd for each row execute procedure migtest_e_history6_history_version(); +create table table_history(like "table"); +create view table_with_history as select * from "table" union all select * from table_history; +create or replace function table_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 table_history (sys_period,"index", "from", "to", "varchar", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into table_history (sys_period,"index", "from", "to", "varchar", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger table_history_upd + before update or delete on "table" + for each row execute procedure table_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; @@ -306,8 +344,12 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") 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_table_from on "table" ("from"); 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 6622865e2..506c0fd73 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 @@ -69,7 +69,12 @@ drop trigger if exists migtest_e_history6_history_upd on migtest_e_history6 casc drop function if exists migtest_e_history6_history_version(); drop view migtest_e_history6_with_history; +drop trigger if exists table_history_upd on "table" cascade; +drop function if exists table_history_version(); + +drop view table_with_history; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -106,6 +111,7 @@ alter table migtest_e_history6 alter column test_number2 drop not null; alter table migtest_e_history6_history alter column test_number2 drop not null; alter table migtest_e_softdelete add column deleted boolean default false not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column "select" varchar(255); -- apply post alter alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description); @@ -259,6 +265,31 @@ 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(); +comment on column "table"."index" is 'this is an other comment'; +create view table_with_history as select * from "table" union all select * from table_history; +create or replace function table_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 table_history (sys_period,"index", "from", "to", "varchar", "select", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into table_history (sys_period,"index", "from", "to", "varchar", "select", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger table_history_upd + before update or delete on "table" + for each row execute procedure table_history_version(); + +alter table "table" add constraint uq_table_select unique ("select"); -- 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; 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 aa87d0936..96a61e00a 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 @@ -178,6 +178,7 @@ 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(); +comment on column "table"."index" is 'this is a comment'; -- 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; 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 753ebe59c..d3179797a 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,7 +1,7 @@ -1678831678, 1.0__initial.sql --1261465039, 1.1.sql +1809459793, 1.0__initial.sql +-533983703, 1.1.sql -1098989118, 1.2__dropsFor_1.1.sql -39355920, 1.3.sql +376154634, 1.3.sql 1729345905, 1.4__dropsFor_1.3.sql 783227075, R__multi_comments.sql 561281075, R__order_views.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.0__initial.sql index 4b0911a54..40060b094 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.0__initial.sql @@ -140,6 +140,18 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer auto_increment not null, name varchar(255), @@ -174,5 +186,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict; + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.1.sql index 41b8f5b80..2541938d3 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.1.sql @@ -45,6 +45,7 @@ update migtest_e_history2 set test_string = 'unknown' where test_string is null; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -87,6 +88,8 @@ 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); 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'; +comment on column "table"."index" is 'this is an other comment'; +alter table "table" add constraint uq_table_select unique ("select"); -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.3.sql index db54a5526..384260c79 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.3.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/1.3.sql @@ -65,6 +65,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 ''; +comment on column "table"."index" is 'this is a comment'; -- 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; diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/idx_sqlanywhere.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/idx_sqlanywhere.migrations index 2b9baab48..ea4b69483 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/idx_sqlanywhere.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlanywhere/idx_sqlanywhere.migrations @@ -1,6 +1,6 @@ -874272908, 1.0__initial.sql -1253219479, 1.1.sql +322064344, 1.0__initial.sql +1152745318, 1.1.sql 1279151426, 1.2__dropsFor_1.1.sql --894462776, 1.3.sql +-1467142599, 1.3.sql 80209848, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/1.0__initial.sql index 0f53a01bf..446fda37e 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/1.0__initial.sql @@ -143,6 +143,18 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index"), + foreign key ("foreign") references "table" ("index") on delete restrict on update restrict +); + create table migtest_mtm_c ( id integer not null, name varchar(255), @@ -170,3 +182,4 @@ create table migtest_oto_master ( -- foreign keys and indices create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on "table" ("from"); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/1.1.sql index 873ee0334..1b1d797e6 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/1.1.sql @@ -50,6 +50,7 @@ update migtest_e_history2 set test_string = 'unknown' where test_string is null; -- NOTE: table has @History - special migration may be necessary update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -89,6 +90,7 @@ update migtest_e_basic set new_boolean_field = old_boolean; -- not supported: alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name); -- not supported: alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4); -- not supported: alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5); +-- not supported: alter table "table" add constraint uq_table_select unique ("select"); -- foreign keys and indices -- not supported: alter table migtest_ckey_detail add constraint fk_migtest_ckey_detail_parent foreign key (one_key,two_key) references migtest_ckey_parent (one_key,two_key) on delete restrict on update restrict; create index ix_migtest_ckey_parent_assoc_id on migtest_ckey_parent (assoc_id); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/idx_sqlite.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/idx_sqlite.migrations index 24bda4a35..75273e48d 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/idx_sqlite.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlite/idx_sqlite.migrations @@ -1,5 +1,5 @@ --280067147, 1.0__initial.sql -1471316137, 1.1.sql +587945719, 1.0__initial.sql +-752421071, 1.1.sql 1279151426, 1.2__dropsFor_1.1.sql 18475685, 1.3.sql 80209848, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/1.0__initial.sql index aca71555c..0ceba76cc 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/1.0__initial.sql @@ -137,6 +137,15 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table [table] ( + [index] varchar(255) not null, + [from] varchar(255), + [to] varchar(255), + [varchar] varchar(255), + [foreign] varchar(255), + constraint pk_table primary key ([index]) +); + create table migtest_mtm_c ( id integer identity(1,1) not null, name varchar(255), @@ -190,6 +199,13 @@ alter table migtest_e_history6 period for system_time (sys_periodFrom, sys_periodTo); alter table migtest_e_history6 set (system_versioning = on (history_table=dbo.migtest_e_history6_history)); alter table migtest_e_ref add constraint uq_migtest_e_ref_name unique (name); +create unique nonclustered index uq_table_to on "table"("to") where "to" is not null; +create unique nonclustered index uq_table_varchar on "table"("varchar") where "varchar" is not null; +alter table [table] + add sys_periodFrom datetime2 GENERATED ALWAYS AS ROW START NOT NULL DEFAULT SYSUTCDATETIME(), + sys_periodTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL DEFAULT '9999-12-31T23:59:59.9999999', +period for system_time (sys_periodFrom, sys_periodTo); +alter table "table" set (system_versioning = on (history_table=dbo.table_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; @@ -200,5 +216,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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); +create index ix_table_foreign on [table] ([foreign]); +alter table [table] add constraint fk_table_foreign foreign key ([foreign]) references [table] ([index]); + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on [table] ([from]); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/1.1.sql index b731e5830..7552a3c6b 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/1.1.sql @@ -61,7 +61,11 @@ update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- alter table migtest_e_history6 set (system_versioning = off (history_table=dbo.migtest_e_history6_history)); -- history migration goes here -- alter table migtest_e_history6 set (system_versioning = on (history_table=dbo.migtest_e_history6_history)); +-- alter table [table] set (system_versioning = off (history_table=dbo.table_history)); +-- history migration goes here +-- alter table [table] set (system_versioning = on (history_table=dbo.table_history)); -- apply alter tables +alter table [table] add [select] varchar(255); alter table migtest_ckey_detail add one_key integer; alter table migtest_ckey_detail add two_key varchar(127); alter table migtest_ckey_parent add assoc_id integer; @@ -109,6 +113,7 @@ alter table migtest_e_history sys_periodTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL DEFAULT '9999-12-31T23:59:59.9999999', period for system_time (sys_periodFrom, sys_periodTo); alter table migtest_e_history set (system_versioning = on (history_table=dbo.migtest_e_history_history)); +create unique nonclustered index uq_table_select on "table"("select") where "select" is not null; -- 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); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/idx_sqlserver.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/idx_sqlserver.migrations index a8f498f63..0e3158837 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/idx_sqlserver.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver16/idx_sqlserver.migrations @@ -1,6 +1,6 @@ -2122378240, I__create_procs.sql -1442928133, 1.0__initial.sql -168980248, 1.1.sql +-177269726, 1.0__initial.sql +708685501, 1.1.sql -1687762822, 1.2__dropsFor_1.1.sql 155669224, 1.3.sql -410961452, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/1.0__initial.sql index df4dfb099..df8c1c702 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/1.0__initial.sql @@ -155,6 +155,15 @@ create table migtest_e_softdelete ( ); create sequence migtest_e_softdelete_seq as bigint start with 1; +create table [table] ( + [index] nvarchar(255) not null, + [from] nvarchar(255), + [to] nvarchar(255), + [varchar] nvarchar(255), + [foreign] nvarchar(255), + constraint pk_table primary key ([index]) +); + create table migtest_mtm_c ( id integer not null, name nvarchar(255), @@ -212,6 +221,13 @@ alter table migtest_e_history6 period for system_time (sys_periodFrom, sys_periodTo); alter table migtest_e_history6 set (system_versioning = on (history_table=dbo.migtest_e_history6_history)); alter table migtest_e_ref add constraint uq_migtest_e_ref_name unique (name); +create unique nonclustered index uq_table_to on "table"("to") where "to" is not null; +create unique nonclustered index uq_table_varchar on "table"("varchar") where "varchar" is not null; +alter table [table] + add sys_periodFrom datetime2 GENERATED ALWAYS AS ROW START NOT NULL DEFAULT SYSUTCDATETIME(), + sys_periodTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL DEFAULT '9999-12-31T23:59:59.9999999', +period for system_time (sys_periodFrom, sys_periodTo); +alter table "table" set (system_versioning = on (history_table=dbo.table_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; @@ -222,5 +238,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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); +create index ix_table_foreign on [table] ([foreign]); +alter table [table] add constraint fk_table_foreign foreign key ([foreign]) references [table] ([index]); + create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1); create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5); +create index ix_table_from on [table] ([from]); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/1.1.sql index ae85f459d..91fdef093 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/1.1.sql @@ -62,7 +62,11 @@ update migtest_e_history6 set test_number1 = 42 where test_number1 is null; -- alter table migtest_e_history6 set (system_versioning = off (history_table=dbo.migtest_e_history6_history)); -- history migration goes here -- alter table migtest_e_history6 set (system_versioning = on (history_table=dbo.migtest_e_history6_history)); +-- alter table [table] set (system_versioning = off (history_table=dbo.table_history)); +-- history migration goes here +-- alter table [table] set (system_versioning = on (history_table=dbo.table_history)); -- apply alter tables +alter table [table] add [select] nvarchar(255); alter table migtest_ckey_detail add one_key integer; alter table migtest_ckey_detail add two_key nvarchar(127); alter table migtest_ckey_parent add assoc_id integer; @@ -110,6 +114,7 @@ alter table migtest_e_history sys_periodTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL DEFAULT '9999-12-31T23:59:59.9999999', period for system_time (sys_periodFrom, sys_periodTo); alter table migtest_e_history set (system_versioning = on (history_table=dbo.migtest_e_history_history)); +create unique nonclustered index uq_table_select on "table"("select") where "select" is not null; -- 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); diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/idx_sqlserver.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/idx_sqlserver.migrations index eaaded292..0da8bb066 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/idx_sqlserver.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/sqlserver17/idx_sqlserver.migrations @@ -1,6 +1,6 @@ -2122378240, I__create_procs.sql --199159570, 1.0__initial.sql -2140869743, 1.1.sql +1239366592, 1.0__initial.sql +1829437030, 1.1.sql -1687762822, 1.2__dropsFor_1.1.sql -476460378, 1.3.sql -410961452, 1.4__dropsFor_1.3.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 159a176d6..8cdb3c45a 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 @@ -140,6 +140,18 @@ create table migtest_e_softdelete ( constraint pk_migtest_e_softdelete primary key (id) ); +create table "table" ( + "index" varchar(255) not null, + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + constraint uq_table_to unique ("to"), + constraint uq_table_varchar unique ("varchar"), + constraint pk_table primary key ("index") +); +comment on column "table"."index" is 'this is a comment'; + create table migtest_mtm_c ( id integer generated by default as identity not null, name varchar(255), @@ -165,6 +177,7 @@ create table migtest_oto_master ( ); -- apply alter tables +alter table "table" add column sys_period tstzrange not null default tstzrange(current_timestamp, null); alter table migtest_e_history2 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); alter table migtest_e_history3 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); alter table migtest_e_history4 add column sys_period tstzrange not null default tstzrange(current_timestamp, null); @@ -319,6 +332,38 @@ create trigger migtest_e_history6_history_upd for each row execute procedure migtest_e_history6_history_version(); +create table table_history( + "index" varchar(255), + "from" varchar(255), + "to" varchar(255), + "varchar" varchar(255), + "foreign" varchar(255), + sys_period tstzrange +); +create view table_with_history as select * from "table" union all select * from table_history; +create or replace function table_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 table_history (sys_period,"index", "from", "to", "varchar", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into table_history (sys_period,"index", "from", "to", "varchar", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."foreign"); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger table_history_upd + before update or delete on "table" + for each row execute procedure table_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; @@ -329,5 +374,9 @@ alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id for 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 ix_table_foreign on "table" ("foreign"); +alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") 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_table_from on "table" ("from"); 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 55a97ccb3..d9fa995a0 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 @@ -64,7 +64,12 @@ drop trigger if exists migtest_e_history6_history_upd on migtest_e_history6 casc drop function if exists migtest_e_history6_history_version(); drop view migtest_e_history6_with_history; +drop trigger if exists table_history_upd on "table" cascade; +drop function if exists table_history_version(); + +drop view table_with_history; -- apply alter tables +alter table "table" add column "select" varchar(255); alter table migtest_ckey_detail add column one_key integer; alter table migtest_ckey_detail add column two_key varchar(127); alter table migtest_ckey_parent add column assoc_id integer; @@ -101,6 +106,7 @@ alter table migtest_e_history6 alter column test_number2 drop not null; alter table migtest_e_history6_history alter column test_number2 drop not null; alter table migtest_e_softdelete add column deleted boolean default false not null; alter table migtest_oto_child add column master_id bigint; +alter table table_history add column "select" varchar(255); -- apply post alter alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?')); alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description); @@ -258,6 +264,31 @@ 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(); +comment on column "table"."index" is 'this is an other comment'; +create view table_with_history as select * from "table" union all select * from table_history; +create or replace function table_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 table_history (sys_period,"index", "from", "to", "varchar", "select", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); + NEW.sys_period = tstzrange(upperTs,null); + return new; + elsif (TG_OP = 'DELETE') then + insert into table_history (sys_period,"index", "from", "to", "varchar", "select", "foreign") values (tstzrange(lowerTs,upperTs), OLD."index", OLD."from", OLD."to", OLD."varchar", OLD."select", OLD."foreign"); + return old; + end if; +end; +$$ LANGUAGE plpgsql; + +create trigger table_history_upd + before update or delete on "table" + for each row execute procedure table_history_version(); + +alter table "table" add constraint uq_table_select unique ("select"); -- 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; 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 997d95033..29fb9e62b 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 @@ -178,6 +178,7 @@ 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(); +comment on column "table"."index" is 'this is a comment'; -- 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; 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 df428d942..05f50b829 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 @@ -1817007763, 1.0__initial.sql --2145787580, 1.1.sql +-967136529, 1.0__initial.sql +-1547662237, 1.1.sql -1098989118, 1.2__dropsFor_1.1.sql -30606484, 1.3.sql +1877712595, 1.3.sql 1729345905, 1.4__dropsFor_1.3.sql 561281075, R__order_views.sql From 2a924d8d3226ea279db23f615643abfa89c42d7d Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 15:01:43 +0100 Subject: [PATCH 10/15] Add more quotes, for history tables --- .../platform/DbTriggerBasedHistoryDdl.java | 12 ++++++++---- .../ddlgeneration/platform/H2HistoryDdl.java | 2 +- .../ddlgeneration/platform/PlatformDdl.java | 18 ++++++++++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java index ab8723609..f46dd6977 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java @@ -127,11 +127,11 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { } protected String historyTableName(String baseTableName) { - return normalise(baseTableName) + historySuffix; + return quote(normalise(baseTableName) + historySuffix); } protected String historyViewName(String baseTableName) { - return normalise(baseTableName) + viewSuffix; + return quote(normalise(baseTableName) + viewSuffix); } protected String procedureName(String baseTableName) { @@ -193,7 +193,7 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { String platformType = platformDdl.convert(type); buffer.append(" "); - buffer.append(columnName, 29); + buffer.append(quote(columnName), 29); buffer.append(platformType); } @@ -201,7 +201,7 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { apply .append("create view ").append(historyViewName(baseTableName)) - .append(" as select * from ").append(baseTableName) + .append(" as select * from ").append(quote(baseTableName)) .append(" union all select * from ").append(historyTableName(baseTableName)) .endOfStatement(); } @@ -268,4 +268,8 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { public boolean alterHistoryTables() { return true; } + + protected String quote(String dbName) { + return platformDdl.quote(dbName); + } } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java index 7e5d2aa87..5f45ee2f7 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java @@ -31,7 +31,7 @@ public class H2HistoryDdl extends DbTriggerBasedHistoryDdl { // Note that this does not take into account the historyTable name (excepts _history suffix) and // does not take into account excluded columns (all columns included in history) apply - .append("create trigger ").append(triggerName).append(" before update,delete on ").append(baseTable) + .append("create trigger ").append(triggerName).append(" before update,delete on ").append(quote(baseTable)) .append(" for each row call \"" + TRIGGER_CLASS + "\";").newLine(); } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java index 3141ca3fb..7807d9252 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java @@ -20,12 +20,17 @@ import io.ebeaninternal.dbmigration.model.MTable; import java.util.List; import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Controls the DDL generation for a specific database platform. */ public class PlatformDdl { + // matches on pattern "check ( COLUMNAME ... )". ColumnName is match group 2; + private static final Pattern CHECK_PATTERN = Pattern.compile("(.*?\\( *)([^ ]+)(.*)"); + protected final DatabasePlatform platform; protected PlatformHistoryDdl historyDdl = new NoHistorySupportDdl(); @@ -278,7 +283,7 @@ public class PlatformDdl { * Returns the check constraint. */ public String createCheckConstraint(String ckName, String checkConstraint) { - return " constraint " + maxConstraintName(ckName) + " " + checkConstraint; + return " constraint " + maxConstraintName(ckName) + " " + quoteCheckConstraint(checkConstraint); } /** @@ -612,9 +617,10 @@ public class PlatformDdl { * Alter table adding the check constraint. */ public String alterTableAddCheckConstraint(String tableName, String checkConstraintName, String checkConstraint) { - return "alter table " + quote(tableName) + " " + addConstraint + " " + maxConstraintName(checkConstraintName) + " " + checkConstraint; + return "alter table " + quote(tableName) + " " + addConstraint + " " + maxConstraintName(checkConstraintName) + " " + quoteCheckConstraint(checkConstraint); } + /** * Alter column setting the default value. *

@@ -782,4 +788,12 @@ public class PlatformDdl { return platform.convertQuotedIdentifiers(dbName); } + protected String quoteCheckConstraint(String checkConstraint) { + Matcher matcher = CHECK_PATTERN.matcher(checkConstraint); + if (matcher.matches()) { + return matcher.replaceFirst("$1" + quote(matcher.group(2)) + "$3"); + } + return checkConstraint; + } + } From 0d765d65837cf363a93fa4a8be92d5d9a14d0ac8 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 15:02:06 +0100 Subject: [PATCH 11/15] Reference scripts --- .../migrationtest/dbmigration/mysql/1.0__initial.sql | 12 ++++++------ .../migrationtest/dbmigration/mysql/1.1.sql | 2 +- .../dbmigration/mysql/idx_mysql.migrations | 4 ++-- .../dbmigration/mysql55/1.0__initial.sql | 12 ++++++------ .../migrationtest/dbmigration/mysql55/1.1.sql | 2 +- .../dbmigration/mysql55/idx_mysql.migrations | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql index 1f9cffbb1..99d169187 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.0__initial.sql @@ -285,15 +285,15 @@ end$$ unlock tables; create table table_history( - "index" varchar(255), - "from" varchar(255), - "to" varchar(255), - "varchar" varchar(255), - "foreign" varchar(255), + `index` varchar(255), + `from` varchar(255), + `to` varchar(255), + `varchar` varchar(255), + `foreign` varchar(255), sys_period_start datetime(6), sys_period_end datetime(6) ); -create view table_with_history as select * from "table" union all select * from table_history; +create view table_with_history as select * from `table` union all select * from table_history; lock tables "table" write; delimiter $$ create trigger table_history_upd before update on "table" for each row begin diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql index a310948ea..566c73b8f 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/1.1.sql @@ -182,7 +182,7 @@ create trigger migtest_e_history6_history_del before delete on migtest_e_history insert into migtest_e_history6_history (sys_period_start,sys_period_end,id, test_number1, test_number2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number1, OLD.test_number2); end$$ unlock tables; -create view table_with_history as select * from "table" union all select * from table_history; +create view table_with_history as select * from `table` union all select * from table_history; lock tables "table" write; delimiter $$ create trigger table_history_upd before update on "table" for each row begin diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations index cd0db5cbe..d70a87087 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql/idx_mysql.migrations @@ -1,6 +1,6 @@ 1835064798, I__create_procs.sql --2109016895, 1.0__initial.sql --2062071756, 1.1.sql +1464726622, 1.0__initial.sql +1321178229, 1.1.sql -1332434945, 1.2__dropsFor_1.1.sql -105506677, 1.3.sql 379252952, 1.4__dropsFor_1.3.sql diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql index 6a76c8b5c..72f4c0ebf 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.0__initial.sql @@ -285,15 +285,15 @@ end$$ unlock tables; create table table_history( - "index" varchar(255), - "from" varchar(255), - "to" varchar(255), - "varchar" varchar(255), - "foreign" varchar(255), + `index` varchar(255), + `from` varchar(255), + `to` varchar(255), + `varchar` varchar(255), + `foreign` varchar(255), sys_period_start datetime(6), sys_period_end datetime(6) ); -create view table_with_history as select * from "table" union all select * from table_history; +create view table_with_history as select * from `table` union all select * from table_history; lock tables "table" write; delimiter $$ create trigger table_history_upd before update on "table" for each row begin diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql index a310948ea..566c73b8f 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/1.1.sql @@ -182,7 +182,7 @@ create trigger migtest_e_history6_history_del before delete on migtest_e_history insert into migtest_e_history6_history (sys_period_start,sys_period_end,id, test_number1, test_number2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number1, OLD.test_number2); end$$ unlock tables; -create view table_with_history as select * from "table" union all select * from table_history; +create view table_with_history as select * from `table` union all select * from table_history; lock tables "table" write; delimiter $$ create trigger table_history_upd before update on "table" for each row begin diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations index 229084523..0bdf6e4dc 100644 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations +++ b/ebean-test/src/test/resources/migrationtest/dbmigration/mysql55/idx_mysql.migrations @@ -1,6 +1,6 @@ 1835064798, I__create_procs.sql --73920359, 1.0__initial.sql --2062071756, 1.1.sql +782176262, 1.0__initial.sql +1321178229, 1.1.sql -1332434945, 1.2__dropsFor_1.1.sql -105506677, 1.3.sql 379252952, 1.4__dropsFor_1.3.sql From 5e877060556c292cf8c21b7ef7ad2695655b0b7d Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 15:05:29 +0100 Subject: [PATCH 12/15] Fix: check newTable for history flag --- .../java/io/ebeaninternal/dbmigration/model/MTable.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java index 324246377..5a6770732 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java @@ -278,7 +278,7 @@ public class MTable { if (localColumn == null) { // can ignore if draftOnly column and non-draft table if (!newColumn.isDraftOnly() || draft) { - diffNewColumn(newColumn); + diffNewColumn(newColumn, newTable); } } else { localColumn.compare(modelDiff, this, newColumn); @@ -581,11 +581,11 @@ public class MTable { /** * Add a 'new column' to the AddColumn migration object. */ - private void diffNewColumn(MColumn newColumn) { + private void diffNewColumn(MColumn newColumn, MTable newTable) { if (addColumn == null) { addColumn = new AddColumn(); addColumn.setTableName(name); - if (withHistory) { + if (newTable.isWithHistory()) { // These addColumns need to occur on the history // table as well as the base table addColumn.setWithHistory(Boolean.TRUE); From 8640b4a1a00847604a18861d8ed39debb8e96c64 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 15:20:41 +0100 Subject: [PATCH 13/15] Fix: Check if pendingDrops are used correctly --- .../io/ebeaninternal/dbmigration/model/ModelContainer.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java index dc19ef137..0da3600c7 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java @@ -392,9 +392,7 @@ public class ModelContainer { for (Object change : changeSet.getChangeSetChildren()) { if (change instanceof DropColumn) { DropColumn dropColumn = (DropColumn) change; - if (Boolean.TRUE.equals(dropColumn.isWithHistory())) { - registerPendingDropColumn(dropColumn); - } + registerPendingDropColumn(dropColumn); } } } From de4140aaaca81def3d92d30cd39222c06ef2384e Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 22 Mar 2022 16:20:06 +1300 Subject: [PATCH 14/15] #2600 - Pending drops migration with the same version of the target migration cause trouble --- .../dbmigration/DefaultDbMigration.java | 38 ++++++++++--------- .../dbmigration/DefaultDbMigrationTest.java | 17 ++++++++- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java index 87dd177b1..c48266dcb 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java @@ -1,17 +1,5 @@ package io.ebeaninternal.dbmigration; -import static io.ebeaninternal.api.PlatformMatch.matchPlatform; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import io.ebean.DB; import io.ebean.Database; import io.ebean.annotation.Platform; @@ -50,15 +38,21 @@ import io.ebeaninternal.dbmigration.ddlgeneration.DdlOptions; import io.ebeaninternal.dbmigration.ddlgeneration.DdlWrite; import io.ebeaninternal.dbmigration.migration.Migration; import io.ebeaninternal.dbmigration.migrationreader.MigrationXmlWriter; -import io.ebeaninternal.dbmigration.model.CurrentModel; -import io.ebeaninternal.dbmigration.model.MConfiguration; -import io.ebeaninternal.dbmigration.model.MigrationModel; -import io.ebeaninternal.dbmigration.model.ModelContainer; -import io.ebeaninternal.dbmigration.model.ModelDiff; -import io.ebeaninternal.dbmigration.model.PlatformDdlWriter; +import io.ebeaninternal.dbmigration.model.*; import io.ebeaninternal.extraddl.model.DdlScript; import io.ebeaninternal.extraddl.model.ExtraDdl; import io.ebeaninternal.extraddl.model.ExtraDdlXmlReader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import static io.ebeaninternal.api.PlatformMatch.matchPlatform; /** * Generates DB Migration xml and sql scripts. @@ -611,6 +605,7 @@ public class DefaultDbMigration implements DbMigration { if (version == null) { version = (nextVersion != null) ? nextVersion : initialVersion; } + checkDropVersion(version, dropsFor); String fullVersion = applyPrefix + version; String name = name(); @@ -626,6 +621,13 @@ public class DefaultDbMigration implements DbMigration { return fullVersion; } + void checkDropVersion(String version, String dropsFor) { + if (dropsFor != null && dropsFor.equals(version)) { + throw new IllegalArgumentException("The next migration version must not be the same as the pending drops version of " + + dropsFor + ". Please make the next migration version higher than " + dropsFor + "."); + } + } + String trimDropsFor(String dropsFor) { if (dropsFor.startsWith("V") || dropsFor.startsWith("v")) { dropsFor = dropsFor.substring(1); diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DefaultDbMigrationTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DefaultDbMigrationTest.java index dc787935f..5420ace62 100644 --- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DefaultDbMigrationTest.java +++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DefaultDbMigrationTest.java @@ -3,13 +3,14 @@ package io.ebeaninternal.dbmigration; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; -public class DefaultDbMigrationTest { +class DefaultDbMigrationTest { private final DefaultDbMigration migration = new DefaultDbMigration(); @Test - public void trimDropsFor() { + void trimDropsFor() { assertEquals("1.2", migration.trimDropsFor("V1.2__hello")); assertEquals("1.2", migration.trimDropsFor("v1.2__hello")); assertEquals("1.2", migration.trimDropsFor("v1.2")); @@ -17,4 +18,16 @@ public class DefaultDbMigrationTest { assertEquals("junk1.2", migration.trimDropsFor("junk1.2__")); assertEquals("junk1.2", migration.trimDropsFor("junk1.2__more")); } + + @Test + void checkDropVersion_when_matches_throwsIAE() { + assertThrows(IllegalArgumentException.class, () -> migration.checkDropVersion("1.0", "1.0")); + } + + @Test + void checkDropVersion_ok() { + migration.checkDropVersion("1.0", null); + migration.checkDropVersion("1.0", "1.0.0"); + migration.checkDropVersion("1.0", "1.1"); + } } From baddc769616c4d328a3c7b290de0dc128f94c996 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 22 Mar 2022 16:48:47 +1300 Subject: [PATCH 15/15] Refactor tidy grammar in server/expression classes --- .../ebeaninternal/api/CacheIdLookupMany.java | 2 +- .../expression/AbstractTextExpression.java | 2 +- .../server/expression/BitwiseExpression.java | 4 +-- .../expression/DefaultExampleExpression.java | 14 +++++----- .../expression/DefaultExpressionFactory.java | 26 +++++++++---------- .../expression/DefaultExpressionList.java | 2 +- .../server/expression/DocQueryContext.java | 4 +-- .../expression/ExistsQueryExpression.java | 14 +++------- .../server/expression/IdExpression.java | 2 +- .../server/expression/IdInCommon.java | 2 +- .../server/expression/IdInExpression.java | 8 +++--- .../server/expression/InPairsExpression.java | 3 +-- .../server/expression/InQueryExpression.java | 9 ++----- .../server/expression/IsEmptyExpression.java | 2 +- .../server/expression/JunctionExpression.java | 2 +- .../server/expression/LogicExpression.java | 2 +- .../server/expression/NoopExpression.java | 11 ++------ .../expression/RawExpressionBuilder.java | 7 +++-- .../ebeaninternal/server/expression/Same.java | 2 +- .../server/expression/SimpleExpression.java | 2 +- .../server/expression/package.html | 2 +- 21 files changed, 48 insertions(+), 74 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/CacheIdLookupMany.java b/ebean-core/src/main/java/io/ebeaninternal/api/CacheIdLookupMany.java index 2f522b6d8..37db76e00 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/api/CacheIdLookupMany.java +++ b/ebean-core/src/main/java/io/ebeaninternal/api/CacheIdLookupMany.java @@ -35,7 +35,7 @@ public final class CacheIdLookupMany implements CacheIdLookup { @Override public List removeHits(BeanCacheResult cacheResult) { Set hitIds = new HashSet<>(); - List beans = new ArrayList<>(hitIds.size()); + List beans = new ArrayList<>(); for (BeanCacheResult.Entry hit : cacheResult.hits()) { hitIds.add(hit.getKey()); beans.add(hit.getBean()); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java index 272e557d7..cc07e2a8d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java @@ -40,7 +40,7 @@ abstract class AbstractTextExpression extends AbstractExpression { @Override public void queryBindKey(BindValuesKey key) { // do nothing, only execute against document store - }; + } @Override public boolean isSameByBind(SpiExpression other) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/BitwiseExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/BitwiseExpression.java index aa68f2662..04f6f0f2a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/BitwiseExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/BitwiseExpression.java @@ -4,8 +4,6 @@ import io.ebeaninternal.api.BindValuesKey; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; -import java.io.IOException; - /** * Bitwise expression. */ @@ -25,7 +23,7 @@ final class BitwiseExpression extends AbstractExpression { } @Override - public void writeDocQuery(DocQueryContext context) throws IOException { + public void writeDocQuery(DocQueryContext context) { throw new IllegalStateException("Not supported for document queries"); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java index 372e5ecab..708792852 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java @@ -47,12 +47,12 @@ final class DefaultExampleExpression implements SpiExpression, ExampleExpression private final EntityBean entity; /** - * Set to true to use case insensitive expressions. + * Set to true to use case-insensitive expressions. */ private boolean caseInsensitive; /** - * The type of like (RAW, STARTS_WITH, ENDS_WITH etc) + * The type of like (RAW, STARTS_WITH, ENDS_WITH) */ private LikeType likeType; @@ -62,7 +62,7 @@ final class DefaultExampleExpression implements SpiExpression, ExampleExpression private boolean includeZeros; /** - * The non null bean properties and found and together added as a list of + * The non-null bean properties and found and together added as a list of * expressions (like or equal to expressions). */ private ArrayList list; @@ -71,8 +71,8 @@ final class DefaultExampleExpression implements SpiExpression, ExampleExpression /** * Construct the query by example expression. * - * @param entity the example entity with non null property values - * @param caseInsensitive if true use case insensitive expressions + * @param entity the example entity with non-null property values + * @param caseInsensitive if true use case-insensitive expressions * @param likeType the type of Like wild card used */ DefaultExampleExpression(EntityBean entity, boolean caseInsensitive, LikeType likeType) { @@ -303,9 +303,7 @@ final class DefaultExampleExpression implements SpiExpression, ExampleExpression */ private boolean isZero(Object value) { if (value instanceof Number) { - if (((Number) value).doubleValue() == 0) { - return true; - } + return ((Number) value).doubleValue() == 0; } return false; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionFactory.java index 5e0b3b43b..81f434762 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionFactory.java @@ -186,7 +186,7 @@ public class DefaultExpressionFactory implements SpiExpressionFactory { /** * Case Insensitive Equal To - property equal to the given value (typically - * using a lower() function to make it case insensitive). + * using a lower() function to make it case-insensitive). */ @Override public Expression ieq(String propertyName, String value) { @@ -198,7 +198,7 @@ public class DefaultExpressionFactory implements SpiExpressionFactory { /** * Case Insensitive Equal To - property equal to the given value (typically - * using a lower() function to make it case insensitive). + * using a lower() function to make it case-insensitive). */ @Override public Expression ine(String propertyName, String value) { @@ -336,7 +336,7 @@ public class DefaultExpressionFactory implements SpiExpressionFactory { } /** - * Case insensitive {@link #exampleLike(Object)} + * Case-insensitive {@link #exampleLike(Object)} */ @Override public ExampleExpression iexampleLike(Object example) { @@ -344,7 +344,7 @@ public class DefaultExpressionFactory implements SpiExpressionFactory { } /** - * Create the query by Example expression which is case sensitive and using + * Create the query by Example expression which is case-sensitive and using * LikeType.RAW (you need to add you own wildcards % and _). */ @Override @@ -375,9 +375,9 @@ public class DefaultExpressionFactory implements SpiExpressionFactory { } /** - * Case insensitive Like - property like value where the value contains the - * SQL wild card characters % (percentage) and _ (underscore). Typically uses - * a lower() function to make the expression case insensitive. + * Case-insensitive Like - property like value where the value contains the + * SQL wild card characters % (percentage) and _ (underscore). Typically, uses + * a lower() function to make the expression case-insensitive. */ @Override public Expression ilike(String propertyName, String value) { @@ -397,8 +397,8 @@ public class DefaultExpressionFactory implements SpiExpressionFactory { } /** - * Case insensitive Starts With - property like value%. Typically uses a - * lower() function to make the expression case insensitive. + * Case-insensitive Starts With - property like value%. Typically, uses a + * lower() function to make the expression case-insensitive. */ @Override public Expression istartsWith(String propertyName, String value) { @@ -414,8 +414,8 @@ public class DefaultExpressionFactory implements SpiExpressionFactory { } /** - * Case insensitive Ends With - property like %value. Typically uses a lower() - * function to make the expression case insensitive. + * Case-insensitive Ends With - property like %value. Typically, uses a lower() + * function to make the expression case-insensitive. */ @Override public Expression iendsWith(String propertyName, String value) { @@ -431,8 +431,8 @@ public class DefaultExpressionFactory implements SpiExpressionFactory { } /** - * Case insensitive Contains - property like %value%. Typically uses a lower() - * function to make the expression case insensitive. + * Case-insensitive Contains - property like %value%. Typically, uses a lower() + * function to make the expression case-insensitive. */ @Override public Expression icontains(String propertyName, String value) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java index 7141b708b..4bf66743b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java @@ -162,7 +162,7 @@ public class DefaultExpressionList implements SpiExpressionList { writeDocQuery(context, null); } else { - // this is a Top level "text" expressions so we may need to wrap in Bool SHOULD etc. + // this is a Top level "text" expressions, so we may need to wrap in Bool SHOULD etc. if (list.isEmpty()) { throw new IllegalStateException("empty expression list?"); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DocQueryContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DocQueryContext.java index 9e1cf9641..4833534a1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DocQueryContext.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DocQueryContext.java @@ -71,7 +71,7 @@ public interface DocQueryContext { void writeIn(String propertyName, Object[] values, boolean not) throws IOException; /** - * Write an Id in expression. + * Write an ID in expression. */ void writeIds(Collection idCollection) throws IOException; @@ -131,7 +131,7 @@ public interface DocQueryContext { void writeTextQueryString(String search, TextQueryString options) throws IOException; /** - * Start a Bool which may contain some of Must, Must Not, Should. + * Start a Bool which may contain Must, Must Not, Should. */ void startBoolGroup() throws IOException; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java index 5d0b9a50a..06b9a43e1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java @@ -1,19 +1,11 @@ package io.ebeaninternal.server.expression; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.BindValuesKey; -import io.ebeaninternal.api.ManyWhereJoins; -import io.ebeaninternal.api.NaturalKeyQueryData; -import io.ebeaninternal.api.SpiEbeanServer; -import io.ebeaninternal.api.SpiExpression; -import io.ebeaninternal.api.SpiExpressionRequest; -import io.ebeaninternal.api.SpiExpressionValidation; -import io.ebeaninternal.api.SpiQuery; +import io.ebeaninternal.api.*; import io.ebeaninternal.api.SpiQuery.Type; import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.query.CQuery; -import java.io.IOException; import java.util.List; final class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpression { @@ -52,7 +44,7 @@ final class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreE } @Override - public void writeDocQuery(DocQueryContext context) throws IOException { + public void writeDocQuery(DocQueryContext context) { throw new IllegalStateException("Not supported"); } @@ -77,7 +69,7 @@ final class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreE /** * Compile/build the sub query. */ - protected CQuery compileSubQuery(BeanQueryRequest queryRequest) { + CQuery compileSubQuery(BeanQueryRequest queryRequest) { SpiEbeanServer ebeanServer = (SpiEbeanServer) queryRequest.database(); return ebeanServer.compileQuery(Type.SQ_EXISTS, subQuery, queryRequest.transaction()); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdExpression.java index d7f5e5a16..34e49bcc1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdExpression.java @@ -51,7 +51,7 @@ final class IdExpression extends NonPrepareExpression implements SpiExpression { @Override public void addBindValues(SpiExpressionRequest request) { - // 'flatten' EmbeddedId and multiple Id cases + // 'flatten' EmbeddedId and multiple ID cases // into an array of the underlying scalar field values DefaultExpressionRequest r = (DefaultExpressionRequest) request; Object[] bindIdValues = r.getBeanDescriptor().bindIdValues(value); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInCommon.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInCommon.java index 89024009b..33fb5dce8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInCommon.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInCommon.java @@ -4,7 +4,7 @@ import java.util.Collection; import java.util.Set; /** - * Id IN expression common for cache handling. + * ID IN expression common for cache handling. */ public interface IdInCommon { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java index 35c89d4ab..6e5b5a62a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java @@ -18,7 +18,7 @@ import java.util.List; import java.util.Set; /** - * In a collection of Id values. + * In a collection of ID values. */ public final class IdInExpression extends NonPrepareExpression implements IdInCommon { @@ -73,7 +73,7 @@ public final class IdInExpression extends NonPrepareExpression implements IdInCo if (idCollection.isEmpty()) { return; } - // Bind the Id values including EmbeddedId and multiple Id + // Bind the ID values including EmbeddedId and multiple ID DefaultExpressionRequest r = (DefaultExpressionRequest) request; BeanDescriptor descriptor = r.getBeanDescriptor(); @@ -82,7 +82,7 @@ public final class IdInExpression extends NonPrepareExpression implements IdInCo } /** - * For use with deleting non attached detail beans during stateless update. + * For use with deleting non-attached detail beans during stateless update. */ public void addSqlNoAlias(SpiExpressionRequest request) { @@ -116,7 +116,7 @@ public final class IdInExpression extends NonPrepareExpression implements IdInCo } /** - * Incorporates the number of Id values to bind. + * Incorporates the number of ID values to bind. */ @Override public void queryPlanHash(StringBuilder builder) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InPairsExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InPairsExpression.java index fc4df7029..5066b4047 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InPairsExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InPairsExpression.java @@ -9,7 +9,6 @@ import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; import io.ebeaninternal.server.persist.MultiValueWrapper; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -54,7 +53,7 @@ final class InPairsExpression extends AbstractExpression { } @Override - public void writeDocQuery(DocQueryContext context) throws IOException { + public void writeDocQuery(DocQueryContext context) { throw new RuntimeException("Not supported with document query"); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java index cc508f3e5..8c0a12506 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java @@ -1,15 +1,10 @@ package io.ebeaninternal.server.expression; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.BindValuesKey; -import io.ebeaninternal.api.SpiEbeanServer; -import io.ebeaninternal.api.SpiExpression; -import io.ebeaninternal.api.SpiExpressionRequest; -import io.ebeaninternal.api.SpiQuery; +import io.ebeaninternal.api.*; import io.ebeaninternal.api.SpiQuery.Type; import io.ebeaninternal.server.query.CQuery; -import java.io.IOException; import java.util.List; /** @@ -42,7 +37,7 @@ final class InQueryExpression extends AbstractExpression implements UnsupportedD } @Override - public void writeDocQuery(DocQueryContext context) throws IOException { + public void writeDocQuery(DocQueryContext context) { throw new IllegalStateException("Not supported"); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java index 9896891de..e635d4ea0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java @@ -48,7 +48,7 @@ final class IsEmptyExpression extends AbstractExpression { } } - public final String getPropName() { + public String getPropName() { return propName; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java index d83db0cde..ee9245356 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java @@ -868,7 +868,7 @@ final class JunctionExpression implements SpiJunction, SpiExpression, Expr } @Override - public Query select(FetchGroup fetchGroup) { + public Query select(FetchGroup fetchGroup) { return exprList.select(fetchGroup); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java index b0ef74f03..0f17974e4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java @@ -14,7 +14,7 @@ import io.ebeaninternal.server.deploy.BeanDescriptor; import java.io.IOException; /** - * A logical And or Or for joining two expressions. + * A logical And or, Or for joining two expressions. */ abstract class LogicExpression implements SpiExpression { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java index 079f26874..da009c90e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java @@ -1,16 +1,9 @@ package io.ebeaninternal.server.expression; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.BindValuesKey; -import io.ebeaninternal.api.ManyWhereJoins; -import io.ebeaninternal.api.NaturalKeyQueryData; -import io.ebeaninternal.api.SpiExpression; -import io.ebeaninternal.api.SpiExpressionRequest; -import io.ebeaninternal.api.SpiExpressionValidation; +import io.ebeaninternal.api.*; import io.ebeaninternal.server.deploy.BeanDescriptor; -import java.io.IOException; - /** * Effectively an expression that has no effect. */ @@ -40,7 +33,7 @@ final class NoopExpression implements SpiExpression { } @Override - public void writeDocQuery(DocQueryContext context) throws IOException { + public void writeDocQuery(DocQueryContext context) { } @Override diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpressionBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpressionBuilder.java index 40aa47271..db893cccb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpressionBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpressionBuilder.java @@ -16,7 +16,7 @@ final class RawExpressionBuilder { */ static RawExpression buildSingle(String raw, Object value) { if (isExpand(value, raw, BP_1)) { - Collection val = (Collection) value; + Collection val = (Collection) value; raw = raw.replace(BP_1, expand(val)); return new RawExpression(raw, val.toArray()); } @@ -50,8 +50,7 @@ final class RawExpressionBuilder { return "?" + (i + 1); } - private static String expand(Collection values) { - + private static String expand(Collection values) { StringBuilder sqlExpand = new StringBuilder(values.size() * 2); for (int i = 0; i < values.size(); i++) { if (i > 0) { @@ -72,7 +71,7 @@ final class RawExpressionBuilder { if (!isExpand(values[i], raw, match)) { params.add(values[i]); } else { - Collection val = (Collection) values[i]; + Collection val = (Collection) values[i]; params.addAll(val); raw = raw.replace(match, expand(val)); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/Same.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/Same.java index 104d27969..d16850e98 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/Same.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/Same.java @@ -10,7 +10,7 @@ import java.util.Objects; final class Same { /** - * Return true if both values are null or both an not null. + * Return true if both values are null or both not null. */ static boolean sameByNull(Object v1, Object v2) { return (v1 == null) == (v2 == null); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java index aed3825ca..5c3efb5e0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java @@ -55,7 +55,7 @@ public final class SimpleExpression extends AbstractValueExpression { } } - public final String getPropName() { + public String getPropName() { return propName; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/package.html b/ebean-core/src/main/java/io/ebeaninternal/server/expression/package.html index aa87c6cf1..b203a7483 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/package.html +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/package.html @@ -21,7 +21,7 @@ Expressions for building WHERE clauses.

In the code above the LIKE and GREATER THAN Expressions are added to the where clause. The way this works is that where() returns an ExpressionList which has methods on - it to create the standard expressions (EQUAL TO, LIKE etc). + it to create the standard expressions (EQUAL TO, LIKE etc.)

I expect most people to add their expressions in this way. The Expr expression factory