@Test public final void testFindTopNode() throws CloneNotSupportedException, PlanningException { // two relations Expr expr = analyzer.parse(TestLogicalPlanner.QUERIES[1]); LogicalNode plan = planner.createPlan(expr).getRootBlock().getRoot(); assertEquals(NodeType.ROOT, plan.getType()); LogicalRootNode root = (LogicalRootNode) plan; TestLogicalNode.testCloneLogicalNode(root); assertEquals(NodeType.PROJECTION, root.getChild().getType()); ProjectionNode projNode = (ProjectionNode) root.getChild(); assertEquals(NodeType.JOIN, projNode.getChild().getType()); JoinNode joinNode = (JoinNode) projNode.getChild(); assertEquals(NodeType.SCAN, joinNode.getLeftChild().getType()); ScanNode leftNode = (ScanNode) joinNode.getLeftChild(); assertEquals("employee", leftNode.getTableName()); assertEquals(NodeType.SCAN, joinNode.getRightChild().getType()); ScanNode rightNode = (ScanNode) joinNode.getRightChild(); assertEquals("dept", rightNode.getTableName()); LogicalNode node = PlannerUtil.findTopNode(root, NodeType.ROOT); assertEquals(NodeType.ROOT, node.getType()); node = PlannerUtil.findTopNode(root, NodeType.PROJECTION); assertEquals(NodeType.PROJECTION, node.getType()); node = PlannerUtil.findTopNode(root, NodeType.JOIN); assertEquals(NodeType.JOIN, node.getType()); node = PlannerUtil.findTopNode(root, NodeType.SCAN); assertEquals(NodeType.SCAN, node.getType()); }
public MergeJoinExec( TaskAttemptContext context, JoinNode plan, PhysicalExec outer, PhysicalExec inner, SortSpec[] outerSortKey, SortSpec[] innerSortKey) { super(context, plan.getInSchema(), plan.getOutSchema(), outer, inner); Preconditions.checkArgument( plan.hasJoinQual(), "Sort-merge join is only used for the equi-join, " + "but there is no join condition"); this.joinNode = plan; this.joinQual = plan.getJoinQual(); this.qualCtx = this.joinQual.newContext(); this.outerTupleSlots = new ArrayList<Tuple>(INITIAL_TUPLE_SLOT); this.innerTupleSlots = new ArrayList<Tuple>(INITIAL_TUPLE_SLOT); SortSpec[][] sortSpecs = new SortSpec[2][]; sortSpecs[0] = outerSortKey; sortSpecs[1] = innerSortKey; this.joincomparator = new JoinTupleComparator(outer.getSchema(), inner.getSchema(), sortSpecs); this.tupleComparator = PlannerUtil.getComparatorsFromJoinQual( plan.getJoinQual(), outer.getSchema(), inner.getSchema()); this.outerIterator = outerTupleSlots.iterator(); this.innerIterator = innerTupleSlots.iterator(); // for projection this.projector = new Projector(inSchema, outSchema, plan.getTargets()); this.evalContexts = projector.renew(); // for join frameTuple = new FrameTuple(); outTuple = new VTuple(outSchema.getColumnNum()); }