protected Fields resolveRemainderFields( Set<Scope> incomingScopes, Fields argumentFields ) { Fields fields = resolveIncomingOperationArgumentFields( getFirst( incomingScopes ) ); if( fields.isUnknown() ) return fields; return fields.subtract( argumentFields ); }
Fields resolveArgumentSelector( Set<Scope> incomingScopes ) { Fields argumentSelector = getArgumentSelector(); try { Scope incomingScope = getFirst( incomingScopes ); if( argumentSelector.isAll() ) return resolveIncomingOperationArgumentFields( incomingScope ); if( argumentSelector.isGroup() ) return incomingScope.getOutGroupingFields(); if( argumentSelector.isValues() ) return incomingScope.getOutGroupingValueFields(); return resolveIncomingOperationArgumentFields( incomingScope ).select( argumentSelector ); } catch( FieldsResolverException exception ) { throw new OperatorException( this, OperatorException.Kind.argument, exception.getSourceFields(), argumentSelector, exception ); } catch( Exception exception ) { throw new OperatorException( this, "unable to resolve argument selector: " + argumentSelector.printVerbose(), exception ); } }
Fields resolveOutgoingSelector( Set<Scope> incomingScopes, Fields argumentFields, Fields declaredFields ) { Scope incomingScope = getFirst( incomingScopes ); Fields outputSelector = getOutputSelector(); if( outputSelector.isResults() ) return declaredFields; if( outputSelector.isArguments() ) return argumentFields; if( outputSelector.isGroup() ) return incomingScope.getOutGroupingFields(); if( outputSelector.isValues() ) return incomingScope.getOutGroupingValueFields(); Fields incomingFields = resolveIncomingOperationPassThroughFields( incomingScope ); // not part of resolve as we need the argumentFields if( outputSelector.isSwap() ) return Fields.asDeclaration( incomingFields.subtract( argumentFields ) ).append( declaredFields ); try { return Fields.resolve( outputSelector, Fields.asDeclaration( incomingFields ), declaredFields ); } catch( TupleException exception ) { throw new OperatorException( this, incomingFields, declaredFields, outputSelector, exception ); } }
Scope incomingScope = getFirst( incomingScopes );