// ----------------------------------------------------------------------- // MultJoin::recomputeOuterReferences() // ----------------------------------------------------------------------- void MultiJoin::recomputeOuterReferences() { // --------------------------------------------------------------------- // Delete all those input values that are no longer referenced on // this operator. // --------------------------------------------------------------------- if (NOT getGroupAttr()->getCharacteristicInputs().isEmpty()) { ValueIdSet outerRefs = getGroupAttr()->getCharacteristicInputs(); // Weed out those expressions not needed by my selectionPred and joinPred // xxx instead of taking this from getLocalJoinPreds, should I take it // from MultiJoin selectionPred??? refer to getLocalJoinPreds definition // and consider preds that referencing inputs!!! ValueIdSet exprSet = jbbSubset_.getLocalJoinPreds(); // from JbbSubsetAnalysis // Need to include LocalDependentPreds later when supported. Ok now for inner MultiJoins exprSet.weedOutUnreferenced(outerRefs); // Add back those expressiones needed by my children Int32 arity = getArity(); // outputs produced by JBBCs in this MultiJoin ValueIdSet jbbcOutputs; for (Int32 i = 0; i < arity; i++) { outerRefs += child(i)->getGroupAttr()->getCharacteristicInputs(); jbbcOutputs += child(i)->getGroupAttr()->getCharacteristicOutputs(); // these inputs are provided by jbbcs in this MultiJoin } // account for TSJs i.e. values flowing from // one jbbc to another within this MultiJoin outerRefs -= jbbcOutputs; getGroupAttr()->setCharacteristicInputs(outerRefs); } return; } // MultiJoin::recomputeOuterReferences()