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 >>
