Skip to content

Commit

Permalink
0002186: DB2 iSeries - Change the sym_data row_data storage to CLOB t…
Browse files Browse the repository at this point in the history
…o support longer row data
  • Loading branch information
chenson42 committed Feb 10, 2015
1 parent d69d350 commit 73111ca
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 26 deletions.
Expand Up @@ -6,6 +6,28 @@ public class Db2As400TriggerTemplate extends Db2TriggerTemplate {

public Db2As400TriggerTemplate(ISymmetricDialect symmetricDialect) {
super(symmetricDialect);

clobColumnTemplate = "case when $(tableAlias).\"$(columnName)\" is null then '' else '\"' || replace(replace(cast($(tableAlias).\"$(columnName)\" as CLOB),'\\','\\\\'),'\"','\\\"') || '\"' end" ;

sqlTemplates.put("insertTriggerTemplate" ,
"CREATE TRIGGER $(schemaName)$(triggerName) " +
" AFTER INSERT ON $(schemaName)$(tableName) " +
" REFERENCING NEW AS NEW " +
" FOR EACH ROW MODE DB2SQL " +
" BEGIN ATOMIC " +
" IF $(syncOnInsertCondition) and $(syncOnIncomingBatchCondition) then " +
" INSERT into $(defaultSchema)$(prefixName)_data " +
" (table_name, event_type, trigger_hist_id, row_data, channel_id, transaction_id, source_node_id, external_data, create_time) " +
" VALUES('$(targetTableName)', 'I', $(triggerHistoryId), " +
" $(columns), " +
" $(channelExpression), $(txIdExpression), $(sourceNodeExpression), " +
" $(externalSelect), " +
" CURRENT_TIMESTAMP); " +
" END IF; " +
" $(custom_on_insert_text) " +
" END " );


sqlTemplates.put("updateTriggerTemplate" ,
"CREATE TRIGGER $(schemaName)$(triggerName) \n"+
" AFTER UPDATE ON $(schemaName)$(tableName) \n"+
Expand All @@ -27,6 +49,28 @@ public Db2As400TriggerTemplate(ISymmetricDialect symmetricDialect) {
" END IF; \n"+
" $(custom_on_update_text) \n"+
" END " );

sqlTemplates.put("deleteTriggerTemplate" ,
"CREATE TRIGGER $(schemaName)$(triggerName) " +
" AFTER DELETE ON $(schemaName)$(tableName) " +
" REFERENCING OLD AS OLD " +
" FOR EACH ROW MODE DB2SQL " +
" BEGIN ATOMIC " +
" IF $(syncOnDeleteCondition) and $(syncOnIncomingBatchCondition) then " +
" INSERT into $(defaultSchema)$(prefixName)_data " +
" (table_name, event_type, trigger_hist_id, pk_data, old_data, channel_id, transaction_id, source_node_id, external_data, create_time) " +
" VALUES ('$(targetTableName)', 'D', $(triggerHistoryId), " +
" $(oldKeys), " +
" $(oldColumns), " +
" $(channelExpression), " +
" $(txIdExpression), " +
" $(sourceNodeExpression), " +
" $(externalSelect), " +
" CURRENT_TIMESTAMP); " +
" END IF; " +
" $(custom_on_delete_text) " +
" END " );


}

Expand Down
Expand Up @@ -20,11 +20,7 @@
*/

import java.sql.Types;
import java.util.Collection;
import java.util.Iterator;

import org.jumpmind.db.alter.ColumnDataTypeChange;
import org.jumpmind.db.alter.TableChange;
import org.jumpmind.db.model.Column;
import org.jumpmind.db.model.TypeMap;
import org.jumpmind.db.platform.DatabaseNamesConstants;
Expand All @@ -33,28 +29,10 @@ public class Db2As400DdlBuilder extends Db2DdlBuilder {

public Db2As400DdlBuilder() {
this.databaseName = DatabaseNamesConstants.DB2AS400;
databaseInfo.addNativeTypeMapping(Types.LONGVARCHAR, "LONG VARCHAR", Types.VARCHAR);
databaseInfo.addNativeTypeMapping(Types.LONGVARCHAR, "CLOB", Types.CLOB);
databaseInfo.setRequiresAutoCommitForDdl(true);
}

@Override
protected void filterChanges(Collection<TableChange> changes) {
super.filterChanges(changes);
Iterator<TableChange> i = changes.iterator();
while (i.hasNext()) {
TableChange tableChange = i.next();
if (tableChange instanceof ColumnDataTypeChange) {
ColumnDataTypeChange change = (ColumnDataTypeChange)tableChange;
if (change.getNewTypeCode() == Types.LONGVARCHAR &&
change.getChangedColumn().getJdbcTypeCode() == Types.VARCHAR) {
log.debug("Not processing the detect type change to LONGVARCHAR because "
+ "a create of a long varchar results in a variable length VARCHAR field");
i.remove();
}
}
}
}

@Override
protected void writeCastExpression(Column sourceColumn, Column targetColumn, StringBuilder ddl) {
String sourceNativeType = getBareNativeType(sourceColumn);
Expand All @@ -64,10 +42,10 @@ protected void writeCastExpression(Column sourceColumn, Column targetColumn, Str
printIdentifier(getColumnName(sourceColumn), ddl);
} else {
String type = getSqlType(targetColumn);
if ("LONG VARCHAR".equals(type)) {
type = "VARCHAR";
}

/**
* iSeries needs size in cast
*/
if ("VARCHAR".equals(type)) {
type = type + "(" + sourceColumn.getSizeAsInt() + ")";
}
Expand Down

0 comments on commit 73111ca

Please sign in to comment.