From 70b80988783cfdcdab0b1e9b390ba9a06cdfb736 Mon Sep 17 00:00:00 2001 From: mmichalek Date: Wed, 20 Dec 2017 14:09:23 -0500 Subject: [PATCH] 0003341: Improve PostgreSQL bulk loader to tolerate NULL bytes in incoming data --- .../symmetric/io/PostgresBulkDatabaseWriter.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/symmetric-client/src/main/java/org/jumpmind/symmetric/io/PostgresBulkDatabaseWriter.java b/symmetric-client/src/main/java/org/jumpmind/symmetric/io/PostgresBulkDatabaseWriter.java index d7ded62be8..218b6e335e 100644 --- a/symmetric-client/src/main/java/org/jumpmind/symmetric/io/PostgresBulkDatabaseWriter.java +++ b/symmetric-client/src/main/java/org/jumpmind/symmetric/io/PostgresBulkDatabaseWriter.java @@ -102,6 +102,7 @@ protected void bulkWrite(CsvData data) { } } String formattedData = CsvUtils.escapeCsvData(parsedData, '\n', '\'', CsvWriter.ESCAPE_MODE_DOUBLED); + formattedData = removeIllegalCharacters(formattedData); byte[] dataToLoad = formattedData.getBytes(); copyIn.writeToCopy(dataToLoad, 0, dataToLoad.length); loadedRows++; @@ -130,6 +131,16 @@ protected void bulkWrite(CsvData data) { statistics.get(batch).stopTimer(DataWriterStatisticConstants.DATABASEMILLIS); } + protected String removeIllegalCharacters(String formattedData) { + StringBuilder buff = new StringBuilder(formattedData.length()); + for (char c : formattedData.toCharArray()) { + if (c > 0) { + buff.append(c); + } + } + return buff.toString(); + } + protected void flush() { if (copyIn != null) { try {