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

turcsanyip 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 b91637fdeab NIFI-15981 - Fix NPE in ResultSetRecordSet for ARRAY 
columns when no reader schema is provided (#11298)
b91637fdeab is described below

commit b91637fdeab23a024c20fab6f0bbf3e0a9767066
Author: Pierre Villard <[email protected]>
AuthorDate: Mon Jun 1 05:10:50 2026 -0700

    NIFI-15981 - Fix NPE in ResultSetRecordSet for ARRAY columns when no reader 
schema is provided (#11298)
    
    
    Signed-off-by: Peter Turcsanyi <[email protected]>
---
 .../serialization/record/ResultSetRecordSet.java     | 20 +++++++++++---------
 .../serialization/record/ResultSetRecordSetTest.java | 19 +++++++++++++++++++
 2 files changed, 30 insertions(+), 9 deletions(-)

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 9a9470bae56..375826260b5 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
@@ -285,15 +285,17 @@ public class ResultSetRecordSet implements RecordSet, 
Closeable {
 
     private DataType getArrayDataType(final ResultSet rs, final RecordSchema 
readerSchema, final int columnIndex, final boolean useLogicalTypes) throws 
SQLException {
         // We first want to check if the Reader Schema can tell us what the 
type of the array is.
-        final String columnName = rs.getMetaData().getColumnName(columnIndex);
-        final Optional<RecordField> optionalRecordField = 
readerSchema.getField(columnName);
-        if (optionalRecordField.isPresent()) {
-            final RecordField recordField = optionalRecordField.get();
-            final DataType dataType = recordField.getDataType();
-            if (dataType.getFieldType() == RecordFieldType.ARRAY) {
-                final ArrayDataType arrayDataType = (ArrayDataType) dataType;
-                if (arrayDataType.getElementType() != null) {
-                    return dataType;
+        if (readerSchema != null) {
+            final String columnName = 
rs.getMetaData().getColumnName(columnIndex);
+            final Optional<RecordField> optionalRecordField = 
readerSchema.getField(columnName);
+            if (optionalRecordField.isPresent()) {
+                final RecordField recordField = optionalRecordField.get();
+                final DataType dataType = recordField.getDataType();
+                if (dataType.getFieldType() == RecordFieldType.ARRAY) {
+                    final ArrayDataType arrayDataType = (ArrayDataType) 
dataType;
+                    if (arrayDataType.getElementType() != null) {
+                        return dataType;
+                    }
                 }
             }
         }
diff --git 
a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/ResultSetRecordSetTest.java
 
b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/ResultSetRecordSetTest.java
index 2b632ea9286..c311a177563 100644
--- 
a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/ResultSetRecordSetTest.java
+++ 
b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/ResultSetRecordSetTest.java
@@ -385,6 +385,25 @@ public class ResultSetRecordSetTest {
         
assertEquals(RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.STRING.getDataType()),
 resultSchema.getField(0).getDataType());
     }
 
+    @Test
+    public void testCreateSchemaArrayWithNullReaderSchema() throws 
SQLException {
+        final ResultSet resultSet = Mockito.mock(ResultSet.class);
+        final ResultSetMetaData resultSetMetaData = 
Mockito.mock(ResultSetMetaData.class);
+        when(resultSet.getMetaData()).thenReturn(resultSetMetaData);
+        when(resultSetMetaData.getColumnCount()).thenReturn(1);
+        
when(resultSetMetaData.getColumnLabel(1)).thenReturn("enabled_products");
+        when(resultSetMetaData.getColumnType(1)).thenReturn(Types.ARRAY);
+
+        final ResultSqlArray array = Mockito.mock(ResultSqlArray.class);
+        when(array.getArray()).thenReturn(new String[]{"Test"});
+        when(resultSet.getArray(1)).thenReturn(array);
+
+        final ResultSetRecordSet testSubject = new 
ResultSetRecordSet(resultSet, null);
+        final RecordSchema resultSchema = testSubject.getSchema();
+
+        
assertEquals(RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.STRING.getDataType()),
 resultSchema.getField(0).getDataType());
+    }
+
     @Test
     public void testArrayTypeWithLogicalTypes() throws SQLException {
         testArrayType(true);

Reply via email to