private void createJoinOperation(DatasizeHint mode, INFO info) {
DataSet op1 = (DataSet) sets.get(info.parentID);
DataSet op2 = (DataSet) sets.get(info.otherID);
if (info.types != null && (info.projections == null || info.projections.length == 0)) {
sets.put(info.setID, applyJoinOperation(op1, op2, info.keys1, info.keys2, mode, info));
} else {
DefaultJoin defaultResult = createDefaultJoin(op1, op2, info.keys1, info.keys2, mode);
if (info.projections.length == 0) {
sets.put(info.setID, defaultResult.name("DefaultJoin"));
} else {
ProjectJoin project = null;
for (ProjectionEntry pe : info.projections) {
switch (pe.side) {
case FIRST:
project = project == null ? defaultResult.projectFirst(pe.keys) : project.projectFirst(pe.keys);
break;
case SECOND:
project = project == null ? defaultResult.projectSecond(pe.keys) : project.projectSecond(pe.keys);
break;
}
}
sets.put(info.setID, project.name("ProjectJoin"));
}
}
}