diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/ase/AseTriggerTemplate.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/ase/AseTriggerTemplate.java index fe3d4da57d..26e8507ed2 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/ase/AseTriggerTemplate.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/ase/AseTriggerTemplate.java @@ -148,7 +148,7 @@ public AseTriggerTemplate(ISymmetricDialect symmetricDialect) { " fetch DeleteDataCursor into @OldPk, @OldDataRow $(oldKeyVariables), @ChannelId \n" + " while @@sqlstatus = 0 begin \n" + " insert into $(defaultCatalog)$(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) \n" + -" values('$(targetTableName)','D', $(triggerHistoryId), @OldPk, @OldDataRow, @ChannelId, @txid, @clientname, $(externalSelect), getdate())\n" + +" values('$(targetTableName)','D', $(triggerHistoryId), @OldPk, @OldDataRow, @ChannelId, @txid, @clientname, $(externalSelectForDelete), getdate())\n" + " fetch DeleteDataCursor into @OldPk,@OldDataRow $(oldKeyVariables), @ChannelId \n" + " end \n" + " close DeleteDataCursor \n" + @@ -163,7 +163,7 @@ public AseTriggerTemplate(ISymmetricDialect symmetricDialect) { " fetch InsertDataCursor into @DataRow $(newKeyVariables), @ChannelId \n" + " while @@sqlstatus = 0 begin \n" + " insert into $(defaultCatalog)$(defaultSchema)$(prefixName)_data (table_name, event_type, trigger_hist_id, row_data, channel_id, transaction_id, source_node_id, external_data, create_time) \n" + -" values('$(targetTableName)','I', $(triggerHistoryId), @DataRow, @ChannelId, @txid, @clientname, $(externalSelect), getdate()) \n" + +" values('$(targetTableName)','I', $(triggerHistoryId), @DataRow, @ChannelId, @txid, @clientname, $(externalSelectForInsert), getdate()) \n" + " fetch InsertDataCursor into @DataRow $(newKeyVariables), @ChannelId \n" + " end \n" + " close InsertDataCursor \n" + diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mssql/MsSqlTriggerTemplate.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mssql/MsSqlTriggerTemplate.java index 25dc85a093..8b4d042403 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mssql/MsSqlTriggerTemplate.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/mssql/MsSqlTriggerTemplate.java @@ -192,7 +192,7 @@ public MsSqlTriggerTemplate(ISymmetricDialect symmetricDialect) { " select '$(targetTableName)','D', $(triggerHistoryId), $(oldKeys), \n" + " $(specialSqlServerSybaseChannelExpression), $(txIdExpression), \n" + defaultCatalog + "dbo.$(prefixName)_node_disabled(), \n" + -" $(externalSelect), current_timestamp \n" + +" $(externalSelectForDelete), current_timestamp \n" + " from deleted \n" + " where $(syncOnDeleteCondition) \n" + " insert into " + defaultCatalog + "$(defaultSchema)$(prefixName)_data \n" + @@ -201,7 +201,7 @@ public MsSqlTriggerTemplate(ISymmetricDialect symmetricDialect) { " select '$(targetTableName)','I', $(triggerHistoryId), $(columns), \n" + " $(channelExpression), $(txIdExpression), \n" + defaultCatalog + "dbo.$(prefixName)_node_disabled(), \n" + -" $(externalSelect), current_timestamp \n" + +" $(externalSelectForInsert), current_timestamp \n" + " $(if:containsBlobClobColumns) \n" + " from inserted \n" + " inner join $(schemaName)$(tableName) $(origTableAlias) on $(tableNewPrimaryKeyJoin) \n" + @@ -286,7 +286,7 @@ public MsSqlTriggerTemplate(ISymmetricDialect symmetricDialect) { " select '$(targetTableName)','D', $(triggerHistoryId), $(oldKeys), \n" + " $(specialSqlServerSybaseChannelExpression), \n" + " $(txIdExpression), " + defaultCatalog + "dbo.$(prefixName)_node_disabled(), \n" + -" $(externalSelect), current_timestamp \n" + +" $(externalSelectForDelete), current_timestamp \n" + " from deleted \n" + " where $(syncOnDeleteCondition) \n" + " insert into " + defaultCatalog + "$(defaultSchema)$(prefixName)_data \n" + @@ -295,7 +295,7 @@ public MsSqlTriggerTemplate(ISymmetricDialect symmetricDialect) { " select '$(targetTableName)','R', $(triggerHistoryId), $(newKeys), \n" + " $(channelExpression), $(txIdExpression), \n" + defaultCatalog + "dbo.$(prefixName)_node_disabled(), \n" + -" $(externalSelect), current_timestamp \n" + +" $(externalSelectForInsert), current_timestamp \n" + " $(if:containsBlobClobColumns) \n" + " from inserted \n" + " inner join $(schemaName)$(tableName) $(origTableAlias) on $(tableNewPrimaryKeyJoin) \n" + diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractTriggerTemplate.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractTriggerTemplate.java index 3fb6fe3778..a4a597a69f 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractTriggerTemplate.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractTriggerTemplate.java @@ -505,6 +505,12 @@ protected String replaceTemplateVariables(DataEventType dml, Trigger trigger, ddl = FormatUtils.replace("channelExpression", symmetricDialect.preProcessTriggerSqlClause( getChannelExpression(trigger, history, originalTable)), ddl); + ddl = FormatUtils.replace("externalSelectForDelete", (StringUtils.isBlank(trigger.getExternalSelect()) ? "null" + : "(" + convertExternalSelectToDelete(symmetricDialect.preProcessTriggerSqlClause(trigger.getExternalSelect())) + + ")"), ddl); + ddl = FormatUtils.replace("externalSelectForInsert", (StringUtils.isBlank(trigger.getExternalSelect()) ? "null" + : "(" + convertExternalSelectToInsert(symmetricDialect.preProcessTriggerSqlClause(trigger.getExternalSelect())) + + ")"), ddl); ddl = FormatUtils.replace("externalSelect", (StringUtils.isBlank(trigger.getExternalSelect()) ? "null" : "(" + symmetricDialect.preProcessTriggerSqlClause(trigger.getExternalSelect()) + ")"), ddl); @@ -676,6 +682,18 @@ protected String replaceTemplateVariables(DataEventType dml, Trigger trigger, return ddl; } + private String convertExternalSelectToDelete(String externalSelect) { + externalSelect = FormatUtils.replace("curTriggerValue", oldTriggerValue, externalSelect); + externalSelect = FormatUtils.replace("curColumnPrefix", oldColumnPrefix, externalSelect); + return externalSelect; + } + + private String convertExternalSelectToInsert(String externalSelect) { + externalSelect = FormatUtils.replace("curTriggerValue", newTriggerValue, externalSelect); + externalSelect = FormatUtils.replace("curColumnPrefix", newColumnPrefix, externalSelect); + return externalSelect; + } + private String getChannelExpression() { return null;