Pierre Villard created NIFI-9476:
------------------------------------
Summary: QueryRecord fails when no result and with a column of
array type
Key: NIFI-9476
URL: https://issues.apache.org/jira/browse/NIFI-9476
Project: Apache NiFi
Issue Type: Bug
Reporter: Pierre Villard
Assignee: Pierre Villard
QueryRecord will fail if there is no record matching the query and if one the
columns returned as part of the result is of array type.
This is because we build the schema from the result set metadata (before
actually looking if there are rows or not) except for arrays where we have to
get the first row of the result set to figure out the type of the array. This
raises an exception when we don't have any row in the result set. In such a
case, we'll just assume an array of strings if no row available.
Here is the exception:
{code:java}
ERROR org.apache.nifi.processors.standard.QueryRecord -
QueryRecord[id=c21e44c4-2e6e-488b-9096-47753dfa429c] Unable to query
FlowFile[0,404685028855838.mockFlowFile,50B] due to
org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException:
java.util.NoSuchElementException: Expecting cursor position to be Position.OK,
actual is Position.AFTER_END:
org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException:
java.util.NoSuchElementException: Expecting cursor position to be Position.OK,
actual is Position.AFTER_END
org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException:
java.util.NoSuchElementException: Expecting cursor position to be Position.OK,
actual is Position.AFTER_END
at
org.apache.nifi.processors.standard.QueryRecord$1.process(QueryRecord.java:343)
at
org.apache.nifi.util.MockProcessSession.write(MockProcessSession.java:907)
at
org.apache.nifi.util.MockProcessSession.write(MockProcessSession.java:67)
at
org.apache.nifi.processors.standard.QueryRecord.onTrigger(QueryRecord.java:332)
at
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at
org.apache.nifi.util.StandardProcessorTestRunner$RunProcessor.call(StandardProcessorTestRunner.java:284)
at
org.apache.nifi.util.StandardProcessorTestRunner$RunProcessor.call(StandardProcessorTestRunner.java:278)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.sql.SQLException: java.util.NoSuchElementException: Expecting
cursor position to be Position.OK, actual is Position.AFTER_END
at
org.apache.calcite.avatica.util.PositionedCursor$ArrayGetter.getObject(PositionedCursor.java:65)
at
org.apache.calcite.avatica.util.AbstractCursor$AccessorImpl.getObject(AbstractCursor.java:357)
at
org.apache.calcite.avatica.util.AbstractCursor$ArrayAccessor.getObject(AbstractCursor.java:1335)
at
org.apache.calcite.avatica.util.AbstractCursor$ArrayAccessor.getArray(AbstractCursor.java:1403)
at
org.apache.calcite.avatica.AvaticaResultSet.getArray(AvaticaResultSet.java:731)
at
org.apache.nifi.serialization.record.ResultSetRecordSet.getArrayDataType(ResultSetRecordSet.java:296)
at
org.apache.nifi.serialization.record.ResultSetRecordSet.getDataType(ResultSetRecordSet.java:208)
at
org.apache.nifi.serialization.record.ResultSetRecordSet.createSchema(ResultSetRecordSet.java:185)
at
org.apache.nifi.serialization.record.ResultSetRecordSet.<init>(ResultSetRecordSet.java:87)
at
org.apache.nifi.serialization.record.ResultSetRecordSet.<init>(ResultSetRecordSet.java:72)
at
org.apache.nifi.processors.standard.QueryRecord$1.process(QueryRecord.java:339)
... 11 more
Caused by: java.util.NoSuchElementException: Expecting cursor position to be
Position.OK, actual is Position.AFTER_END
at
org.apache.calcite.avatica.util.IteratorCursor.current(IteratorCursor.java:71)
at
org.apache.calcite.avatica.util.PositionedCursor$ArrayGetter.getObject(PositionedCursor.java:55)
... 21 more {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)