public static ArrayList<Object> getPath( Object currRow, ObjectInspector rowOI, PTFPartitionIterator<Object> pItr, int sz) throws HiveException { int idx = pItr.getIndex() - 1; ArrayList<Object> path = new ArrayList<Object>(); path.add(ObjectInspectorUtils.copyToStandardObject(currRow, rowOI)); int pSz = 1; while (pSz < sz && pItr.hasNext()) { currRow = pItr.next(); path.add(ObjectInspectorUtils.copyToStandardObject(currRow, rowOI)); pSz++; } pItr.resetToIndex(idx); return path; }
@Override protected SymbolFunctionResult match(Object row, PTFPartitionIterator<Object> pItr) throws HiveException { result.matches = true; SymbolFunctionResult rowResult = symbolFn.match(row, pItr); while (rowResult.matches && pItr.hasNext()) { row = pItr.next(); rowResult = symbolFn.match(row, pItr); } result.nextRow = pItr.getIndex(); if (pItr.hasNext()) { result.nextRow -= 1; } return result; }
@Override public void execute(PTFPartitionIterator<Object> pItr, PTFPartition outP) throws HiveException { while (pItr.hasNext()) { Object iRow = pItr.next(); SymbolFunctionResult syFnRes = SymbolFunction.match(syFn, iRow, pItr); if (syFnRes.matches) { int sz = syFnRes.nextRow - (pItr.getIndex() - 1); Object selectListInput = MatchPath.getSelectListInput( iRow, tableDef.getInput().getOutputShape().getOI(), pItr, sz); ArrayList<Object> oRow = new ArrayList<Object>(); for (ExprNodeEvaluator resExprEval : resultExprInfo.resultExprEvals) { oRow.add(resExprEval.evaluate(selectListInput)); } outP.append(oRow); } } }