From 7d6d191237c6391a2ff85f48ff7ac8ed38445e11 Mon Sep 17 00:00:00 2001 From: chenson42 Date: Wed, 3 Apr 2013 00:16:34 +0000 Subject: [PATCH] 0001155: Audit router causes NPE on MySQL. --- .../symmetric/route/AuditTableDataRouter.java | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/route/AuditTableDataRouter.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/route/AuditTableDataRouter.java index ea58a47a78..7555ce68a3 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/route/AuditTableDataRouter.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/route/AuditTableDataRouter.java @@ -19,6 +19,7 @@ import org.jumpmind.symmetric.model.Node; import org.jumpmind.symmetric.model.TriggerHistory; import org.jumpmind.symmetric.service.IParameterService; +import org.jumpmind.util.FormatUtils; public class AuditTableDataRouter extends AbstractDataRouter { @@ -60,14 +61,14 @@ public Set routeToNodes(SimpleRouterContext context, DataMetaData dataMe .getDatabaseInfo().getDelimiterToken()); ISqlTemplate template = platform.getSqlTemplate(); - + Map values = null; if (eventType != DataEventType.DELETE) { values = new HashMap(getNewDataAsObject(null, - dataMetaData, engine.getSymmetricDialect())); + dataMetaData, engine.getSymmetricDialect(), false)); } else { values = new HashMap(getOldDataAsObject(null, - dataMetaData, engine.getSymmetricDialect())); + dataMetaData, engine.getSymmetricDialect(), false)); } Long sequence = (Long) context.get(auditTableName); if (sequence == null) { @@ -75,11 +76,11 @@ public Set routeToNodes(SimpleRouterContext context, DataMetaData dataMe COLUMN_AUDIT_ID, auditTableName)); } else { sequence = 1l + sequence; - } - context.put(auditTableName, sequence); - values.put(COLUMN_AUDIT_ID, sequence); - values.put(COLUMN_AUDIT_TIME, new Date()); - values.put(COLUMN_AUDIT_EVENT, eventType.getCode()); + } + context.put(auditTable.getName(), sequence); + values.put(auditTable.getColumnWithName(COLUMN_AUDIT_ID).getName(), sequence); + values.put(auditTable.getColumnWithName(COLUMN_AUDIT_TIME).getName(), new Date()); + values.put(auditTable.getColumnWithName(COLUMN_AUDIT_EVENT).getName(), eventType.getCode()); DmlStatement statement = platform.createDmlStatement(DmlType.INSERT, auditTable); int[] types = statement.getTypes(); Object[] args = statement.getValueArray(values); @@ -92,18 +93,15 @@ public Set routeToNodes(SimpleRouterContext context, DataMetaData dataMe protected Table toAuditTable(Table table) { Table auditTable = table.copy(); String tableName = table.getName(); + if (!FormatUtils.isMixedCase(tableName)) { + tableName = tableName.toUpperCase(); + } auditTable.setName(String.format("%s_AUDIT", tableName)); Column[] columns = auditTable.getColumns(); auditTable.removeAllColumns(); - Column idColumn = new Column(COLUMN_AUDIT_ID, true, Types.BIGINT, 0, 0); - idColumn.setJdbcTypeName("BIGINT"); - auditTable.addColumn(idColumn); - Column timeColumn = new Column(COLUMN_AUDIT_TIME, false, Types.TIMESTAMP, 0, 0); - timeColumn.setJdbcTypeName("TIMESTAMP"); - auditTable.addColumn(timeColumn); - Column eventColumn = new Column(COLUMN_AUDIT_EVENT, false, Types.CHAR, 1, 0); - eventColumn.setJdbcTypeName("CHAR"); - auditTable.addColumn(eventColumn); + auditTable.addColumn(new Column(COLUMN_AUDIT_ID, true, Types.BIGINT, 0, 0)); + auditTable.addColumn(new Column(COLUMN_AUDIT_TIME, false, Types.TIMESTAMP, 0, 0)); + auditTable.addColumn(new Column(COLUMN_AUDIT_EVENT, false, Types.CHAR, 1, 0)); for (Column column : columns) { column.setRequired(false); column.setPrimaryKey(false);