Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/3.10' into 3.11
Browse files Browse the repository at this point in the history
Conflicts:
	symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java
	symmetric-jdbc/src/main/java/org/jumpmind/db/platform/mssql/MsSqlDdlReader.java
  • Loading branch information
erilong committed Jan 22, 2020
2 parents 00dc7d5 + c3203fe commit 0e232aa
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 29 deletions.
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -28,8 +34,7 @@ public void before(Connection connection) {
}
throw new SqlException(e);
}
}

}
}

@Override
Expand All @@ -38,8 +43,8 @@ public void after(Connection connection) {
if (previousCatalog != null) {
connection.setCatalog(previousCatalog);
}
} catch (SQLException ex) {
}
catch (SQLException ex) {}
}

}
Expand Up @@ -69,7 +69,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)?.*";
Expand Down Expand Up @@ -594,7 +594,7 @@ protected boolean sql(CsvData data) {
for (String sql : sqlStatements) {
try {
sql = preprocessSqlStatement(sql);
if(isTruncate(sql) && getPlatform().getName().equals(DatabaseNamesConstants.DB2)) {
if (sql.matches(TRUNCATE_PATTERN) && getPlatform().getName().equals(DatabaseNamesConstants.DB2)) {
commit(true);
}
prepare(sql, data);
Expand All @@ -619,10 +619,6 @@ protected boolean sql(CsvData data) {
}
}

private boolean isTruncate(String sql) {
return sql.matches(TRUNCATE_PATTERN);
}

protected boolean requireNewStatement(DmlType currentType, CsvData data,
boolean applyChangesOnly, boolean useConflictDetection,
Conflict.DetectConflict detectType) {
Expand Down Expand Up @@ -845,22 +841,25 @@ protected List<String> 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()) && isTruncate(sql)) {
sql = getPlatform().getTruncateSql(targetTable);
}
Table table = targetTable != null ? targetTable : sourceTable;

else if (ATTRIBUTE_CHANNEL_ID_RELOAD.equals(batch.getChannelId()) && sql.matches(DELETE_PATTERN)) {
sql = getPlatform().getDeleteSql(targetTable);
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);
Expand Down
Expand Up @@ -279,7 +279,11 @@ protected void removePlatformSizeAndDecimal(Column column) {
@Override
public List<String> 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<Object> args = new ArrayList<Object>(2);
if (isNotBlank(catalog)) {
sql.append(" and \"TABLE_CATALOG\"=?");
Expand Down
Expand Up @@ -204,9 +204,4 @@ public long getEstimatedRowCount(Table table) {
table.getSchema());
}

@Override
public String getTruncateSql(Table table) {
return super.getTruncateSql(table);
}

}

0 comments on commit 0e232aa

Please sign in to comment.