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

Zhen Chen commented on CALCITE-7356:
------------------------------------

I found that there are many hard-coded `withTrimUnusedFields(true/false)` 
statements in Calcite, and I think the problem might be here.

> The MARK JOIN generated by TopDownGeneralDecorrelator needs to be adapted to 
> RelFieldTrimmer
> --------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-7356
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7356
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>            Reporter: Zhen Chen
>            Priority: Major
>             Fix For: 1.42.0
>
>
> We can add the following test case to any *.iq* file, and when *!ok* is 
> executed. We need use 
> CoreQuidemTest2 to check this file, since it can use 
> TopDownGeneralDecorrelator.
> {code:java}
> CREATE TABLE emps (
>   empid INTEGER NOT NULL,
>   deptno INTEGER NOT NULL,
>   name VARCHAR(10) NOT NULL,
>   salary DECIMAL(10, 2) NOT NULL,
>   commission INTEGER);
> (0 rows modified)
> !update
> INSERT INTO emps (empid, deptno, name, salary, commission) VALUES
> (100, 10, 'Bill', 10000.00, 1000),
> (200, 20, 'Eric', 8000.00, 500),
> (150, 10, 'Sebastian', 7000.00, NULL),
> (110, 10, 'Theodore', 11500.00, 250),
> (170, 30, 'Theodore', 11500.00, 250),
> (140, 10, 'Sebastian', 7000.00, NULL);
> (6 rows modified)
> SELECT *, EXISTS(select * from (
>   SELECT e2.deptno FROM emps e2 where e1.commission = e2.commission) as table3
>   where table3.deptno <> e1.deptno)
> from emps e1;
> !ok{code}
> It will throw an error.
> > java.lang.AssertionError: rowType: RecordType(INTEGER EMPID, INTEGER 
> > DEPTNO, VARCHAR(10) NAME, DECIMAL(10, 2) SALARY, INTEGER COMMISSION, 
> > BOOLEAN markCol), mapping: [size=8, sourceCount=8, targetCount=8, 
> > elements=[0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7]]
> >     at 
> > org.apache.calcite.sql2rel.RelFieldTrimmer$TrimResult.<init>(RelFieldTrimmer.java:1548)
> >     at 
> > org.apache.calcite.sql2rel.RelFieldTrimmer.result(RelFieldTrimmer.java:396)
> >     at 
> > org.apache.calcite.sql2rel.RelFieldTrimmer.result(RelFieldTrimmer.java:365)
> >     at 
> > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(RelFieldTrimmer.java:989)
> >     at jdk.internal.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
> >     at 
> > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >     at java.base/java.lang.reflect.Method.invoke(Method.java:568)
> >     at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:533)
> >     at 
> > org.apache.calcite.sql2rel.RelFieldTrimmer.dispatchTrimFields(RelFieldTrimmer.java:343)
> >     at 
> > org.apache.calcite.sql2rel.RelFieldTrimmer.trim(RelFieldTrimmer.java:178)
> >     at 
> > org.apache.calcite.tools.Programs$TrimFieldsProgram.run(Programs.java:470)
> >     at 
> > org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:406)
> >     at org.apache.calcite.prepare.Prepare.optimize(Prepare.java:178)
> >     at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:320)
> >     at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:221)
> >     at 
> > org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:675)
> >     at 
> > org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:526)
> >     at 
> > org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:494)
> >     at 
> > org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:246)
> >     at 
> > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:654)
> >     at 
> > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:677)
> >     at 
> > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:157)
> >     at 
> > org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:228)
> >     at net.hydromatic.quidem.Quidem.checkResult(Quidem.java:317)
> >     at net.hydromatic.quidem.Quidem.access$2600(Quidem.java:54)
> >     at 
> > net.hydromatic.quidem.Quidem$ContextImpl.checkResult(Quidem.java:1778)
> >     at 
> > net.hydromatic.quidem.Quidem$CheckResultCommand.execute(Quidem.java:985)
> >     at 
> > net.hydromatic.quidem.Quidem$CompositeCommand.execute(Quidem.java:1522)
> >     at net.hydromatic.quidem.Quidem$IfCommand.execute(Quidem.java:1483)
> >     at 
> > net.hydromatic.quidem.Quidem$CompositeCommand.execute(Quidem.java:1522)
> >     at net.hydromatic.quidem.Quidem.execute(Quidem.java:204)
> >     at org.apache.calcite.test.QuidemTest.checkRun(QuidemTest.java:328)
> >     at org.apache.calcite.test.QuidemTest.test(QuidemTest.java:510)
> >     at 
> > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> > Method)
> >     at 
> > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
> >     at 
> > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >     at java.base/java.lang.reflect.Method.invoke(Method.java:568)
> >     at 
> > org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727)
> >     at 
> > org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
> >     at 
> > org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
> >     at 
> > org.junit.jupiter.engine.extension.SameThreadTimeoutInvocation.proceed(SameThreadTimeoutInvocation.java:45)
> >     at 
> > org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
> >     at 
> > org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
> >     at 
> > org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestTemplateMethod(TimeoutExtension.java:94)
> >     at 
> > org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
> >     at 
> > org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
> >     at 
> > org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
> >     at 
> > org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
> >     at 
> > org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
> >     at 
> > org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
> >     at 
> > org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
> >     at 
> > org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
> >     at 
> > org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
> >     at 
> > org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213)
> >     at 
> > org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138)
> >     at 
> > org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
> >     at 
> > org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.submit(ForkJoinPoolHierarchicalTestExecutorService.java:118)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204)
> >     at 
> > org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142)
> >     at 
> > org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110)
> >     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.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 
> > org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110)
> >     at 
> > org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
> >     at 
> > org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:129)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
> >     at 
> > org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:129)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
> >     at 
> > org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
> >     at 
> > org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
> >     at 
> > org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185)
> >     at 
> > java.base/java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:194)
> >     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)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to