@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; }
private static Expressions compileStatement(String query, List<Object> binds) throws SQLException { PhoenixConnection pconn = DriverManager.getConnection(getUrl(), PropertiesUtil.deepCopy(TEST_PROPERTIES)).unwrap(PhoenixConnection.class); PhoenixPreparedStatement pstmt = new PhoenixPreparedStatement(pconn, query); TestUtil.bindParams(pstmt, binds); QueryPlan plan = pstmt.compileQuery(); assertTrue(plan instanceof AggregatePlan); Filter filter = plan.getContext().getScan().getFilter(); assertTrue(filter == null || filter instanceof BooleanExpressionFilter); BooleanExpressionFilter boolFilter = (BooleanExpressionFilter)filter; AggregatePlan aggPlan = (AggregatePlan)plan; return new Expressions(boolFilter == null ? null : boolFilter.getExpression(), aggPlan.getHaving()); }
AggregatePlan aggPlan = (AggregatePlan) delegate; double rowsBeforeHaving = RowCountVisitor.aggregate(rows, aggPlan.getGroupBy()); double rowsAfterHaving = RowCountVisitor.filter(rowsBeforeHaving, aggPlan.getHaving()); double bytesBeforeHaving = rowWidth * rowsBeforeHaving; double bytesAfterHaving = rowWidth * 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; }
AggregatePlan aggPlan = (AggregatePlan) delegate; double rowsBeforeHaving = RowCountVisitor.aggregate(rows, aggPlan.getGroupBy()); double rowsAfterHaving = RowCountVisitor.filter(rowsBeforeHaving, aggPlan.getHaving()); double bytesBeforeHaving = rowWidth * rowsBeforeHaving; double bytesAfterHaving = rowWidth * rowsAfterHaving;
AggregatePlan aggPlan = (AggregatePlan) delegate; double rowsBeforeHaving = RowCountVisitor.aggregate(rows, aggPlan.getGroupBy()); double rowsAfterHaving = RowCountVisitor.filter(rowsBeforeHaving, aggPlan.getHaving()); double bytesBeforeHaving = rowWidth * rowsBeforeHaving; double bytesAfterHaving = rowWidth * rowsAfterHaving;