Skip to content

Commit

Permalink
0003726: Delete or truncate should quote table name and include
Browse files Browse the repository at this point in the history
catalog/schema
  • Loading branch information
jaredfrees committed Jul 1, 2019
1 parent afa7f53 commit 30ce396
Show file tree
Hide file tree
Showing 15 changed files with 73 additions and 10 deletions.
Expand Up @@ -122,6 +122,8 @@ public abstract class AbstractDatabasePlatform implements IDatabasePlatform {

protected Boolean supportsMultiThreadedTransactions;

protected boolean supportsTruncate = true;

public AbstractDatabasePlatform(SqlTemplateSettings settings) {
this.settings = settings;
}
Expand Down Expand Up @@ -1178,5 +1180,19 @@ public long getEstimatedRowCount(Table table) {

return getSqlTemplateDirty().queryForLong(sql);
}



public String getTruncateSql(Table table) {
String sql = null;
if (supportsTruncate) {
sql = "truncate table ";
} else {
log.info("Truncate is not supported on " + getName() + ". Changing to equivalent delete statement");
sql = "delete from ";
}
String quote = getDdlBuilder().isDelimitedIdentifierModeOn() ? getDatabaseInfo().getDelimiterToken() : "";
sql += table.getQualifiedTableName(quote, getDatabaseInfo().getCatalogSeparator(), getDatabaseInfo().getSchemaSeparator());

return sql;
}
}
Expand Up @@ -197,4 +197,5 @@ public Object[] getObjectValues(BinaryEncoding encoding, String[] values,

public long getEstimatedRowCount(Table table);

public String getTruncateSql(Table table);
}
Expand Up @@ -10,6 +10,7 @@ public KafkaPlatform(SqlTemplateSettings settings) {
super(settings);
super.ddlBuilder = new KafkaDdlBuilder();
super.ddlReader = new KafkaDdlReader(this);
supportsTruncate = false;
}

@Override
Expand Down Expand Up @@ -46,6 +47,4 @@ public ISqlTemplate getSqlTemplate() {
public ISqlTemplate getSqlTemplateDirty() {
return new KafkaSqlTemplate();
}


}
Expand Up @@ -68,7 +68,11 @@ 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 [^ ]+";

protected IDatabasePlatform platform;

protected ISqlTransaction transaction;
Expand Down Expand Up @@ -825,11 +829,15 @@ 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("catalogName", quoteString(targetTable.getCatalog()), sql);
sql = FormatUtils.replace("schemaName", quoteString(targetTable.getSchema()), sql);
sql = FormatUtils.replace("tableName", quoteString(targetTable.getName()), sql);
} else if (sourceTable != null){
sql = FormatUtils.replace("catalogName", quoteString(sourceTable.getCatalog()),sql);

if (ATTRIBUTE_CHANNEL_ID_RELOAD.equals(batch.getChannelId()) && sql.matches(TRUNCATE_PATTERN)) {
sql = getPlatform().getTruncateSql(targetTable);
}
} 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);
}
Expand Down
Expand Up @@ -16,6 +16,7 @@ public class Db2As400DatabasePlatform extends Db2DatabasePlatform {

public Db2As400DatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
supportsTruncate = false;
}

@Override
Expand Down
Expand Up @@ -23,6 +23,7 @@

import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.model.Column;
import org.jumpmind.db.model.Table;
import org.jumpmind.db.platform.AbstractJdbcDatabasePlatform;
import org.jumpmind.db.platform.DatabaseNamesConstants;
import org.jumpmind.db.platform.PermissionResult;
Expand All @@ -41,12 +42,20 @@ public class Db2DatabasePlatform extends AbstractJdbcDatabasePlatform {

/* The subprotocol used by the standard DB2 driver. */
public static final String JDBC_SUBPROTOCOL = "db2";


protected int majorVersion;
protected int minorVersion;

/*
* Creates a new platform instance.
*/
public Db2DatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
majorVersion = sqlTemplate.getDatabaseMajorVersion();
minorVersion = sqlTemplate.getDatabaseMinorVersion();
if (majorVersion < 9 || (majorVersion == 9 && minorVersion < 7)) {
supportsTruncate = false;
}
}

@Override
Expand Down Expand Up @@ -103,4 +112,11 @@ public PermissionResult getCreateSymTriggerPermission() {

return result;
}

@Override
public String getTruncateSql(Table table) {
String sql = super.getTruncateSql(table);
sql += " reuse storage immediate";
return sql;
}
}
Expand Up @@ -29,6 +29,9 @@ public class Db2zOsDatabasePlatform extends Db2DatabasePlatform {

public Db2zOsDatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
if (majorVersion < 10) {
supportsTruncate = false;
}
}

@Override
Expand Down
Expand Up @@ -46,6 +46,7 @@ public class FirebirdDatabasePlatform extends AbstractJdbcDatabasePlatform {
*/
public FirebirdDatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
supportsTruncate = false;
}

@Override
Expand Down
Expand Up @@ -21,6 +21,7 @@

import javax.sql.DataSource;

import org.jumpmind.db.model.Table;
import org.jumpmind.db.platform.AbstractJdbcDatabasePlatform;
import org.jumpmind.db.platform.DatabaseNamesConstants;
import org.jumpmind.db.platform.PermissionResult;
Expand Down Expand Up @@ -86,4 +87,10 @@ public PermissionResult getDropSymTriggerPermission() {
return result;
}

@Override
public String getTruncateSql(Table table) {
String sql = super.getTruncateSql(table);
sql += " cascade";
return sql;
}
}
Expand Up @@ -51,6 +51,7 @@ public class MsSql2000DatabasePlatform extends AbstractJdbcDatabasePlatform {
*/
public MsSql2000DatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
supportsTruncate = false;
}

@Override
Expand Down
Expand Up @@ -37,6 +37,7 @@ public class MsSql2005DatabasePlatform extends MsSql2000DatabasePlatform {
*/
public MsSql2005DatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
supportsTruncate = false;
}

@Override
Expand Down
Expand Up @@ -38,6 +38,7 @@ public class MsSql2008DatabasePlatform extends MsSql2005DatabasePlatform {
*/
public MsSql2008DatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
supportsTruncate = true;
}

@Override
Expand All @@ -58,5 +59,5 @@ public long getEstimatedRowCount(Table table) {
"where t.name = ? and schema_name(t.schema_id) = ?",
table.getName(), table.getSchema());
}

}
Expand Up @@ -242,5 +242,11 @@ public long getEstimatedRowCount(Table table) {
"on n.oid = c.relnamespace where c.relname = ? and n.nspname = ?",
table.getName(), table.getSchema());
}


@Override
public String getTruncateSql(Table table) {
String sql = super.getTruncateSql(table);
sql += " cascade";
return sql;
}
}
Expand Up @@ -36,6 +36,7 @@ public class RaimaDatabasePlatform extends AbstractJdbcDatabasePlatform {

public RaimaDatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
supportsTruncate = false;
}

@Override
Expand Down
Expand Up @@ -55,6 +55,7 @@ public SqliteDatabasePlatform(DataSource dataSource, SqlTemplateSettings setting
"strftime('%Y-%m-%d %H:%M:%f','now','localtime')");
sqlScriptReplacementTokens.put("\\{ts([^<]*?)\\}", "$1");
sqlScriptReplacementTokens.put("\\{d([^<]*?)\\}", "$1");
supportsTruncate = false;
}

@Override
Expand Down

0 comments on commit 30ce396

Please sign in to comment.