From 90930ca1970450255ace314d050914293f2e6599 Mon Sep 17 00:00:00 2001 From: Pierre Villard Date: Fri, 10 Dec 2021 20:53:44 +0100 Subject: [PATCH] NIFI-9476 - Fix QueryRecord when no result and with array type column Signed-off-by: Matthew Burgess This closes #5594 --- .../record/ResultSetRecordSet.java | 7 +++++ .../processors/standard/TestQueryRecord.java | 27 +++++++++++++++++++ nifi-nar-bundles/nifi-standard-bundle/pom.xml | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/ResultSetRecordSet.java b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/ResultSetRecordSet.java index 5853d32d44..5229dd5ef0 100644 --- a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/ResultSetRecordSet.java +++ b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/ResultSetRecordSet.java @@ -38,6 +38,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -301,6 +302,12 @@ public class ResultSetRecordSet implements RecordSet, Closeable { return RecordFieldType.ARRAY.getArrayDataType(baseType); } catch (SQLFeatureNotSupportedException sfnse) { return RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.STRING.getDataType()); + } catch (SQLException sqle) { + if (sqle.getCause() instanceof NoSuchElementException) { + return RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.STRING.getDataType()); + } else { + throw sqle; + } } } diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestQueryRecord.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestQueryRecord.java index e37a712eba..765fececee 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestQueryRecord.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestQueryRecord.java @@ -18,6 +18,8 @@ package org.apache.nifi.processors.standard; import org.apache.nifi.controller.AbstractControllerService; import org.apache.nifi.csv.CSVReader; +import org.apache.nifi.json.JsonRecordSetWriter; +import org.apache.nifi.json.JsonTreeReader; import org.apache.nifi.logging.ComponentLog; import org.apache.nifi.reporting.InitializationException; import org.apache.nifi.schema.access.SchemaAccessUtils; @@ -1132,6 +1134,31 @@ public class TestQueryRecord { runner.assertTransferCount(REL_NAME, 1); } + @Test + public void testReturnsNoResultWithArrayColumn() throws InitializationException { + TestRunner runner = getRunner(); + + final JsonTreeReader jsonReader = new JsonTreeReader(); + runner.addControllerService("reader", jsonReader); + runner.enableControllerService(jsonReader); + + final JsonRecordSetWriter jsonWriter = new JsonRecordSetWriter(); + runner.addControllerService("writer", jsonWriter); + runner.enableControllerService(jsonWriter); + + runner.setProperty(REL_NAME, "SELECT * from FLOWFILE WHERE status = 'failure'"); + runner.setProperty(QueryRecord.RECORD_READER_FACTORY, "reader"); + runner.setProperty(QueryRecord.RECORD_WRITER_FACTORY, "writer"); + runner.setProperty(QueryRecord.INCLUDE_ZERO_RECORD_FLOWFILES, "true"); + + runner.enqueue("{\"status\": \"starting\",\"myArray\": [{\"foo\": \"foo\"}]}"); + runner.run(); + + runner.assertTransferCount(REL_NAME, 1); + final MockFlowFile flowFileOut = runner.getFlowFilesForRelationship(REL_NAME).get(0); + flowFileOut.assertContentEquals("[]"); + } + private static class ResultSetValidatingRecordWriter extends AbstractControllerService implements RecordSetWriterFactory { private final List columnNames; diff --git a/nifi-nar-bundles/nifi-standard-bundle/pom.xml b/nifi-nar-bundles/nifi-standard-bundle/pom.xml index 0c295ab8a9..c15a63bf51 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/pom.xml +++ b/nifi-nar-bundles/nifi-standard-bundle/pom.xml @@ -364,7 +364,7 @@ org.apache.calcite calcite-core - 1.27.0 + 1.28.0 log4j