diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java index 4835c2deb..aed55af17 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java @@ -29,6 +29,8 @@ import io.ebeaninternal.dbmigration.migration.DropTable; import io.ebeaninternal.dbmigration.migration.ForeignKey; import io.ebeaninternal.dbmigration.migration.UniqueConstraint; import io.ebeaninternal.dbmigration.model.MTable; +import io.ebeaninternal.dbmigration.model.MTableIdentity; +import io.ebeaninternal.server.deploy.IdentityMode; import java.io.IOException; import java.math.BigInteger; @@ -246,21 +248,18 @@ public class BaseTableDdl implements TableDdl { List columns = createTable.getColumn(); List pk = determinePrimaryKeyColumns(columns); - boolean singleColumnPrimaryKey = (pk.size() == 1); - boolean useIdentity = false; - boolean useSequence = false; - - if (singleColumnPrimaryKey) { - IdType useDbIdentityType = platformDdl.useIdentityType(createTable.getIdentityType()); - useIdentity = (IdType.IDENTITY == useDbIdentityType); - useSequence = (IdType.SEQUENCE == useDbIdentityType); + DdlIdentity idMode = DdlIdentity.NONE; + if ((pk.size() == 1)) { + final IdentityMode identityMode = MTableIdentity.fromCreateTable(createTable); + IdType idType = platformDdl.useIdentityType(identityMode.getIdType()); + idMode = new DdlIdentity(idType, identityMode); } String partitionMode = createTable.getPartitionMode(); DdlBuffer apply = writer.apply(); apply.append(platformDdl.getCreateTableCommandPrefix()).append(" ").append(tableName).append(" ("); - writeTableColumns(apply, columns, useIdentity); + writeTableColumns(apply, columns, idMode); writeUniqueConstraints(apply, createTable); writeCompoundUniqueConstraints(apply, createTable); if (!pk.isEmpty()) { @@ -295,7 +294,7 @@ public class BaseTableDdl implements TableDdl { // we drop the related sequence (if sequences are used) dropTable(writer.dropAll(), tableName); - if (useSequence) { + if (idMode.useSequence()) { String pkCol = pk.get(0).getName(); writeSequence(writer, createTable, pkCol); } @@ -348,8 +347,8 @@ public class BaseTableDdl implements TableDdl { } } - private void writeTableColumns(DdlBuffer apply, List columns, boolean useIdentity) throws IOException { - platformDdl.writeTableColumns(apply, columns, useIdentity); + private void writeTableColumns(DdlBuffer apply, List columns, DdlIdentity identity) throws IOException { + platformDdl.writeTableColumns(apply, columns, identity); } /** diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/CockroachDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/CockroachDdl.java index 556fcd7dc..8c3d8bfe4 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/CockroachDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/CockroachDdl.java @@ -25,8 +25,7 @@ public class CockroachDdl extends PlatformDdl { * Map bigint, integer and smallint all into serial. */ @Override - public String asIdentityColumn(String columnDefn) { - + public String asIdentityColumn(String columnDefn, DdlIdentity identity) { if ("bigint".equalsIgnoreCase(columnDefn)) { return "serial"; } diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DdlIdentity.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DdlIdentity.java new file mode 100644 index 000000000..3ecc46361 --- /dev/null +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DdlIdentity.java @@ -0,0 +1,66 @@ +package io.ebeaninternal.dbmigration.ddlgeneration.platform; + +import io.ebean.annotation.IdentityGenerated; +import io.ebean.config.dbplatform.IdType; +import io.ebeaninternal.server.deploy.IdentityMode; + +public class DdlIdentity { + + public static final DdlIdentity NONE = new DdlIdentity(); + + private final IdType idType; + private final IdentityMode identityMode; + + public DdlIdentity(IdType idType, IdentityMode identityMode) { + this.idType = idType; + this.identityMode = identityMode; + } + + private DdlIdentity() { + this.idType = null; + this.identityMode = null; + } + + public boolean useSequence() { + return idType == IdType.SEQUENCE; + } + + public boolean useIdentity() { + return idType == IdType.IDENTITY; + } + + private String generatedBy() { + return isAlways() ? "always" : "by default"; + } + + private boolean isAlways() { + return IdentityGenerated.ALWAYS == identityMode.getGenerated(); + } + + public String optionGenerated() { + return " generated " + generatedBy() +" as identity"; + } + + public String options(String startWith, String incrementBy, String cache) { + if (!identityMode.hasOptions()) { + return ""; + } + StringBuilder sb = new StringBuilder(40); + sb.append(" ("); + optionFor(sb, startWith, identityMode.getStart()); + optionFor(sb, incrementBy, identityMode.getIncrement()); + optionFor(sb, cache, identityMode.getCache()); + sb.append(")"); + return sb.toString(); + } + + private void optionFor(StringBuilder sb, String prefix, int val) { + if (val > 0 && prefix != null) { + if (sb.length() > 2) { + sb.append(" "); + } + sb.append(prefix).append(" ").append(val); + } + } + +} diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2Ddl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2Ddl.java index 6a2d2e29f..13298faeb 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2Ddl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2Ddl.java @@ -12,6 +12,14 @@ public class H2Ddl extends PlatformDdl { this.historyDdl = new H2HistoryDdl(); } + /** + * Modify and return the column definition for autoincrement or identity definition. + */ + @Override + public String asIdentityColumn(String columnDefn, DdlIdentity identity) { + return asIdentityStandardOptions(columnDefn, identity); + } + @Override protected String convertArrayType(String logicalArrayType) { return "array"; diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java index 428bdf0ee..f5658c3ec 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/MySqlDdl.java @@ -115,8 +115,8 @@ public class MySqlDdl extends PlatformDdl { } @Override - protected void writeColumnDefinition(DdlBuffer buffer, Column column, boolean useIdentity) throws IOException { - super.writeColumnDefinition(buffer, column, useIdentity); + protected void writeColumnDefinition(DdlBuffer buffer, Column column, DdlIdentity identity) throws IOException { + super.writeColumnDefinition(buffer, column, identity); String comment = column.getComment(); if (!StringHelper.isNull(comment)) { // in mysql 5.5 column comment save in information_schema.COLUMNS.COLUMN_COMMENT(VARCHAR 1024) diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java index 4ee4a752e..3580d224b 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java @@ -19,7 +19,6 @@ import io.ebeaninternal.dbmigration.migration.AddHistoryTable; import io.ebeaninternal.dbmigration.migration.AlterColumn; import io.ebeaninternal.dbmigration.migration.Column; import io.ebeaninternal.dbmigration.migration.DropHistoryTable; -import io.ebeaninternal.dbmigration.migration.IdentityType; import io.ebeaninternal.dbmigration.model.MTable; import java.io.IOException; @@ -66,6 +65,9 @@ public class PlatformDdl { protected String foreignKeyOnUpdate = "on update"; protected String identitySuffix = " auto_increment"; + protected String identityStartWith = "start with"; + protected String identityIncrementBy = "increment by"; + protected String identityCache = "cache"; protected String alterTableIfExists = ""; @@ -152,8 +154,7 @@ public class PlatformDdl { * Return the identity type to use given the support in the underlying database * platform for sequences and identity/autoincrement. */ - public IdType useIdentityType(IdentityType modelIdentity) { - + public IdType useIdentityType(IdType modelIdentity) { if (modelIdentity == null) { // use the default return dbIdentity.getIdType(); @@ -165,8 +166,7 @@ public class PlatformDdl { * Determine the id type to use based on requested identityType and * the support for that in the database platform. */ - private IdType identityType(IdentityType modelIdentity, IdType platformIdType, boolean supportsSequence, boolean supportsIdentity) { - + private IdType identityType(IdType modelIdentity, IdType platformIdType, boolean supportsSequence, boolean supportsIdentity) { switch (modelIdentity) { case GENERATOR: return IdType.GENERATOR; @@ -184,10 +184,21 @@ public class PlatformDdl { /** * Modify and return the column definition for autoincrement or identity definition. */ - public String asIdentityColumn(String columnDefn) { + public String asIdentityColumn(String columnDefn, DdlIdentity identity) { return columnDefn + identitySuffix; } + /** + * SQl2003 standard identity definition. + */ + protected String asIdentityStandardOptions(String columnDefn, DdlIdentity identity) { + + StringBuilder sb = new StringBuilder(columnDefn.length() + 60); + sb.append(columnDefn).append(identity.optionGenerated()); + sb.append(identity.options(identityStartWith, identityIncrementBy, identityCache)); + return sb.toString(); + } + /** * Return true if the table and column comments are included inline. */ @@ -220,13 +231,13 @@ public class PlatformDdl { /** * Write all the table columns converting to platform types as necessary. */ - public void writeTableColumns(DdlBuffer apply, List columns, boolean useIdentity) throws IOException { + public void writeTableColumns(DdlBuffer apply, List columns, DdlIdentity identity) throws IOException { for (int i = 0; i < columns.size(); i++) { if (i > 0) { apply.append(","); } apply.newLine(); - writeColumnDefinition(apply, columns.get(i), useIdentity); + writeColumnDefinition(apply, columns.get(i), identity); } for (Column column : columns) { @@ -244,11 +255,11 @@ public class PlatformDdl { /** * Write the column definition to the create table statement. */ - protected void writeColumnDefinition(DdlBuffer buffer, Column column, boolean useIdentity) throws IOException { + protected void writeColumnDefinition(DdlBuffer buffer, Column column, DdlIdentity identity) throws IOException { String columnDefn = convert(column.getType()); - if (useIdentity && isTrue(column.isPrimaryKey())) { - columnDefn = asIdentityColumn(columnDefn); + if (identity.useIdentity() && isTrue(column.isPrimaryKey())) { + columnDefn = asIdentityColumn(columnDefn, identity); } buffer.append(" "); diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Postgres9Ddl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Postgres9Ddl.java index 89bd55bdc..05e74ec07 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Postgres9Ddl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/Postgres9Ddl.java @@ -12,7 +12,7 @@ public class Postgres9Ddl extends PostgresDdl { * Map bigint, integer and smallint into their equivalent serial types. */ @Override - public String asIdentityColumn(String columnDefn) { + public String asIdentityColumn(String columnDefn, DdlIdentity identity) { if ("bigint".equalsIgnoreCase(columnDefn)) { return "bigserial"; } diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java index b77145041..50138ce21 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java @@ -21,7 +21,6 @@ public class PostgresDdl extends PlatformDdl { this.columnSetNull = "drop not null"; this.addForeignKeySkipCheck = " not valid"; this.indexConcurrent = "concurrently "; - this.identitySuffix = " generated by default as identity"; } public String setLockTimeout(int lockTimeoutSeconds) { @@ -47,4 +46,12 @@ public class PostgresDdl extends PlatformDdl { public String dropIndex(String indexName, String tableName, boolean concurrent) { return (concurrent ? dropIndexConcurrentlyIfExists : dropIndexIfExists) + maxConstraintName(indexName); } + + /** + * Modify and return the column definition for autoincrement or identity definition. + */ + @Override + public String asIdentityColumn(String columnDefn, DdlIdentity identity) { + return asIdentityStandardOptions(columnDefn, identity); + } } diff --git a/src/main/java/io/ebeaninternal/dbmigration/migration/CreateTable.java b/src/main/java/io/ebeaninternal/dbmigration/migration/CreateTable.java index 3e52db4a1..8c451d2ec 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/migration/CreateTable.java +++ b/src/main/java/io/ebeaninternal/dbmigration/migration/CreateTable.java @@ -33,6 +33,10 @@ import java.util.List; * <attribute name="withHistory" type="{http://www.w3.org/2001/XMLSchema}boolean" /> * <attribute name="draft" type="{http://www.w3.org/2001/XMLSchema}boolean" /> * <attribute name="identityType" type="{http://ebean-orm.github.io/xml/ns/dbmigration}identityType" /> + * <attribute name="identityStart" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> + * <attribute name="identityIncrement" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> + * <attribute name="identityCache" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> + * <attribute name="identityGenerated" type="{http://www.w3.org/2001/XMLSchema}string" /> * <attribute name="sequenceName" type="{http://www.w3.org/2001/XMLSchema}string" /> * <attribute name="sequenceInitial" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> * <attribute name="sequenceAllocate" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> @@ -68,6 +72,17 @@ public class CreateTable { protected Boolean draft; @XmlAttribute(name = "identityType") protected IdentityType identityType; + @XmlAttribute(name = "identityStart") + @XmlSchemaType(name = "positiveInteger") + protected BigInteger identityStart; + @XmlAttribute(name = "identityIncrement") + @XmlSchemaType(name = "positiveInteger") + protected BigInteger identityIncrement; + @XmlAttribute(name = "identityCache") + @XmlSchemaType(name = "positiveInteger") + protected BigInteger identityCache; + @XmlAttribute(name = "identityGenerated") + protected String identityGenerated; @XmlAttribute(name = "sequenceName") protected String sequenceName; @XmlAttribute(name = "sequenceInitial") @@ -288,6 +303,86 @@ public class CreateTable { this.identityType = value; } + /** + * Gets the value of the identityStart property. + * + * @return possible object is + * {@link BigInteger } + */ + public BigInteger getIdentityStart() { + return identityStart; + } + + /** + * Sets the value of the identityStart property. + * + * @param value allowed object is + * {@link BigInteger } + */ + public void setIdentityStart(BigInteger value) { + this.identityStart = value; + } + + /** + * Gets the value of the identityIncrement property. + * + * @return possible object is + * {@link BigInteger } + */ + public BigInteger getIdentityIncrement() { + return identityIncrement; + } + + /** + * Sets the value of the identityIncrement property. + * + * @param value allowed object is + * {@link BigInteger } + */ + public void setIdentityIncrement(BigInteger value) { + this.identityIncrement = value; + } + + /** + * Gets the value of the identityCache property. + * + * @return possible object is + * {@link BigInteger } + */ + public BigInteger getIdentityCache() { + return identityCache; + } + + /** + * Sets the value of the identityCache property. + * + * @param value allowed object is + * {@link BigInteger } + */ + public void setIdentityCache(BigInteger value) { + this.identityCache = value; + } + + /** + * Gets the value of the identityGenerated property. + * + * @return possible object is + * {@link String } + */ + public String getIdentityGenerated() { + return identityGenerated; + } + + /** + * Sets the value of the identityGenerated property. + * + * @param value allowed object is + * {@link String } + */ + public void setIdentityGenerated(String value) { + this.identityGenerated = value; + } + /** * Gets the value of the sequenceName property. * diff --git a/src/main/java/io/ebeaninternal/dbmigration/migration/DdlScript.java b/src/main/java/io/ebeaninternal/dbmigration/migration/DdlScript.java index 12d1f1cff..515073d68 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/migration/DdlScript.java +++ b/src/main/java/io/ebeaninternal/dbmigration/migration/DdlScript.java @@ -62,11 +62,7 @@ public class DdlScript { if (ddl == null) { ddl = new ArrayList<>(); } - return ddl; - } - - public void setDdl(List ddl) { - this.ddl = ddl; + return this.ddl; } /** diff --git a/src/main/java/io/ebeaninternal/dbmigration/model/MColumn.java b/src/main/java/io/ebeaninternal/dbmigration/model/MColumn.java index d0033f443..25fe92b09 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/model/MColumn.java +++ b/src/main/java/io/ebeaninternal/dbmigration/model/MColumn.java @@ -295,14 +295,14 @@ public class MColumn { for (DbMigrationInfo info : dbMigrationInfos) { if (!info.getPreAdd().isEmpty()) { DdlScript script = new DdlScript(); - script.setDdl(info.getPreAdd()); + script.getDdl().addAll(info.getPreAdd()); script.setPlatforms(info.joinPlatforms()); c.getBefore().add(script); } if (!info.getPostAdd().isEmpty()) { DdlScript script = new DdlScript(); - script.setDdl(info.getPostAdd()); + script.getDdl().addAll(info.getPostAdd()); script.setPlatforms(info.joinPlatforms()); c.getAfter().add(script); } @@ -341,14 +341,14 @@ public class MColumn { for (DbMigrationInfo info : dbMigrationInfos) { if (!info.getPreAlter().isEmpty()) { DdlScript script = new DdlScript(); - script.setDdl(info.getPreAlter()); + script.getDdl().addAll(info.getPreAlter()); script.setPlatforms(info.joinPlatforms()); alterColumn.getBefore().add(script); } if (!info.getPostAlter().isEmpty()) { DdlScript script = new DdlScript(); - script.setDdl(info.getPostAlter()); + script.getDdl().addAll(info.getPostAlter()); script.setPlatforms(info.joinPlatforms()); alterColumn.getAfter().add(script); } diff --git a/src/main/java/io/ebeaninternal/dbmigration/model/MTableIdentity.java b/src/main/java/io/ebeaninternal/dbmigration/model/MTableIdentity.java index 932293870..5e4bb2306 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/model/MTableIdentity.java +++ b/src/main/java/io/ebeaninternal/dbmigration/model/MTableIdentity.java @@ -11,19 +11,28 @@ import java.math.BigInteger; /** * Helper to convert between IdentityMode and CreateTable */ -class MTableIdentity { +public class MTableIdentity { /** * Return the IdentityMode from CreateTable. */ - static IdentityMode fromCreateTable(CreateTable createTable) { + public static IdentityMode fromCreateTable(CreateTable createTable) { IdType type = fromType(createTable.getIdentityType()); - int start = toInt(createTable.getSequenceInitial()); - int increment = toInt(createTable.getSequenceAllocate()); + IdentityGenerated generated = fromGenerated(createTable.getIdentityGenerated()); + int start = toInt(createTable.getIdentityStart(), createTable.getSequenceInitial()); + int increment = toInt(createTable.getIdentityIncrement(), createTable.getSequenceAllocate()); + int cache = toInt(createTable.getIdentityCache(), null); String seqName = createTable.getSequenceName(); - return new IdentityMode(type, IdentityGenerated.AUTO, start, increment, seqName); + return new IdentityMode(type, generated, start, increment, cache, seqName); + } + + private static IdentityGenerated fromGenerated(String identityGenerated) { + if (identityGenerated == null) { + return IdentityGenerated.AUTO; + } + return IdentityGenerated.valueOf(identityGenerated.toUpperCase()); } /** @@ -39,8 +48,13 @@ class MTableIdentity { createTable.setSequenceName(seqName); } - createTable.setSequenceInitial(toBigInteger(identityMode.getStart())); - createTable.setSequenceAllocate(toBigInteger(identityMode.getIncrement())); + createTable.setIdentityStart(toBigInteger(identityMode.getStart())); + createTable.setIdentityIncrement(toBigInteger(identityMode.getIncrement())); + createTable.setIdentityCache(toBigInteger(identityMode.getCache())); + final IdentityGenerated generated = identityMode.getGenerated(); + if (generated != null && generated != IdentityGenerated.AUTO) { + createTable.setIdentityGenerated(generated.name().toLowerCase()); + } } @@ -81,8 +95,11 @@ class MTableIdentity { return null; } - private static int toInt(BigInteger value) { - return (value == null) ? 0 : value.intValue(); + private static int toInt(BigInteger firstVal, BigInteger secVal) { + if (firstVal != null) { + return firstVal.intValue(); + } + return (secVal == null) ? 0 : secVal.intValue(); } private static BigInteger toBigInteger(int value) { diff --git a/src/main/java/io/ebeaninternal/server/deploy/IdentityMode.java b/src/main/java/io/ebeaninternal/server/deploy/IdentityMode.java index 83d201f97..0bea99393 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/IdentityMode.java +++ b/src/main/java/io/ebeaninternal/server/deploy/IdentityMode.java @@ -32,13 +32,13 @@ public class IdentityMode { /** * Create from migration model CreateTable. */ - public IdentityMode(IdType type, IdentityGenerated auto, int start, int increment, String seqName) { + public IdentityMode(IdType type, IdentityGenerated auto, int start, int increment, int cache, String seqName) { this.type = type; this.generated = auto; this.start = start; this.increment = increment; + this.cache = cache; this.sequenceName = seqName; - this.cache = 0; //TODO cache this.platformDefault = false; } @@ -103,4 +103,7 @@ public class IdentityMode { return type != IdType.EXTERNAL && type != IdType.GENERATOR; } + public boolean hasOptions() { + return start > 0 || cache > 0 || increment > 0; + } } diff --git a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java index a20943388..b12c030aa 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java +++ b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java @@ -7,6 +7,7 @@ import io.ebean.annotation.DocStore; import io.ebean.annotation.Draftable; import io.ebean.annotation.DraftableElement; import io.ebean.annotation.History; +import io.ebean.annotation.Identity; import io.ebean.annotation.Index; import io.ebean.annotation.InvalidateQueryCache; import io.ebean.annotation.ReadAudit; @@ -122,6 +123,11 @@ public class AnnotationClass extends AnnotationParser { } } + Identity identity = findAnnotationRecursive(cls, Identity.class); + if (identity != null) { + descriptor.setIdentityMode(identity); + } + IdClass idClass = findAnnotationRecursive(cls, IdClass.class); if (idClass != null) { descriptor.setIdClass(idClass.value()); diff --git a/src/main/resources/ebean-dbmigration-1.0.xsd b/src/main/resources/ebean-dbmigration-1.0.xsd index 16489724a..27fc52cfa 100644 --- a/src/main/resources/ebean-dbmigration-1.0.xsd +++ b/src/main/resources/ebean-dbmigration-1.0.xsd @@ -112,6 +112,10 @@ + + + + diff --git a/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_AlterColumnTest.java b/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_AlterColumnTest.java index b8ecef82e..dc6db69b0 100644 --- a/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_AlterColumnTest.java +++ b/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_AlterColumnTest.java @@ -10,7 +10,6 @@ import io.ebean.config.dbplatform.oracle.OraclePlatform; import io.ebean.config.dbplatform.postgres.PostgresPlatform; import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform; import io.ebeaninternal.dbmigration.migration.AlterColumn; -import io.ebeaninternal.dbmigration.migration.IdentityType; import io.ebeaninternal.server.core.PlatformDdlBuilder; import org.junit.Test; @@ -76,7 +75,7 @@ public class PlatformDdl_AlterColumnTest { } @Test - public void testAlterColumnBaseAttributes() throws Exception { + public void testAlterColumnBaseAttributes() { AlterColumn alterColumn = alterNotNull(); assertNull(h2Ddl.alterColumnBaseAttributes(alterColumn)); @@ -117,7 +116,7 @@ public class PlatformDdl_AlterColumnTest { } @Test - public void testAlterColumnType() throws Exception { + public void testAlterColumnType() { String sql = h2Ddl.alterColumnType("mytab", "acol", "varchar(20)"); assertEquals("alter table mytab alter column acol varchar(20)", sql); @@ -139,7 +138,7 @@ public class PlatformDdl_AlterColumnTest { } @Test - public void testAlterColumnNotnull() throws Exception { + public void testAlterColumnNotnull() { String sql = h2Ddl.alterColumnNotnull("mytab", "acol", true); assertEquals("alter table mytab alter column acol set not null", sql); @@ -161,7 +160,7 @@ public class PlatformDdl_AlterColumnTest { } @Test - public void testAlterColumnNull() throws Exception { + public void testAlterColumnNull() { String sql = h2Ddl.alterColumnNotnull("mytab", "acol", false); assertEquals("alter table mytab alter column acol set null", sql); @@ -183,7 +182,7 @@ public class PlatformDdl_AlterColumnTest { } @Test - public void testAlterColumnDefaultValue() throws Exception { + public void testAlterColumnDefaultValue() { String sql = h2Ddl.alterColumnDefaultValue("mytab", "acol", "'hi'"); assertEquals("alter table mytab alter column acol set default 'hi'", sql); @@ -203,15 +202,14 @@ public class PlatformDdl_AlterColumnTest { boolean exceptionCaught = false; try { hanaDdl.alterColumnDefaultValue("mytab", "acol", "'hi'"); - } - catch (UnsupportedOperationException e) { + } catch (UnsupportedOperationException e) { exceptionCaught = true; } assertTrue(exceptionCaught); } @Test - public void testAlterColumnDropDefault() throws Exception { + public void testAlterColumnDropDefault() { String sql = h2Ddl.alterColumnDefaultValue("mytab", "acol", "DROP DEFAULT"); assertEquals("alter table mytab alter column acol drop default", sql); @@ -231,8 +229,7 @@ public class PlatformDdl_AlterColumnTest { boolean exceptionCaught = false; try { hanaDdl.alterColumnDefaultValue("mytab", "acol", "DROP DEFAULT"); - } - catch (UnsupportedOperationException e) { + } catch (UnsupportedOperationException e) { exceptionCaught = true; } assertTrue(exceptionCaught); @@ -241,49 +238,49 @@ public class PlatformDdl_AlterColumnTest { @Test public void useIdentityType_h2() { assertEquals(h2Ddl.useIdentityType(null), IdType.IDENTITY); - assertEquals(h2Ddl.useIdentityType(IdentityType.SEQUENCE), IdType.SEQUENCE); - assertEquals(h2Ddl.useIdentityType(IdentityType.IDENTITY), IdType.IDENTITY); - assertEquals(h2Ddl.useIdentityType(IdentityType.GENERATOR), IdType.GENERATOR); - assertEquals(h2Ddl.useIdentityType(IdentityType.EXTERNAL), IdType.EXTERNAL); + assertEquals(h2Ddl.useIdentityType(IdType.SEQUENCE), IdType.SEQUENCE); + assertEquals(h2Ddl.useIdentityType(IdType.IDENTITY), IdType.IDENTITY); + assertEquals(h2Ddl.useIdentityType(IdType.GENERATOR), IdType.GENERATOR); + assertEquals(h2Ddl.useIdentityType(IdType.EXTERNAL), IdType.EXTERNAL); } @Test public void useIdentityType_postgres() { - assertEquals(pgDdl.useIdentityType(IdentityType.GENERATOR), IdType.GENERATOR); - assertEquals(pgDdl.useIdentityType(IdentityType.EXTERNAL), IdType.EXTERNAL); + assertEquals(pgDdl.useIdentityType(IdType.GENERATOR), IdType.GENERATOR); + assertEquals(pgDdl.useIdentityType(IdType.EXTERNAL), IdType.EXTERNAL); assertEquals(pgDdl.useIdentityType(null), IdType.IDENTITY); - assertEquals(pgDdl.useIdentityType(IdentityType.SEQUENCE), IdType.SEQUENCE); - assertEquals(pgDdl.useIdentityType(IdentityType.IDENTITY), IdType.IDENTITY); + assertEquals(pgDdl.useIdentityType(IdType.SEQUENCE), IdType.SEQUENCE); + assertEquals(pgDdl.useIdentityType(IdType.IDENTITY), IdType.IDENTITY); } @Test public void useIdentityType_mysql() { assertEquals(mysqlDdl.useIdentityType(null), IdType.IDENTITY); - assertEquals(mysqlDdl.useIdentityType(IdentityType.SEQUENCE), IdType.IDENTITY); - assertEquals(mysqlDdl.useIdentityType(IdentityType.IDENTITY), IdType.IDENTITY); - assertEquals(mysqlDdl.useIdentityType(IdentityType.GENERATOR), IdType.GENERATOR); - assertEquals(mysqlDdl.useIdentityType(IdentityType.EXTERNAL), IdType.EXTERNAL); + assertEquals(mysqlDdl.useIdentityType(IdType.SEQUENCE), IdType.IDENTITY); + assertEquals(mysqlDdl.useIdentityType(IdType.IDENTITY), IdType.IDENTITY); + assertEquals(mysqlDdl.useIdentityType(IdType.GENERATOR), IdType.GENERATOR); + assertEquals(mysqlDdl.useIdentityType(IdType.EXTERNAL), IdType.EXTERNAL); } @Test public void useIdentityType_oracle() { assertEquals(oraDdl.useIdentityType(null), IdType.SEQUENCE); - assertEquals(oraDdl.useIdentityType(IdentityType.SEQUENCE), IdType.SEQUENCE); - assertEquals(oraDdl.useIdentityType(IdentityType.IDENTITY), IdType.IDENTITY); - assertEquals(oraDdl.useIdentityType(IdentityType.GENERATOR), IdType.GENERATOR); - assertEquals(oraDdl.useIdentityType(IdentityType.EXTERNAL), IdType.EXTERNAL); + assertEquals(oraDdl.useIdentityType(IdType.SEQUENCE), IdType.SEQUENCE); + assertEquals(oraDdl.useIdentityType(IdType.IDENTITY), IdType.IDENTITY); + assertEquals(oraDdl.useIdentityType(IdType.GENERATOR), IdType.GENERATOR); + assertEquals(oraDdl.useIdentityType(IdType.EXTERNAL), IdType.EXTERNAL); } @Test public void useIdentityType_hana() { assertEquals(hanaDdl.useIdentityType(null), IdType.IDENTITY); - assertEquals(hanaDdl.useIdentityType(IdentityType.SEQUENCE), IdType.IDENTITY); - assertEquals(hanaDdl.useIdentityType(IdentityType.IDENTITY), IdType.IDENTITY); - assertEquals(hanaDdl.useIdentityType(IdentityType.GENERATOR), IdType.GENERATOR); - assertEquals(hanaDdl.useIdentityType(IdentityType.EXTERNAL), IdType.EXTERNAL); + assertEquals(hanaDdl.useIdentityType(IdType.SEQUENCE), IdType.IDENTITY); + assertEquals(hanaDdl.useIdentityType(IdType.IDENTITY), IdType.IDENTITY); + assertEquals(hanaDdl.useIdentityType(IdType.GENERATOR), IdType.GENERATOR); + assertEquals(hanaDdl.useIdentityType(IdType.EXTERNAL), IdType.EXTERNAL); } } diff --git a/src/test/java/io/ebeaninternal/dbmigration/model/MTableIdentityTest.java b/src/test/java/io/ebeaninternal/dbmigration/model/MTableIdentityTest.java new file mode 100644 index 000000000..5c76d62c0 --- /dev/null +++ b/src/test/java/io/ebeaninternal/dbmigration/model/MTableIdentityTest.java @@ -0,0 +1,129 @@ +package io.ebeaninternal.dbmigration.model; + +import io.ebean.annotation.IdentityGenerated; +import io.ebean.config.dbplatform.IdType; +import io.ebeaninternal.dbmigration.migration.CreateTable; +import io.ebeaninternal.dbmigration.migration.IdentityType; +import io.ebeaninternal.server.deploy.IdentityMode; +import io.ebeaninternal.server.deploy.meta.DeployIdentityMode; +import org.junit.Test; + +import java.math.BigInteger; + +import static org.junit.Assert.*; + +public class MTableIdentityTest { + + @Test + public void toCreateTable() { + + IdentityMode mode = new IdentityMode(IdType.SEQUENCE, IdentityGenerated.BY_DEFAULT, 11, 12, 13, "foo_seq"); + CreateTable tab = new CreateTable(); + MTableIdentity.toCreateTable(mode, tab); + + assertEquals(BigInteger.valueOf(11), tab.getIdentityStart()); + assertEquals(BigInteger.valueOf(12), tab.getIdentityIncrement()); + assertEquals(BigInteger.valueOf(13), tab.getIdentityCache()); + assertEquals("foo_seq", tab.getSequenceName()); + assertEquals("by_default", tab.getIdentityGenerated()); + assertEquals(IdentityType.SEQUENCE, tab.getIdentityType()); + } + + @Test + public void toCreateTable_when_auto() { + + IdentityMode mode = new IdentityMode(IdType.AUTO, IdentityGenerated.AUTO, 11, 12, 13, "foo_seq"); + CreateTable tab = new CreateTable(); + MTableIdentity.toCreateTable(mode, tab); + + assertNull(tab.getIdentityGenerated()); + assertNull(tab.getIdentityType()); + } + + @Test + public void toCreateTable_when_PlatformDefault_expect_typeNull() { + + DeployIdentityMode deploy = DeployIdentityMode.auto(); + deploy.setPlatformType(IdType.SEQUENCE); + + CreateTable tab = new CreateTable(); + MTableIdentity.toCreateTable(new IdentityMode(deploy), tab); + + assertNull(tab.getIdentityType()); + } + + @Test + public void toCreateTable_when_notPlatformDefault_expectType() { + + DeployIdentityMode deploy = DeployIdentityMode.auto(); + deploy.setIdType(IdType.SEQUENCE); + + CreateTable tab = new CreateTable(); + MTableIdentity.toCreateTable(new IdentityMode(deploy), tab); + + assertEquals(IdentityType.SEQUENCE, tab.getIdentityType()); + } + + + @Test + public void fromCreateTable_when_empty() { + + CreateTable tab = new CreateTable(); + final IdentityMode mode = MTableIdentity.fromCreateTable(tab); + assertEquals(IdType.AUTO, mode.getIdType()); + assertEquals(IdentityGenerated.AUTO, mode.getGenerated()); + assertEquals(0, mode.getStart()); + assertEquals(0, mode.getIncrement()); + assertEquals(0, mode.getCache()); + assertNull(mode.getSequenceName()); + } + + @Test + public void fromCreateTable_when_allSet() { + + CreateTable tab = new CreateTable(); + tab.setIdentityType(IdentityType.SEQUENCE); + tab.setIdentityGenerated("always"); + tab.setSequenceName("foo_seq"); + tab.setIdentityStart(BigInteger.valueOf(5)); + tab.setIdentityIncrement(BigInteger.valueOf(7)); + tab.setIdentityCache(BigInteger.valueOf(9)); + + final IdentityMode mode = MTableIdentity.fromCreateTable(tab); + assertEquals(IdType.SEQUENCE, mode.getIdType()); + assertEquals(IdentityGenerated.ALWAYS, mode.getGenerated()); + assertEquals(5, mode.getStart()); + assertEquals(7, mode.getIncrement()); + assertEquals(9, mode.getCache()); + assertEquals("foo_seq", mode.getSequenceName()); + } + + @Test + public void fromCreateTable_expect_useNewPropertiesWin() { + + CreateTable tab = new CreateTable(); + // old properties lose + tab.setSequenceInitial(BigInteger.valueOf(42)); + tab.setSequenceAllocate(BigInteger.valueOf(43)); + + // new properties win + tab.setIdentityStart(BigInteger.valueOf(5)); + tab.setIdentityIncrement(BigInteger.valueOf(7)); + + final IdentityMode mode = MTableIdentity.fromCreateTable(tab); + assertEquals(5, mode.getStart()); + assertEquals(7, mode.getIncrement()); + } + + @Test + public void fromCreateTable_when_seqInitAndSeqAll() { + + CreateTable tab = new CreateTable(); + tab.setSequenceInitial(BigInteger.valueOf(42)); + tab.setSequenceAllocate(BigInteger.valueOf(43)); + + final IdentityMode mode = MTableIdentity.fromCreateTable(tab); + assertEquals(42, mode.getStart()); + assertEquals(43, mode.getIncrement()); + } +} diff --git a/src/test/java/org/tests/compositekeys/TestOnCascadeDeleteChildrenWithCompositeKeys.java b/src/test/java/org/tests/compositekeys/TestOnCascadeDeleteChildrenWithCompositeKeys.java index 04a37b777..e0e632db8 100644 --- a/src/test/java/org/tests/compositekeys/TestOnCascadeDeleteChildrenWithCompositeKeys.java +++ b/src/test/java/org/tests/compositekeys/TestOnCascadeDeleteChildrenWithCompositeKeys.java @@ -2,6 +2,7 @@ package org.tests.compositekeys; import io.ebean.BaseTestCase; import io.ebean.Ebean; +import io.ebean.annotation.Identity; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.deploy.BeanPropertyAssocMany; @@ -22,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; import static org.junit.Assert.assertEquals; /** @@ -89,6 +91,7 @@ public class TestOnCascadeDeleteChildrenWithCompositeKeys extends BaseTestCase { beanProperty.findIdsByParentId(1L, null, null, null, true); } + @Identity(generated = BY_DEFAULT) @Entity @Table(name = "em_user") public static class User { diff --git a/src/test/java/org/tests/compositekeys/db/SubType.java b/src/test/java/org/tests/compositekeys/db/SubType.java index d05a9ddc0..4cbe63fec 100644 --- a/src/test/java/org/tests/compositekeys/db/SubType.java +++ b/src/test/java/org/tests/compositekeys/db/SubType.java @@ -1,9 +1,15 @@ package org.tests.compositekeys.db; +import io.ebean.annotation.Identity; +import io.ebean.annotation.IdentityGenerated; + import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.Version; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + +@Identity(generated = BY_DEFAULT) @Entity public class SubType { @EmbeddedId diff --git a/src/test/java/org/tests/idkeys/db/AuditLog.java b/src/test/java/org/tests/idkeys/db/AuditLog.java index de7c27745..1cc7f9617 100644 --- a/src/test/java/org/tests/idkeys/db/AuditLog.java +++ b/src/test/java/org/tests/idkeys/db/AuditLog.java @@ -1,8 +1,13 @@ package org.tests.idkeys.db; +import io.ebean.annotation.Identity; + import javax.persistence.Entity; import javax.persistence.Id; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + +@Identity(generated = BY_DEFAULT) @Entity // Just let Ebean define Identity mechanism for testing across all DB types //@SequenceGenerator(name = "AD_SEQ_NAME", sequenceName = "AD_SEQ") diff --git a/src/test/java/org/tests/merge/MGroup.java b/src/test/java/org/tests/merge/MGroup.java index 06b7cb601..a455006af 100644 --- a/src/test/java/org/tests/merge/MGroup.java +++ b/src/test/java/org/tests/merge/MGroup.java @@ -1,12 +1,16 @@ package org.tests.merge; +import io.ebean.annotation.Identity; + import javax.persistence.Entity; import javax.persistence.Id; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + @Entity public class MGroup { - @Id + @Id @Identity(generated = BY_DEFAULT) private long id; private String name; diff --git a/src/test/java/org/tests/model/basic/EBasicVer.java b/src/test/java/org/tests/model/basic/EBasicVer.java index d9024cbc7..10fcbee54 100644 --- a/src/test/java/org/tests/model/basic/EBasicVer.java +++ b/src/test/java/org/tests/model/basic/EBasicVer.java @@ -2,6 +2,7 @@ package org.tests.model.basic; import io.ebean.Model; import io.ebean.annotation.Cache; +import io.ebean.annotation.Identity; import javax.persistence.Entity; import javax.persistence.Id; @@ -9,12 +10,14 @@ import javax.persistence.Table; import javax.persistence.Version; import java.sql.Timestamp; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + @Cache(enableQueryCache = true) @Entity @Table(name = "e_basicver") public class EBasicVer extends Model { - @Id + @Id @Identity(generated = BY_DEFAULT) Integer id; String name; diff --git a/src/test/java/org/tests/model/basic/Product.java b/src/test/java/org/tests/model/basic/Product.java index f8b0f0981..30f5b62b1 100644 --- a/src/test/java/org/tests/model/basic/Product.java +++ b/src/test/java/org/tests/model/basic/Product.java @@ -4,6 +4,7 @@ import io.ebean.annotation.Cache; import io.ebean.annotation.CacheQueryTuning; import io.ebean.annotation.CreatedTimestamp; import io.ebean.annotation.DocStore; +import io.ebean.annotation.Identity; import javax.persistence.Entity; import javax.persistence.Id; @@ -13,9 +14,12 @@ import javax.validation.constraints.Size; import java.io.Serializable; import java.sql.Timestamp; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + /** * Product entity bean. */ +@Identity(generated = BY_DEFAULT) @DocStore @Cache @CacheQueryTuning(maxSecsToLive = 15) diff --git a/src/test/java/org/tests/model/ddd/DExhEntity.java b/src/test/java/org/tests/model/ddd/DExhEntity.java index 7e4a03777..fb40393c9 100644 --- a/src/test/java/org/tests/model/ddd/DExhEntity.java +++ b/src/test/java/org/tests/model/ddd/DExhEntity.java @@ -1,5 +1,6 @@ package org.tests.model.ddd; +import io.ebean.annotation.Identity; import org.tests.model.ivo.Oid; import org.tests.model.ivo.converter.AnEnumType; @@ -8,6 +9,9 @@ import javax.persistence.Id; import javax.persistence.Version; import java.sql.Timestamp; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + +@Identity(generated = BY_DEFAULT) @Entity public class DExhEntity { diff --git a/src/test/java/org/tests/model/draftable/BaseDomain.java b/src/test/java/org/tests/model/draftable/BaseDomain.java index c593f4120..5d44a2fb7 100644 --- a/src/test/java/org/tests/model/draftable/BaseDomain.java +++ b/src/test/java/org/tests/model/draftable/BaseDomain.java @@ -1,6 +1,7 @@ package org.tests.model.draftable; import io.ebean.Model; +import io.ebean.annotation.Identity; import io.ebean.annotation.WhenCreated; import io.ebean.annotation.WhenModified; @@ -9,6 +10,9 @@ import javax.persistence.MappedSuperclass; import javax.persistence.Version; import java.sql.Timestamp; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + +@Identity(generated = BY_DEFAULT) @MappedSuperclass public class BaseDomain extends Model { diff --git a/src/test/java/org/tests/model/m2m/MnyB.java b/src/test/java/org/tests/model/m2m/MnyB.java index ac9c1f58b..d6a1c1bd7 100644 --- a/src/test/java/org/tests/model/m2m/MnyB.java +++ b/src/test/java/org/tests/model/m2m/MnyB.java @@ -1,5 +1,6 @@ package org.tests.model.m2m; +import io.ebean.annotation.Identity; import org.tests.model.BaseModel; import javax.persistence.CascadeType; @@ -8,6 +9,9 @@ import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import java.util.List; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + +@Identity(generated = BY_DEFAULT) @Entity public class MnyB extends BaseModel { diff --git a/src/test/java/org/tests/model/m2m/MnyC.java b/src/test/java/org/tests/model/m2m/MnyC.java index 720baff86..b582a16b0 100644 --- a/src/test/java/org/tests/model/m2m/MnyC.java +++ b/src/test/java/org/tests/model/m2m/MnyC.java @@ -1,11 +1,15 @@ package org.tests.model.m2m; +import io.ebean.annotation.Identity; import org.tests.model.BaseModel; import javax.persistence.Entity; import javax.persistence.ManyToMany; import java.util.List; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + +@Identity(generated = BY_DEFAULT) @Entity public class MnyC extends BaseModel { diff --git a/src/test/java/org/tests/model/nofk/EUserNoFk.java b/src/test/java/org/tests/model/nofk/EUserNoFk.java index 2b4e57013..73371c740 100644 --- a/src/test/java/org/tests/model/nofk/EUserNoFk.java +++ b/src/test/java/org/tests/model/nofk/EUserNoFk.java @@ -1,10 +1,15 @@ package org.tests.model.nofk; +import io.ebean.annotation.Identity; + import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import java.util.List; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + +@Identity(generated = BY_DEFAULT) @Entity public class EUserNoFk { diff --git a/src/test/java/org/tests/model/nofk/EUserNoFkSoftDel.java b/src/test/java/org/tests/model/nofk/EUserNoFkSoftDel.java index f3eea2bcd..dfc9832c5 100644 --- a/src/test/java/org/tests/model/nofk/EUserNoFkSoftDel.java +++ b/src/test/java/org/tests/model/nofk/EUserNoFkSoftDel.java @@ -1,6 +1,7 @@ package org.tests.model.nofk; import io.ebean.annotation.Formula; +import io.ebean.annotation.Identity; import io.ebean.annotation.Platform; import io.ebean.annotation.SoftDelete; @@ -9,6 +10,9 @@ import javax.persistence.Id; import javax.persistence.OneToMany; import java.util.List; +import static io.ebean.annotation.IdentityGenerated.BY_DEFAULT; + +@Identity(generated = BY_DEFAULT) @Entity public class EUserNoFkSoftDel { diff --git a/src/test/java/org/tests/model/onetoone/OtoBChild.java b/src/test/java/org/tests/model/onetoone/OtoBChild.java index a91fce44b..744b1fd6c 100644 --- a/src/test/java/org/tests/model/onetoone/OtoBChild.java +++ b/src/test/java/org/tests/model/onetoone/OtoBChild.java @@ -1,11 +1,15 @@ package org.tests.model.onetoone; +import io.ebean.annotation.Identity; +import io.ebean.annotation.IdentityGenerated; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; +@Identity(generated = IdentityGenerated.BY_DEFAULT) @Entity public class OtoBChild { diff --git a/src/test/java/org/tests/model/onetoone/OtoPrimeExtra.java b/src/test/java/org/tests/model/onetoone/OtoPrimeExtra.java index f7683c5ac..b09cf2275 100644 --- a/src/test/java/org/tests/model/onetoone/OtoPrimeExtra.java +++ b/src/test/java/org/tests/model/onetoone/OtoPrimeExtra.java @@ -1,9 +1,13 @@ package org.tests.model.onetoone; +import io.ebean.annotation.Identity; +import io.ebean.annotation.IdentityGenerated; + import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Version; +@Identity(generated = IdentityGenerated.BY_DEFAULT) @Entity public class OtoPrimeExtra { diff --git a/src/test/resources/assert/BaseDdlHandlerTest/baseApply.sql b/src/test/resources/assert/BaseDdlHandlerTest/baseApply.sql index 194491b00..74f140511 100644 --- a/src/test/resources/assert/BaseDdlHandlerTest/baseApply.sql +++ b/src/test/resources/assert/BaseDdlHandlerTest/baseApply.sql @@ -1,5 +1,5 @@ create table foo ( - col1 varchar(4) auto_increment not null, + col1 varchar(4) generated by default as identity not null, col2 varchar(30) not null, col3 varchar(30) not null, constraint pk_foo primary key (col1) diff --git a/src/test/resources/assert/BaseTableDdlTest/createTable-apply.txt b/src/test/resources/assert/BaseTableDdlTest/createTable-apply.txt index 3dc2ab1be..07bfc43db 100644 --- a/src/test/resources/assert/BaseTableDdlTest/createTable-apply.txt +++ b/src/test/resources/assert/BaseTableDdlTest/createTable-apply.txt @@ -1,5 +1,5 @@ create table mytable ( - id integer auto_increment not null, + id integer generated by default as identity not null, status varchar(1) not null, order_id integer not null, constraint ck_mytable_status check (status in ('A','B')), diff --git a/src/test/resources/assert/ModelBuild_compoundKeyTest/apply.sql b/src/test/resources/assert/ModelBuild_compoundKeyTest/apply.sql index 8951d13e2..44283c3bf 100644 --- a/src/test/resources/assert/ModelBuild_compoundKeyTest/apply.sql +++ b/src/test/resources/assert/ModelBuild_compoundKeyTest/apply.sql @@ -1,11 +1,11 @@ create table ckey_assoc ( - id integer auto_increment not null, + id integer generated by default as identity not null, assoc_one varchar(255), constraint pk_ckey_assoc primary key (id) ); create table ckey_detail ( - id integer auto_increment not null, + id integer generated by default as identity not null, something varchar(255), one_key integer, two_key varchar(127), diff --git a/src/test/resources/assert/ModelBuild_explicitSequencesTest/apply.sql b/src/test/resources/assert/ModelBuild_explicitSequencesTest/apply.sql index 331c29ad3..c84e3c252 100644 --- a/src/test/resources/assert/ModelBuild_explicitSequencesTest/apply.sql +++ b/src/test/resources/assert/ModelBuild_explicitSequencesTest/apply.sql @@ -1,12 +1,12 @@ create table persons ( - id bigint auto_increment not null, + 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 ( - id bigint auto_increment not null, + id bigint generated by default as identity not null, phone_number varchar(7) not null, person_id bigint not null, constraint uq_phones_phone_number unique (phone_number), diff --git a/src/test/resources/assert/ModelBuild_explicitSequencesTest/pg-apply.sql b/src/test/resources/assert/ModelBuild_explicitSequencesTest/pg-apply.sql index dfab09392..e866a1f4b 100644 --- a/src/test/resources/assert/ModelBuild_explicitSequencesTest/pg-apply.sql +++ b/src/test/resources/assert/ModelBuild_explicitSequencesTest/pg-apply.sql @@ -1,5 +1,5 @@ create table persons ( - id bigint generated by default as identity not null, + 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) diff --git a/src/test/resources/assert/create-table.txt b/src/test/resources/assert/create-table.txt index 15c409c99..3330f90e5 100644 --- a/src/test/resources/assert/create-table.txt +++ b/src/test/resources/assert/create-table.txt @@ -1,5 +1,5 @@ create table foo ( - col1 varchar(4) auto_increment not null, + col1 varchar(4) generated by default as identity not null, col2 varchar(30) not null, col3 varchar(30) not null, constraint pk_foo primary key (col1) diff --git a/src/test/resources/dbmigration/migrationtest-history/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest-history/1.0__initial.sql index 344badd88..c2e2019a7 100644 --- a/src/test/resources/dbmigration/migrationtest-history/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest-history/1.0__initial.sql @@ -1,7 +1,7 @@ -- Migrationscripts for ebean unittest DbMigrationDropHistoryTest -- apply changes create table migtest_e_history7 ( - id integer auto_increment not null, + id integer generated by default as identity not null, constraint pk_migtest_e_history7 primary key (id) ); diff --git a/src/test/resources/dbmigration/migrationtest/h2/1.0__initial.sql b/src/test/resources/dbmigration/migrationtest/h2/1.0__initial.sql index 46b82191e..37db6d4b2 100644 --- a/src/test/resources/dbmigration/migrationtest/h2/1.0__initial.sql +++ b/src/test/resources/dbmigration/migrationtest/h2/1.0__initial.sql @@ -1,13 +1,13 @@ -- Migrationscripts for ebean unittest -- apply changes create table migtest_ckey_assoc ( - id integer auto_increment not null, + id integer generated by default as identity not null, assoc_one varchar(255), constraint pk_migtest_ckey_assoc primary key (id) ); create table migtest_ckey_detail ( - id integer auto_increment not null, + id integer generated by default as identity not null, something varchar(255), constraint pk_migtest_ckey_detail primary key (id) ); @@ -21,41 +21,41 @@ create table migtest_ckey_parent ( ); create table migtest_fk_cascade ( - id bigint auto_increment not null, + id bigint generated by default as identity not null, one_id bigint, constraint pk_migtest_fk_cascade primary key (id) ); create table migtest_fk_cascade_one ( - id bigint auto_increment not null, + id bigint generated by default as identity not null, constraint pk_migtest_fk_cascade_one primary key (id) ); create table migtest_fk_none ( - id bigint auto_increment not null, + id bigint generated by default as identity not null, one_id bigint, constraint pk_migtest_fk_none primary key (id) ); create table migtest_fk_none_via_join ( - id bigint auto_increment not null, + id bigint generated by default as identity not null, one_id bigint, constraint pk_migtest_fk_none_via_join primary key (id) ); create table migtest_fk_one ( - id bigint auto_increment not null, + id bigint generated by default as identity not null, constraint pk_migtest_fk_one primary key (id) ); create table migtest_fk_set_null ( - id bigint auto_increment not null, + id bigint generated by default as identity not null, one_id bigint, constraint pk_migtest_fk_set_null primary key (id) ); create table migtest_e_basic ( - id integer auto_increment not null, + id integer generated by default as identity not null, status varchar(1), status2 varchar(1) default 'N' not null, name varchar(127), @@ -79,20 +79,20 @@ create table migtest_e_basic ( ); create table migtest_e_enum ( - id integer auto_increment not null, + id integer generated by default as identity not null, test_status varchar(1), constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')), constraint pk_migtest_e_enum primary key (id) ); create table migtest_e_history ( - id integer auto_increment not null, + id integer generated by default as identity not null, test_string varchar(255), constraint pk_migtest_e_history primary key (id) ); create table migtest_e_history2 ( - id integer auto_increment not null, + id integer generated by default as identity not null, test_string varchar(255), obsolete_string1 varchar(255), obsolete_string2 varchar(255), @@ -100,63 +100,63 @@ create table migtest_e_history2 ( ); create table migtest_e_history3 ( - id integer auto_increment not null, + id integer generated by default as identity not null, test_string varchar(255), constraint pk_migtest_e_history3 primary key (id) ); create table migtest_e_history4 ( - id integer auto_increment not null, + id integer generated by default as identity not null, test_number integer, constraint pk_migtest_e_history4 primary key (id) ); create table migtest_e_history5 ( - id integer auto_increment not null, + id integer generated by default as identity not null, test_number integer, constraint pk_migtest_e_history5 primary key (id) ); create table migtest_e_history6 ( - id integer auto_increment not null, + id integer generated by default as identity not null, test_number1 integer, test_number2 integer not null, constraint pk_migtest_e_history6 primary key (id) ); create table migtest_e_ref ( - id integer auto_increment not null, + id integer generated by default as identity not null, name varchar(127) not null, constraint uq_migtest_e_ref_name unique (name), constraint pk_migtest_e_ref primary key (id) ); create table migtest_e_softdelete ( - id integer auto_increment not null, + id integer generated by default as identity not null, test_string varchar(255), constraint pk_migtest_e_softdelete primary key (id) ); create table migtest_mtm_c ( - id integer auto_increment not null, + id integer generated by default as identity not null, name varchar(255), constraint pk_migtest_mtm_c primary key (id) ); create table migtest_mtm_m ( - id bigint auto_increment not null, + id bigint generated by default as identity not null, name varchar(255), constraint pk_migtest_mtm_m primary key (id) ); create table migtest_oto_child ( - id integer auto_increment not null, + id integer generated by default as identity not null, name varchar(255), constraint pk_migtest_oto_child primary key (id) ); create table migtest_oto_master ( - id bigint auto_increment not null, + id bigint generated by default as identity not null, name varchar(255), constraint pk_migtest_oto_master primary key (id) ); diff --git a/src/test/resources/dbmigration/migrationtest/h2/1.1.sql b/src/test/resources/dbmigration/migrationtest/h2/1.1.sql index 877c54f92..b51d15d2e 100644 --- a/src/test/resources/dbmigration/migrationtest/h2/1.1.sql +++ b/src/test/resources/dbmigration/migrationtest/h2/1.1.sql @@ -7,7 +7,7 @@ drop view if exists migtest_e_history5_with_history; -- apply changes create table migtest_e_user ( - id integer auto_increment not null, + id integer generated by default as identity not null, constraint pk_migtest_e_user primary key (id) ); diff --git a/src/test/resources/dbmigration/migrationtest/h2/1.3.sql b/src/test/resources/dbmigration/migrationtest/h2/1.3.sql index 050bb2146..79645fc49 100644 --- a/src/test/resources/dbmigration/migrationtest/h2/1.3.sql +++ b/src/test/resources/dbmigration/migrationtest/h2/1.3.sql @@ -6,7 +6,7 @@ drop view if exists migtest_e_history4_with_history; -- apply changes create table migtest_e_ref ( - id integer auto_increment not null, + id integer generated by default as identity not null, name varchar(127) not null, constraint uq_migtest_e_ref_name unique (name), constraint pk_migtest_e_ref primary key (id)