public IEnumerator <EventBean> ObtainEnumerator(Viewable parent) { if (_orderByProcessor == null) { return(ResultSetAggregateAllEnumerator.New(parent, this, _exprEvaluatorContext)); } // Pull all parent events, generate order keys var eventsPerStream = new EventBean[1]; var outgoingEvents = new List <EventBean>(); var orderKeys = new List <object>(); var evaluateParams = new EvaluateParams(eventsPerStream, true, _exprEvaluatorContext); foreach (var candidate in parent) { eventsPerStream[0] = candidate; object pass = true; if (_prototype.OptionalHavingNode != null) { pass = _prototype.OptionalHavingNode.Evaluate(evaluateParams); } if ((pass == null) || (false.Equals(pass))) { continue; } outgoingEvents.Add(_selectExprProcessor.Process(eventsPerStream, true, true, _exprEvaluatorContext)); var orderKey = _orderByProcessor.GetSortKey(eventsPerStream, true, _exprEvaluatorContext); orderKeys.Add(orderKey); } // sort var outgoingEventsArr = outgoingEvents.ToArray(); var orderKeysArr = orderKeys.ToArray(); var orderedEvents = _orderByProcessor.Sort(outgoingEventsArr, orderKeysArr, _exprEvaluatorContext) ?? EMPTY_EVENT_BEAN_LIST; return(orderedEvents.GetEnumerator()); }
public IEnumerator <EventBean> ObtainIterator(Viewable parent) { if (_orderByProcessor == null) { return(ResultSetAggregateAllEnumerator.New(parent, this, _exprEvaluatorContext)); } // Pull all parent events, generate order keys EventBean[] eventsPerStream = new EventBean[1]; IList <EventBean> outgoingEvents = new List <EventBean>(); IList <Object> orderKeys = new List <Object>(); var evaluateParams = new EvaluateParams(eventsPerStream, true, _exprEvaluatorContext); foreach (EventBean candidate in parent) { eventsPerStream[0] = candidate; bool?pass = true; if (_prototype.OptionalHavingNode != null) { pass = (bool?)_prototype.OptionalHavingNode.Evaluate(evaluateParams); } if ((pass == null) || (!pass.Value)) { continue; } outgoingEvents.Add(_selectExprProcessor.Process(eventsPerStream, true, true, _exprEvaluatorContext)); Object orderKey = _orderByProcessor.GetSortKey(eventsPerStream, true, _exprEvaluatorContext); orderKeys.Add(orderKey); } // sort EventBean[] outgoingEventsArr = outgoingEvents.ToArray(); Object[] orderKeysArr = orderKeys.ToArray(); EventBean[] orderedEvents = _orderByProcessor.Sort(outgoingEventsArr, orderKeysArr, _exprEvaluatorContext); return(((IEnumerable <EventBean>)orderedEvents).GetEnumerator()); }