From 21d480c2ad7621d62ae295d31685dafdbe79d43b Mon Sep 17 00:00:00 2001 From: Eric Long Date: Wed, 22 Jan 2020 11:16:38 -0500 Subject: [PATCH 1/2] 0004257: Wizard list of tables for auto-create triggers is empty on SQL-Server --- .../db/sql/ChangeCatalogConnectionHandler.java | 11 ++++++++--- .../jumpmind/db/platform/mssql/MsSqlDdlReader.java | 8 ++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/symmetric-db/src/main/java/org/jumpmind/db/sql/ChangeCatalogConnectionHandler.java b/symmetric-db/src/main/java/org/jumpmind/db/sql/ChangeCatalogConnectionHandler.java index f10bc8a781..a1a6b2e1a6 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/sql/ChangeCatalogConnectionHandler.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/sql/ChangeCatalogConnectionHandler.java @@ -3,8 +3,13 @@ import java.sql.Connection; import java.sql.SQLException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class ChangeCatalogConnectionHandler implements IConnectionHandler { + protected final Logger log = LoggerFactory.getLogger(getClass()); + private String previousCatalog; private String changeCatalog; @@ -20,6 +25,7 @@ public void before(Connection connection) { previousCatalog = connection.getCatalog(); connection.setCatalog(changeCatalog); } catch (SQLException e) { + log.warn("Unable to switch to catalog '{}': ", changeCatalog, e.getMessage()); if (changeCatalog != null) { try { connection.setCatalog(previousCatalog); @@ -28,8 +34,7 @@ public void before(Connection connection) { } throw new SqlException(e); } - } - + } } @Override @@ -38,8 +43,8 @@ public void after(Connection connection) { if (previousCatalog != null) { connection.setCatalog(previousCatalog); } + } catch (SQLException ex) { } - catch (SQLException ex) {} } } diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDdlReader.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDdlReader.java index 72b3be2824..11411a1d0d 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDdlReader.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDdlReader.java @@ -279,7 +279,11 @@ protected void removePlatformSizeAndDecimal(Column column) { @Override public List getTableNames(final String catalog, final String schema, final String[] tableTypes) { - StringBuilder sql = new StringBuilder("select \"TABLE_NAME\" from \"INFORMATION_SCHEMA\".\"TABLES\" where \"TABLE_TYPE\"='BASE TABLE'"); + StringBuilder sql = new StringBuilder("select \"TABLE_NAME\" from "); + if (isNotBlank(catalog)) { + sql.append("\"").append(catalog).append("\"").append("."); + } + sql.append("\"INFORMATION_SCHEMA\".\"TABLES\" where \"TABLE_TYPE\"='BASE TABLE'"); List args = new ArrayList(2); if (isNotBlank(catalog)) { sql.append(" and \"TABLE_CATALOG\"=?"); @@ -289,7 +293,7 @@ public List getTableNames(final String catalog, final String schema, sql.append(" and \"TABLE_SCHEMA\"=?"); args.add(schema); } - + return schema == null ? new ArrayList() : platform.getSqlTemplateDirty().queryWithHandler(sql.toString(), new StringMapper(), new ChangeCatalogConnectionHandler(catalog) ,args.toArray(new Object[args.size()])); } From c3203fef46fb59cd71d5ae4c03536f4adf087fc0 Mon Sep 17 00:00:00 2001 From: Eric Long Date: Wed, 22 Jan 2020 13:11:42 -0500 Subject: [PATCH 2/2] 0004259: Custom delete statement during initial load is overridden --- .../io/data/writer/DefaultDatabaseWriter.java | 34 ++++++++++--------- .../oracle/OracleDatabasePlatform.java | 5 --- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java index 0663d7ed6b..c025ad6fb8 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java @@ -68,7 +68,7 @@ public class DefaultDatabaseWriter extends AbstractDatabaseWriter { protected final static Logger log = LoggerFactory.getLogger(DefaultDatabaseWriter.class); public static final String CUR_DATA = "DatabaseWriter.CurData"; - + private final String ATTRIBUTE_CHANNEL_ID_RELOAD = "reload"; private final String TRUNCATE_PATTERN = "^(truncate)( table)?.*"; @@ -829,22 +829,24 @@ protected List getSqlStatements(String script) { } protected String preprocessSqlStatement(String sql) { - sql = FormatUtils.replace("nodeId", batch.getTargetNodeId(), sql); - if (targetTable != null) { - sql = FormatUtils.replace("catalogName", quoteString(targetTable.getCatalog()), sql); - sql = FormatUtils.replace("schemaName", quoteString(targetTable.getSchema()), sql); - sql = FormatUtils.replace("tableName", quoteString(targetTable.getName()), sql); - if (ATTRIBUTE_CHANNEL_ID_RELOAD.equals(batch.getChannelId()) && sql.matches(TRUNCATE_PATTERN)) { - sql = getPlatform().getTruncateSql(targetTable); - } - - else if (ATTRIBUTE_CHANNEL_ID_RELOAD.equals(batch.getChannelId()) && sql.matches(DELETE_PATTERN)) { - sql = getPlatform().getDeleteSql(targetTable); + Table table = targetTable != null ? targetTable : sourceTable; + + sql = FormatUtils.replace("nodeId", batch.getTargetNodeId(), sql); + if (table != null) { + sql = FormatUtils.replace("catalogName", quoteString(table.getCatalog()), sql); + sql = FormatUtils.replace("schemaName", quoteString(table.getSchema()), sql); + sql = FormatUtils.replace("tableName", quoteString(table.getName()), sql); + + DatabaseInfo info = getPlatform().getDatabaseInfo(); + String quote = getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() ? info.getDelimiterToken() : ""; + sql = FormatUtils.replace("fullTableName", table.getQualifiedTableName(quote, info.getCatalogSeparator(), info.getSchemaSeparator()), sql); + + if (ATTRIBUTE_CHANNEL_ID_RELOAD.equals(batch.getChannelId()) && sql.matches(TRUNCATE_PATTERN)) { + sql = getPlatform().getTruncateSql(table); + } else if (ATTRIBUTE_CHANNEL_ID_RELOAD.equals(batch.getChannelId()) && sql.matches(DELETE_PATTERN) + && !sql.toUpperCase().contains("WHERE")) { + sql = getPlatform().getDeleteSql(table); } - } else if (sourceTable != null) { - sql = FormatUtils.replace("catalogName", quoteString(sourceTable.getCatalog()), sql); - sql = FormatUtils.replace("schemaName", quoteString(sourceTable.getSchema()), sql); - sql = FormatUtils.replace("tableName", quoteString(sourceTable.getName()), sql); } sql = getPlatform().scrubSql(sql); diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java index 751945e363..ca106345bd 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/OracleDatabasePlatform.java @@ -148,9 +148,4 @@ public long getEstimatedRowCount(Table table) { table.getName(), table.getSchema()); } - @Override - public String getTruncateSql(Table table) { - return super.getTruncateSql(table); - } - }