from.remove(cpk);
Packager cpkgr = cpk.getPkgr();
PODemux demux = (PODemux)to.getLeaves().get(0);
MultiQueryPackager toPkgr = (MultiQueryPackager) ((POPackage) to
.getRoots().get(0)).getPkgr();
boolean isSameKeyType = toPkgr.isSameMapKeyType();
// if current > initial + 1, it means we had
// a split in the map of the MROper we are trying to
// merge. In that case we would have changed the indices
// of the POLocalRearranges in the split to be in the
// range initial to current. To handle key, value pairs
// coming out of those POLocalRearranges, we add
// the Packages in the 'from' POMultiQueryPackage (in this case,
// it has to be a POMultiQueryPackage since we had
// a POSplit in the map) to the 'to' POMultiQueryPackage.
// These Packages would have correct positions in the package
// list and would be able to handle the outputs from the different
// POLocalRearranges.
int total = current - initial;
int pkCount = 0;
if (cpkgr instanceof MultiQueryPackager) {
List<Packager> pkgrs = ((MultiQueryPackager) cpkgr).getPackagers();
for (Packager p : pkgrs) {
toPkgr.addPackager(p);
if (!isSameKeyType) {
p.setKeyType(DataType.TUPLE);
}
pkCount++;
}
} else {
toPkgr.addPackager(cpkgr);
pkCount = 1;
}
toPkgr.setSameMapKeyType(isSameKeyType);
if (pkCount != total) {
int errCode = 2146;
String msg = "Internal Error. Inconsistency in key index found during optimization.";
throw new OptimizerException(msg, errCode, PigException.BUG);
}
// all packages should have the same key type
if (!isSameKeyType) {
cpk.getPkgr().setKeyType(DataType.TUPLE);
}
toPkgr.setKeyType(cpk.getPkgr().getKeyType());
// See comment above for why we flatten the Packages
// in the from plan - for the same reason, we flatten
// the inner plans of Demux operator now.
int plCount = 0;