@Override public Double visit(AggregatePlan plan) { try { Long b = plan.getEstimatedRowsToScan(); if (b != null) { return limit( filter( aggregate( filter( b.doubleValue(), stripSkipScanFilter( plan.getContext().getScan().getFilter())), plan.getGroupBy()), plan.getHaving()), plan.getLimit()); } } catch (SQLException e) { } return null; }
@Override public Double visit(HashJoinPlan plan) { try { QueryPlan lhsPlan = plan.getDelegate(); Long b = lhsPlan.getEstimatedRowsToScan(); if (b == null) { return null; } Double rows = filter(b.doubleValue(), stripSkipScanFilter(lhsPlan.getContext().getScan().getFilter())); JoinTableNode.JoinType[] joinTypes = plan.getJoinInfo().getJoinTypes(); HashJoinPlan.SubPlan[] subPlans = plan.getSubPlans(); for (int i = 0; i < joinTypes.length; i++) { Double rhsRows = subPlans[i].getInnerPlan().accept(this); if (rhsRows == null) { return null; } rows = join(rows, rhsRows.doubleValue(), joinTypes[i]); } if (lhsPlan instanceof AggregatePlan) { AggregatePlan aggPlan = (AggregatePlan) lhsPlan; rows = filter(aggregate(rows, aggPlan.getGroupBy()), aggPlan.getHaving()); } return limit(rows, lhsPlan.getLimit()); } catch (SQLException e) { } return null; }
double rowsBeforeHaving = RowCountVisitor.aggregate(rows, aggPlan.getGroupBy()); double rowsAfterHaving = RowCountVisitor.filter(rowsBeforeHaving, aggPlan.getHaving()); double bytesBeforeHaving = rowWidth * rowsBeforeHaving; double bytesAfterHaving = rowWidth * rowsAfterHaving; Cost aggCost = CostUtil.estimateAggregateCost( bytes, bytesBeforeHaving, aggPlan.getGroupBy(), parallelLevel); cost = cost.plus(aggCost); rows = rowsAfterHaving;
@Override public Double visit(AggregatePlan plan) { try { Long b = plan.getEstimatedRowsToScan(); if (b != null) { return limit( filter( aggregate( filter( b.doubleValue(), stripSkipScanFilter( plan.getContext().getScan().getFilter())), plan.getGroupBy()), plan.getHaving()), plan.getLimit()); } } catch (SQLException e) { } return null; }
@Override public Double visit(AggregatePlan plan) { try { Long b = plan.getEstimatedRowsToScan(); if (b != null) { return limit( filter( aggregate( filter( b.doubleValue(), stripSkipScanFilter( plan.getContext().getScan().getFilter())), plan.getGroupBy()), plan.getHaving()), plan.getLimit()); } } catch (SQLException e) { } return null; }
@Override public Double visit(HashJoinPlan plan) { try { QueryPlan lhsPlan = plan.getDelegate(); Long b = lhsPlan.getEstimatedRowsToScan(); if (b == null) { return null; } Double rows = filter(b.doubleValue(), stripSkipScanFilter(lhsPlan.getContext().getScan().getFilter())); JoinTableNode.JoinType[] joinTypes = plan.getJoinInfo().getJoinTypes(); HashJoinPlan.SubPlan[] subPlans = plan.getSubPlans(); for (int i = 0; i < joinTypes.length; i++) { Double rhsRows = subPlans[i].getInnerPlan().accept(this); if (rhsRows == null) { return null; } rows = join(rows, rhsRows.doubleValue(), joinTypes[i]); } if (lhsPlan instanceof AggregatePlan) { AggregatePlan aggPlan = (AggregatePlan) lhsPlan; rows = filter(aggregate(rows, aggPlan.getGroupBy()), aggPlan.getHaving()); } return limit(rows, lhsPlan.getLimit()); } catch (SQLException e) { } return null; }
@Override public Double visit(HashJoinPlan plan) { try { QueryPlan lhsPlan = plan.getDelegate(); Long b = lhsPlan.getEstimatedRowsToScan(); if (b == null) { return null; } Double rows = filter(b.doubleValue(), stripSkipScanFilter(lhsPlan.getContext().getScan().getFilter())); JoinTableNode.JoinType[] joinTypes = plan.getJoinInfo().getJoinTypes(); HashJoinPlan.SubPlan[] subPlans = plan.getSubPlans(); for (int i = 0; i < joinTypes.length; i++) { Double rhsRows = subPlans[i].getInnerPlan().accept(this); if (rhsRows == null) { return null; } rows = join(rows, rhsRows.doubleValue(), joinTypes[i]); } if (lhsPlan instanceof AggregatePlan) { AggregatePlan aggPlan = (AggregatePlan) lhsPlan; rows = filter(aggregate(rows, aggPlan.getGroupBy()), aggPlan.getHaving()); } return limit(rows, lhsPlan.getLimit()); } catch (SQLException e) { } return null; }
double rowsBeforeHaving = RowCountVisitor.aggregate(rows, aggPlan.getGroupBy()); double rowsAfterHaving = RowCountVisitor.filter(rowsBeforeHaving, aggPlan.getHaving()); double bytesBeforeHaving = rowWidth * rowsBeforeHaving; double bytesAfterHaving = rowWidth * rowsAfterHaving; Cost aggCost = CostUtil.estimateAggregateCost( bytes, bytesBeforeHaving, aggPlan.getGroupBy(), parallelLevel); cost = cost.plus(aggCost); rows = rowsAfterHaving;
double rowsBeforeHaving = RowCountVisitor.aggregate(rows, aggPlan.getGroupBy()); double rowsAfterHaving = RowCountVisitor.filter(rowsBeforeHaving, aggPlan.getHaving()); double bytesBeforeHaving = rowWidth * rowsBeforeHaving; double bytesAfterHaving = rowWidth * rowsAfterHaving; Cost aggCost = CostUtil.estimateAggregateCost( bytes, bytesBeforeHaving, aggPlan.getGroupBy(), parallelLevel); cost = cost.plus(aggCost); rows = rowsAfterHaving;