There is a utility (ToLogicalConverter[1]) to convert some kinds of plans
to logical equivalents. However, the way it is right now it cannot handle
your use-case.
Since it handles some Enumerable operators, it wouldn't be surprising to
support a few Bindable as well, although I would agree that the rule-based
approach seems cleaner.

Best,
Stamatis

[1]
https://github.com/apache/calcite/blob/7de37aefaaa72959a0145053319fae2956fbb9f1/core/src/main/java/org/apache/calcite/rel/logical/ToLogicalConverter.java

On Sun, Aug 21, 2022 at 6:35 AM Benchao Li <[email protected]> wrote:

> I agree that a separate planner rule is better. Besides, if you are
> constructing the optimizing rules
> by yourself in your project, you can avoid this by not adding
> `FilterTableScanRule` and
> `ProjectTableScanRule`.
>
> Pranav,
> there is a doc[1] about how to contribute to Calcite.
>
> [1] https://calcite.apache.org/develop/#contributing
>
> Jiajun Xie <[email protected]> 于2022年8月21日周日 09:00写道:
>
> > Agree with Hyde, there are many problems when converting a  physical
> > RelNode directly to SQL. For example,
> > https://issues.apache.org/jira/browse/CALCITE-2915
> >
> > In my project, I have an object  holding  Logical RelNode and Physical
> > RelNode. When I want to convert sql, I can use Logical RelNode. I hope
> it's
> > useful to you, Pranav.
> >
> > On Sun, 21 Aug 2022 at 02:50, Julian Hyde <[email protected]>
> wrote:
> >
> > > It doesn’t seem quite right to convert a physical RelNode directly to
> > SQL.
> > > It’s probably better to map it back to logical RelNode(s) first.
> > >
> > > I don’t know whether we have the software to do that mapping. If we
> > don’t,
> > > consider using planner rules. They’re often the right way in Calcite.
> > >
> > > Julian
> > >
> > > > On Aug 20, 2022, at 03:26, Pranav Deshpande <
> > > [email protected]> wrote:
> > > >
> > > > Hi Bencaho,
> > > > Thank you very much for your reply. Could you please tell me the
> > > procedure
> > > > to create this issue on JIRA?
> > > >
> > > > Thanks & Regards,
> > > > Pranav
> > > >
> > > >> On Fri, Aug 19, 2022 at 11:13 PM Benchao Li <[email protected]>
> > > wrote:
> > > >>
> > > >> Pranav,
> > > >>
> > > >> This is a good question. To me, I would take this as a bug, and we
> > could
> > > >> improve the
> > > >> RelToSqlConverter to treat BindableTableScan specially.
> > > >> Could you please help log a Jira issue? Contributions are welcome!
> > > >>
> > > >> Pranav Deshpande <[email protected]> 于2022年8月20日周六
> > 02:13写道:
> > > >>
> > > >>> Hi Team,
> > > >>> How can I convert a BindableTableScan with projects and Filters
> back
> > > to a
> > > >>> RelTree with a project node, a filter node and a tablescan node?
> > > >>>
> > > >>> I am doing this because I encountered the following issue (steps
> > > detailed
> > > >>> below).
> > > >>>
> > > >>> 1. I have a query:eg. Select colA, colB from myTable where colA >
> 1;
> > > >>> 2. The logical plan for this is a filter on top of a project on top
> > of
> > > a
> > > >>> TableScan.
> > > >>> 3. If the table we created is a ProjectableFilterableTable and we
> > have
> > > >>> added the ProjectTableScan rule etc., then after optimization we
> > have a
> > > >>> single node which is a tablescan that contains filters and project
> > and
> > > >> can
> > > >>> be executed by the bindable convention.
> > > >>> 4. If I convert this node to a SQL, I get the wrong SQL.
> > > >>>
> > > >>> To get a SQL, I do the following:
> > > >>>
> > > >>> RelToSqlConverter converter = new
> > > >>> RelToSqlConverter(SqlDialect.DatabaseProduct.CALCITE.getDialect());
> > > >>> SqlNode sqlNode = converter.visitRoot(rablescan).asStatement();
> > > >>>
> > > >>> This only gives me Select * from myTable;
> > > >>>
> > > >>> However, if I only have a ScannableTable and we haven't added the
> > > >>> ProjectTableScan rule etc. then for the physical plan we also get a
> > > >>> BindableFilter on top of a BindableProject on top of a
> > > BindableTablescan.
> > > >>>
> > > >>> If i convert this back using the same code then I get the correct
> > > >> statement
> > > >>> back:  Select colA, colB from myTable where colA > 1
> > > >>>
> > > >>> Hence I would like to know how to convert a BindableTableScan with
> > > >> projects
> > > >>> and Filters back to a RelTree with a project node, a filter node
> and
> > a
> > > >>> tablescan node & would appreciate the community's help on the same.
> > > >>>
> > > >>> Thanks & Regards,
> > > >>> Pranav
> > > >>>
> > > >>
> > > >>
> > > >> --
> > > >>
> > > >> Best,
> > > >> Benchao Li
> > > >>
> > >
> >
>
>
> --
>
> Best,
> Benchao Li
>

Reply via email to