public void updateJoinResults(final TransactionBase tx,final String childId,final VisibilityBindingSet childBindingSet,final JoinMetadata joinMetadata) throws BindingSetConversionException {
  checkNotNull(tx);
  checkNotNull(childId);
  checkNotNull(childBindingSet);
  checkNotNull(joinMetadata);
  final IterativeJoin joinAlgorithm;
switch (joinMetadata.getJoinType()) {
case NATURAL_JOIN:
    joinAlgorithm=new NaturalJoin();
  break;
case LEFT_OUTER_JOIN:
joinAlgorithm=new LeftOuterJoin();
break;
default :
throw new RuntimeException("Unsupported JoinType: " + joinMetadata.getJoinType());
}
final Side emittingSide;
final String siblingId;
if (childId.equals(joinMetadata.getLeftChildNodeId())) {
emittingSide=Side.LEFT;
siblingId=joinMetadata.getRightChildNodeId();
}
 else {
emittingSide=Side.RIGHT;
siblingId=joinMetadata.getLeftChildNodeId();
}
final FluoTableIterator siblingBindingSets=makeSiblingScanIterator(childId,childBindingSet,siblingId,tx);
final Iterator<VisibilityBindingSet> newJoinResults;
if (emittingSide == Side.LEFT) {
newJoinResults=joinAlgorithm.newLeftResult(childBindingSet,siblingBindingSets);
}
 else {
newJoinResults=joinAlgorithm.newRightResult(siblingBindingSets,childBindingSet);
}
final VariableOrder joinVarOrder=joinMetadata.getVariableOrder();
while (newJoinResults.hasNext()) {
final BindingSet newJoinResult=newJoinResults.next();
final String joinBindingSetStringId=idConverter.convert(newJoinResult,joinVarOrder);
final String joinBindingSetStringValue=valueConverter.convert(newJoinResult,joinVarOrder);
final String row=joinMetadata.getNodeId() + NODEID_BS_DELIM + joinBindingSetStringId;
final Column col=FluoQueryColumns.JOIN_BINDING_SET;
final String value=joinBindingSetStringValue;
tx.set(row,col,value);
}
}

public void updateJoinResults ( final TransactionBase tx , final String childId , final VisibilityBindingSet childBindingSet , final JoinMetadata joinMetadata ) throws BindingSetConversionException { checkNotNull ( tx ) ; checkNotNull ( childId ) ; checkNotNull ( childBindingSet ) ; checkNotNull ( joinMetadata ) ; final IterativeJoin joinAlgorithm ; switch ( joinMetadata . getJoinType ( ) ) { case NATURAL_JOIN : joinAlgorithm = new NaturalJoin ( ) ; break ; case LEFT_OUTER_JOIN : joinAlgorithm = new LeftOuterJoin ( ) ; break ; default : throw new RuntimeException ( "Unsupported JoinType: " + joinMetadata . getJoinType ( ) ) ; } final Side emittingSide ; final String siblingId ; if ( childId . equals ( joinMetadata . getLeftChildNodeId ( ) ) ) { emittingSide = Side . LEFT ; siblingId = joinMetadata . getRightChildNodeId ( ) ; } else { emittingSide = Side . RIGHT ; siblingId = joinMetadata . getLeftChildNodeId ( ) ; } final FluoTableIterator siblingBindingSets = makeSiblingScanIterator ( childId , childBindingSet , siblingId , tx ) ; final Iterator < VisibilityBindingSet > newJoinResults ; if ( emittingSide == Side . LEFT ) { newJoinResults = joinAlgorithm . newLeftResult ( childBindingSet , siblingBindingSets ) ; } else { newJoinResults = joinAlgorithm . newRightResult ( siblingBindingSets , childBindingSet ) ; } final VariableOrder joinVarOrder = joinMetadata . getVariableOrder ( ) ; while ( newJoinResults . hasNext ( ) ) { final BindingSet newJoinResult = newJoinResults . next ( ) ; final String joinBindingSetStringId = idConverter . convert ( newJoinResult , joinVarOrder ) ; final String joinBindingSetStringValue = valueConverter . convert ( newJoinResult , joinVarOrder ) ; final String row = joinMetadata . getNodeId ( ) + NODEID_BS_DELIM + joinBindingSetStringId ; final Column col = FluoQueryColumns . JOIN_BINDING_SET ; final String value = joinBindingSetStringValue ; tx . set ( row , col , value ) ; } }
updates the results of a join node when one of its children has added a new binding set to its results .
