From 8c1fe9b1f7920b5fa0ad90d1c4238ec6516464a5 Mon Sep 17 00:00:00 2001 From: Matt Burgess Date: Thu, 18 Aug 2016 19:18:39 -0400 Subject: [PATCH 1/2] NIFI-2602: Added unit test illustrating SelectHiveQL CSV NPE --- .../nifi/processors/hive/TestSelectHiveQL.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/test/java/org/apache/nifi/processors/hive/TestSelectHiveQL.java b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/test/java/org/apache/nifi/processors/hive/TestSelectHiveQL.java index 538603014849..8142e3f0d8db 100644 --- a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/test/java/org/apache/nifi/processors/hive/TestSelectHiveQL.java +++ b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/test/java/org/apache/nifi/processors/hive/TestSelectHiveQL.java @@ -205,9 +205,11 @@ public void invokeOnTrigger(final String query, final boolean incomingFlowFile, Random rng = new Random(53496); final int nrOfRows = 100; stmt.executeUpdate("insert into persons values (1, 'Joe Smith', " + rng.nextInt(469947) + ")"); - for (int i = 2; i <= nrOfRows; i++) { + for (int i = 2; i < nrOfRows; i++) { stmt.executeUpdate("insert into persons values (" + i + ", 'Someone Else', " + rng.nextInt(469947) + ")"); } + stmt.executeUpdate("insert into persons values (" + nrOfRows + ", 'Last Person', NULL)"); + LOGGER.info("test data loaded"); runner.setProperty(SelectHiveQL.HIVEQL_SELECT_QUERY, query); @@ -254,10 +256,13 @@ record = dataFileReader.next(record); while ((line = br.readLine()) != null) { recordsFromStream++; String[] values = line.split(","); - assertEquals(3, values.length); - // Assert the name has been quoted - assertTrue(values[1].startsWith("\"")); - assertTrue(values[1].endsWith("\"")); + if(recordsFromStream < (nrOfRows - 10)) { + assertEquals(3, values.length); + assertTrue(values[1].startsWith("\"")); + assertTrue(values[1].endsWith("\"")); + } else { + assertEquals(2, values.length); // Middle value is null + } } } assertEquals(nrOfRows - 10, recordsFromStream); From 8afc487efc95272c9c9e1c6e7bb06d0ce1c0bb9d Mon Sep 17 00:00:00 2001 From: Matt Burgess Date: Thu, 18 Aug 2016 19:18:48 -0400 Subject: [PATCH 2/2] NIFI-2602: Fixed NPE in SelectHiveQL when CSV output and null column value --- .../org/apache/nifi/util/hive/HiveJdbcCommon.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/util/hive/HiveJdbcCommon.java b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/util/hive/HiveJdbcCommon.java index 5de36dc19213..fb4ac845ffda 100644 --- a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/util/hive/HiveJdbcCommon.java +++ b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/util/hive/HiveJdbcCommon.java @@ -320,10 +320,19 @@ public static long convertToCsvStream(final ResultSet rs, final OutputStream out case NCHAR: case NVARCHAR: case VARCHAR: - rowValues.add("\"" + StringEscapeUtils.escapeCsv(rs.getString(i)) + "\""); + String valueString = rs.getString(i); + if (valueString != null) { + rowValues.add("\"" + StringEscapeUtils.escapeCsv(valueString) + "\""); + } else { + rowValues.add(""); + } break; default: - rowValues.add(value.toString()); + if (value != null) { + rowValues.add(value.toString()); + } else { + rowValues.add(""); + } } } // Write row values