Ruben Q L created CALCITE-7928:
----------------------------------

             Summary: Cross join lateral query blows up in the new top-down 
decorrelator 
                 Key: CALCITE-7928
                 URL: https://issues.apache.org/jira/browse/CALCITE-7928
             Project: Calcite
          Issue Type: Bug
          Components: core
            Reporter: Ruben Q L


Seen with the following query (added to lateral.iq file via CALCITE-7911), but 
only when it is executed by CoreQuidemTest2, i.e. with the new top down 
decorrelator:
{noformat}
with dept (deptno, dname)
    as (values (10, 'ACCOUNTING'), (20,'RESEARCH')),
  emp (empno, deptno, ename)
    as (values (7369, 20, 'SMITH'), (7782, 10, 'CLARK'), (7499, 30, 'ALLEN'))
select *
from dept,
  (values 'A', 'M') as v (v)
  cross join lateral (select * from emp
    where emp.deptno = dept.deptno
    and position(v.v in emp.ename) > 0) as emp;
+--------+------------+---+-------+---------+-------+
| DEPTNO | DNAME      | V | EMPNO | DEPTNO0 | ENAME |
+--------+------------+---+-------+---------+-------+
|     10 | ACCOUNTING | A |  7782 |      10 | CLARK |
|     20 | RESEARCH   | M |  7369 |      20 | SMITH |
+--------+------------+---+-------+---------+-------+
(2 rows)

!ok
{noformat}

Locally, I observed that running CoreQuidemTest2, all *.iq files are executed 
in milliseconds or a few seconds, except for lateral.iq which took almost 20 
seconds. Removing this query, and lateral.iq went down to 200ms.

On the CI, this has lad to timeout errors, example here: 
https://ci-builds.apache.org/job/Calcite/job/Calcite-sonar/job/main/1796/cloudbees-pipeline-explorer/
{noformat}
...
FAILURE 322.5sec, org.apache.calcite.test.CoreQuidemTest2 > test(String)[41], 
[41] sql/lateral.iq
    java.util.concurrent.TimeoutException: test(java.lang.String) timed out 
after 5 minutes
        at 
java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
        at 
java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
        at 
java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at 
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at 
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at 
java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at 
java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at 
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at 
java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at 
java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at 
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
        at 
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at 
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at 
java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at 
java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at 
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at 
java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at 
java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
        at 
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
        at 
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at 
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at 
java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at 
java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at 
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at 
java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at 
java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
        at 
java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
        at 
java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
        at 
java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
        at 
java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
 
 
CoreQuidemTest2 > test(String) > [44] sql/functions.iq STANDARD_ERROR
    [Fatal Error] :1:2: XML document structures must start and end within the 
same entity.
 
CoreQuidemTest2 > test(String) > [44] sql/functions.iq STANDARD_OUT
    Warning: JDBC driver threw non-SQLException
    Warning: JDBC driver threw non-SQLException
    Warning: JDBC driver threw non-SQLException
    Warning: JDBC driver threw non-SQLException
          2.2sec, org.apache.calcite.test.CoreQuidemTest2 > test(String)[44], 
[44] sql/functions.iq
          2.1sec, org.apache.calcite.test.CoreQuidemTest2 > test(String)[47], 
[47] sql/new-decorr.iq
 
CoreQuidemTest2 > test(String) > [48] sql/unsigned.iq STANDARD_OUT
    Warning: JDBC driver threw non-SQLException
    Warning: JDBC driver threw non-SQLException
    Warning: JDBC driver threw non-SQLException
    Warning: JDBC driver threw non-SQLException
    Warning: JDBC driver threw non-SQLException
FAILURE 533.0sec,   48 completed,   1 failed,   0 skipped, 
org.apache.calcite.test.CoreQuidemTest2 > test(String)
FAILURE 533.0sec,   48 completed,   1 failed,   0 skipped, 
org.apache.calcite.test.CoreQuidemTest2
FAILURE 547.2sec, 17294 completed,   1 failed, 144 skipped, Gradle Test Run 
:core:test
 
17294 tests completed, 1 failed, 144 skipped
 
> Task :core:test FAILED
{noformat}




--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to