Hello, I am trying to implement a cost model, in which some parameters are computed based on estimations made by their children. For example, if I have Filter2(Filter1(Scan)), I want to use the cpu estimation I have from Filter1 to compute the cost parameters of Filter2 operator.
Code from Filter computeSelfCost method: @Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery m double rowCount = mq.getRowCount(this); double selectivity = mq.getSelectivity(this.getInput(), this.getCondition()); double rate = selectivity * ((SaberCostBase) mq.getCumulativeCost(this.getInput())).getRate(); double cpuCost = SaberCostBase.Cs * rate; double window = selectivity * ((SaberCostBase) mq.getCumulativeCost(this.getInput())).getWindow(); window = (window < 1) ? 1 : window; // fix window size in order to be >= 1 double R = (((SaberCostBase) mq.getCumulativeCost(this.getInput())).getCpu() + cpuCost) / rate; SaberCostFactory costFactory = (SaberCostFactory)planner.getCostFactory(); return costFactory.makeCost(rowCount, cpuCost, 0, rate, 0, window, R); } When I compute the cumulative cost on my final plan I get correct estimations. However, I found out with checkpoints, that when I use Volcano Optimizer to enforce some rules, both ((SaberCostBase) mq.getCumulativeCost(this.getInput())).getRate() and ((SaberCostBase) mq.getCumulativeCost(this.getInput())).getCpu() return zeros instead of the correct number. By inspecting "this" variable, I discovered that the correct estimations can be found in this->input->bestCost, which I can't use. Is there any obvious way of accessing the estimations of the previous operators, while using Volcano optimization procedure? Is it somehow possible to do it? Thank you in advance, George