From 6a9003b8b1a32d9042724054ac2053954457757b Mon Sep 17 00:00:00 2001 From: elong Date: Wed, 2 Dec 2015 15:32:20 -0500 Subject: [PATCH 1/2] fix delete event processing --- symmetric-client-clib/inc/model/Node.h | 2 +- symmetric-client-clib/src/io/writer/DefaultDatabaseWriter.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/symmetric-client-clib/inc/model/Node.h b/symmetric-client-clib/inc/model/Node.h index 6d9001ca91..c5d3a50d01 100644 --- a/symmetric-client-clib/inc/model/Node.h +++ b/symmetric-client-clib/inc/model/Node.h @@ -23,7 +23,7 @@ #include -#define SYM_VERSION "3.7.23" +#define SYM_VERSION "3.7.27" typedef enum SymNodeStatus { SYM_NODE_STATUS_DATA_LOAD_NOT_STARTED, diff --git a/symmetric-client-clib/src/io/writer/DefaultDatabaseWriter.c b/symmetric-client-clib/src/io/writer/DefaultDatabaseWriter.c index 7ba535c7aa..ee5e54d0bf 100644 --- a/symmetric-client-clib/src/io/writer/DefaultDatabaseWriter.c +++ b/symmetric-client-clib/src/io/writer/DefaultDatabaseWriter.c @@ -161,7 +161,7 @@ int SymDefaultDatabaseWriter_delete(SymDefaultDatabaseWriter *this, SymCsvData * this->dmlStatement->destroy(this->dmlStatement); } // TODO: pass nullKeyIndiciators - this->dmlStatement = SymDmlStatement_new(NULL, SYM_DML_TYPE_UPDATE, this->targetTable, NULL, &this->platform->databaseInfo); + this->dmlStatement = SymDmlStatement_new(NULL, SYM_DML_TYPE_DELETE, this->targetTable, NULL, &this->platform->databaseInfo); this->sqlTransaction->prepare(this->sqlTransaction, this->dmlStatement->sql, &error); this->isError = error != 0; } From 512558e8aa835765b03a1a16aceead420b7508db Mon Sep 17 00:00:00 2001 From: "Hicks, Josh" Date: Thu, 3 Dec 2015 15:33:22 -0500 Subject: [PATCH 2/2] 0002460 - Support for redshift driver --- .../platform/JdbcDatabasePlatformFactory.java | 4 +++ .../platform/redshift/RedshiftDdlReader.java | 27 ++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java index 3e522e8da6..5147b8c85b 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java @@ -302,11 +302,15 @@ private static boolean isRedshiftDatabase(Connection connection) { try { DatabaseMetaData dmd = connection.getMetaData(); dmd.getMaxColumnsInIndex(); + if (dmd.getDriverName().toUpperCase().contains("REDSHIFT")) { + isRedshift = true; + } } catch (SQLException ex) { if (ex.getSQLState().equals("99999")) { isRedshift = true; } } + return isRedshift; } 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 ce1b594eae..3f31331340 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 @@ -20,11 +20,13 @@ */ package org.jumpmind.db.platform.redshift; +import java.sql.Connection; import java.sql.SQLException; import java.sql.Types; import java.util.Map; import org.jumpmind.db.model.Column; +import org.jumpmind.db.model.Table; import org.jumpmind.db.model.TypeMap; import org.jumpmind.db.platform.AbstractJdbcDdlReader; import org.jumpmind.db.platform.DatabaseMetaDataWrapper; @@ -39,6 +41,17 @@ public RedshiftDdlReader(IDatabasePlatform platform) { setDefaultTablePattern(null); } + @Override + protected Table readTable(Connection connection, DatabaseMetaDataWrapper metaData, Map values) + throws SQLException { + Table table = super.readTable(connection, metaData, values); + + if (table != null) { + determineAutoIncrementFromResultSetMetaData(connection, table, table.getColumns()); + } + return table; + } + @Override protected Column readColumn(DatabaseMetaDataWrapper metaData, Map values) throws SQLException { Column column = super.readColumn(metaData, values); @@ -111,6 +124,9 @@ private String extractDelimitedDefaultValue(String defaultValue) { * Extracts the default value from a default value spec of the form * "-9000000000000000000::bigint". * + * Handles sequence evaluations where the end paren is after the :: + * nextval('"sym_data_data_id_seq"'::text) + * * @param defaultValue The default value spec * * @return The default value @@ -119,7 +135,16 @@ private String extractUndelimitedDefaultValue(String defaultValue) { int valueEnd = defaultValue.indexOf("::"); if (valueEnd > 0) { - defaultValue = defaultValue.substring(0, valueEnd); + + defaultValue = defaultValue.substring(0, valueEnd); + + int startParen = defaultValue.indexOf("("); + int endParen = defaultValue.indexOf(")"); + + if (startParen > 0 && endParen < 0) { + defaultValue = defaultValue + ")"; + } + } else { if (defaultValue.startsWith("(") && defaultValue.endsWith(")")) { defaultValue = defaultValue.substring(1, defaultValue.length() - 1);