mirror of
https://github.com/ebean-orm/ebean.git
synced 2026-10-23 12:19:09 +00:00
Merge branch 'ebean-orm-master'
This commit is contained in:
@@ -118,7 +118,7 @@
|
||||
<dependency>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-annotation</artifactId>
|
||||
<version>4.12</version>
|
||||
<version>4.13</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -330,7 +330,7 @@
|
||||
<plugin>
|
||||
<groupId>io.ebean</groupId>
|
||||
<artifactId>ebean-maven-plugin</artifactId>
|
||||
<version>11.44.1</version>
|
||||
<version>11.45.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>test</id>
|
||||
|
||||
@@ -54,6 +54,8 @@ public class PlatformConfig {
|
||||
|
||||
private boolean caseSensitiveCollation = true;
|
||||
|
||||
private boolean useMigrationStoredProcedures;
|
||||
|
||||
/**
|
||||
* Modify the default mapping of standard types such as default precision for DECIMAL etc.
|
||||
*/
|
||||
@@ -76,6 +78,7 @@ public class PlatformConfig {
|
||||
this.idType = platformConfig.idType;
|
||||
this.geometrySRID = platformConfig.geometrySRID;
|
||||
this.dbUuid = platformConfig.dbUuid;
|
||||
this.useMigrationStoredProcedures = platformConfig.useMigrationStoredProcedures;
|
||||
this.caseSensitiveCollation = platformConfig.caseSensitiveCollation;
|
||||
this.allQuotedIdentifiers = platformConfig.allQuotedIdentifiers;
|
||||
this.databaseInetAddressVarchar = platformConfig.databaseInetAddressVarchar;
|
||||
@@ -110,6 +113,20 @@ public class PlatformConfig {
|
||||
this.caseSensitiveCollation = caseSensitiveCollation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if force use of helper stored procedures for migrations.
|
||||
*/
|
||||
public boolean isUseMigrationStoredProcedures() {
|
||||
return useMigrationStoredProcedures;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set true to force use of helper stored procedures for migrations.
|
||||
*/
|
||||
public void setUseMigrationStoredProcedures(boolean useMigrationStoredProcedures) {
|
||||
this.useMigrationStoredProcedures = useMigrationStoredProcedures;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a value used to represent TRUE in the database.
|
||||
* <p>
|
||||
@@ -276,6 +293,7 @@ public class PlatformConfig {
|
||||
databaseBooleanFalse = p.get("databaseBooleanFalse", databaseBooleanFalse);
|
||||
databaseInetAddressVarchar = p.getBoolean("databaseInetAddressVarchar", databaseInetAddressVarchar);
|
||||
caseSensitiveCollation = p.getBoolean("caseSensitiveCollation", caseSensitiveCollation);
|
||||
useMigrationStoredProcedures = p.getBoolean("useMigrationStoredProcedures", useMigrationStoredProcedures);;
|
||||
|
||||
DbUuid dbUuid = p.getEnum(DbUuid.class, "dbuuid", null);
|
||||
if (dbUuid != null) {
|
||||
|
||||
@@ -53,6 +53,8 @@ public class DatabasePlatform {
|
||||
|
||||
protected boolean supportsSavepointId = true;
|
||||
|
||||
protected boolean useMigrationStoredProcedures = true;
|
||||
|
||||
/**
|
||||
* The behaviour used when ending a read only transaction at read committed isolation level.
|
||||
*/
|
||||
@@ -233,6 +235,9 @@ public class DatabasePlatform {
|
||||
public void configure(PlatformConfig config) {
|
||||
this.sequenceBatchSize = config.getDatabaseSequenceBatchSize();
|
||||
this.caseSensitiveCollation = config.isCaseSensitiveCollation();
|
||||
if (config.isUseMigrationStoredProcedures()) {
|
||||
useMigrationStoredProcedures = true;
|
||||
}
|
||||
configureIdType(config.getIdType());
|
||||
configure(config, config.isAllQuotedIdentifiers());
|
||||
}
|
||||
@@ -339,6 +344,13 @@ public class DatabasePlatform {
|
||||
return supportsSavepointId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if migrations should use stored procedures.
|
||||
*/
|
||||
public boolean isUseMigrationStoredProcedures() {
|
||||
return useMigrationStoredProcedures;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the maximum table name length.
|
||||
* <p>
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package io.ebean.config.dbplatform.mysql;
|
||||
|
||||
import io.ebean.annotation.Platform;
|
||||
import io.ebean.config.dbplatform.DbPlatformType;
|
||||
import io.ebean.config.dbplatform.DbType;
|
||||
|
||||
public class MySql55Platform extends MySqlPlatform {
|
||||
|
||||
public MySql55Platform() {
|
||||
super();
|
||||
this.platform = Platform.MYSQL55;
|
||||
dbTypeMap.put(DbType.TIMESTAMP, new DbPlatformType("datetime"));
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ public class MySqlPlatform extends DatabasePlatform {
|
||||
this.useExtraTransactionOnIterateSecondaryQueries = true;
|
||||
this.selectCountWithAlias = true;
|
||||
this.supportsSavepointId = false;
|
||||
this.useMigrationStoredProcedures = false;
|
||||
this.dbEncrypt = new MySqlDbEncrypt();
|
||||
this.historySupport = new MySqlHistorySupport();
|
||||
this.columnAliasPrefix = null;
|
||||
|
||||
@@ -47,6 +47,7 @@ public class DdlGenerator {
|
||||
private final boolean ddlAutoCommit;
|
||||
private final String dbSchema;
|
||||
private final ScriptTransform scriptTransform;
|
||||
private final boolean useMigrationStoredProcedures;
|
||||
|
||||
private CurrentModel currentModel;
|
||||
private String dropAllContent;
|
||||
@@ -64,9 +65,11 @@ public class DdlGenerator {
|
||||
log.warn("DDL can't be run on startup with TenantMode " + serverConfig.getTenantMode());
|
||||
this.runDdl = false;
|
||||
this.ddlAutoCommit = false;
|
||||
this.useMigrationStoredProcedures = false;
|
||||
} else {
|
||||
this.runDdl = serverConfig.isDdlRun();
|
||||
this.ddlAutoCommit = server.getDatabasePlatform().isDdlAutoCommit();
|
||||
this.useMigrationStoredProcedures = server.getDatabasePlatform().isUseMigrationStoredProcedures();
|
||||
}
|
||||
this.scriptTransform = createScriptTransform(serverConfig.getMigrationConfig());
|
||||
this.baseDir = initBaseDir();
|
||||
@@ -179,7 +182,7 @@ public class DdlGenerator {
|
||||
|
||||
protected void runDropSql(Connection connection) throws IOException {
|
||||
if (!createOnly) {
|
||||
if (extraDdl && jaxbPresent) {
|
||||
if (extraDdl && jaxbPresent && useMigrationStoredProcedures) {
|
||||
String extraApply = ExtraDdlXmlReader.buildExtra(server.getDatabasePlatform().getName(), true);
|
||||
if (extraApply != null) {
|
||||
runScript(connection, false, extraApply, "extra-ddl");
|
||||
@@ -199,7 +202,7 @@ public class DdlGenerator {
|
||||
}
|
||||
runScript(connection, false, createAllContent, getCreateFileName());
|
||||
|
||||
if (extraDdl && jaxbPresent) {
|
||||
if (extraDdl && jaxbPresent && useMigrationStoredProcedures) {
|
||||
if (currentModel().isTablePartitioning()) {
|
||||
String extraPartitioning = ExtraDdlXmlReader.buildPartitioning(server.getDatabasePlatform().getName());
|
||||
if (extraPartitioning != null && !extraPartitioning.isEmpty()) {
|
||||
|
||||
@@ -14,6 +14,7 @@ import io.ebean.config.dbplatform.db2.DB2Platform;
|
||||
import io.ebean.config.dbplatform.h2.H2Platform;
|
||||
import io.ebean.config.dbplatform.hana.HanaPlatform;
|
||||
import io.ebean.config.dbplatform.hsqldb.HsqldbPlatform;
|
||||
import io.ebean.config.dbplatform.mysql.MySql55Platform;
|
||||
import io.ebean.config.dbplatform.mysql.MySqlPlatform;
|
||||
import io.ebean.config.dbplatform.nuodb.NuoDbPlatform;
|
||||
import io.ebean.config.dbplatform.oracle.OraclePlatform;
|
||||
@@ -787,6 +788,8 @@ public class DefaultDbMigration implements DbMigration {
|
||||
return new HsqldbPlatform();
|
||||
case POSTGRES:
|
||||
return new PostgresPlatform();
|
||||
case MYSQL55:
|
||||
return new MySql55Platform();
|
||||
case MYSQL:
|
||||
return new MySqlPlatform();
|
||||
case ORACLE:
|
||||
|
||||
@@ -18,12 +18,15 @@ public class MySqlDdl extends PlatformDdl {
|
||||
// this flag is for compatibility. Use it with care.
|
||||
private static final boolean USE_CHECK_CONSTRAINT = Boolean.getBoolean("ebean.mysql.useCheckConstraint");
|
||||
|
||||
private final boolean useMigrationStoredProcedures;
|
||||
|
||||
public MySqlDdl(DatabasePlatform platform) {
|
||||
super(platform);
|
||||
this.alterColumn = "modify";
|
||||
this.dropUniqueConstraint = "drop index";
|
||||
this.historyDdl = new MySqlHistoryDdl();
|
||||
this.inlineComments = true;
|
||||
this.useMigrationStoredProcedures = platform.isUseMigrationStoredProcedures();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -49,7 +52,12 @@ public class MySqlDdl extends PlatformDdl {
|
||||
@Override
|
||||
public void alterTableDropColumn(DdlBuffer buffer, String tableName, String columnName) throws IOException {
|
||||
|
||||
buffer.append("CALL usp_ebean_drop_column('").append(tableName).append("', '").append(columnName).append("')").endOfStatement();
|
||||
if (useMigrationStoredProcedures) {
|
||||
buffer.append("CALL usp_ebean_drop_column('").append(tableName).append("', '").append(columnName).append("')").endOfStatement();
|
||||
} else {
|
||||
buffer.append("alter table ").append(tableName).append(" ").append(dropColumn).append(" ").append(columnName)
|
||||
.append(dropColumnSuffix).endOfStatement();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -60,6 +68,7 @@ public class MySqlDdl extends PlatformDdl {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String alterTableAddCheckConstraint(String tableName, String checkConstraintName, String checkConstraint) {
|
||||
if (USE_CHECK_CONSTRAINT) {
|
||||
@@ -96,17 +105,13 @@ public class MySqlDdl extends PlatformDdl {
|
||||
|
||||
@Override
|
||||
public String alterColumnNotnull(String tableName, String columnName, boolean notnull) {
|
||||
|
||||
// can't alter itself - done in alterColumnBaseAttributes()
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String alterColumnDefaultValue(String tableName, String columnName, String defaultValue) {
|
||||
|
||||
String suffix = DdlHelp.isDropDefault(defaultValue) ? columnDropDefault : columnSetDefault + " " + convertDefaultValue(defaultValue);
|
||||
|
||||
// use alter
|
||||
return "alter table " + tableName + " alter " + columnName + " " + suffix;
|
||||
}
|
||||
|
||||
@@ -124,7 +129,6 @@ public class MySqlDdl extends PlatformDdl {
|
||||
boolean notnull = (alter.isNotnull() != null) ? alter.isNotnull() : Boolean.TRUE.equals(alter.isCurrentNotnull());
|
||||
String notnullClause = notnull ? " not null" : "";
|
||||
|
||||
// use modify
|
||||
return "alter table " + tableName + " modify " + columnName + " " + type + notnullClause;
|
||||
}
|
||||
|
||||
@@ -161,7 +165,7 @@ public class MySqlDdl extends PlatformDdl {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addColumnComment(DdlBuffer apply, String table, String column, String comment) throws IOException {
|
||||
public void addColumnComment(DdlBuffer apply, String table, String column, String comment) {
|
||||
// alter comment currently not supported as it requires to repeat whole column definition
|
||||
}
|
||||
|
||||
@@ -182,7 +186,6 @@ public class MySqlDdl extends PlatformDdl {
|
||||
i++;
|
||||
}
|
||||
buffer.endOfStatement();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import io.ebean.config.dbplatform.db2.DB2Platform;
|
||||
import io.ebean.config.dbplatform.h2.H2Platform;
|
||||
import io.ebean.config.dbplatform.hana.HanaPlatform;
|
||||
import io.ebean.config.dbplatform.hsqldb.HsqldbPlatform;
|
||||
import io.ebean.config.dbplatform.mysql.MySql55Platform;
|
||||
import io.ebean.config.dbplatform.mysql.MySqlPlatform;
|
||||
import io.ebean.config.dbplatform.nuodb.NuoDbPlatform;
|
||||
import io.ebean.config.dbplatform.oracle.OraclePlatform;
|
||||
@@ -82,6 +83,9 @@ public class DatabasePlatformFactory {
|
||||
if (dbName.equals("mysql")) {
|
||||
return new MySqlPlatform();
|
||||
}
|
||||
if (dbName.equals("mysql55")) {
|
||||
return new MySql55Platform();
|
||||
}
|
||||
if (dbName.equals("postgres") || dbName.equals("postgres9")) {
|
||||
return new PostgresPlatform();
|
||||
}
|
||||
@@ -147,15 +151,16 @@ public class DatabasePlatformFactory {
|
||||
*/
|
||||
private DatabasePlatform byDatabaseMeta(DatabaseMetaData metaData, Connection connection) throws SQLException {
|
||||
|
||||
String dbProductName = metaData.getDatabaseProductName();
|
||||
dbProductName = dbProductName.toLowerCase();
|
||||
String dbProductName = metaData.getDatabaseProductName().toLowerCase();
|
||||
final int majorVersion = metaData.getDatabaseMajorVersion();
|
||||
final int minorVersion = metaData.getDatabaseMinorVersion();
|
||||
|
||||
if (dbProductName.contains("oracle")) {
|
||||
return new OraclePlatform();
|
||||
} else if (dbProductName.contains("microsoft")) {
|
||||
throw new IllegalArgumentException("For SqlServer please explicitly choose either sqlserver16 or sqlserver17 as the platform via ServerConfig.setDatabasePlatformName. Refer to issue #1340 for more details");
|
||||
} else if (dbProductName.contains("mysql")) {
|
||||
return new MySqlPlatform();
|
||||
return mysqlVersion(majorVersion, minorVersion);
|
||||
} else if (dbProductName.contains("h2")) {
|
||||
return new H2Platform();
|
||||
} else if (dbProductName.contains("hsql database engine")) {
|
||||
@@ -180,6 +185,13 @@ public class DatabasePlatformFactory {
|
||||
return new DatabasePlatform();
|
||||
}
|
||||
|
||||
private DatabasePlatform mysqlVersion(int majorVersion, int minorVersion) {
|
||||
if (majorVersion <= 5 && minorVersion <= 5) {
|
||||
return new MySql55Platform();
|
||||
}
|
||||
return new MySqlPlatform();
|
||||
}
|
||||
|
||||
/**
|
||||
* Use a select version() query as it could be Postgres or CockroachDB.
|
||||
*/
|
||||
|
||||
@@ -514,7 +514,7 @@ public class InternalConfiguration {
|
||||
|
||||
String tz = serverConfig.getDataTimeZone();
|
||||
if (tz == null) {
|
||||
if (getPlatform() == Platform.MYSQL) {
|
||||
if (isMySql(getPlatform())) {
|
||||
return new LocalDataTimeZone();
|
||||
}
|
||||
return new NoDataTimeZone();
|
||||
@@ -526,6 +526,10 @@ public class InternalConfiguration {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isMySql(Platform platform) {
|
||||
return platform == Platform.MYSQL || platform == Platform.MYSQL55;
|
||||
}
|
||||
|
||||
public DataTimeZone getDataTimeZone() {
|
||||
return dataTimeZone;
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ public class PlatformDdlBuilder {
|
||||
return new H2Ddl(platform);
|
||||
case DB2:
|
||||
return new DB2Ddl(platform);
|
||||
case MYSQL55:
|
||||
case MYSQL:
|
||||
return new MySqlDdl(platform);
|
||||
case HSQLDB:
|
||||
|
||||
@@ -66,7 +66,6 @@ import io.ebeaninternal.server.el.ElPropertyChainBuilder;
|
||||
import io.ebeaninternal.server.el.ElPropertyDeploy;
|
||||
import io.ebeaninternal.server.el.ElPropertyValue;
|
||||
import io.ebeaninternal.server.persist.DeleteMode;
|
||||
import io.ebeaninternal.server.persist.DmlUtil;
|
||||
import io.ebeaninternal.server.query.CQueryPlan;
|
||||
import io.ebeaninternal.server.query.ExtraJoin;
|
||||
import io.ebeaninternal.server.query.STreeProperty;
|
||||
@@ -77,6 +76,7 @@ import io.ebeaninternal.server.query.STreeType;
|
||||
import io.ebeaninternal.server.query.SqlBeanLoad;
|
||||
import io.ebeaninternal.server.querydefn.DefaultOrmQuery;
|
||||
import io.ebeaninternal.server.querydefn.OrmQueryDetail;
|
||||
import io.ebeaninternal.server.querydefn.OrmQueryProperties;
|
||||
import io.ebeaninternal.server.rawsql.SpiRawSql;
|
||||
import io.ebeaninternal.server.type.DataBind;
|
||||
import io.ebeaninternal.server.type.ScalarType;
|
||||
@@ -333,6 +333,7 @@ public class BeanDescriptor<T> implements BeanType<T>, STreeType {
|
||||
* list of properties that are Lists/Sets/Maps (Derived).
|
||||
*/
|
||||
private final BeanProperty[] propertiesNonMany;
|
||||
private final BeanProperty[] propertiesAggregate;
|
||||
private final BeanPropertyAssocMany<?>[] propertiesMany;
|
||||
private final BeanPropertyAssocMany<?>[] propertiesManySave;
|
||||
private final BeanPropertyAssocMany<?>[] propertiesManyDelete;
|
||||
@@ -515,6 +516,7 @@ public class BeanDescriptor<T> implements BeanType<T>, STreeType {
|
||||
|
||||
this.propertiesMany = listHelper.getMany();
|
||||
this.propertiesNonMany = listHelper.getNonMany();
|
||||
this.propertiesAggregate = listHelper.getAggregates();
|
||||
this.propertiesManySave = listHelper.getManySave();
|
||||
this.propertiesManyDelete = listHelper.getManyDelete();
|
||||
this.propertiesManyToMany = listHelper.getManyToMany();
|
||||
@@ -3169,6 +3171,25 @@ public class BeanDescriptor<T> implements BeanType<T>, STreeType {
|
||||
return propertiesEmbedded;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the query detail includes an aggregation property.
|
||||
*/
|
||||
public boolean includesAggregation(OrmQueryDetail detail) {
|
||||
return detail != null && propertiesAggregate.length > 0 && includesAggregation(detail.getChunk(null, false));
|
||||
}
|
||||
|
||||
private boolean includesAggregation(OrmQueryProperties rootProps) {
|
||||
if (rootProps != null) {
|
||||
final Set<String> included = rootProps.getIncluded();
|
||||
for (BeanProperty property : propertiesAggregate) {
|
||||
if (included.contains(property.getName())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all properties to be loaded (recurse to embedded beans).
|
||||
*/
|
||||
|
||||
@@ -835,6 +835,13 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
|
||||
return scalarType.format(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value from String format into Object value.
|
||||
*/
|
||||
public Object parse(String value) {
|
||||
return scalarType.parse(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the value for this property from L2 cache entry and set it to the bean.
|
||||
* <p>
|
||||
|
||||
@@ -263,11 +263,9 @@ public final class IdBinderEmbedded implements IdBinder {
|
||||
public Object convertIdFromJson(Object value) {
|
||||
|
||||
Map<String, Object> map = (Map<String, Object>) value;
|
||||
|
||||
EntityBean idValue = idDesc.createEntityBean();
|
||||
for (BeanProperty prop : props) {
|
||||
Object val = map.get(prop.getName());
|
||||
prop.setValue(idValue, val);
|
||||
prop.setValue(idValue, map.get(prop.getName()));
|
||||
}
|
||||
return idValue;
|
||||
}
|
||||
@@ -465,7 +463,14 @@ public final class IdBinderEmbedded implements IdBinder {
|
||||
|
||||
@Override
|
||||
public Object convertId(Object idValue) {
|
||||
// can not cast/convert if it is embedded
|
||||
if (idValue instanceof String) {
|
||||
final EntityBean embId = idDesc.createEntityBean();
|
||||
final String[] rawVals = ((String)idValue).split("\\|");
|
||||
for (int i = 0; i < props.length; i++) {
|
||||
props[i].setValue(embId, props[i].parse(rawVals[i]));
|
||||
}
|
||||
return embId;
|
||||
}
|
||||
return idValue;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import io.ebeaninternal.server.deploy.BeanPropertyIdClass;
|
||||
import io.ebeaninternal.server.deploy.BeanPropertyOrderColumn;
|
||||
import io.ebeaninternal.server.deploy.BeanPropertySimpleCollection;
|
||||
import io.ebeaninternal.server.deploy.InheritInfo;
|
||||
import io.ebeaninternal.server.deploy.TableJoin;
|
||||
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedProperty;
|
||||
import io.ebeaninternal.server.properties.BeanPropertySetter;
|
||||
import io.ebeaninternal.server.type.ScalarTypeString;
|
||||
@@ -54,6 +53,8 @@ public class DeployBeanPropertyLists {
|
||||
|
||||
private final List<BeanProperty> nonManys = new ArrayList<>();
|
||||
|
||||
private final List<BeanProperty> aggs = new ArrayList<>();
|
||||
|
||||
private final List<BeanPropertyAssocOne<?>> ones = new ArrayList<>();
|
||||
|
||||
private final List<BeanPropertyAssocOne<?>> onesImported = new ArrayList<>();
|
||||
@@ -232,6 +233,9 @@ public class DeployBeanPropertyLists {
|
||||
|
||||
} else {
|
||||
nonManys.add(prop);
|
||||
if (prop.isAggregation()) {
|
||||
aggs.add(prop);
|
||||
}
|
||||
if (prop.isTenantId()) {
|
||||
tenant = prop;
|
||||
}
|
||||
@@ -331,6 +335,10 @@ public class DeployBeanPropertyLists {
|
||||
return nonManys.toArray(new BeanProperty[0]);
|
||||
}
|
||||
|
||||
public BeanProperty[] getAggregates() {
|
||||
return aggs.toArray(new BeanProperty[0]);
|
||||
}
|
||||
|
||||
public BeanPropertyAssocMany<?>[] getMany() {
|
||||
return manys.toArray(new BeanPropertyAssocMany[0]);
|
||||
}
|
||||
|
||||
+1
@@ -17,6 +17,7 @@ public class DbExpressionHandlerFactory {
|
||||
return new H2DbExpression();
|
||||
case POSTGRES:
|
||||
return new PostgresDbExpression();
|
||||
case MYSQL55:
|
||||
case MYSQL:
|
||||
return new MySqlDbExpression();
|
||||
case ORACLE:
|
||||
|
||||
@@ -14,7 +14,6 @@ import io.ebean.event.readaudit.ReadAuditQueryPlan;
|
||||
import io.ebean.text.PathProperties;
|
||||
import io.ebean.util.SplitName;
|
||||
import io.ebean.util.StringHelper;
|
||||
import io.ebeaninternal.api.ManyWhereJoins;
|
||||
import io.ebeaninternal.api.SpiQuery;
|
||||
import io.ebeaninternal.server.core.OrmQueryRequest;
|
||||
import io.ebeaninternal.server.deploy.BeanDescriptor;
|
||||
@@ -44,9 +43,6 @@ import java.util.List;
|
||||
*/
|
||||
class CQueryBuilder {
|
||||
|
||||
private static final String DELETE = "Delete";
|
||||
private static final String UPDATE = "Update";
|
||||
|
||||
final String tableAliasPlaceHolder;
|
||||
final String columnAliasPrefix;
|
||||
|
||||
@@ -104,7 +100,6 @@ class CQueryBuilder {
|
||||
*/
|
||||
<T> CQueryUpdate buildUpdateQuery(boolean deleteRequest, OrmQueryRequest<T> request) {
|
||||
|
||||
String type = (deleteRequest) ? DELETE : UPDATE;
|
||||
SpiQuery<T> query = request.getQuery();
|
||||
String rootTableAlias = query.getAlias();
|
||||
query.setDelete();
|
||||
@@ -141,7 +136,7 @@ class CQueryBuilder {
|
||||
if (dbPlatform.isSupportsDeleteTableAlias()) {
|
||||
// delete from table <alias> ...
|
||||
return aliasReplace(buildSql("delete", request, predicates, sqlTree).getSql(), alias);
|
||||
} else if (dbPlatform.getPlatform() == Platform.MYSQL) {
|
||||
} else if (isMySql(dbPlatform.getPlatform())) {
|
||||
return aliasReplace(buildSql("delete " + alias, request, predicates, sqlTree).getSql(), alias);
|
||||
} else {
|
||||
// simple - delete from table ...
|
||||
@@ -155,6 +150,10 @@ class CQueryBuilder {
|
||||
return sql;
|
||||
}
|
||||
|
||||
private boolean isMySql(Platform platform) {
|
||||
return platform == Platform.MYSQL || platform == Platform.MYSQL55;
|
||||
}
|
||||
|
||||
private String alias(String rootTableAlias) {
|
||||
return (rootTableAlias == null) ? "t0" : rootTableAlias;
|
||||
}
|
||||
@@ -259,12 +258,14 @@ class CQueryBuilder {
|
||||
query.setFirstRow(0);
|
||||
query.setMaxRows(0);
|
||||
|
||||
ManyWhereJoins manyWhereJoins = query.getManyWhereJoins();
|
||||
|
||||
boolean countDistinct = query.isDistinct();
|
||||
boolean withAgg = false;
|
||||
if (!countDistinct) {
|
||||
// minimise select clause for standard count
|
||||
query.setSelectId();
|
||||
withAgg = includesAggregation(request, query);
|
||||
if (!withAgg) {
|
||||
// minimise select clause for standard count
|
||||
query.setSelectId();
|
||||
}
|
||||
}
|
||||
|
||||
CQueryPredicates predicates = new CQueryPredicates(binder, request);
|
||||
@@ -282,14 +283,14 @@ class CQueryBuilder {
|
||||
sqlTree.addSoftDeletePredicate(query);
|
||||
}
|
||||
|
||||
boolean hasMany = sqlTree.hasMany();
|
||||
boolean wrap = sqlTree.hasMany() || withAgg;
|
||||
|
||||
String sqlSelect = null;
|
||||
if (countDistinct) {
|
||||
if (sqlTree.isSingleProperty()) {
|
||||
request.setInlineCountDistinct();
|
||||
}
|
||||
} else if (!hasMany) {
|
||||
} else if (!wrap) {
|
||||
sqlSelect = "select count(*)";
|
||||
}
|
||||
|
||||
@@ -300,7 +301,7 @@ class CQueryBuilder {
|
||||
if (countDistinct) {
|
||||
sql = wrapSelectCount(sql);
|
||||
|
||||
} else if (hasMany || query.isRawSql()) {
|
||||
} else if (wrap || query.isRawSql()) {
|
||||
// remove order by - mssql does not accept order by in subqueries
|
||||
int pos = sql.lastIndexOf(" order by ");
|
||||
if (pos != -1) {
|
||||
@@ -317,6 +318,13 @@ class CQueryBuilder {
|
||||
return new CQueryRowCount(queryPlan, request, predicates);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the query includes an aggregation property.
|
||||
*/
|
||||
private <T> boolean includesAggregation(OrmQueryRequest<T> request, SpiQuery<T> query) {
|
||||
return request.getBeanDescriptor().includesAggregation(query.getDetail());
|
||||
}
|
||||
|
||||
private String wrapSelectCount(String sql) {
|
||||
sql = "select count(*) from ( " + sql + ")";
|
||||
if (selectCountWithAlias) {
|
||||
|
||||
@@ -104,8 +104,11 @@ public class ScalarTypeArrayList extends ScalarTypeArrayBase<List> implements Sc
|
||||
protected List fromArray(Object[] array1) {
|
||||
List list = new ArrayList(array1.length);
|
||||
for (Object element : array1) {
|
||||
if(element == null ) list.add(null);
|
||||
else list.add(converter.toElement(element));
|
||||
if (element == null) {
|
||||
list.add(null);
|
||||
} else {
|
||||
list.add(converter.toElement(element));
|
||||
}
|
||||
}
|
||||
return new ModifyAwareList(list);
|
||||
}
|
||||
|
||||
@@ -183,7 +183,7 @@ public abstract class BaseTestCase {
|
||||
}
|
||||
|
||||
public boolean isMySql() {
|
||||
return Platform.MYSQL == platform();
|
||||
return Platform.MYSQL == platform() || Platform.MYSQL55 == platform();
|
||||
}
|
||||
|
||||
public boolean isHana() {
|
||||
|
||||
@@ -49,6 +49,7 @@ public class DbMigrationGenerateTest {
|
||||
migration.addPlatform(Platform.H2, "h2");
|
||||
migration.addPlatform(Platform.HSQLDB, "hsqldb");
|
||||
migration.addPlatform(Platform.MYSQL, "mysql");
|
||||
migration.addPlatform(Platform.MYSQL55, "mysql55");
|
||||
migration.addPlatform(Platform.POSTGRES, "postgres");
|
||||
migration.addPlatform(Platform.ORACLE, "oracle");
|
||||
migration.addPlatform(Platform.SQLITE, "sqlite");
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.tests.cache;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.DB;
|
||||
import org.junit.Test;
|
||||
import org.tests.model.basic.CKeyParent;
|
||||
import org.tests.model.basic.CKeyParentId;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
public class TestCacheEmbeddedId extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
CKeyParentId id = new CKeyParentId(100, "testEmbedded");
|
||||
|
||||
CKeyParent p = new CKeyParent();
|
||||
p.setId(id);
|
||||
p.setName("testCache");
|
||||
|
||||
DB.save(p);
|
||||
|
||||
CKeyParent cKeyParent = DB.find(CKeyParent.class, id);
|
||||
assertNotNull(cKeyParent);
|
||||
|
||||
// find for second time
|
||||
// causes java.lang.ClassCastException: class java.lang.String cannot be cast to class org.tests.model.basic.CKeyParentId
|
||||
cKeyParent = DB.find(CKeyParent.class, id);
|
||||
assertNotNull(cKeyParent);
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,21 @@
|
||||
package org.tests.iud;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.DB;
|
||||
import io.ebean.Ebean;
|
||||
import io.ebean.PagedList;
|
||||
import org.ebeantest.LoggedSqlCollector;
|
||||
import org.junit.Test;
|
||||
import org.tests.model.carwheel.Car;
|
||||
import org.tests.model.carwheel.Tire;
|
||||
import org.tests.model.carwheel.Wheel;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class TestCarWheelIud extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
@@ -53,4 +59,44 @@ public class TestCarWheelIud extends BaseTestCase {
|
||||
Ebean.delete(car2);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aggregatePaging() {
|
||||
|
||||
DB.find(Car.class).delete();
|
||||
|
||||
final Car car0 = createCar("Ford", 40);
|
||||
final Car car1 = createCar("Ford", 50);
|
||||
final Car car2 = createCar("Mazda", 12);
|
||||
|
||||
DB.saveAll(asList(car0, car1, car2));
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
final PagedList<Car> pagedList = DB.find(Car.class)
|
||||
.select("brand, totalSold")
|
||||
.setMaxRows(10)
|
||||
.findPagedList();
|
||||
|
||||
final List<Car> list = pagedList.getList();
|
||||
final int count = pagedList.getTotalCount();
|
||||
|
||||
assertThat(list).hasSize(2);
|
||||
assertThat(count).isEqualTo(2);
|
||||
|
||||
final List<String> sql = LoggedSqlCollector.stop();
|
||||
assertThat(sql).hasSize(2);
|
||||
if (isH2() || isPostgres()) {
|
||||
assertThat(sql.get(0)).contains("select t0.brand, sum(t0.sold) from sa_car t0 group by t0.brand limit 10");
|
||||
assertThat(sql.get(1)).contains("select count(*) from ( select t0.brand, sum(t0.sold) from sa_car t0 group by t0.brand)");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private Car createCar(String brand, int sold) {
|
||||
Car car0 = new Car();
|
||||
car0.setBrand(brand);
|
||||
car0.setSold(sold);
|
||||
return car0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,28 @@ public class TestAggregationTopLevel extends BaseTestCase {
|
||||
assertThat(result).isNotEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void query_count() {
|
||||
|
||||
Query<DMachineStatsAgg> query = DB.find(DMachineStatsAgg.class)
|
||||
.select("date, totalKms")
|
||||
.setMaxRows(10)
|
||||
.having().gt("totalKms", 1)
|
||||
.query();
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
query.findCount();
|
||||
query.findList();
|
||||
|
||||
List<String> sql = LoggedSqlCollector.stop();
|
||||
assertThat(sql).hasSize(2);
|
||||
|
||||
if (isH2() || isPostgres()) {
|
||||
assertThat(sql.get(0)).contains("select count(*) from ( select t0.date, sum(t0.total_kms) from d_machine_stats t0 group by t0.date having sum(t0.total_kms) > ?)");
|
||||
assertThat(sql.get(1)).contains("select t0.date, sum(t0.total_kms) from d_machine_stats t0 group by t0.date having sum(t0.total_kms) > ? limit 10");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void query_machineTotalKms_withHaving() {
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.tests.model.carwheel;
|
||||
|
||||
import io.ebean.annotation.Aggregation;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
@@ -21,6 +23,13 @@ public class Car {
|
||||
@Version
|
||||
private int version;
|
||||
|
||||
private String brand;
|
||||
|
||||
private int sold;
|
||||
|
||||
@Aggregation("sum(sold)")
|
||||
private int totalSold;
|
||||
|
||||
@OneToMany(mappedBy = "car", cascade = CascadeType.ALL)
|
||||
private List<Wheel> wheels;
|
||||
|
||||
@@ -40,6 +49,30 @@ public class Car {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String getBrand() {
|
||||
return brand;
|
||||
}
|
||||
|
||||
public void setBrand(String brand) {
|
||||
this.brand = brand;
|
||||
}
|
||||
|
||||
public int getSold() {
|
||||
return sold;
|
||||
}
|
||||
|
||||
public void setSold(int sold) {
|
||||
this.sold = sold;
|
||||
}
|
||||
|
||||
public int getTotalSold() {
|
||||
return totalSold;
|
||||
}
|
||||
|
||||
public void setTotalSold(int totalSold) {
|
||||
this.totalSold = totalSold;
|
||||
}
|
||||
|
||||
public List<Wheel> getWheels() {
|
||||
return wheels;
|
||||
}
|
||||
|
||||
@@ -3,17 +3,17 @@
|
||||
drop view if exists migtest_e_history2_with_history;
|
||||
|
||||
-- apply changes
|
||||
CALL usp_ebean_drop_column('migtest_e_basic', 'old_boolean');
|
||||
alter table migtest_e_basic drop column old_boolean;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_basic', 'old_boolean2');
|
||||
alter table migtest_e_basic drop column old_boolean2;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_basic', 'eref_id');
|
||||
alter table migtest_e_basic drop column eref_id;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_history2', 'obsolete_string1');
|
||||
CALL usp_ebean_drop_column('migtest_e_history2_history', 'obsolete_string1');
|
||||
alter table migtest_e_history2 drop column obsolete_string1;
|
||||
alter table migtest_e_history2_history drop column obsolete_string1;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_history2', 'obsolete_string2');
|
||||
CALL usp_ebean_drop_column('migtest_e_history2_history', 'obsolete_string2');
|
||||
alter table migtest_e_history2 drop column obsolete_string2;
|
||||
alter table migtest_e_history2_history drop column obsolete_string2;
|
||||
|
||||
drop table if exists migtest_e_ref;
|
||||
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
|
||||
|
||||
@@ -3,45 +3,45 @@
|
||||
drop trigger migtest_e_history_history_upd;
|
||||
drop trigger migtest_e_history_history_del;
|
||||
drop view migtest_e_history_with_history;
|
||||
CALL usp_ebean_drop_column('migtest_e_history', 'sys_period_start');
|
||||
CALL usp_ebean_drop_column('migtest_e_history', 'sys_period_end');
|
||||
alter table migtest_e_history drop column sys_period_start;
|
||||
alter table migtest_e_history drop column sys_period_end;
|
||||
drop table migtest_e_history_history;
|
||||
|
||||
drop view if exists migtest_e_history2_with_history;
|
||||
drop view if exists migtest_e_history5_with_history;
|
||||
|
||||
-- apply changes
|
||||
CALL usp_ebean_drop_column('migtest_ckey_detail', 'one_key');
|
||||
alter table migtest_ckey_detail drop column one_key;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_ckey_detail', 'two_key');
|
||||
alter table migtest_ckey_detail drop column two_key;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_ckey_parent', 'assoc_id');
|
||||
alter table migtest_ckey_parent drop column assoc_id;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_basic', 'new_string_field');
|
||||
alter table migtest_e_basic drop column new_string_field;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_basic', 'new_boolean_field');
|
||||
alter table migtest_e_basic drop column new_boolean_field;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_basic', 'new_boolean_field2');
|
||||
alter table migtest_e_basic drop column new_boolean_field2;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_basic', 'progress');
|
||||
alter table migtest_e_basic drop column progress;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_basic', 'new_integer');
|
||||
alter table migtest_e_basic drop column new_integer;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_history2', 'test_string2');
|
||||
CALL usp_ebean_drop_column('migtest_e_history2_history', 'test_string2');
|
||||
alter table migtest_e_history2 drop column test_string2;
|
||||
alter table migtest_e_history2_history drop column test_string2;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_history2', 'test_string3');
|
||||
CALL usp_ebean_drop_column('migtest_e_history2_history', 'test_string3');
|
||||
alter table migtest_e_history2 drop column test_string3;
|
||||
alter table migtest_e_history2_history drop column test_string3;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_history2', 'new_column');
|
||||
CALL usp_ebean_drop_column('migtest_e_history2_history', 'new_column');
|
||||
alter table migtest_e_history2 drop column new_column;
|
||||
alter table migtest_e_history2_history drop column new_column;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_history5', 'test_boolean');
|
||||
CALL usp_ebean_drop_column('migtest_e_history5_history', 'test_boolean');
|
||||
alter table migtest_e_history5 drop column test_boolean;
|
||||
alter table migtest_e_history5_history drop column test_boolean;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_e_softdelete', 'deleted');
|
||||
alter table migtest_e_softdelete drop column deleted;
|
||||
|
||||
CALL usp_ebean_drop_column('migtest_oto_child', 'master_id');
|
||||
alter table migtest_oto_child drop column master_id;
|
||||
|
||||
drop table if exists migtest_e_user;
|
||||
drop table if exists migtest_mtm_c_migtest_mtm_m;
|
||||
|
||||
@@ -0,0 +1,269 @@
|
||||
-- Migrationscripts for ebean unittest
|
||||
-- apply changes
|
||||
create table migtest_ckey_assoc (
|
||||
id integer auto_increment 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,
|
||||
something varchar(255),
|
||||
constraint pk_migtest_ckey_detail primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_ckey_parent (
|
||||
one_key integer not null,
|
||||
two_key varchar(127) not null,
|
||||
name varchar(255),
|
||||
version integer not null,
|
||||
constraint pk_migtest_ckey_parent primary key (one_key,two_key)
|
||||
);
|
||||
|
||||
create table migtest_fk_cascade (
|
||||
id bigint auto_increment 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,
|
||||
constraint pk_migtest_fk_cascade_one primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_fk_none (
|
||||
id bigint auto_increment 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,
|
||||
one_id bigint,
|
||||
constraint pk_migtest_fk_none_via_join primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_fk_one (
|
||||
id bigint auto_increment not null,
|
||||
constraint pk_migtest_fk_one primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_fk_set_null (
|
||||
id bigint auto_increment 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,
|
||||
status varchar(1),
|
||||
status2 varchar(1) default 'N' not null,
|
||||
name varchar(127),
|
||||
description varchar(127),
|
||||
some_date datetime,
|
||||
old_boolean tinyint(1) default 0 not null,
|
||||
old_boolean2 tinyint(1),
|
||||
eref_id integer,
|
||||
indextest1 varchar(127),
|
||||
indextest2 varchar(127),
|
||||
indextest3 varchar(127),
|
||||
indextest4 varchar(127),
|
||||
indextest5 varchar(127),
|
||||
indextest6 varchar(127),
|
||||
user_id integer not null,
|
||||
constraint uq_migtest_e_basic_indextest2 unique (indextest2),
|
||||
constraint uq_migtest_e_basic_indextest6 unique (indextest6),
|
||||
constraint pk_migtest_e_basic primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_e_enum (
|
||||
id integer auto_increment not null,
|
||||
test_status varchar(1),
|
||||
constraint pk_migtest_e_enum primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_e_history (
|
||||
id integer auto_increment 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,
|
||||
test_string varchar(255),
|
||||
obsolete_string1 varchar(255),
|
||||
obsolete_string2 varchar(255),
|
||||
constraint pk_migtest_e_history2 primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_e_history3 (
|
||||
id integer auto_increment 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,
|
||||
test_number integer,
|
||||
constraint pk_migtest_e_history4 primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_e_history5 (
|
||||
id integer auto_increment not null,
|
||||
test_number integer,
|
||||
constraint pk_migtest_e_history5 primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_e_history6 (
|
||||
id integer auto_increment 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,
|
||||
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,
|
||||
test_string varchar(255),
|
||||
constraint pk_migtest_e_softdelete primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_mtm_c (
|
||||
id integer auto_increment not null,
|
||||
name varchar(255),
|
||||
constraint pk_migtest_mtm_c primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_mtm_m (
|
||||
id bigint auto_increment not null,
|
||||
name varchar(255),
|
||||
constraint pk_migtest_mtm_m primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_oto_child (
|
||||
id integer auto_increment not null,
|
||||
name varchar(255),
|
||||
constraint pk_migtest_oto_child primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_oto_master (
|
||||
id bigint auto_increment not null,
|
||||
name varchar(255),
|
||||
constraint pk_migtest_oto_master primary key (id)
|
||||
);
|
||||
|
||||
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_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 cascade;
|
||||
|
||||
create index ix_migtest_fk_set_null_one_id on migtest_fk_set_null (one_id);
|
||||
alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete set null on update set null;
|
||||
|
||||
create index ix_migtest_e_basic_eref_id on migtest_e_basic (eref_id);
|
||||
alter table migtest_e_basic add constraint fk_migtest_e_basic_eref_id foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict;
|
||||
|
||||
alter table migtest_e_history2 add column sys_period_start datetime(6) default now(6);
|
||||
alter table migtest_e_history2 add column sys_period_end datetime(6);
|
||||
create table migtest_e_history2_history(
|
||||
id integer,
|
||||
test_string varchar(255),
|
||||
obsolete_string1 varchar(255),
|
||||
obsolete_string2 varchar(255),
|
||||
sys_period_start datetime(6),
|
||||
sys_period_end datetime(6)
|
||||
);
|
||||
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
|
||||
|
||||
alter table migtest_e_history3 add column sys_period_start datetime(6) default now(6);
|
||||
alter table migtest_e_history3 add column sys_period_end datetime(6);
|
||||
create table migtest_e_history3_history(
|
||||
id integer,
|
||||
test_string varchar(255),
|
||||
sys_period_start datetime(6),
|
||||
sys_period_end datetime(6)
|
||||
);
|
||||
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
|
||||
|
||||
alter table migtest_e_history4 add column sys_period_start datetime(6) default now(6);
|
||||
alter table migtest_e_history4 add column sys_period_end datetime(6);
|
||||
create table migtest_e_history4_history(
|
||||
id integer,
|
||||
test_number integer,
|
||||
sys_period_start datetime(6),
|
||||
sys_period_end datetime(6)
|
||||
);
|
||||
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
|
||||
|
||||
alter table migtest_e_history5 add column sys_period_start datetime(6) default now(6);
|
||||
alter table migtest_e_history5 add column sys_period_end datetime(6);
|
||||
create table migtest_e_history5_history(
|
||||
id integer,
|
||||
test_number integer,
|
||||
sys_period_start datetime(6),
|
||||
sys_period_end datetime(6)
|
||||
);
|
||||
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
|
||||
|
||||
alter table migtest_e_history6 add column sys_period_start datetime(6) default now(6);
|
||||
alter table migtest_e_history6 add column sys_period_end datetime(6);
|
||||
create table migtest_e_history6_history(
|
||||
id integer,
|
||||
test_number1 integer,
|
||||
test_number2 integer,
|
||||
sys_period_start datetime(6),
|
||||
sys_period_end datetime(6)
|
||||
);
|
||||
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
|
||||
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_upd before update on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, obsolete_string2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.obsolete_string2);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_del before delete on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, obsolete_string2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.obsolete_string2);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history3_history_upd before update on migtest_e_history3 for each row begin
|
||||
insert into migtest_e_history3_history (sys_period_start,sys_period_end,id, test_string) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history3_history_del before delete on migtest_e_history3 for each row begin
|
||||
insert into migtest_e_history3_history (sys_period_start,sys_period_end,id, test_string) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history4_history_upd before update on migtest_e_history4 for each row begin
|
||||
insert into migtest_e_history4_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history4_history_del before delete on migtest_e_history4 for each row begin
|
||||
insert into migtest_e_history4_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history5_history_upd before update on migtest_e_history5 for each row begin
|
||||
insert into migtest_e_history5_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history5_history_del before delete on migtest_e_history5 for each row begin
|
||||
insert into migtest_e_history5_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history6_history_upd before update on migtest_e_history6 for each row begin
|
||||
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);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history6_history_del before delete on migtest_e_history6 for each row begin
|
||||
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$$
|
||||
@@ -0,0 +1,191 @@
|
||||
-- Migrationscripts for ebean unittest
|
||||
-- drop dependencies
|
||||
drop view if exists migtest_e_history2_with_history;
|
||||
drop view if exists migtest_e_history3_with_history;
|
||||
drop view if exists migtest_e_history4_with_history;
|
||||
drop view if exists migtest_e_history5_with_history;
|
||||
|
||||
-- apply changes
|
||||
create table migtest_e_user (
|
||||
id integer auto_increment not null,
|
||||
constraint pk_migtest_e_user primary key (id)
|
||||
);
|
||||
|
||||
create table migtest_mtm_c_migtest_mtm_m (
|
||||
migtest_mtm_c_id integer not null,
|
||||
migtest_mtm_m_id bigint not null,
|
||||
constraint pk_migtest_mtm_c_migtest_mtm_m primary key (migtest_mtm_c_id,migtest_mtm_m_id)
|
||||
);
|
||||
|
||||
create table migtest_mtm_m_migtest_mtm_c (
|
||||
migtest_mtm_m_id bigint not null,
|
||||
migtest_mtm_c_id integer not null,
|
||||
constraint pk_migtest_mtm_m_migtest_mtm_c primary key (migtest_mtm_m_id,migtest_mtm_c_id)
|
||||
);
|
||||
|
||||
alter table migtest_ckey_detail add column one_key integer;
|
||||
alter table migtest_ckey_detail add column two_key varchar(127);
|
||||
|
||||
alter table migtest_ckey_detail add constraint fk_migtest_ckey_detail_parent foreign key (one_key,two_key) references migtest_ckey_parent (one_key,two_key) on delete restrict on update restrict;
|
||||
alter table migtest_ckey_parent add column assoc_id integer;
|
||||
|
||||
alter table migtest_fk_cascade drop foreign key fk_migtest_fk_cascade_one_id;
|
||||
alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete restrict on update restrict;
|
||||
alter table migtest_fk_none add constraint fk_migtest_fk_none_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict;
|
||||
alter table migtest_fk_none_via_join add constraint fk_migtest_fk_none_via_join_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict;
|
||||
alter table migtest_fk_set_null drop foreign key fk_migtest_fk_set_null_one_id;
|
||||
alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict;
|
||||
|
||||
update migtest_e_basic set status = 'A' where status is null;
|
||||
alter table migtest_e_basic alter status set default 'A';
|
||||
alter table migtest_e_basic modify status varchar(1) not null;
|
||||
alter table migtest_e_basic alter status2 drop default;
|
||||
alter table migtest_e_basic modify status2 varchar(127);
|
||||
|
||||
-- rename all collisions;
|
||||
alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description);
|
||||
|
||||
insert into migtest_e_user (id) select distinct user_id from migtest_e_basic;
|
||||
alter table migtest_e_basic add constraint fk_migtest_e_basic_user_id foreign key (user_id) references migtest_e_user (id) on delete restrict on update restrict;
|
||||
alter table migtest_e_basic modify user_id integer;
|
||||
alter table migtest_e_basic add column new_string_field varchar(255) default 'foo''bar' not null;
|
||||
alter table migtest_e_basic add column new_boolean_field tinyint(1) default 1 not null;
|
||||
update migtest_e_basic set new_boolean_field = old_boolean;
|
||||
|
||||
alter table migtest_e_basic add column new_boolean_field2 tinyint(1) default 1 not null;
|
||||
alter table migtest_e_basic add column progress integer default 0 not null;
|
||||
alter table migtest_e_basic add column new_integer integer default 42 not null;
|
||||
|
||||
alter table migtest_e_basic drop index uq_migtest_e_basic_indextest2;
|
||||
alter table migtest_e_basic drop index uq_migtest_e_basic_indextest6;
|
||||
alter table migtest_e_basic add constraint uq_migtest_e_basic_status_indextest1 unique (status,indextest1);
|
||||
alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name);
|
||||
alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4);
|
||||
alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5);
|
||||
alter table migtest_e_history modify test_string bigint;
|
||||
alter table migtest_e_history comment = 'We have history now';
|
||||
|
||||
-- NOTE: table has @History - special migration may be necessary
|
||||
update migtest_e_history2 set test_string = 'unknown' where test_string is null;
|
||||
alter table migtest_e_history2 alter test_string set default 'unknown';
|
||||
alter table migtest_e_history2 modify test_string varchar(255) not null;
|
||||
alter table migtest_e_history2 add column test_string2 varchar(255);
|
||||
alter table migtest_e_history2 add column test_string3 varchar(255) default 'unknown' not null;
|
||||
alter table migtest_e_history2 add column new_column varchar(20);
|
||||
alter table migtest_e_history2_history add column test_string2 varchar(255);
|
||||
alter table migtest_e_history2_history add column test_string3 varchar(255) default 'unknown';
|
||||
alter table migtest_e_history2_history add column new_column varchar(20);
|
||||
|
||||
alter table migtest_e_history4 modify test_number bigint;
|
||||
alter table migtest_e_history4_history modify test_number bigint;
|
||||
alter table migtest_e_history5 add column test_boolean tinyint(1) default 0 not null;
|
||||
alter table migtest_e_history5_history add column test_boolean tinyint(1) default 0;
|
||||
|
||||
|
||||
-- NOTE: table has @History - special migration may be necessary
|
||||
update migtest_e_history6 set test_number1 = 42 where test_number1 is null;
|
||||
alter table migtest_e_history6 alter test_number1 set default 42;
|
||||
alter table migtest_e_history6 modify test_number1 integer not null;
|
||||
alter table migtest_e_history6 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;
|
||||
|
||||
create index ix_migtest_e_basic_indextest3 on migtest_e_basic (indextest3);
|
||||
create index ix_migtest_e_basic_indextest6 on migtest_e_basic (indextest6);
|
||||
drop index ix_migtest_e_basic_indextest1 on migtest_e_basic;
|
||||
drop index ix_migtest_e_basic_indextest5 on migtest_e_basic;
|
||||
create index ix_migtest_mtm_c_migtest_mtm_m_migtest_mtm_c on migtest_mtm_c_migtest_mtm_m (migtest_mtm_c_id);
|
||||
alter table migtest_mtm_c_migtest_mtm_m add constraint fk_migtest_mtm_c_migtest_mtm_m_migtest_mtm_c foreign key (migtest_mtm_c_id) references migtest_mtm_c (id) on delete restrict on update restrict;
|
||||
|
||||
create index ix_migtest_mtm_c_migtest_mtm_m_migtest_mtm_m on migtest_mtm_c_migtest_mtm_m (migtest_mtm_m_id);
|
||||
alter table migtest_mtm_c_migtest_mtm_m add constraint fk_migtest_mtm_c_migtest_mtm_m_migtest_mtm_m foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict;
|
||||
|
||||
create index ix_migtest_mtm_m_migtest_mtm_c_migtest_mtm_m on migtest_mtm_m_migtest_mtm_c (migtest_mtm_m_id);
|
||||
alter table migtest_mtm_m_migtest_mtm_c add constraint fk_migtest_mtm_m_migtest_mtm_c_migtest_mtm_m foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict;
|
||||
|
||||
create index ix_migtest_mtm_m_migtest_mtm_c_migtest_mtm_c on migtest_mtm_m_migtest_mtm_c (migtest_mtm_c_id);
|
||||
alter table migtest_mtm_m_migtest_mtm_c add constraint fk_migtest_mtm_m_migtest_mtm_c_migtest_mtm_c foreign key (migtest_mtm_c_id) references migtest_mtm_c (id) on delete restrict on update restrict;
|
||||
|
||||
create index ix_migtest_ckey_parent_assoc_id on migtest_ckey_parent (assoc_id);
|
||||
alter table migtest_ckey_parent add constraint fk_migtest_ckey_parent_assoc_id foreign key (assoc_id) references migtest_ckey_assoc (id) on delete restrict on update restrict;
|
||||
|
||||
alter table migtest_oto_child add constraint fk_migtest_oto_child_master_id foreign key (master_id) references migtest_oto_master (id) on delete restrict on update restrict;
|
||||
|
||||
alter table migtest_e_history add column sys_period_start datetime(6) default now(6);
|
||||
alter table migtest_e_history add column sys_period_end datetime(6);
|
||||
create table migtest_e_history_history(
|
||||
id integer,
|
||||
test_string bigint,
|
||||
sys_period_start datetime(6),
|
||||
sys_period_end datetime(6)
|
||||
);
|
||||
create view migtest_e_history_with_history as select * from migtest_e_history union all select * from migtest_e_history_history;
|
||||
|
||||
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
|
||||
|
||||
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
|
||||
|
||||
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
|
||||
|
||||
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
|
||||
|
||||
delimiter $$
|
||||
create trigger migtest_e_history_history_upd before update on migtest_e_history for each row begin
|
||||
insert into migtest_e_history_history (sys_period_start,sys_period_end,id, test_string) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history_history_del before delete on migtest_e_history for each row begin
|
||||
insert into migtest_e_history_history (sys_period_start,sys_period_end,id, test_string) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string);
|
||||
end$$
|
||||
lock tables migtest_e_history2 write, migtest_e_history3 write, migtest_e_history4 write, migtest_e_history5 write;
|
||||
-- changes: [add test_string2, add test_string3, add new_column]
|
||||
drop trigger migtest_e_history2_history_upd;
|
||||
drop trigger migtest_e_history2_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_upd before update on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, test_string3, new_column, obsolete_string1, obsolete_string2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.test_string3, OLD.new_column, OLD.obsolete_string1, OLD.obsolete_string2);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_del before delete on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, test_string3, new_column, obsolete_string1, obsolete_string2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.test_string3, OLD.new_column, OLD.obsolete_string1, OLD.obsolete_string2);
|
||||
end$$
|
||||
-- changes: [exclude test_string]
|
||||
drop trigger migtest_e_history3_history_upd;
|
||||
drop trigger migtest_e_history3_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history3_history_upd before update on migtest_e_history3 for each row begin
|
||||
insert into migtest_e_history3_history (sys_period_start,sys_period_end,id) values (OLD.sys_period_start, now(6),OLD.id);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history3_history_del before delete on migtest_e_history3 for each row begin
|
||||
insert into migtest_e_history3_history (sys_period_start,sys_period_end,id) values (OLD.sys_period_start, now(6),OLD.id);
|
||||
end$$
|
||||
-- changes: [alter test_number]
|
||||
drop trigger migtest_e_history4_history_upd;
|
||||
drop trigger migtest_e_history4_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history4_history_upd before update on migtest_e_history4 for each row begin
|
||||
insert into migtest_e_history4_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history4_history_del before delete on migtest_e_history4 for each row begin
|
||||
insert into migtest_e_history4_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
end$$
|
||||
-- changes: [add test_boolean]
|
||||
drop trigger migtest_e_history5_history_upd;
|
||||
drop trigger migtest_e_history5_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history5_history_upd before update on migtest_e_history5 for each row begin
|
||||
insert into migtest_e_history5_history (sys_period_start,sys_period_end,id, test_number, test_boolean) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number, OLD.test_boolean);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history5_history_del before delete on migtest_e_history5 for each row begin
|
||||
insert into migtest_e_history5_history (sys_period_start,sys_period_end,id, test_number, test_boolean) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number, OLD.test_boolean);
|
||||
end$$
|
||||
unlock tables;
|
||||
@@ -0,0 +1,34 @@
|
||||
-- Migrationscripts for ebean unittest
|
||||
-- drop dependencies
|
||||
drop view if exists migtest_e_history2_with_history;
|
||||
|
||||
-- apply changes
|
||||
alter table migtest_e_basic drop column old_boolean;
|
||||
|
||||
alter table migtest_e_basic drop column old_boolean2;
|
||||
|
||||
alter table migtest_e_basic drop column eref_id;
|
||||
|
||||
alter table migtest_e_history2 drop column obsolete_string1;
|
||||
alter table migtest_e_history2_history drop column obsolete_string1;
|
||||
|
||||
alter table migtest_e_history2 drop column obsolete_string2;
|
||||
alter table migtest_e_history2_history drop column obsolete_string2;
|
||||
|
||||
drop table if exists migtest_e_ref;
|
||||
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
|
||||
|
||||
lock tables migtest_e_history2 write;
|
||||
-- changes: [drop obsolete_string1, drop obsolete_string2]
|
||||
drop trigger migtest_e_history2_history_upd;
|
||||
drop trigger migtest_e_history2_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_upd before update on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, test_string3, new_column) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.test_string3, OLD.new_column);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_del before delete on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, test_string3, new_column) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.test_string3, OLD.new_column);
|
||||
end$$
|
||||
unlock tables;
|
||||
@@ -0,0 +1,111 @@
|
||||
-- Migrationscripts for ebean unittest
|
||||
-- drop dependencies
|
||||
drop view if exists migtest_e_history2_with_history;
|
||||
drop view if exists migtest_e_history3_with_history;
|
||||
drop view if exists migtest_e_history4_with_history;
|
||||
|
||||
-- apply changes
|
||||
create table migtest_e_ref (
|
||||
id integer auto_increment not null,
|
||||
name varchar(127) not null,
|
||||
constraint uq_migtest_e_ref_name unique (name),
|
||||
constraint pk_migtest_e_ref primary key (id)
|
||||
);
|
||||
|
||||
alter table migtest_ckey_detail drop foreign key fk_migtest_ckey_detail_parent;
|
||||
alter table migtest_fk_cascade drop foreign key fk_migtest_fk_cascade_one_id;
|
||||
alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update cascade;
|
||||
alter table migtest_fk_none drop foreign key fk_migtest_fk_none_one_id;
|
||||
alter table migtest_fk_none_via_join drop foreign key fk_migtest_fk_none_via_join_one_id;
|
||||
alter table migtest_fk_set_null drop foreign key fk_migtest_fk_set_null_one_id;
|
||||
alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete set null on update set null;
|
||||
alter table migtest_e_basic alter status drop default;
|
||||
alter table migtest_e_basic modify status varchar(1);
|
||||
|
||||
update migtest_e_basic set status2 = 'N' where status2 is null;
|
||||
alter table migtest_e_basic alter status2 set default 'N';
|
||||
alter table migtest_e_basic modify status2 varchar(1) not null;
|
||||
alter table migtest_e_basic drop index uq_migtest_e_basic_description;
|
||||
|
||||
update migtest_e_basic set user_id = 23 where user_id is null;
|
||||
alter table migtest_e_basic drop foreign key fk_migtest_e_basic_user_id;
|
||||
alter table migtest_e_basic alter user_id set default 23;
|
||||
alter table migtest_e_basic modify user_id integer not null;
|
||||
alter table migtest_e_basic add column old_boolean tinyint(1) default 0 not null;
|
||||
alter table migtest_e_basic add column old_boolean2 tinyint(1);
|
||||
alter table migtest_e_basic add column eref_id integer;
|
||||
|
||||
alter table migtest_e_basic drop index uq_migtest_e_basic_status_indextest1;
|
||||
alter table migtest_e_basic drop index uq_migtest_e_basic_name;
|
||||
alter table migtest_e_basic drop index uq_migtest_e_basic_indextest4;
|
||||
alter table migtest_e_basic drop index uq_migtest_e_basic_indextest5;
|
||||
alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest2 unique (indextest2);
|
||||
alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique (indextest6);
|
||||
alter table migtest_e_history comment = '';
|
||||
alter table migtest_e_history2 alter test_string drop default;
|
||||
alter table migtest_e_history2 modify test_string varchar(255);
|
||||
alter table migtest_e_history2 add column obsolete_string1 varchar(255);
|
||||
alter table migtest_e_history2 add column obsolete_string2 varchar(255);
|
||||
alter table migtest_e_history2_history add column obsolete_string1 varchar(255);
|
||||
alter table migtest_e_history2_history add column obsolete_string2 varchar(255);
|
||||
|
||||
alter table migtest_e_history4 modify test_number integer;
|
||||
alter table migtest_e_history4_history modify test_number integer;
|
||||
alter table migtest_e_history6 alter test_number1 drop default;
|
||||
alter table migtest_e_history6 modify test_number1 integer;
|
||||
|
||||
-- NOTE: table has @History - special migration may be necessary
|
||||
update migtest_e_history6 set test_number2 = 7 where test_number2 is null;
|
||||
alter table migtest_e_history6 alter test_number2 set default 7;
|
||||
alter table migtest_e_history6 modify test_number2 integer not null;
|
||||
create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1);
|
||||
create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5);
|
||||
drop index ix_migtest_e_basic_indextest3 on migtest_e_basic;
|
||||
drop index ix_migtest_e_basic_indextest6 on migtest_e_basic;
|
||||
create index ix_migtest_e_basic_eref_id on migtest_e_basic (eref_id);
|
||||
alter table migtest_e_basic add constraint fk_migtest_e_basic_eref_id foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict;
|
||||
|
||||
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
|
||||
|
||||
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
|
||||
|
||||
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
|
||||
|
||||
lock tables migtest_e_history2 write, migtest_e_history3 write, migtest_e_history4 write;
|
||||
-- changes: [add obsolete_string1, add obsolete_string2]
|
||||
drop trigger migtest_e_history2_history_upd;
|
||||
drop trigger migtest_e_history2_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_upd before update on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, obsolete_string2, test_string2, test_string3, new_column) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.obsolete_string2, OLD.test_string2, OLD.test_string3, OLD.new_column);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_del before delete on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, obsolete_string2, test_string2, test_string3, new_column) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.obsolete_string2, OLD.test_string2, OLD.test_string3, OLD.new_column);
|
||||
end$$
|
||||
-- changes: [include test_string]
|
||||
drop trigger migtest_e_history3_history_upd;
|
||||
drop trigger migtest_e_history3_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history3_history_upd before update on migtest_e_history3 for each row begin
|
||||
insert into migtest_e_history3_history (sys_period_start,sys_period_end,id, test_string) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history3_history_del before delete on migtest_e_history3 for each row begin
|
||||
insert into migtest_e_history3_history (sys_period_start,sys_period_end,id, test_string) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string);
|
||||
end$$
|
||||
-- changes: [alter test_number]
|
||||
drop trigger migtest_e_history4_history_upd;
|
||||
drop trigger migtest_e_history4_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history4_history_upd before update on migtest_e_history4 for each row begin
|
||||
insert into migtest_e_history4_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history4_history_del before delete on migtest_e_history4 for each row begin
|
||||
insert into migtest_e_history4_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
end$$
|
||||
unlock tables;
|
||||
@@ -0,0 +1,78 @@
|
||||
-- Migrationscripts for ebean unittest
|
||||
-- drop dependencies
|
||||
drop trigger migtest_e_history_history_upd;
|
||||
drop trigger migtest_e_history_history_del;
|
||||
drop view migtest_e_history_with_history;
|
||||
alter table migtest_e_history drop column sys_period_start;
|
||||
alter table migtest_e_history drop column sys_period_end;
|
||||
drop table migtest_e_history_history;
|
||||
|
||||
drop view if exists migtest_e_history2_with_history;
|
||||
drop view if exists migtest_e_history5_with_history;
|
||||
|
||||
-- apply changes
|
||||
alter table migtest_ckey_detail drop column one_key;
|
||||
|
||||
alter table migtest_ckey_detail drop column two_key;
|
||||
|
||||
alter table migtest_ckey_parent drop column assoc_id;
|
||||
|
||||
alter table migtest_e_basic drop column new_string_field;
|
||||
|
||||
alter table migtest_e_basic drop column new_boolean_field;
|
||||
|
||||
alter table migtest_e_basic drop column new_boolean_field2;
|
||||
|
||||
alter table migtest_e_basic drop column progress;
|
||||
|
||||
alter table migtest_e_basic drop column new_integer;
|
||||
|
||||
alter table migtest_e_history2 drop column test_string2;
|
||||
alter table migtest_e_history2_history drop column test_string2;
|
||||
|
||||
alter table migtest_e_history2 drop column test_string3;
|
||||
alter table migtest_e_history2_history drop column test_string3;
|
||||
|
||||
alter table migtest_e_history2 drop column new_column;
|
||||
alter table migtest_e_history2_history drop column new_column;
|
||||
|
||||
alter table migtest_e_history5 drop column test_boolean;
|
||||
alter table migtest_e_history5_history drop column test_boolean;
|
||||
|
||||
alter table migtest_e_softdelete drop column deleted;
|
||||
|
||||
alter table migtest_oto_child drop column master_id;
|
||||
|
||||
drop table if exists migtest_e_user;
|
||||
drop table if exists migtest_mtm_c_migtest_mtm_m;
|
||||
drop table if exists migtest_mtm_m_migtest_mtm_c;
|
||||
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
|
||||
|
||||
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
|
||||
|
||||
lock tables migtest_e_history2 write, migtest_e_history5 write;
|
||||
-- changes: [drop test_string2, drop test_string3, drop new_column]
|
||||
drop trigger migtest_e_history2_history_upd;
|
||||
drop trigger migtest_e_history2_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_upd before update on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, obsolete_string2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.obsolete_string2);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history2_history_del before delete on migtest_e_history2 for each row begin
|
||||
insert into migtest_e_history2_history (sys_period_start,sys_period_end,id, test_string, obsolete_string2) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_string, OLD.obsolete_string2);
|
||||
end$$
|
||||
-- changes: [drop test_boolean]
|
||||
drop trigger migtest_e_history5_history_upd;
|
||||
drop trigger migtest_e_history5_history_del;
|
||||
delimiter $$
|
||||
create trigger migtest_e_history5_history_upd before update on migtest_e_history5 for each row begin
|
||||
insert into migtest_e_history5_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
set NEW.sys_period_start = now(6);
|
||||
end$$
|
||||
delimiter $$
|
||||
create trigger migtest_e_history5_history_del before delete on migtest_e_history5 for each row begin
|
||||
insert into migtest_e_history5_history (sys_period_start,sys_period_end,id, test_number) values (OLD.sys_period_start, now(6),OLD.id, OLD.test_number);
|
||||
end$$
|
||||
unlock tables;
|
||||
Reference in New Issue
Block a user