this.targetNum = targets != null ? targets.length : 0;
inMap = new int[outSchema.getColumnNum() - targetNum];
outMap = new int[outSchema.getColumnNum() - targetNum];
int mapId = 0;
Column col;
if (targetNum > 0) {
evalOutMap = new int[targetNum];
evals = new EvalNode[targetNum];
for (int i = 0; i < targetNum; i++) {
// TODO - is it always correct?
if (targets[i].hasAlias()) {
evalOutMap[i] = outSchema.getColumnId(targets[i].getAlias());
} else {
evalOutMap[i] = outSchema.getColumnId(targets[i].getEvalTree().getName());
}
evals[i] = targets[i].getEvalTree();
}
outer:
for (int targetId = 0; targetId < outSchema.getColumnNum(); targetId ++) {
for (int j = 0; j < evalOutMap.length; j++) {
if (evalOutMap[j] == targetId)
continue outer;
}
col = inSchema.getColumnByFQN(outSchema.getColumn(targetId).getQualifiedName());
outMap[mapId] = targetId;
inMap[mapId] = inSchema.getColumnId(col.getQualifiedName());
mapId++;
}
} else {
for (int targetId = 0; targetId < outSchema.getColumnNum(); targetId ++) {
col = inSchema.getColumnByFQN(outSchema.getColumn(targetId).getQualifiedName());
outMap[mapId] = targetId;
inMap[mapId] = inSchema.getColumnId(col.getQualifiedName());
mapId++;
}
}
}