Hello All, I'm creating a query system using Apache Calcite. My storage method can only look up and scan by key, and doesn't support full scans without a key. I've made the storage table using FilterableTable, which requires a specific key in the filter.
I can do single queries like *SELECT * FROM emps as e WHERE e.empno = 100* where '*emps*' is stored with the key 'empno'. But, joins are more difficult. For example, in *SELECT * FROM emps as e JOIN depts as d ON e.deptno = d.deptno WHERE e.empno = 100* I can use 'e.empno = 100' to scan '*emps*'. Ideally, I'd use the result of that scan when scanning '*depts*' But, the current plan is: EnumerableHashJoin ... EnumerableInterpreter BindableTableScan(table=[[SALES, EMPS]], filters=[[=($1, 100)]]) <- *FilterableTable* is Used, it is feasible. EnumerableCalc EnumerableTableScan(table=[[SALES, EMPS]]) <- FilterableTable is used but the filters in scan are empty so it is infeasible. Instead, I want to do: *EnumerableCustomHashJoin* <- custom HashJoin EnumerableCalc *EnumerableCustomTableScan*(table=[[SALES, EMPS]]) <- custom Scan EnumerableInterpreter BindableTableScan(table=[[SALES, EMPS]], filters=[[=($1, 100)]]) I need advice on how to make this happen. Any advice or insights you could provide would be greatly appreciated. Looking forward to hearing from you. Thanks Minseok