You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@drill.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2020/08/06 20:56:00 UTC

[jira] [Commented] (DRILL-7774) IS NOT NULL predicate fails with NPE for the case of non-existing columns with non-deterministic expression

    [ https://issues.apache.org/jira/browse/DRILL-7774?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17172661#comment-17172661 ] 

ASF GitHub Bot commented on DRILL-7774:
---------------------------------------

vvysotskyi opened a new pull request #2095:
URL: https://github.com/apache/drill/pull/2095


   # [DRILL-7774](https://issues.apache.org/jira/browse/DRILL-7774): IS NOT NULL predicate fails with NPE for the case of non-existing columns with non-deterministic expression
   
   ## Description
   Added null check.
   
   ## Documentation
   NA
   
   ## Testing
   Added unit test for the issue.
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> IS NOT NULL predicate fails with NPE for the case of non-existing columns with non-deterministic expression
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: DRILL-7774
>                 URL: https://issues.apache.org/jira/browse/DRILL-7774
>             Project: Apache Drill
>          Issue Type: Bug
>    Affects Versions: 1.16.0
>            Reporter: Vova Vysotskyi
>            Assignee: Vova Vysotskyi
>            Priority: Major
>             Fix For: 1.18.0
>
>
> The following query fails with NPE:
> {code:sql}
> select count(*) as cnt from cp.`tpch/nation.parquet` where (case when random() = 1 then true else null end * t ) is not null
> {code}
> Error message:
> {noformat}
> apache drill> select count(*) as cnt from cp.`tpch/nation.parquet` where (case when random() = 1 then true else null end * t) is not null;
> Error: SYSTEM ERROR: NullPointerException
> Please, refer to logs for more information.
> [Error Id: cf98ddc3-6e2b-404b-81ed-11188bd11225 on user515050-pc:31016] (state=,code=0)
> java.sql.SQLException: SYSTEM ERROR: NullPointerException
> Please, refer to logs for more information.
> [Error Id: cf98ddc3-6e2b-404b-81ed-11188bd11225 on user515050-pc:31016]
>         at org.apache.drill.jdbc.impl.DrillCursor.nextRowInternally(DrillCursor.java:534)
>         at org.apache.drill.jdbc.impl.DrillCursor.loadInitialSchema(DrillCursor.java:599)
>         at org.apache.drill.jdbc.impl.DrillResultSetImpl.execute(DrillResultSetImpl.java:1278)
>         at org.apache.drill.jdbc.impl.DrillResultSetImpl.execute(DrillResultSetImpl.java:58)
>         at org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:667)
>         at org.apache.drill.jdbc.impl.DrillMetaImpl.prepareAndExecute(DrillMetaImpl.java:1102)
>         at org.apache.drill.jdbc.impl.DrillMetaImpl.prepareAndExecute(DrillMetaImpl.java:1113)
>         at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
>         at org.apache.drill.jdbc.impl.DrillConnectionImpl.prepareAndExecuteInternal(DrillConnectionImpl.java:200)
>         at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
>         at org.apache.calcite.avatica.AvaticaStatement.execute(AvaticaStatement.java:217)
>         at sqlline.Commands.executeSingleQuery(Commands.java:1054)
>         at sqlline.Commands.execute(Commands.java:1003)
>         at sqlline.Commands.sql(Commands.java:967)
>         at sqlline.SqlLine.dispatch(SqlLine.java:734)
>         at sqlline.SqlLine.begin(SqlLine.java:541)
>         at sqlline.SqlLine.start(SqlLine.java:267)
>         at sqlline.SqlLine.main(SqlLine.java:206)
> Caused by: org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR: NullPointerException
> Please, refer to logs for more information.
> [Error Id: cf98ddc3-6e2b-404b-81ed-11188bd11225 on user515050-pc:31016]
>         at org.apache.drill.exec.rpc.user.QueryResultHandler.resultArrived(QueryResultHandler.java:125)
>         at org.apache.drill.exec.rpc.user.UserClient.handle(UserClient.java:422)
>         at org.apache.drill.exec.rpc.user.UserClient.handle(UserClient.java:96)
>         at org.apache.drill.exec.rpc.RpcBus$InboundHandler.decode(RpcBus.java:273)
>         at org.apache.drill.exec.rpc.RpcBus$InboundHandler.decode(RpcBus.java:243)
>         at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
>         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335)
>         at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
>         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335)
>         at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:312)
>         at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:286)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
>         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335)
>         at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
>         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335)
>         at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356)
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)
>         at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911)
>         at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
>         at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645)
>         at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
>         at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
>         at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
>         at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131)
>         at java.lang.Thread.run(Thread.java:748)
> Caused by: org.apache.drill.exec.work.foreman.ForemanException: Unexpected exception during fragment initialization: null
>         at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:301)
>         at .......(:0)
> Caused by: java.lang.NullPointerException: 
>         at org.apache.drill.exec.expr.IsPredicate.<init>(IsPredicate.java:47)
>         at org.apache.drill.exec.expr.IsPredicate.createIsNotNullPredicate(IsPredicate.java:162)
>         at org.apache.drill.exec.expr.IsPredicate.createIsPredicate(IsPredicate.java:244)
>         at org.apache.drill.exec.expr.FilterBuilder.handleIsFunction(FilterBuilder.java:307)
>         at org.apache.drill.exec.expr.FilterBuilder.visitFunctionHolderExpression(FilterBuilder.java:252)
>         at org.apache.drill.exec.expr.FilterBuilder.visitFunctionHolderExpression(FilterBuilder.java:60)
>         at org.apache.drill.common.expression.FunctionHolderExpression.accept(FunctionHolderExpression.java:57)
>         at org.apache.drill.exec.expr.FilterBuilder.buildFilterPredicate(FilterBuilder.java:82)
>         at org.apache.drill.exec.physical.base.AbstractGroupScanWithMetadata.getFilterPredicate(AbstractGroupScanWithMetadata.java:433)
>         at org.apache.drill.exec.physical.base.AbstractGroupScanWithMetadata.getFilterPredicate(AbstractGroupScanWithMetadata.java:382)
>         at org.apache.drill.exec.store.parquet.FilePushDownFilter.doOnMatch(FilePushDownFilter.java:155)
>         at org.apache.drill.exec.store.parquet.FilePushDownFilter$2.onMatch(FilePushDownFilter.java:106)
>         at org.apache.calcite.plan.AbstractRelOptPlanner.fireRule(AbstractRelOptPlanner.java:319)
>         at org.apache.calcite.plan.hep.HepPlanner.applyRule(HepPlanner.java:561)
>         at org.apache.calcite.plan.hep.HepPlanner.applyRules(HepPlanner.java:420)
>         at org.apache.calcite.plan.hep.HepPlanner.executeInstruction(HepPlanner.java:257)
>         at org.apache.calcite.plan.hep.HepInstruction$RuleInstance.execute(HepInstruction.java:127)
>         at org.apache.calcite.plan.hep.HepPlanner.executeProgram(HepPlanner.java:216)
>         at org.apache.calcite.plan.hep.HepPlanner.findBestExp(HepPlanner.java:203)
>         at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.transform(DefaultSqlHandler.java:394)
>         at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.transform(DefaultSqlHandler.java:351)
>         at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.transform(DefaultSqlHandler.java:338)
>         at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.convertToPrel(DefaultSqlHandler.java:514)
>         at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.getPlan(DefaultSqlHandler.java:174)
>         at org.apache.drill.exec.planner.sql.DrillSqlWorker.getQueryPlan(DrillSqlWorker.java:283)
>         at org.apache.drill.exec.planner.sql.DrillSqlWorker.getPhysicalPlan(DrillSqlWorker.java:163)
>         at org.apache.drill.exec.planner.sql.DrillSqlWorker.convertPlan(DrillSqlWorker.java:128)
>         at org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan(DrillSqlWorker.java:93)
>         at org.apache.drill.exec.work.foreman.Foreman.runSQL(Foreman.java:593)
>         at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:274)
>         ... 1 more
> {noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)