* format, i.e, (key,indexedTuple(value))
*/
@Override
public Result getNext(Tuple t) throws ExecException {
Result inp = null;
Result res = ERR_RESULT;
while (true) {
inp = processInput();
if (inp.returnStatus == POStatus.STATUS_EOP || inp.returnStatus == POStatus.STATUS_ERR)
break;
if (inp.returnStatus == POStatus.STATUS_NULL)
continue;
for (PhysicalPlan ep : plans) {
ep.attachInput((Tuple)inp.result);
}
List<Result> resLst = new ArrayList<Result>();
if (secondaryPlans!=null) {
for (PhysicalPlan ep : secondaryPlans) {
ep.attachInput((Tuple)inp.result);
}
}
List<Result> secondaryResLst = null;
if (secondaryLeafOps!=null)
secondaryResLst = new ArrayList<Result>();
for (ExpressionOperator op : leafOps){
switch(op.getResultType()){
case DataType.BAG:
res = op.getNext(dummyBag);
break;
case DataType.BOOLEAN:
res = op.getNext(dummyBool);
break;
case DataType.BYTEARRAY:
res = op.getNext(dummyDBA);
break;
case DataType.CHARARRAY:
res = op.getNext(dummyString);
break;
case DataType.DOUBLE:
res = op.getNext(dummyDouble);
break;
case DataType.FLOAT:
res = op.getNext(dummyFloat);
break;
case DataType.INTEGER:
res = op.getNext(dummyInt);
break;
case DataType.LONG:
res = op.getNext(dummyLong);
break;
case DataType.MAP:
res = op.getNext(dummyMap);
break;
case DataType.TUPLE:
res = op.getNext(dummyTuple);
break;
default:
log.error("Invalid result type: " + DataType.findType(op.getResultType()));
break;
}
// allow null as group by key
if (res.returnStatus != POStatus.STATUS_OK && res.returnStatus != POStatus.STATUS_NULL) {
return new Result();
}
resLst.add(res);
}
if (secondaryLeafOps!=null)
{
for (ExpressionOperator op : secondaryLeafOps){
switch(op.getResultType()){
case DataType.BAG:
res = op.getNext(dummyBag);
break;
case DataType.BOOLEAN:
res = op.getNext(dummyBool);
break;
case DataType.BYTEARRAY:
res = op.getNext(dummyDBA);
break;
case DataType.CHARARRAY:
res = op.getNext(dummyString);
break;
case DataType.DOUBLE:
res = op.getNext(dummyDouble);
break;
case DataType.FLOAT:
res = op.getNext(dummyFloat);
break;
case DataType.INTEGER:
res = op.getNext(dummyInt);
break;
case DataType.LONG:
res = op.getNext(dummyLong);
break;
case DataType.MAP:
res = op.getNext(dummyMap);
break;
case DataType.TUPLE:
res = op.getNext(dummyTuple);
break;
default:
log.error("Invalid result type: " + DataType.findType(op.getResultType()));
break;
}
// allow null as group by key
if (res.returnStatus != POStatus.STATUS_OK && res.returnStatus != POStatus.STATUS_NULL) {
return new Result();
}
secondaryResLst.add(res);
}
}