From 77511f282236835bf84a833f7329e4e73ed417bf Mon Sep 17 00:00:00 2001 From: chenson42 Date: Fri, 10 Sep 2010 21:22:07 +0000 Subject: [PATCH] Make fully qualified table name methods consistent. Also strip out special characters from trigger_ids when generating trigger names. --- .../org/jumpmind/symmetric/db/SqlTemplate.java | 2 +- .../org/jumpmind/symmetric/model/Trigger.java | 2 +- .../jumpmind/symmetric/model/TriggerRouter.java | 6 +++++- .../symmetric/service/impl/DataService.java | 17 +++++++++-------- .../service/impl/TriggerRouterService.java | 13 ++++++------- 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/db/SqlTemplate.java b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/db/SqlTemplate.java index 019f053b35..b1f52a7135 100644 --- a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/db/SqlTemplate.java +++ b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/db/SqlTemplate.java @@ -124,7 +124,7 @@ public String createInitalLoadSql(Node node, IDbDialect dialect, TriggerRouter t } public String createPurgeSql(Node node, IDbDialect dialect, TriggerRouter triggerRouter) { - return String.format("delete from %s", triggerRouter.getQualifiedTargetTableName()); + return String.format("delete from %s", triggerRouter.qualifiedTargetTableName()); } public String createCsvDataSql(IDbDialect dialect, Trigger trig, Table metaData, String whereClause) { diff --git a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/model/Trigger.java b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/model/Trigger.java index 5d5fc4ef25..c9cdac6e72 100644 --- a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/model/Trigger.java +++ b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/model/Trigger.java @@ -100,7 +100,7 @@ public Trigger(String tableName) { this.sourceTableName = tableName; } - public String displayTableName() { + public String qualifiedSourceTableName() { String schemaPlusTableName = (getSourceSchemaName() != null ? getSourceSchemaName() + "." : "") + getSourceTableName(); diff --git a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/model/TriggerRouter.java b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/model/TriggerRouter.java index d5e6da45a1..770b84c6f0 100644 --- a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/model/TriggerRouter.java +++ b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/model/TriggerRouter.java @@ -172,8 +172,12 @@ public String getTargetTable() { return null; } } + + public String qualifiedSourceTableName() { + return trigger.qualifiedSourceTableName(); + } - public String getQualifiedTargetTableName() { + public String qualifiedTargetTableName() { String catalog = getTargetCatalog(null); String schema = getTargetSchema(null); String tableName = getTargetTable(); diff --git a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/service/impl/DataService.java b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/service/impl/DataService.java index e3556d0f85..cb62cf679a 100644 --- a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/service/impl/DataService.java +++ b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/service/impl/DataService.java @@ -237,11 +237,19 @@ public String reloadNode(String nodeId) { } public void insertReloadEvents(Node targetNode) { + + // outgoing data events are pointless because we are reloading all data + outgoingBatchService.markAllAsSentForNode(targetNode); + if (parameterService.is(ParameterConstants.DATA_RELOAD_IS_BATCH_INSERT_TRANSACTIONAL)) { newTransactionTemplate.execute(new TransactionalInsertReloadEventsDelegate(targetNode)); } else { new TransactionalInsertReloadEventsDelegate(targetNode).doInTransaction(null); } + + // remove all incoming events from the node are starting a reload for. + purgeService.purgeAllIncomingEventsForNode(targetNode.getNodeId()); + } class TransactionalInsertReloadEventsDelegate implements TransactionCallback { @@ -262,10 +270,6 @@ public Object doInTransaction(TransactionStatus status) { } } - // outgoing data events are pointless because we are reloading all - // data - outgoingBatchService.markAllAsSentForNode(targetNode); - // insert node security so the client doing the initial load knows // that an initial load is currently happening insertNodeSecurityUpdate(targetNode, true); @@ -280,7 +284,7 @@ public Object doInTransaction(TransactionStatus status) { Table table = dbDialect.getTable(trigger.getSourceCatalogName(), trigger .getSourceSchemaName(), trigger.getSourceTableName(), false); if (table == null) { - log.warn("TriggerTableMissing",trigger.displayTableName()); + log.warn("TriggerTableMissing",trigger.qualifiedSourceTableName()); iterator.remove(); } } @@ -316,9 +320,6 @@ public Object doInTransaction(TransactionStatus status) { insertNodeSecurityUpdate(targetNode, parameterService.is(ParameterConstants.INITIAL_LOAD_USE_RELOAD_CHANNEL)); - // remove all incoming events from the node are starting a reload for. - purgeService.purgeAllIncomingEventsForNode(targetNode.getNodeId()); - return null; } } diff --git a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java index 8915c46e78..e3e59c4545 100644 --- a/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java +++ b/symmetric/symmetric-ds/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java @@ -693,7 +693,7 @@ protected void updateOrCreateDatabaseTriggers(StringBuilder sqlBuffer, boolean g } } else { - log.error("TriggerTableMissing", trigger.displayTableName()); + log.error("TriggerTableMissing", trigger.qualifiedSourceTableName()); if (this.triggerCreationListeners != null) { for (ITriggerCreationListener l : this.triggerCreationListeners) { @@ -702,7 +702,7 @@ protected void updateOrCreateDatabaseTriggers(StringBuilder sqlBuffer, boolean g } } } catch (Exception ex) { - log.error("TriggerSynchronizingFailed", ex, trigger.displayTableName()); + log.error("TriggerSynchronizingFailed", ex, trigger.qualifiedSourceTableName()); if (this.triggerCreationListeners != null) { for (ITriggerCreationListener l : this.triggerCreationListeners) { l.triggerFailed(trigger, ex); @@ -796,12 +796,11 @@ protected String getTriggerName(DataEventType dml, int maxTriggerNameLength, Tri break; } - if (triggerName == null) { + if (StringUtils.isBlank(triggerName)) { String triggerPrefix1 = tablePrefix + "_"; - String triggerSuffix1 = "on_" + dml.getCode().toLowerCase() + "_for_" - + trigger.getTriggerId(); - String triggerSuffix2 = "_" - + parameterService.getNodeGroupId().replaceAll( + String triggerSuffix1 = "on_" + dml.getCode().toLowerCase() + "_for_"; + String triggerSuffix2 = (trigger.getTriggerId() + "_" + + parameterService.getNodeGroupId()).replaceAll( "[^a-zA-Z0-9]|[a|e|i|o|u|A|E|I|O|U]", ""); triggerName = triggerPrefix1 + triggerSuffix1 + triggerSuffix2; // use the node group id as part of the trigger if we can because it