From c718c9872ad4a8719339a0c6e84c55795f388255 Mon Sep 17 00:00:00 2001 From: chenson42 Date: Mon, 31 Oct 2011 20:20:53 +0000 Subject: [PATCH] post process table after reading it in from the database. --- .../service/impl/TriggerRouterService.java | 43 +++++++++---------- .../ddl/platform/PlatformImplBase.java | 31 +++++++------ 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java index 142b0708be..8fc8ef93a4 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java @@ -693,26 +693,23 @@ public void syncTriggers() { } public void syncTriggers(StringBuilder sqlBuffer, boolean gen_always) { - if (dbDialect.getPlatform().getPlatformInfo().isTriggersSupported()) { - if (clusterService.lock(ClusterConstants.SYNCTRIGGERS)) { - synchronized (this) { - try { - log.info("TriggersSynchronizing"); - // make sure channels are read from the database - configurationService.reloadChannels(); - List triggersForCurrentNode = getTriggersForCurrentNode(); - inactivateTriggers(triggersForCurrentNode, sqlBuffer); - updateOrCreateDatabaseTriggers(triggersForCurrentNode, sqlBuffer, - gen_always); - resetTriggerRouterCacheByNodeGroupId(); - } finally { - clusterService.unlock(ClusterConstants.SYNCTRIGGERS); - log.info("TriggersSynchronized"); - } + if (clusterService.lock(ClusterConstants.SYNCTRIGGERS)) { + synchronized (this) { + try { + log.info("TriggersSynchronizing"); + // make sure channels are read from the database + configurationService.reloadChannels(); + List triggersForCurrentNode = getTriggersForCurrentNode(); + inactivateTriggers(triggersForCurrentNode, sqlBuffer); + updateOrCreateDatabaseTriggers(triggersForCurrentNode, sqlBuffer, gen_always); + resetTriggerRouterCacheByNodeGroupId(); + } finally { + clusterService.unlock(ClusterConstants.SYNCTRIGGERS); + log.info("TriggersSynchronized"); } - } else { - log.info("TriggersSynchronizingFailedLock"); } + } else { + log.info("TriggersSynchronizingFailedLock"); } } @@ -825,19 +822,21 @@ protected void updateOrCreateDatabaseTriggers(List triggers, StringBuil } else if (gen_always) { reason = TriggerReBuildReason.FORCED; forceRebuildOfTriggers = true; - } + } + + boolean supportsTriggers = dbDialect.getPlatform().getPlatformInfo().isTriggersSupported(); newestHistory = rebuildTriggerIfNecessary(sqlBuffer, forceRebuildOfTriggers, trigger, DataEventType.INSERT, reason, - latestHistoryBeforeRebuild, null, trigger.isSyncOnInsert(), table); + latestHistoryBeforeRebuild, null, trigger.isSyncOnInsert() && supportsTriggers, table); newestHistory = rebuildTriggerIfNecessary(sqlBuffer, forceRebuildOfTriggers, trigger, DataEventType.UPDATE, reason, latestHistoryBeforeRebuild, - newestHistory, trigger.isSyncOnUpdate(), table); + newestHistory, trigger.isSyncOnUpdate() && supportsTriggers, table); newestHistory = rebuildTriggerIfNecessary(sqlBuffer, forceRebuildOfTriggers, trigger, DataEventType.DELETE, reason, latestHistoryBeforeRebuild, - newestHistory, trigger.isSyncOnDelete(), table); + newestHistory, trigger.isSyncOnDelete() && supportsTriggers, table); if (latestHistoryBeforeRebuild != null && newestHistory != null) { inactivateTriggerHistory(latestHistoryBeforeRebuild); diff --git a/symmetric/symmetric-ddl/src/main/java/org/jumpmind/symmetric/ddl/platform/PlatformImplBase.java b/symmetric/symmetric-ddl/src/main/java/org/jumpmind/symmetric/ddl/platform/PlatformImplBase.java index 4fdf086b22..665c150a7a 100644 --- a/symmetric/symmetric-ddl/src/main/java/org/jumpmind/symmetric/ddl/platform/PlatformImplBase.java +++ b/symmetric/symmetric-ddl/src/main/java/org/jumpmind/symmetric/ddl/platform/PlatformImplBase.java @@ -925,7 +925,7 @@ public Database readModelFromDatabase(Connection connection, String name, String public Table readTableFromDatabase(Connection connection, String catalogName, String schemaName, String tablename) throws SQLException { - return _modelReader.readTable(connection, catalogName, schemaName, tablename); + return postprocessTableFromDatabase(_modelReader.readTable(connection, catalogName, schemaName, tablename)); } /* @@ -939,26 +939,29 @@ protected void postprocessModelFromDatabase(Database model) // around them which we'll remove now for (int tableIdx = 0; tableIdx < model.getTableCount(); tableIdx++) { - Table table = model.getTable(tableIdx); + postprocessTableFromDatabase(model.getTable(tableIdx)); + } + } + + protected Table postprocessTableFromDatabase(Table table) { + for (int columnIdx = 0; columnIdx < table.getColumnCount(); columnIdx++) + { + Column column = table.getColumn(columnIdx); - for (int columnIdx = 0; columnIdx < table.getColumnCount(); columnIdx++) + if (TypeMap.isTextType(column.getTypeCode()) || + TypeMap.isDateTimeType(column.getTypeCode())) { - Column column = table.getColumn(columnIdx); + String defaultValue = column.getDefaultValue(); - if (TypeMap.isTextType(column.getTypeCode()) || - TypeMap.isDateTimeType(column.getTypeCode())) + if ((defaultValue != null) && (defaultValue.length() >= 2) && + defaultValue.startsWith("'") && defaultValue.endsWith("'")) { - String defaultValue = column.getDefaultValue(); - - if ((defaultValue != null) && (defaultValue.length() >= 2) && - defaultValue.startsWith("'") && defaultValue.endsWith("'")) - { - defaultValue = defaultValue.substring(1, defaultValue.length() - 1); - column.setDefaultValue(defaultValue); - } + defaultValue = defaultValue.substring(1, defaultValue.length() - 1); + column.setDefaultValue(defaultValue); } } } + return table; } /*