From 7b86fdb81426825c1ff9c3a6c222568b38cff795 Mon Sep 17 00:00:00 2001 From: Philip Marzullo Date: Fri, 15 Feb 2019 12:15:01 -0500 Subject: [PATCH] Build failure: Oracle sets cascade action to cascade for update rule even though it is not supported, so override all setter methods for all dialects that do not support cascade actions for delete or update. --- .../db/platform/greenplum/GreenplumDdlReader.java | 13 +++++++++++++ .../db/platform/informix/InformixDdlReader.java | 7 +++++++ .../db/platform/nuodb/NuoDbDdlReader.java | 12 ++++++++++++ .../db/platform/oracle/OracleDdlReader.java | 8 ++++++++ .../db/platform/redshift/RedshiftDdlReader.java | 15 ++++++++++++++- .../db/platform/tibero/TiberoDdlReader.java | 8 ++++++++ .../db/platform/voltdb/VoltDbDdlReader.java | 13 +++++++++++++ .../src/test/resources/db-test.properties | 1 + .../symmetric/test/SimpleIntegrationTest.java | 10 ++++++++++ 9 files changed, 86 insertions(+), 1 deletion(-) diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/greenplum/GreenplumDdlReader.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/greenplum/GreenplumDdlReader.java index 53c4fb25be..bc347acc6d 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/greenplum/GreenplumDdlReader.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/greenplum/GreenplumDdlReader.java @@ -29,6 +29,8 @@ import java.util.Map; import org.jumpmind.db.model.Column; +import org.jumpmind.db.model.ForeignKey; +import org.jumpmind.db.model.ForeignKey.ForeignKeyAction; import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.model.Trigger; @@ -154,4 +156,15 @@ public Trigger mapRow(Row row) { return triggers; } + @Override + protected void readForeignKeyUpdateRule(Map values, ForeignKey fk) { + // Greenplum does not support cascading + fk.setOnUpdateAction(ForeignKeyAction.NOACTION); + } + + @Override + protected void readForeignKeyDeleteRule(Map values, ForeignKey fk) { + // Greenplum does not support cascading + fk.setOnDeleteAction(ForeignKeyAction.NOACTION); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDdlReader.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDdlReader.java index 717f66ab65..f542ef3587 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDdlReader.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/informix/InformixDdlReader.java @@ -34,6 +34,7 @@ import org.apache.commons.collections.map.ListOrderedMap; import org.jumpmind.db.model.Column; import org.jumpmind.db.model.ForeignKey; +import org.jumpmind.db.model.ForeignKey.ForeignKeyAction; import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.model.Trigger; @@ -200,4 +201,10 @@ public Trigger mapRow(Row row) { return triggers; } + + @Override + protected void readForeignKeyUpdateRule(Map values, ForeignKey fk) { + // Informix does not support cascade update + fk.setOnUpdateAction(ForeignKeyAction.NOACTION); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/nuodb/NuoDbDdlReader.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/nuodb/NuoDbDdlReader.java index 36c204a4f2..385255baa1 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/nuodb/NuoDbDdlReader.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/nuodb/NuoDbDdlReader.java @@ -32,6 +32,7 @@ import org.jumpmind.db.model.Column; import org.jumpmind.db.model.ForeignKey; +import org.jumpmind.db.model.ForeignKey.ForeignKeyAction; import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Reference; import org.jumpmind.db.model.Table; @@ -248,4 +249,15 @@ protected Integer mapUnknownJdbcTypeForColumn(Map values) { } } + @Override + protected void readForeignKeyUpdateRule(Map values, ForeignKey fk) { + // NuoDb does not support cascade actions + fk.setOnUpdateAction(ForeignKeyAction.NOACTION); + } + + @Override + protected void readForeignKeyDeleteRule(Map values, ForeignKey fk) { + // NuoDb does not support cascade actions + fk.setOnDeleteAction(ForeignKeyAction.NOACTION); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlReader.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlReader.java index d0a2be51b6..cb3e689c55 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlReader.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDdlReader.java @@ -44,6 +44,8 @@ import org.apache.commons.lang.StringUtils; import org.jumpmind.db.model.Column; import org.jumpmind.db.model.ColumnTypes; +import org.jumpmind.db.model.ForeignKey; +import org.jumpmind.db.model.ForeignKey.ForeignKeyAction; import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.model.Trigger; @@ -517,4 +519,10 @@ protected Set readPkIndecies(Connection connection, String schema, Strin } return values; } + + // Oracle does not support on update actions + @Override + protected void readForeignKeyUpdateRule(Map values, ForeignKey fk) { + fk.setOnUpdateAction(ForeignKeyAction.NOACTION); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/redshift/RedshiftDdlReader.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/redshift/RedshiftDdlReader.java index 5a576a2637..2cdbbf14af 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/redshift/RedshiftDdlReader.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/redshift/RedshiftDdlReader.java @@ -28,11 +28,13 @@ import java.util.Map; import org.jumpmind.db.model.Column; +import org.jumpmind.db.model.ForeignKey; +import org.jumpmind.db.model.ForeignKey.ForeignKeyAction; import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.model.Trigger; -import org.jumpmind.db.model.TypeMap; import org.jumpmind.db.model.Trigger.TriggerType; +import org.jumpmind.db.model.TypeMap; import org.jumpmind.db.platform.AbstractJdbcDdlReader; import org.jumpmind.db.platform.DatabaseMetaDataWrapper; import org.jumpmind.db.platform.IDatabasePlatform; @@ -214,4 +216,15 @@ public Trigger mapRow(Row row) { return triggers; } + @Override + protected void readForeignKeyUpdateRule(Map values, ForeignKey fk) { + // Redshift does not support cascade actions + fk.setOnUpdateAction(ForeignKeyAction.NOACTION); + } + + @Override + protected void readForeignKeyDeleteRule(Map values, ForeignKey fk) { + // Redshift does not support cascade actions + fk.setOnDeleteAction(ForeignKeyAction.NOACTION); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/tibero/TiberoDdlReader.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/tibero/TiberoDdlReader.java index 912ca24684..1a02371d04 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/tibero/TiberoDdlReader.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/tibero/TiberoDdlReader.java @@ -23,6 +23,8 @@ import org.apache.commons.lang.StringUtils; import org.jumpmind.db.model.Column; import org.jumpmind.db.model.ColumnTypes; +import org.jumpmind.db.model.ForeignKey; +import org.jumpmind.db.model.ForeignKey.ForeignKeyAction; import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.PlatformColumn; import org.jumpmind.db.model.Table; @@ -447,4 +449,10 @@ public Trigger mapRow(Row row) { return triggers; } + + // Tibero does not support on update actions + @Override + protected void readForeignKeyUpdateRule(Map values, ForeignKey fk) { + fk.setOnUpdateAction(ForeignKeyAction.NOACTION); + } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/voltdb/VoltDbDdlReader.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/voltdb/VoltDbDdlReader.java index 811fcfb8ff..1e7266e2d9 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/voltdb/VoltDbDdlReader.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/voltdb/VoltDbDdlReader.java @@ -25,6 +25,8 @@ import java.util.Map; import org.jumpmind.db.model.Column; +import org.jumpmind.db.model.ForeignKey; +import org.jumpmind.db.model.ForeignKey.ForeignKeyAction; import org.jumpmind.db.model.IIndex; import org.jumpmind.db.model.Table; import org.jumpmind.db.platform.AbstractJdbcDdlReader; @@ -82,4 +84,15 @@ protected void disableAutoIncrement(Table table) { } } + @Override + protected void readForeignKeyUpdateRule(Map values, ForeignKey fk) { + // VoltDB does not support cascade actions + fk.setOnUpdateAction(ForeignKeyAction.NOACTION); + } + + @Override + protected void readForeignKeyDeleteRule(Map values, ForeignKey fk) { + // VoltDB does not support cascade actions + fk.setOnDeleteAction(ForeignKeyAction.NOACTION); + } } diff --git a/symmetric-jdbc/src/test/resources/db-test.properties b/symmetric-jdbc/src/test/resources/db-test.properties index 2f61e03aef..e92368ea94 100644 --- a/symmetric-jdbc/src/test/resources/db-test.properties +++ b/symmetric-jdbc/src/test/resources/db-test.properties @@ -53,6 +53,7 @@ oracle.root.db.password=admin oracle.client.db.user=SymmetricClient oracle.client.db.password=admin oracle.db.url=jdbc:oracle:thin:@dbdev1.loc:1521:XE +oracle.bulk.load.sqlldr.cmd=/usr/local/instantclient_18_3/sqlldr derby.db.driver=org.apache.derby.jdbc.EmbeddedDriver derby.db.user= diff --git a/symmetric-server/src/test/java/org/jumpmind/symmetric/test/SimpleIntegrationTest.java b/symmetric-server/src/test/java/org/jumpmind/symmetric/test/SimpleIntegrationTest.java index 2804f7cf94..d43f4786ee 100644 --- a/symmetric-server/src/test/java/org/jumpmind/symmetric/test/SimpleIntegrationTest.java +++ b/symmetric-server/src/test/java/org/jumpmind/symmetric/test/SimpleIntegrationTest.java @@ -111,6 +111,7 @@ public class SimpleIntegrationTest extends AbstractIntegrationTest { @Test(timeout = 3600000) public void test01CreateServer() { + logTestRunning(); ISymmetricEngine server = getServer(); assertNotNull(server); server.getParameterService().saveParameter(ParameterConstants.FILE_SYNC_ENABLE, false, "unit_test"); @@ -213,6 +214,7 @@ public void test03InitialLoad() { @Test(timeout = 900000) public void test04LobSyncUsingStreaming() throws Exception { + logTestRunning(); String text = "Another test. Should not find this in text in sym_data, but it should be in the client database"; if (serverTestService.insertIntoTestUseStreamLob(200, "test_use_stream_lob", text)) { //IDatabasePlatform platform = getServer().getDatabasePlatform(); @@ -230,6 +232,7 @@ public void test04LobSyncUsingStreaming() throws Exception { @Test(timeout = 900000) public void test05LobSyncUsingCapture() throws Exception { + logTestRunning(); String text = "Another test. Should not find this in text in sym_data, but it should be in the client database"; if (serverTestService.insertIntoTestUseStreamLob(200, "test_use_capture_lob", text)) { String rowData = getServer() @@ -320,6 +323,7 @@ public void test07SyncToClientMultipleUpdates() { @Test(timeout = 900000) public void test08InsertSqlEvent() { + logTestRunning(); assertTrue(getClient().getSqlTemplate().queryForInt( "select count(*) from sym_node where schema_version='test'") == 0); getServer() @@ -333,6 +337,7 @@ public void test08InsertSqlEvent() { @Test(timeout = 900000) public void test09EmptyNullLob() { + logTestRunning(); Customer customer = new Customer(300, "Eric", true, "100 Main Street", "Columbus", "OH", 43082, new Date(), new Date(), "", new byte[0]); @@ -382,6 +387,7 @@ public void test10LargeLob() { if (!isServerOracle()) { return; } + logTestRunning(); String bigString = StringUtils.rightPad("Feeling tired... ", 6000, "Z"); Customer customer = new Customer(400, "Eric", true, "100 Main Street", "Columbus", "OH", 43082, new Date(), new Date(), bigString, bigString.getBytes()); @@ -692,6 +698,7 @@ public void test14SuspendIgnorePullRemoteLocalComboBatches() throws Exception { @Test(timeout = 900000) public void test15UpdateDataWithNoChangesSyncToClient() throws Exception { + logTestRunning(); int clientIncomingBatchCount = getIncomingBatchCountForClient(); int rowsUpdated = getServer().getSqlTemplate().update( "update test_sync_column_level set string_value=string_value"); @@ -1132,6 +1139,7 @@ public void test29SyncShellCommand() throws Exception { @Test public void test30AutoConfigureTablesAfterAlreadyCreated() { + logTestRunning(); testAutoConfigureTablesAfterAlreadyCreated(getServer()); testAutoConfigureTablesAfterAlreadyCreated(getClient()); } @@ -1145,6 +1153,7 @@ public void test31ReloadMissingForeignKeys() { getClient().getSymmetricDialect().getName().equalsIgnoreCase(DatabaseNamesConstants.GENERIC)) { return; } + logTestRunning(); ISqlTransaction tran = getServer().getSqlTemplate().startSqlTransaction(); getServer().getSymmetricDialect().disableSyncTriggers(tran, null); tran.execute("insert into test_a (id) values ('1')"); @@ -1166,6 +1175,7 @@ protected void testAutoConfigureTablesAfterAlreadyCreated(ISymmetricEngine engin @Test public void test99Shutdown() throws Exception { + logTestRunning(); getClient().destroy(); getWebServer().stop(); }