Thank you very much Thomas & Stamatis. Thomas, I will try what you said.
Stamatis, I looked at the rule and the test case. And yes, it is exactly what I wanted to try! Thank you very much. I am facing one issue though. I have a test case where I have all the enumerable rules. It is working. When I remove the enumerable table scan and add the bindable table scan, it gives me the following error upon execution: *NullPointerException: at HepPlanner.addRelToGraph(...)* *.....* *at Interpreter.optimize(..)* *....* *Baz.bind (unknown source).* My planner is constructed in a manner similar to the one created by you in this tutorial. https://www.youtube.com/watch?v=p1O3E33FIs8 Is this because I am missing something (like some rules)? Where can I view the planner constructed by the CalciteAssert class? Thanks & Regards,. Pranav On Tue, Sep 27, 2022 at 2:01 PM Stamatis Zampetakis <[email protected]> wrote: > Hi Pranav, > > The rule that you are probably looking for is EnumerableInterpreterRule > [1]. > > The ScannableTableTest [2] contains a bunch of test cases very similar to > what you want to achieve. If you want to see how everything works together, > pick one test and run it in debug mode. > > Best, > Stamatis > > [1] > > https://github.com/apache/calcite/blob/a505b25eacc473c6ec0ef8abd40c1ccae86297b6/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java > [2] > > https://github.com/apache/calcite/blob/a505b25eacc473c6ec0ef8abd40c1ccae86297b6/core/src/test/java/org/apache/calcite/test/ScannableTableTest.java > > On Tue, Sep 27, 2022 at 12:20 PM Thomas Rebele <[email protected]> > wrote: > > > Hello Pranav, > > > > here some untested pseudo-code that could give you an idea how to achieve > > this. It probably needs several adaptations to make it work (marked with > > "<- here", possibly others). > > > > private static final Method BIND = Types.lookupMethod(Bindable.class, > > > "bind", Bindable.class, DataContext.class); // <- here > > > > > > private static class EnumerableBindableRel extends AbstractRelNode > > > implements EnumerableRel { > > > private final BindableRel bindable; > > > > > > public EnumerableBindableRel(BindableRel bindable) { > > > super(bindable.getCluster(), bindable.getTraitSet()); > > > this.bindable = bindable; > > > } > > > > > > @Override > > > public Result implement(EnumerableRelImplementor implementor, > Prefer > > > pref) { > > > final PhysType physType = PhysTypeImpl.of( > > > implementor.getTypeFactory(), > > > this.getRowType(), > > > JavaRowFormat.ARRAY); // <- here > > > > > > final BlockBuilder builder = new BlockBuilder(); > > > MethodCallExpression call = Expressions.call( // <- here, > correct > > > arguments? > > > implementor.stash(this.bindable, Bindable.class), > > > BIND, > > > implementor.getRootExpression()); > > > > > > ParameterExpression resultVar = > > > Expressions.parameter(Enumerable.class, "_result"); > > > builder.add(Expressions.declare(Modifier.FINAL, resultVar, > > call)); > > > builder.add(Expressions.return_(null, resultVar)); > > > return implementor.result(physType, builder.toBlock()); > > > } > > > } > > > > > > private static EnumerableRel getEnumerableRel(BindableRel bindable) { > > > return new EnumerableBindableRel(bindable); > > > } > > > > > > > Cordialement / Best Regards, > > Dr. Thomas Rebele | R&D Developer | Germany | E [email protected] | W > > www.tibco.com > > > > TIBCO Software GmbH | St.-Martin-Str. 106, 81669 München, Deutschland | > > Registergericht: Amtsgericht München, HRB 123355 | Geschäftsführer: > William > > Hughes; Alexander E. Kolar > > > > Cordialement / Best Regards, > > *Dr. Thomas Rebele* | R&D Developer | Germany | *E* *[email protected] > > <[email protected]>* | *W* *www.tibco.com <http://www.tibco.com/>* > > > > *TIBCO Software GmbH* | St.-Martin-Str. 106, 81669 München, Deutschland > | > > Registergericht: Amtsgericht München, HRB 123355 | Geschäftsführer: > William > > Hughes; Alexander E. Kolar > > > > > > > > On Fri, Sep 23, 2022 at 10:50 PM Pranav Deshpande < > > [email protected]> wrote: > > > > > Dear Apache Calcite Team, > > > Is there a way to convert a BindableRel into an EnumerableRel? > > > > > > There is a rule to convert an EnumerableRel into a BindableRel, but not > > the > > > other way around. > > > > > > I am asking this because I wish to have my TableScans use the > > > BindableConvention and the rest of my execution using the Enumerable > > > Convention [as it has more operators!]. > > > > > > Regards, > > > Pranav > > > > > >
