From 474d0b50687bf79fd2464cfef164e904e76bfdef Mon Sep 17 00:00:00 2001 From: mmichalek Date: Wed, 16 Nov 2016 13:30:06 -0500 Subject: [PATCH] 0002898: DBCompare should consult sym_router when determining target catalog and schema --- .../org/jumpmind/symmetric/io/DbCompare.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/io/DbCompare.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/io/DbCompare.java index 9c0e30a607..831e292607 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/io/DbCompare.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/io/DbCompare.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.IOUtils; @@ -43,6 +44,7 @@ import org.jumpmind.symmetric.common.TableConstants; import org.jumpmind.symmetric.io.DbCompareReport.TableReport; import org.jumpmind.symmetric.model.Trigger; +import org.jumpmind.symmetric.model.TriggerRouter; import org.jumpmind.symmetric.service.impl.TransformService.TransformTableNodeGroupLink; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -393,6 +395,10 @@ protected boolean mapPrimaryKey(DbCompareTables tables) { protected Table loadTargetTable(DbCompareTables tables) { Table targetTable = null; + + String catalog = targetEngine.getDatabasePlatform().getDefaultCatalog(); + String schema = targetEngine.getDatabasePlatform().getDefaultSchema(); + if (config.isUseSymmetricConfig()) { TransformTableNodeGroupLink transform = getTransformFor(tables.getSourceTable()); if (transform != null) { @@ -401,15 +407,36 @@ protected Table loadTargetTable(DbCompareTables tables) { tables.setTransform(transform); return targetTable; } + + TriggerRouter triggerRouter = getTriggerRouterFor(tables.getSourceTable()); + if (triggerRouter != null) { + catalog = triggerRouter.getTargetCatalog(catalog); + schema = triggerRouter.getTargetSchema(schema); + } } targetTable = targetEngine.getDatabasePlatform(). - getTableFromCache(tables.getSourceTable().getName(), true); + getTableFromCache(catalog, schema, tables.getSourceTable().getName(), true); tables.setTargetTable(targetTable); return targetTable; } + protected TriggerRouter getTriggerRouterFor(Table sourceTable) { + // TODO get routers. + Set triggerRouters = sourceEngine.getTriggerRouterService().getTriggerRouterForTableForCurrentNode( + sourceTable.getCatalog(), sourceTable.getSchema(), sourceTable.getName(), false); + + for (TriggerRouter triggerRouter : triggerRouters) { + String routerTargetNodeGroupId = triggerRouter.getRouter().getNodeGroupLink().getTargetNodeGroupId(); + String compareTargetNodeGroupId = targetEngine.getNodeService().getCachedIdentity().getNodeGroupId(); + if (StringUtils.equals(compareTargetNodeGroupId, routerTargetNodeGroupId)) { + return triggerRouter; + } + } + return null; + } + protected TransformTableNodeGroupLink getTransformFor(Table sourceTable) { String sourceNodeGroupId = sourceEngine.getNodeService().findIdentity().getNodeGroupId(); String targetNodeGroupId = targetEngine.getNodeService().findIdentity().getNodeGroupId();