diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/firebird/FirebirdTriggerTemplate.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/firebird/FirebirdTriggerTemplate.java index 5433461ad4..7d1803980d 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/db/firebird/FirebirdTriggerTemplate.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/db/firebird/FirebirdTriggerTemplate.java @@ -124,4 +124,8 @@ public FirebirdTriggerTemplate(ISymmetricDialect symmetricDialect) { "select $(columns) from $(schemaName)$(tableName) t where $(whereClause) " ); } + protected boolean requiresTriggerTemplatesToBeUsedDuringInitialLoad() { + return false; + } + } \ No newline at end of file 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 d3803c8b91..32d3776859 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 @@ -109,12 +109,22 @@ abstract public class AbstractTriggerTemplate { protected AbstractTriggerTemplate(ISymmetricDialect symmetricDialect) { this.symmetricDialect = symmetricDialect; } + + protected boolean requiresTriggerTemplatesToBeUsedDuringInitialLoad() { + return true; + } public String createInitalLoadSql(Node node, TriggerRouter triggerRouter, Table originalTable, TriggerHistory triggerHistory, Channel channel, String overrideSelectSql) { IParameterService parameterService = symmetricDialect.getParameterService(); + boolean dateTimeAsString = parameterService.is( + ParameterConstants.DATA_LOADER_TREAT_DATETIME_AS_VARCHAR); + + boolean concatInCsv = parameterService.is( + ParameterConstants.INITIAL_LOAD_CONCAT_CSV_IN_SQL_ENABLED); + Table table = originalTable.copyAndFilterColumns(triggerHistory.getParsedColumnNames(), triggerHistory.getParsedPkColumnNames(), true); @@ -125,8 +135,8 @@ public String createInitalLoadSql(Node node, TriggerRouter triggerRouter, Table String sql = null; String tableAlias = symmetricDialect.getInitialLoadTableAlias(); - if (parameterService.is( - ParameterConstants.INITIAL_LOAD_CONCAT_CSV_IN_SQL_ENABLED)) { + + if (concatInCsv) { sql = sqlTemplates.get(INITIAL_LOAD_SQL_TEMPLATE); String columnsText = buildColumnsString(tableAlias, tableAlias, "", columns, DataEventType.INSERT, @@ -148,11 +158,29 @@ public String createInitalLoadSql(Node node, TriggerRouter triggerRouter, Table columnList.append(","); } - ColumnString columnString = fillOutColumnTemplate(tableAlias, tableAlias, - "", column, DataEventType.INSERT, false, channel, triggerRouter.getTrigger()); - String columnExpression = columnString.columnString; - if (isNotBlank(textColumnExpression) && TypeMap.isTextType(column.getMappedTypeCode())) { - columnExpression = textColumnExpression.replace("$(columnName)", columnExpression); + String columnExpression = null; + if (requiresTriggerTemplatesToBeUsedDuringInitialLoad()) { + ColumnString columnString = fillOutColumnTemplate(tableAlias, + tableAlias, "", column, DataEventType.INSERT, false, channel, + triggerRouter.getTrigger()); + columnExpression = columnString.columnString; + if (isNotBlank(textColumnExpression) + && TypeMap.isTextType(column.getMappedTypeCode())) { + columnExpression = textColumnExpression.replace("$(columnName)", + columnExpression); + } + } else { + columnExpression = SymmetricUtils.quote(symmetricDialect, + column.getName()); + + if (dateTimeAsString + && TypeMap.isDateTimeType(column.getMappedTypeCode())) { + columnExpression = castDatetimeColumnToString(column.getName()); + } else if (isNotBlank(textColumnExpression) + && TypeMap.isTextType(column.getMappedTypeCode())) { + columnExpression = textColumnExpression.replace("$(columnName)", + columnExpression) + " as " + column.getName(); + } } columnList.append(columnExpression).append(" as ").append(column.getName());