From cb6f0335b1d55220b742dc338f8f3252ee4ccef7 Mon Sep 17 00:00:00 2001
From: rob bygrave
Date: Thu, 8 Aug 2019 23:22:58 +1200
Subject: [PATCH] #1787 - Update CockroachDB support for DDL generation with
autocommit and no history support
---
.../io/ebean/config/dbplatform/DatabasePlatform.java | 2 +-
.../dbplatform/cockroach/CockroachPlatform.java | 2 +-
.../io/ebeaninternal/dbmigration/DdlGenerator.java | 12 +++++-------
.../ddlgeneration/platform/CockroachDdl.java | 1 -
.../platform/DbTriggerBasedHistoryDdl.java | 5 +----
.../org/tests/transaction/TestCommitAndContinue.java | 6 +++---
src/test/resources/ebean.properties | 4 ++++
7 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java b/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java
index 445ec3d15..f5f865dfc 100644
--- a/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java
+++ b/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java
@@ -577,7 +577,7 @@ public class DatabasePlatform {
/**
* Normally not needed - overridden in CockroachPlatform.
*/
- public boolean isDdlCommitOnCreateIndex() {
+ public boolean isDdlAutoCommit() {
return false;
}
diff --git a/src/main/java/io/ebean/config/dbplatform/cockroach/CockroachPlatform.java b/src/main/java/io/ebean/config/dbplatform/cockroach/CockroachPlatform.java
index 502e33cf6..91a627510 100644
--- a/src/main/java/io/ebean/config/dbplatform/cockroach/CockroachPlatform.java
+++ b/src/main/java/io/ebean/config/dbplatform/cockroach/CockroachPlatform.java
@@ -21,7 +21,7 @@ public class CockroachPlatform extends PostgresPlatform {
* Needs a commit after create index such that alter table add foreign key ... succeeds.
*/
@Override
- public boolean isDdlCommitOnCreateIndex() {
+ public boolean isDdlAutoCommit() {
return true;
}
diff --git a/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java b/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java
index 338781f61..45282cd2d 100644
--- a/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java
+++ b/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java
@@ -44,7 +44,7 @@ public class DdlGenerator {
private final boolean extraDdl;
private final boolean createOnly;
private final boolean jaxbPresent;
- private final boolean ddlCommitOnCreateIndex;
+ private final boolean ddlAutoCommit;
private final String dbSchema;
private final ScriptTransform scriptTransform;
@@ -63,10 +63,10 @@ public class DdlGenerator {
if (!serverConfig.getTenantMode().isDdlEnabled() && serverConfig.isDdlRun()) {
log.warn("DDL can't be run on startup with TenantMode " + serverConfig.getTenantMode());
this.runDdl = false;
- this.ddlCommitOnCreateIndex = false;
+ this.ddlAutoCommit = false;
} else {
this.runDdl = serverConfig.isDdlRun();
- this.ddlCommitOnCreateIndex = server.getDatabasePlatform().isDdlCommitOnCreateIndex();
+ this.ddlAutoCommit = server.getDatabasePlatform().isDdlAutoCommit();
}
this.scriptTransform = createScriptTransform(serverConfig.getMigrationConfig());
this.baseDir = initBaseDir();
@@ -160,13 +160,11 @@ public class DdlGenerator {
DdlRunner runner = new DdlRunner(expectErrors, scriptName);
try {
- if (expectErrors) {
+ if (expectErrors || ddlAutoCommit) {
connection.setAutoCommit(true);
- } else if (ddlCommitOnCreateIndex) {
- runner.setCommitOnCreateIndex();
}
int count = runner.runAll(scriptTransform.transform(content), connection);
- if (expectErrors) {
+ if (expectErrors || ddlAutoCommit) {
connection.setAutoCommit(false);
}
connection.commit();
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 f1fa243ef..556fcd7dc 100644
--- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/CockroachDdl.java
+++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/CockroachDdl.java
@@ -10,7 +10,6 @@ public class CockroachDdl extends PlatformDdl {
public CockroachDdl(DatabasePlatform platform) {
super(platform);
- this.historyDdl = new PostgresHistoryDdl();
this.dropTableCascade = " cascade";
this.columnSetType = "type ";
this.alterTableIfExists = "if exists ";
diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java
index a425cf9be..5a5583139 100644
--- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java
+++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java
@@ -33,7 +33,7 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl {
protected String currentTimestamp = "now(6)";
protected String sysPeriodType = "datetime(6)";
- public DbTriggerBasedHistoryDdl() {
+ DbTriggerBasedHistoryDdl() {
}
@Override
@@ -252,7 +252,6 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl {
}
protected void appendColumnNames(DdlBuffer buffer, List columns, String columnPrefix) throws IOException {
-
for (int i = 0; i < columns.size(); i++) {
if (i > 0) {
buffer.append(", ");
@@ -266,7 +265,6 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl {
* Append a single column to the buffer if it is not null.
*/
protected void appendColumnName(DdlBuffer buffer, String prefix, String columnName) throws IOException {
-
if (columnName != null) {
buffer.append(prefix).append(columnName);
}
@@ -281,7 +279,6 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl {
*
*/
protected List columnNamesForApply(MTable table) {
-
return table.allHistoryColumns(true);
}
diff --git a/src/test/java/org/tests/transaction/TestCommitAndContinue.java b/src/test/java/org/tests/transaction/TestCommitAndContinue.java
index 1dc705a3d..157a20056 100644
--- a/src/test/java/org/tests/transaction/TestCommitAndContinue.java
+++ b/src/test/java/org/tests/transaction/TestCommitAndContinue.java
@@ -21,7 +21,7 @@ public class TestCommitAndContinue extends BaseTestCase {
@Test
@Transactional
- @IgnorePlatform({Platform.SQLSERVER, Platform.HSQLDB}) // they will dead lock
+ @IgnorePlatform({Platform.SQLSERVER, Platform.HSQLDB, Platform.COCKROACH}) // they will dead lock
public void transactional_partialSuccess() {
MnyB a = new MnyB("a100");
@@ -57,7 +57,7 @@ public class TestCommitAndContinue extends BaseTestCase {
* The @Transactional is nicer to me.
*/
@Test
- @IgnorePlatform({Platform.SQLSERVER, Platform.HSQLDB}) // they will dead lock
+ @IgnorePlatform({Platform.SQLSERVER, Platform.HSQLDB, Platform.COCKROACH}) // they will dead lock
public void tryFinally_partialSuccess() {
MnyB a = new MnyB("a100");
@@ -101,7 +101,7 @@ public class TestCommitAndContinue extends BaseTestCase {
@Test
@Transactional
- @IgnorePlatform({Platform.SQLSERVER, Platform.HSQLDB}) // they will dead lock
+ @IgnorePlatform({Platform.SQLSERVER, Platform.HSQLDB, Platform.COCKROACH}) // they will dead lock
public void transactional_partialSuccess_secondTransactionInsert() {
MnyB a = new MnyB("a100");
diff --git a/src/test/resources/ebean.properties b/src/test/resources/ebean.properties
index e5e709a90..45f5209aa 100644
--- a/src/test/resources/ebean.properties
+++ b/src/test/resources/ebean.properties
@@ -140,6 +140,10 @@ datasource.mysql.databaseUrl=jdbc:mysql://127.0.0.1:4306/unit
#datasource.mysql.databaseUrl=jdbc:mysql://127.0.0.1:4306/test_ebean
datasource.mysql.databaseDriver=com.mysql.cj.jdbc.Driver
+datasource.cockroach.username=root
+datasource.cockroach.password=
+datasource.cockroach.url=jdbc:postgresql://localhost:26257/unit?sslmode=disable
+datasource.cockroach.driver=org.postgresql.Driver
datasource.oracle.username=test_ebean
datasource.oracle.password=test