From ec02e58d3c0a8162a32fb5c51651accf1d961d1b Mon Sep 17 00:00:00 2001 From: Mark Payne Date: Wed, 17 Jun 2015 12:32:57 -0400 Subject: [PATCH] NIFI-626: SQL timestamps were being added to Avro schema as string but value was being added as java.sql.Date object, which caused exceptions to be thrown. Now call toString() on the Date object to put to the record. --- .../processors/standard/util/JdbcCommon.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JdbcCommon.java b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JdbcCommon.java index 8dff244649..beca304f77 100644 --- a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JdbcCommon.java +++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JdbcCommon.java @@ -52,7 +52,21 @@ public class JdbcCommon { while (rs.next()) { for (int i = 1; i <= nrOfColumns; i++) { final Object value = rs.getObject(i); - rec.put(i - 1, value); + + // The different types that we support are numbers (int, + // long, double, float), as well + // as boolean values and Strings. Since Avro doesn't provide + // timestamp types, we want to + // convert those to Strings. So we will cast anything other + // than numbers or booleans to + // strings by using to toString() method. + if (value == null) { + rec.put(i - 1, null); + } else if (value instanceof Number || value instanceof Boolean) { + rec.put(i - 1, value); + } else { + rec.put(i - 1, value.toString()); + } } dataFileWriter.append(rec); nrOfRows += 1;