private DataSet<?> prepareCoGroupInput(List<DataSet<Tuple>> inputs, FlowNode node, int dop) {
CoGroup coGroup = (CoGroup)getSingle(node.getSinkElements());
Joiner joiner = coGroup.getJoiner();
int numJoinInputs = coGroup.isSelfJoin() ? coGroup.getNumSelfJoins() + 1 : inputs.size();
Fields[] inputFields = new Fields[numJoinInputs];
Fields[] keyFields = new Fields[numJoinInputs];
String[][] flinkKeys = new String[numJoinInputs][];
List<DataSet<Tuple>> joinInputs = computeSpliceInputsFieldsKeys(coGroup, node, inputs, inputFields, keyFields, flinkKeys);
if(joiner.getClass().equals(InnerJoin.class)) {
if(!keyFields[0].isNone()) {
return prepareFullOuterCoGroupInput(joinInputs, node, inputFields, keyFields, flinkKeys, dop);
}
else {
return prepareInnerCrossInput(joinInputs, node, inputFields, dop);
}
}
else if(joiner.getClass().equals(BufferJoin.class)) {
return prepareBufferCoGroupInput(joinInputs, node, inputFields, keyFields, flinkKeys, dop);
}
else {
return prepareFullOuterCoGroupInput(joinInputs, node, inputFields, keyFields, flinkKeys, dop);
}
}