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

Reply via email to