MCPcopy Create free account
hub / github.com/apache/pig / doInsertBetween

Method doInsertBetween

src/org/apache/pig/impl/plan/OperatorPlan.java:586–614  ·  view source on GitHub ↗
(
            E after,
            E newNode,
            E before,
            boolean rewire)

Source from the content-addressed store, hash-verified

584 * rewiring operation.
585 */
586 public void doInsertBetween(
587 E after,
588 E newNode,
589 E before,
590 boolean rewire) throws PlanException {
591 checkInPlan(newNode);
592 List<E> newNodePreds = getPredecessors(newNode);
593 //assuming that the newNode has zero or one predecessor
594 E newNodePred = (newNodePreds == null? null: newNodePreds.get(0));
595 if (!replaceNode(after, newNode, before, mFromEdges) || !replaceNode(before, newNode, after, mToEdges)) {
596 int errCode = 1094;
597 String msg = "Attempt to insert between two nodes " +
598 "that were not connected.";
599 PlanException pe = new PlanException(msg, errCode, PigException.INPUT);
600 throw pe;
601 }
602 mFromEdges.put(newNode, before);
603 mToEdges.put(newNode, after);
604
605 if(rewire) {
606 if((newNodePred != null) && !(newNodePred.equals(after))) {
607 newNodePred.regenerateProjectionMap();
608 newNode.rewire(newNodePred, 0, after, true);
609 }
610 newNode.regenerateProjectionMap();
611 IndexHelper<E> indexHelper = new IndexHelper<E>(getPredecessors(newNode));
612 before.rewire(after, indexHelper.getIndex(after), newNode, false);
613 }
614 }
615
616 // replaces (src -> dst) entry in multiMap with (src -> replacement)
617 private boolean replaceNode(E src, E replacement, E dst, MultiMap<E, E> multiMap) {

Callers 3

insertBetweenMethod · 0.95
pushBeforeMethod · 0.95
pushAfterMethod · 0.95

Calls 9

checkInPlanMethod · 0.95
getPredecessorsMethod · 0.95
replaceNodeMethod · 0.95
getIndexMethod · 0.95
rewireMethod · 0.80
getMethod · 0.65
putMethod · 0.45
equalsMethod · 0.45

Tested by

no test coverage detected