[teiid-issues] [JBoss JIRA] (TEIID-5146) UNION of two similar JOIN queries fails with ASSERTION FAILED error if it contains table function of procedural call with arguments

Steven Hawkins (JIRA) issues at jboss.org
Mon Nov 13 15:46:00 EST 2017


     [ https://issues.jboss.org/browse/TEIID-5146?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Steven Hawkins resolved TEIID-5146.
-----------------------------------
    Fix Version/s: 10.1
                   10.0.1
       Resolution: Done


Fixed two issues with lateral joins.  The first is that correlated reference detection did not work when using a nested explicit cross join where no rows were actually used at the root level join.  The other issue causing the exception here was that we should keep reusing a shared query under a lateral join indefinitely as we don't know ahead of time how many readers there will be.

> UNION of two similar JOIN queries fails with ASSERTION FAILED error if it contains table function of procedural call with arguments
> -----------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: TEIID-5146
>                 URL: https://issues.jboss.org/browse/TEIID-5146
>             Project: Teiid
>          Issue Type: Bug
>          Components: Query Engine
>    Affects Versions: 9.3.4
>            Reporter: El Fuego
>            Assignee: Steven Hawkins
>             Fix For: 10.1, 10.0.1
>
>
> UNION of two similar JOINs containing table function of procedural call with arguments, like:
> {code:sql}SELECT d.col_t2 FROM "ds.test_t1", table(CALL views.pr0("arg1" => col_t1)) x
> 	JOIN "ds.test_t2" d 
> 		ON true
> --
> UNION
> --
> SELECT d.col_t2 FROM "ds.test_t1", table(CALL views.pr0("arg1" => col_t1)) x
> 	JOIN "ds.test_t2" d 
> 		ON true{code}
> fails with error:
> {code}2017-11-11 16:16:57,158 ERROR [org.teiid.PROCESSOR] (Worker2_QueryProcessorQueue23) wbDLp863MJn9 TEIID30019 Unexpected exception for request wbDLp863MJn9.7: java.lang.AssertionError: ASSERTION FAILED: expected reference to be not null
> 	at org.teiid.core.util.Assertion.failed(Assertion.java:73)
> 	at org.teiid.core.util.Assertion.isNotNull(Assertion.java:100)
> 	at org.teiid.core.util.Assertion.isNotNull(Assertion.java:92)
> 	at org.teiid.common.buffer.TupleBuffer.getBatch(TupleBuffer.java:287)
> 	at org.teiid.dqp.internal.process.TupleSourceCache$CopyOnReadTupleSource.nextTuple(TupleSourceCache.java:103)
> 	at org.teiid.query.processor.relational.AccessNode.nextBatchDirect(AccessNode.java:394)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:281)
> 	at org.teiid.query.processor.BatchCollector.collectTuples(BatchCollector.java:164)
> 	at org.teiid.query.processor.relational.SourceState.prefetch(SourceState.java:211)
> 	at org.teiid.query.processor.relational.SourceState.rowCountLE(SourceState.java:158)
> 	at org.teiid.query.processor.relational.JoinNode.nextBatchDirect(JoinNode.java:227)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:281)
> 	at org.teiid.query.processor.relational.LimitNode.nextBatchDirect(LimitNode.java:102)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:281)
> 	at org.teiid.query.processor.BatchIterator.finalRow(BatchIterator.java:69)
> 	at org.teiid.common.buffer.AbstractTupleSource.getCurrentTuple(AbstractTupleSource.java:70)
> 	at org.teiid.query.processor.BatchIterator.getCurrentTuple(BatchIterator.java:84)
> 	at org.teiid.common.buffer.AbstractTupleSource.hasNext(AbstractTupleSource.java:92)
> 	at org.teiid.query.processor.relational.NestedTableJoinStrategy.process(NestedTableJoinStrategy.java:119)
> 	at org.teiid.query.processor.relational.JoinNode.nextBatchDirect(JoinNode.java:235)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:281)
> 	at org.teiid.query.processor.relational.LimitNode.nextBatchDirect(LimitNode.java:102)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:281)
> 	at org.teiid.query.processor.relational.ProjectNode.nextBatchDirect(ProjectNode.java:150)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:281)
> 	at org.teiid.query.processor.relational.UnionAllNode.nextBatchDirect(UnionAllNode.java:147)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:281)
> 	at org.teiid.query.processor.relational.LimitNode.nextBatchDirect(LimitNode.java:102)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:281)
> 	at org.teiid.query.processor.relational.RelationalPlan.nextBatch(RelationalPlan.java:145)
> 	at org.teiid.query.processor.QueryProcessor.nextBatchDirect(QueryProcessor.java:152)
> 	at org.teiid.query.processor.QueryProcessor.nextBatch(QueryProcessor.java:115)
> 	at org.teiid.query.processor.BatchCollector.collectTuples(BatchCollector.java:164)
> 	at org.teiid.query.processor.BatchCollector.collectTuples(BatchCollector.java:146)
> 	at org.teiid.dqp.internal.process.RequestWorkItem.processMore(RequestWorkItem.java:479)
> 	at org.teiid.dqp.internal.process.RequestWorkItem.process(RequestWorkItem.java:349)
> 	at org.teiid.dqp.internal.process.AbstractWorkItem.run(AbstractWorkItem.java:51)
> 	at org.teiid.dqp.internal.process.RequestWorkItem.run(RequestWorkItem.java:275)
> 	at org.teiid.dqp.internal.process.DQPWorkContext.runInContext(DQPWorkContext.java:284)
> 	at org.teiid.dqp.internal.process.ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:119)
> 	at org.teiid.dqp.internal.process.ThreadReuseExecutor$3.run(ThreadReuseExecutor.java:210)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> 	at java.lang.Thread.run(Thread.java:745){code}
> even if procedure doesn't use that argument at all.



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the teiid-issues mailing list