From e37808e68e9f33bacaa1c6dcd4cc4b8bcb5d04c4 Mon Sep 17 00:00:00 2001 From: Philip Marzullo Date: Wed, 13 Jul 2022 12:05:05 -0400 Subject: [PATCH] 0004201: Failed to create update trigger for triggers that use and external_select with $(curTriggerValue) # Conflicts: # symmetric-client/src/main/java/org/jumpmind/symmetric/db/ase/AseTriggerTemplate.java # symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractTriggerTemplate.java --- .../symmetric/db/ase/AseTriggerTemplate.java | 4 ++-- .../db/mssql/MsSqlTriggerTemplate.java | 8 ++++---- .../symmetric/db/AbstractTriggerTemplate.java | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 6 deletions(-) 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 1ea32dcdb5..408238d664 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 @@ -220,7 +220,7 @@ public AseTriggerTemplate(ISymmetricDialect symmetricDialect) { + " 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" + @@ -250,7 +250,7 @@ public AseTriggerTemplate(ISymmetricDialect symmetricDialect) { + " 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" + 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 1112feed10..494a4c7226 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 @@ -188,7 +188,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" + @@ -197,7 +197,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" + @@ -282,7 +282,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" + @@ -291,7 +291,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 890162c12c..ba8cb0e952 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 @@ -415,6 +415,12 @@ protected String replaceTemplateVariables(DataEventType dml, Trigger trigger, symmetricDialect.preProcessTriggerSqlClause(triggerExpression), ddl); 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); @@ -559,6 +565,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;