Hi,

Just bumping this question.

We have worked around this issue in downstream code to remove the extra projection columns, but I am still wondering if there is some easier way to get the same effect in calcite.

I am assuming calcite projects all the columns to be used as a 'natural key' for the delete or update, but in our case we really don't need them all.

Any thoughts?

regards.


On 2018-05-02 09:07 PM, Homer wrote:

Hi,

Before I start just want to say thanks again for Calcite,  such a useful piece of software.

We are getting RA from calcite for a query engine.  We are using the Planner interface.

When we generate UPDATE or DELETE queries we get a lot of unnecessary columns included, it basically project every column in the table.

example

|CREATE TABLE CUSTOMER ( i1 INTEGER, i2 INTEGER) |

with delete

|delete from CUSTOMER |
result remainded the same with extra projection
|{ "rels": [ { "id": "0", "relOp": "EnumerableTableScan", "fieldNames": [ "i1", "i2", "rowid" ], "table": [ "db1", "CUSTOMER" ], "inputs": [] }, { "id": "1", "relOp": "LogicalProject", "fields": [ "i1", "i2", "rowid" ], "exprs": [ { "input": 0 }, { "input": 1 }, { "input": 2 } ] }, { "id": "2", "relOp": "LogicalTableModify", "table": [ "db1", "CUSTOMER" ], "operation": "DELETE", "flattened": true } ] } |


Note: We tried adding

|.withTrimUnusedFields(true) |

in the Planner but it did not seem to make any difference.

Is there some easy way to remove these extra project columns with calcite or do we have to do it after we get the relational algebra.

Regards


Reply via email to