diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java index 0d82b988c1..e276f7be7a 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java @@ -259,6 +259,17 @@ public TriggerHistory getTriggerHistory(int histId) { } return history; } + + protected List getActiveTriggerHistories(Trigger trigger) { + List active = getActiveTriggerHistories(); + List list = new ArrayList(); + for (TriggerHistory triggerHistory : active) { + if (triggerHistory.getTriggerId().equals(trigger.getTriggerId())) { + list.add(triggerHistory); + } + } + return list; + } public TriggerHistory getNewestTriggerHistoryForTrigger(String triggerId, String catalogName, String schemaName, String tableName) { @@ -278,7 +289,7 @@ public TriggerHistory getNewestTriggerHistoryForTrigger(String triggerId, String } } return null; - } + } /** * Get a list of trigger histories that are currently active @@ -286,7 +297,7 @@ public TriggerHistory getNewestTriggerHistoryForTrigger(String triggerId, String public List getActiveTriggerHistories() { return sqlTemplate.query(getSql("allTriggerHistSql", "activeTriggerHistSql"), new TriggerHistoryMapper()); - } + } public List getActiveTriggerHistories(String tableName) { return sqlTemplate.query(getSql("allTriggerHistSql", "triggerHistBySourceTableWhereSql"), @@ -941,7 +952,7 @@ protected void inactivateTriggers(List triggersThatShouldBeActive, tablesByTriggerId.put(trigger.getTriggerId(), tables); } - if (tables == null || trigger == null) { + if (tables == null || tables.size() == 0 || trigger == null) { removeTrigger = true; } else { if (!StringUtils.equals(trigger.getSourceCatalogName(), @@ -1122,13 +1133,21 @@ public void syncTrigger(Trigger trigger, ITriggerCreationListener listener, bool try { if (listener != null) { addTriggerCreationListeners(listener); - } + } if (triggersForCurrentNode.contains(trigger)) { + if (!trigger.isSourceTableNameWildCarded()) { + List histories = getActiveTriggerHistories(trigger); + for (TriggerHistory triggerHistory : histories) { + if (!triggerHistory.getFullyQualifiedSourceTableName().equals(trigger.getFullyQualifiedSourceTableName())) { + dropTriggers(triggerHistory, sqlBuffer); + } + } + } updateOrCreateDatabaseTrigger(trigger, triggersForCurrentNode, sqlBuffer, force); } else { - List histories = findTriggerHistories(trigger.getSourceCatalogName(), trigger.getSourceSchemaName(), trigger.getSourceTableName()); + List histories = getActiveTriggerHistories(trigger); for (TriggerHistory triggerHistory : histories) { dropTriggers(triggerHistory, sqlBuffer); } @@ -1164,11 +1183,11 @@ protected void updateOrCreateDatabaseTriggers(Trigger trigger, Table table, } TriggerHistory latestHistoryBeforeRebuild = getNewestTriggerHistoryForTrigger( - trigger.getTriggerId(), - trigger.getSourceCatalogName(), - trigger.getSourceSchemaName(), - trigger.isSourceTableNameWildCarded() ? table.getName() : trigger - .getSourceTableName()); + trigger.getTriggerId(), + trigger.getSourceCatalogName(), + trigger.getSourceSchemaName(), + trigger.isSourceTableNameWildCarded() ? table.getName() : trigger + .getSourceTableName()); boolean forceRebuildOfTriggers = false; if (latestHistoryBeforeRebuild == null) {