[ https://issues.apache.org/jira/browse/CALCITE-2667?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16693119#comment-16693119 ]
Piotr Bojko commented on CALCITE-2667: -------------------------------------- [~julianhyde] ok I have discovered that RelOptUtil.pushDownJoinConditions alters relnodes registered in SqlToRelConverter as leaves. I've patched this. But now I've discovered also that SqlToTelConverter.Blackboard.lookupExp is not compatible with SqlToRelConverter.convertIdentifier. The first logic traverse the leaves and return coordinates (like offset) in leaves in an appropriate order. This information is then used in the second logic and the coordinates are applied to SqlToTelConverter.Blackboard.inputs (through adjustInputRef(..) -> bb.getRootField). This leades to inproper fields mappings. Those are assumptions only, I wonder whether SqlToTelConverter.Blackboard.lookupExp should be modified to return coordinates in inputs (which tends to be higher in Rel tree than leaves) or bb.getRootField should use leaves. > sql2rel fails on join between table function and other table > ------------------------------------------------------------ > > Key: CALCITE-2667 > URL: https://issues.apache.org/jira/browse/CALCITE-2667 > Project: Calcite > Issue Type: Bug > Reporter: Piotr Bojko > Assignee: Julian Hyde > Priority: Major > > Bug reproduction is here - > https://github.com/ptrbojko/calcite/tree/bug/CALCITE-2667 > {noformat} > > java.lang.AssertionError: Field ordinal 2 is invalid for type > > 'RecordType(VARCHAR TYPE, VARCHAR CODEVALUE)' > > at > > org.apache.calcite.rex.RexBuilder.makeFieldAccess(RexBuilder.java:188) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter.convertIdentifier(SqlToRelConverter.java:3616) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter.access$2100(SqlToRelConverter.java:215) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4691) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:3987) > > at org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:334) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4551) > > at > > org.apache.calcite.sql2rel.StandardConvertletTable.lambda$new$9(StandardConvertletTable.java:204) > > at > > org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4682) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:3987) > > at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:138) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4551) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectList(SqlToRelConverter.java:3830) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:668) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:625) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3074) > > at > > org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:561) > > at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:265) > > at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:231) > > at > > org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:772) > > at > > org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:636) > > at > > org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:606) > > at > > org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:229) > > at > > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:550) > > at > > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675) > > at > > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156) > > at > > org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:227) > > at net.hydromatic.quidem.Quidem.checkResult(Quidem.java:322) > > at net.hydromatic.quidem.Quidem.access$2800(Quidem.java:54) > > at > > net.hydromatic.quidem.Quidem$ContextImpl.checkResult(Quidem.java:1747) > > at > > net.hydromatic.quidem.Quidem$CheckResultCommand.execute(Quidem.java:1078) > > at > > net.hydromatic.quidem.Quidem$CompositeCommand.execute(Quidem.java:1548) > > at net.hydromatic.quidem.Quidem.execute(Quidem.java:216) > > at org.apache.calcite.test.QuidemTest.checkRun(QuidemTest.java:161) > > at org.apache.calcite.test.QuidemTest.test(QuidemTest.java:209) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:498) > > at > > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > > at > > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > > at > > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > > at > > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) > > at > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) > > at > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) > > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > > at > > org.apache.maven.surefire.junitcore.pc.Scheduler$1.run(Scheduler.java:410) > > at > > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > > at > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > > at > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > > at java.lang.Thread.run(Thread.java:748) > {noformat} > I think it worked pretty ok on CALCITE-1.17 version -- This message was sent by Atlassian JIRA (v7.6.3#76005)