return this;
}
public Sequence<? extends Item> eval(Sequence<? extends Item> contextSeq, DynamicContext dynEnv)
throws XQueryException {
Sequence input = new DummySequence(dynEnv);
for(Binding bc : _clauses) {
final int type = bc.getExpressionType();
if(type == Binding.LET_CLAUSE) {
LetVariable lv = ((LetClause) bc).getVariable();
int refcnt = lv.getReferenceCount();
if(refcnt == 0) {
continue;
} else {
input = new ActionSequence(input, bc, dynEnv);
}
} else {
input = new PipedActionSequence(input, bc, dynEnv);
}
}
// group by
if(_groupByClause != null) {
GroupingSpec[] specs = _groupByClause.getGroupingKeysAsArray();
PreGroupingVariableExtractor extractor = new PreGroupingVariableExtractor(specs);
extractor.visit(_filteredReturnExpr, dynEnv);
List<BindingVariable> nonGroupingVariables = extractor.getNonGroupingVariables();
input = new GroupedSequence(input, specs, nonGroupingVariables, contextSeq, dynEnv, _groupByClause.isOrdering());
}
// where + return
Sequence ret = new PipedActionSequence(input, _filteredReturnExpr, dynEnv);
// order by TODO PERFORMANCE eager ordering
if(!_orderSpecs.isEmpty()) {
return sorted(ret, _orderSpecs, contextSeq, dynEnv);
}
return ret;