@Override public Fields resolveIncomingOperationPassThroughFields( Scope incomingScope ) { if( isBuffer() ) return incomingScope.getIncomingBufferPassThroughFields(); else return incomingScope.getIncomingAggregatorPassThroughFields(); }
@Override public Fields resolveIncomingOperationArgumentFields( Scope incomingScope ) { if( isBuffer() ) return incomingScope.getIncomingBufferArgumentFields(); else return incomingScope.getIncomingAggregatorArgumentFields(); }
Fields resolveOutgoingGroupingSelector( Set<Scope> incomingScopes, Fields argumentSelector, Fields declared ) { try { return resolveOutgoingSelector( incomingScopes, argumentSelector, declared ); } catch( Exception exception ) { if( exception instanceof OperatorException ) throw (OperatorException) exception; if( isBuffer() ) throw new OperatorException( this, "could not resolve outgoing values selector in: " + this, exception ); else throw new OperatorException( this, "could not resolve outgoing grouping selector in: " + this, exception ); } } }
private void verifyAggregatorArguments( Fields argumentFields, Scope incomingScope ) { if( ( !isBuffer() ) && incomingScope.isEvery() && argumentFields.contains( incomingScope.getOperationDeclaredFields() ) ) throw new OperatorException( this, "arguments may not select a declared field from a previous Every" ); }
if( everyElement.isBuffer() ) rhsDuct = new BufferEveryWindow( flowProcess, everyElement ); else if( everyElement.isAggregator() )
@Override public Scope outgoingScopeFor( Set<Scope> incomingScopes ) { Scope incomingScope = getFirst( incomingScopes ); if( !isBuffer() && incomingScope.getOutValuesFields().isNone() ) throw new OperatorException( this, "only a Buffer may be preceded by a CoGroup declaring Fields.NONE as the join fields" ); Fields argumentFields = resolveArgumentSelector( incomingScopes ); verifyArguments( argumentFields ); // we currently don't support using result from a previous Every in the current Every verifyAggregatorArguments( argumentFields, incomingScope ); Fields declaredFields = resolveDeclared( incomingScopes, argumentFields ); verifyDeclaredFields( declaredFields ); Fields outgoingGroupingFields = resolveOutgoingGroupingSelector( incomingScopes, argumentFields, declaredFields ); verifyOutputSelector( outgoingGroupingFields ); Fields outgoingValuesFields = incomingScope.getOutValuesFields(); // the incoming fields eligible to be outgoing, for Every only the grouping fields. Fields passThroughFields = resolveIncomingOperationPassThroughFields( incomingScope ); Fields remainderFields = resolveRemainderFields( incomingScopes, argumentFields ); return new Scope( getName(), Scope.Kind.EVERY, passThroughFields, remainderFields, argumentFields, declaredFields, outgoingGroupingFields, outgoingValuesFields ); }