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 33297772f5..9fa57de0da 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 @@ -43,6 +43,8 @@ import org.jumpmind.symmetric.service.IParameterService; import org.jumpmind.symmetric.util.SymmetricUtils; import org.jumpmind.util.FormatUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Responsible for generating dialect specific SQL such as trigger bodies and @@ -50,6 +52,8 @@ */ abstract public class AbstractTriggerTemplate { + protected final Logger log = LoggerFactory.getLogger(getClass()); + protected static final String ORIG_TABLE_ALIAS = "orig"; static final String INSERT_TRIGGER_TEMPLATE = "insertTriggerTemplate"; @@ -193,13 +197,13 @@ public String createInitalLoadSql(Node node, TriggerRouter triggerRouter, Table columnList.append(columnExpression).append(" as ").append("x__").append(i); } else { - columnList.append(" '' as ").append("x__").append(i); + columnList.append(" ").append(emptyColumnTemplate).append(" as ").append("x__").append(i); } } } sql = FormatUtils.replace("columns", columnList.toString(), sql); } - + String initialLoadSelect = StringUtils.isBlank(triggerRouter.getInitialLoadSelect()) ? Constants.ALWAYS_TRUE_CONDITION : triggerRouter.getInitialLoadSelect(); if (StringUtils.isNotBlank(overrideSelectSql)) { diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java index 311b6eeddf..38e6876382 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java @@ -1607,7 +1607,7 @@ public Data mapRow(Row row) { } else if (objectValuesWillNeedEscaped) { String[] rowData = platform.getStringValues( symmetricDialect.getBinaryEncoding(), sourceTable.getColumns(), - row, false); + row, false, true); csvRow = CsvUtils.escapeCsvData(rowData, '\0', '"'); } else { csvRow = row.csvValue(); diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java index 9082b4c9a8..bdc4de93a3 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java @@ -34,6 +34,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Base64; @@ -470,13 +471,14 @@ protected String cleanNumber(String value) { // TODO: this should be AbstractDdlBuilder.getInsertSql(Table table, // Map columnValues, boolean genPlaceholders) public String[] getStringValues(BinaryEncoding encoding, Column[] metaData, Row row, - boolean useVariableDates) { + boolean useVariableDates, boolean indexByPosition) { String[] values = new String[metaData.length]; - for (int i = 0; i < metaData.length; i++) { + Set keys = row.keySet(); + int i = 0; + for (String key : keys) { Column column = metaData[i]; - String name = column.getName(); - int type = column.getJdbcTypeCode(); - + String name = indexByPosition ? key : column.getName(); + int type = column.getJdbcTypeCode(); if (row.get(name) != null) { if (type == Types.BOOLEAN || type == Types.BIT) { values[i] = row.getBoolean(name) ? "1" : "0"; @@ -498,6 +500,8 @@ public String[] getStringValues(BinaryEncoding encoding, Column[] metaData, Row values[i] = row.getString(name); } } + + i++; } return values; } diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java index 157532b28a..e8f6471248 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/IDatabasePlatform.java @@ -129,7 +129,7 @@ public Object[] getObjectValues(BinaryEncoding encoding, Table table, String[] c public Object[] getObjectValues(BinaryEncoding encoding, String[] values, Column[] orderedMetaData, boolean useVariableDates, boolean fitToColumn); - public String[] getStringValues(BinaryEncoding encoding, Column[] metaData, Row row, boolean useVariableDates); + public String[] getStringValues(BinaryEncoding encoding, Column[] metaData, Row row, boolean useVariableDates, boolean indexByPosition); public Database readDatabaseFromXml(String filePath, boolean alterCaseToMatchDatabaseDefaultCase); diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java index 49c716d07d..ee1093b699 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java @@ -508,7 +508,7 @@ protected void writeComment(String commentStr) { protected void writeRow(Row row) { Column[] columns = table.getColumns(); String[] values = platform.getStringValues(BinaryEncoding.HEX, columns, row, - useVariableDates); + useVariableDates, false); try { if (format == Format.CSV) { csvWriter.writeRecord(values, true); diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java index a0e2eec8b1..b17f382bba 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriter.java @@ -902,7 +902,7 @@ public Row mapRow(Row row) { if (row != null) { String[] existData = platform.getStringValues(context.getBatch().getBinaryEncoding(), - columns, row, false); + columns, row, false, false); if (existData != null) { curVal = CsvUtils.escapeCsvData(existData); } diff --git a/symmetric-server/src/main/java/org/jumpmind/symmetric/integrate/AbstractXmlPublisherExtensionPoint.java b/symmetric-server/src/main/java/org/jumpmind/symmetric/integrate/AbstractXmlPublisherExtensionPoint.java index cd23ec58b7..540635232c 100644 --- a/symmetric-server/src/main/java/org/jumpmind/symmetric/integrate/AbstractXmlPublisherExtensionPoint.java +++ b/symmetric-server/src/main/java/org/jumpmind/symmetric/integrate/AbstractXmlPublisherExtensionPoint.java @@ -200,7 +200,7 @@ protected List readData(final Table table, String[] args) { @Override public String[] mapRow(Row row) { return platform.getStringValues(engine.getSymmetricDialect() - .getBinaryEncoding(), table.getColumns(), row, false); + .getBinaryEncoding(), table.getColumns(), row, false, false); } }, argObjs); }