You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2021/12/15 22:38:26 UTC

[nifi] branch main updated: NIFI-9476 - Fix QueryRecord when no result and with array type column

This is an automated email from the ASF dual-hosted git repository.

mattyb149 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 90930ca  NIFI-9476 - Fix QueryRecord when no result and with array type column
90930ca is described below

commit 90930ca1970450255ace314d050914293f2e6599
Author: Pierre Villard <pi...@gmail.com>
AuthorDate: Fri Dec 10 20:53:44 2021 +0100

    NIFI-9476 - Fix QueryRecord when no result and with array type column
    
    Signed-off-by: Matthew Burgess <ma...@apache.org>
    
    This closes #5594
---
 .../serialization/record/ResultSetRecordSet.java   |  7 ++++++
 .../nifi/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 5853d32..5229dd5 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 e37a712..765fece 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<String> columnNames;
diff --git a/nifi-nar-bundles/nifi-standard-bundle/pom.xml b/nifi-nar-bundles/nifi-standard-bundle/pom.xml
index 0c295ab..c15a63b 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/pom.xml
+++ b/nifi-nar-bundles/nifi-standard-bundle/pom.xml
@@ -364,7 +364,7 @@
             <dependency>
                 <groupId>org.apache.calcite</groupId>
                 <artifactId>calcite-core</artifactId>
-                <version>1.27.0</version>
+                <version>1.28.0</version>
                 <exclusions>
                     <exclusion>
                         <groupId>log4j</groupId>