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);