@Override public List<QueryPlan> visit(HashJoinPlan plan) { List<QueryPlan> children = new ArrayList<QueryPlan>(plan.getSubPlans().length + 1); children.add(plan.getDelegate()); for (HashJoinPlan.SubPlan subPlan : plan.getSubPlans()) { children.add(subPlan.getInnerPlan()); } return children; }
@Override public Double visit(HashJoinPlan plan) { Double lhsWidth = plan.getDelegate().accept(this); if (lhsWidth == null) { return null; } JoinTableNode.JoinType[] joinTypes = plan.getJoinInfo().getJoinTypes(); HashJoinPlan.SubPlan[] subPlans = plan.getSubPlans(); Double width = lhsWidth; for (int i = 0; i < joinTypes.length; i++) { Double rhsWidth = subPlans[i].getInnerPlan().accept(this); if (rhsWidth == null) { return null; } width = join(width, rhsWidth, joinTypes[i]); } return width; }
@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; }
assertTrue(orderBy.getOrderByExpressions().size() == 1); assertTrue(orderBy.getOrderByExpressions().get(0).toString().equals("AID")); innerScanPlan=(ScanPlan)((HashJoinPlan)((TupleProjectionPlan)lhsOuterPlan.getDelegate()).getDelegate()).getDelegate(); orderBy=innerScanPlan.getOrderBy(); assertTrue(orderBy.getOrderByExpressions().size() == 1); assertTrue(orderBy.getOrderByExpressions().size() == 1); assertTrue(orderBy.getOrderByExpressions().get(0).toString().equals("AID")); innerScanPlan=(ScanPlan)((HashJoinPlan)((TupleProjectionPlan)rhsOuterPlan.getDelegate()).getDelegate()).getDelegate(); orderBy=innerScanPlan.getOrderBy(); assertTrue(orderBy.getOrderByExpressions().size() == 1); assertTrue(orderBy.getOrderByExpressions().size() == 1); assertTrue(orderBy.getOrderByExpressions().get(0).toString().equals("AID")); innerAggregatePlan=(AggregatePlan)((HashJoinPlan)((TupleProjectionPlan)lhsOuterPlan.getDelegate()).getDelegate()).getDelegate(); orderBy=innerAggregatePlan.getOrderBy(); assertTrue(orderBy.getOrderByExpressions().size() == 1); assertTrue(orderBy.getOrderByExpressions().size() == 1); assertTrue(orderBy.getOrderByExpressions().get(0).toString().equals("AID")); innerAggregatePlan=(AggregatePlan)((HashJoinPlan)((TupleProjectionPlan)rhsOuterPlan.getDelegate()).getDelegate()).getDelegate(); orderBy=innerAggregatePlan.getOrderBy(); assertTrue(orderBy.getOrderByExpressions().size() == 1); innerAggregatePlan=(AggregatePlan)((HashJoinPlan)(((TupleProjectionPlan)sortMergeJoinPlan.getLhsPlan()).getDelegate())).getDelegate(); orderBy=innerAggregatePlan.getOrderBy(); assertTrue(orderBy.getOrderByExpressions().size() == 2); assertTrue(orderBy.getOrderByExpressions().size() == 1);
@Override public Double visit(HashJoinPlan plan) { Double lhsWidth = plan.getDelegate().accept(this); if (lhsWidth == null) { return null; } JoinTableNode.JoinType[] joinTypes = plan.getJoinInfo().getJoinTypes(); HashJoinPlan.SubPlan[] subPlans = plan.getSubPlans(); Double width = lhsWidth; for (int i = 0; i < joinTypes.length; i++) { Double rhsWidth = subPlans[i].getInnerPlan().accept(this); if (rhsWidth == null) { return null; } width = join(width, rhsWidth, joinTypes[i]); } return width; }
@Override public Double visit(HashJoinPlan plan) { Double lhsWidth = plan.getDelegate().accept(this); if (lhsWidth == null) { return null; } JoinTableNode.JoinType[] joinTypes = plan.getJoinInfo().getJoinTypes(); HashJoinPlan.SubPlan[] subPlans = plan.getSubPlans(); Double width = lhsWidth; for (int i = 0; i < joinTypes.length; i++) { Double rhsWidth = subPlans[i].getInnerPlan().accept(this); if (rhsWidth == null) { return null; } width = join(width, rhsWidth, joinTypes[i]); } return width; }
@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; }