[
https://issues.apache.org/jira/browse/DRILL-6020?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16289083#comment-16289083
]
ASF GitHub Bot commented on DRILL-6020:
---------------------------------------
Github user vvysotskyi commented on a diff in the pull request:
https://github.com/apache/drill/pull/1068#discussion_r156621897
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/FieldIdUtil.java
---
@@ -131,7 +131,7 @@ public static TypedFieldId
getFieldIdIfMatches(ValueVector vector, TypedFieldId.
} else if(v instanceof ListVector) {
ListVector list = (ListVector) v;
return getFieldIdIfMatches(list, builder, addToBreadCrumb,
seg.getChild());
- } else if (v instanceof UnionVector) {
+ } else if (v instanceof UnionVector && !seg.isLastPath()) {
--- End diff --
Good catch!
I think we should add check for nulls into method
`getFieldIdIfMatchesUnion()` as it was done for `getFieldIdIfMatches()`. Also
please add a unit test for this change. You may use
[testFieldWithDots()](https://github.com/apache/drill/blob/acc5ed927e1fa4011ac1c3724d15197484b9f45b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonReader.java#L705)
as an example.
But one more point: with this change error is not thrown, but only nulls
are returned. I think we should also fix this issue on the borders of this pull
request.
> NullPointerException with Union setting on when querying JSON untyped path
> --------------------------------------------------------------------------
>
> Key: DRILL-6020
> URL: https://issues.apache.org/jira/browse/DRILL-6020
> Project: Apache Drill
> Issue Type: Bug
> Affects Versions: 1.11.0
> Reporter: Mitchel Labonte
> Fix For: 1.13.0
>
>
> h1. Steps to reproduce
> alter session set `exec.enable_union_type`=true;
> select tb.level1.dta from dfs.`file.json` tb;
> *Content of file.json:*
> {noformat}
> {"level1":{"dta":{"test":"test"}}}
> {"level1":{"dta":"test"}}
> {noformat}
> h1. Stack trace
> Error: SYSTEM ERROR: NullPointerException
> Fragment 0:0
> [Error Id: fe267584-32f3-413c-a77c-fc5b5c1ba513 on localhost:31010]
> (java.lang.NullPointerException) null
>
> org.apache.drill.exec.vector.complex.FieldIdUtil.getFieldIdIfMatchesUnion():34
> org.apache.drill.exec.vector.complex.FieldIdUtil.getFieldIdIfMatches():135
> org.apache.drill.exec.vector.complex.FieldIdUtil.getFieldIdIfMatches():130
> org.apache.drill.exec.vector.complex.FieldIdUtil.getFieldId():201
> org.apache.drill.exec.record.SimpleVectorWrapper.getFieldIdIfMatches():102
> org.apache.drill.exec.record.VectorContainer.getValueVectorId():298
> org.apache.drill.exec.physical.impl.ScanBatch.getValueVectorId():313
>
> org.apache.drill.exec.expr.ExpressionTreeMaterializer$MaterializeVisitor.visitSchemaPath():289
>
> org.apache.drill.exec.expr.ExpressionTreeMaterializer$MaterializeVisitor.visitSchemaPath():272
> org.apache.drill.common.expression.SchemaPath.accept():150
>
> org.apache.drill.exec.expr.ExpressionTreeMaterializer$AbstractMaterializeVisitor.visitFunctionCall():399
>
> org.apache.drill.exec.expr.ExpressionTreeMaterializer$AbstractMaterializeVisitor.visitFunctionCall():331
> org.apache.drill.common.expression.FunctionCall.accept():60
> org.apache.drill.exec.expr.ExpressionTreeMaterializer.materialize():169
> org.apache.drill.exec.expr.ExpressionTreeMaterializer.materialize():147
>
> org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.setupNewSchema():421
> org.apache.drill.exec.record.AbstractSingleRecordBatch.innerNext():78
>
> org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext():133
> org.apache.drill.exec.record.AbstractRecordBatch.next():162
> org.apache.drill.exec.physical.impl.BaseRootExec.next():105
>
> org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.innerNext():81
> org.apache.drill.exec.physical.impl.BaseRootExec.next():95
> org.apache.drill.exec.work.fragment.FragmentExecutor$1.run():234
> org.apache.drill.exec.work.fragment.FragmentExecutor$1.run():227
> java.security.AccessController.doPrivileged():-2
> javax.security.auth.Subject.doAs():422
> org.apache.hadoop.security.UserGroupInformation.doAs():1657
> org.apache.drill.exec.work.fragment.FragmentExecutor.run():227
> org.apache.drill.common.SelfCleaningRunnable.run():38
> java.util.concurrent.ThreadPoolExecutor.runWorker():1142
> java.util.concurrent.ThreadPoolExecutor$Worker.run():617
> java.lang.Thread.run():745 (state=,code=0)
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)