/// <summary> /// Returns an enumerator that iterates through the collection. /// </summary> /// <returns> /// A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection. /// </returns> public IEnumerator <EventBean> GetEnumerator() { // Return null if not started StatementContext.VariableService.SetLocalVersion(); if (_parentView == null) { return(EnumerationHelper <EventBean> .CreateEmptyEnumerator()); } IEnumerator <EventBean> theEnumerator; if (StatementContext.ContextDescriptor != null) { theEnumerator = StatementContext.ContextDescriptor.GetEnumerator(StatementContext.StatementId); } else { theEnumerator = _parentView.GetEnumerator(); } if (StatementContext.EpStatementHandle.HasTableAccess) { return(GetUnsafeEnumeratorWTableImpl( theEnumerator, StatementContext.TableExprEvaluatorContext)); } return(theEnumerator); }
/// <summary> /// NOTE: Code-generation-invoked method, method name and parameter order matters /// </summary> /// <param name="joinExecutionStrategy">join strategy</param> /// <param name="resultSetProcessor">processor</param> /// <param name="parentView">view</param> /// <param name="distinct">flag</param> /// <param name="distinctKeyGetter"></param> /// <returns>iterator</returns> public static IEnumerator<EventBean> GetEnumerator( JoinExecutionStrategy joinExecutionStrategy, ResultSetProcessor resultSetProcessor, Viewable parentView, bool distinct, EventPropertyValueGetter distinctKeyGetter) { IEnumerator<EventBean> enumerator; if (joinExecutionStrategy != null) { var joinSet = joinExecutionStrategy.StaticJoin(); enumerator = resultSetProcessor.GetEnumerator(joinSet); } else if (resultSetProcessor != null) { enumerator = resultSetProcessor.GetEnumerator(parentView); } else { enumerator = parentView.GetEnumerator(); } if (!distinct) { return enumerator; } return EventDistinctEnumerator.For(enumerator, distinctKeyGetter); }
public static IEnumerator <EventBean> GetEnumerator(JoinExecutionStrategy joinExecutionStrategy, ResultSetProcessor resultSetProcessor, Viewable parentView, bool distinct) { IEnumerator <EventBean> enumerator; EventType eventType; if (joinExecutionStrategy != null) { var joinSet = joinExecutionStrategy.StaticJoin(); enumerator = resultSetProcessor.GetEnumerator(joinSet); eventType = resultSetProcessor.ResultEventType; } else if (resultSetProcessor != null) { enumerator = resultSetProcessor.GetEnumerator(parentView); eventType = resultSetProcessor.ResultEventType; } else { enumerator = parentView.GetEnumerator(); eventType = parentView.EventType; } if (!distinct) { return(enumerator); } return(DistinctEnumeration(enumerator, eventType)); }
public static void ClearAndAggregateUngrouped(ExprEvaluatorContext exprEvaluatorContext, AggregationService aggregationService, Viewable parent) { aggregationService.ClearResults(exprEvaluatorContext); var ee = parent.GetEnumerator(); var eventsPerStream = new EventBean[1]; while (ee.MoveNext()) { eventsPerStream[0] = ee.Current; aggregationService.ApplyEnter(eventsPerStream, null, exprEvaluatorContext); } }
public override ICollection <EventBean> GetSnapshot(EPStatementAgentInstanceHandle createWindowStmtHandle, Viewable parent) { using (createWindowStmtHandle.StatementAgentInstanceLock.AcquireReadLock()) { var it = parent.GetEnumerator(); var list = new LinkedList <EventBean>(); while (it.MoveNext()) { var fullRevision = (RevisionEventBeanDeclared)it.Current; var key = fullRevision.Key; var state = _statePerKey.Get(key); list.AddLast(state.LastEvent); } return(list); } }
public override IEnumerator <EventBean> GetEnumerator(Viewable parent) { if (_orderByProcessor != null) { // Pull all events, generate order keys var eventsPerStream = new EventBean[1]; var events = new List <EventBean>(); var orderKeys = new List <Object>(); var parentEnumerator = parent.GetEnumerator(); if (parentEnumerator.MoveNext() == false) { return(CollectionUtil.NULL_EVENT_ITERATOR); } do { var aParent = parentEnumerator.Current; eventsPerStream[0] = aParent; var orderKey = _orderByProcessor.GetSortKey(eventsPerStream, true, ExprEvaluatorContext); var pair = ProcessViewResultIterator(eventsPerStream); var result = pair.First; if (result != null && result.Length != 0) { events.Add(result[0]); } orderKeys.Add(orderKey); } while (parentEnumerator.MoveNext()); // sort var outgoingEvents = events.ToArray(); var orderKeysArr = orderKeys.ToArray(); var orderedEvents = _orderByProcessor.Sort(outgoingEvents, orderKeysArr, ExprEvaluatorContext); if (orderedEvents == null) { return(EnumerationHelper <EventBean> .CreateEmptyEnumerator()); } return(((IEnumerable <EventBean>)orderedEvents).GetEnumerator()); } // Return an iterator that gives row-by-row a result var transform = new ResultSetProcessorSimpleTransform(this); return(parent.Select(transform.Transform).GetEnumerator()); }
private void Preload( EPServicesContext services, EventTable[] eventIndex, Viewable subselectView, AgentInstanceContext agentInstanceContext) { if (_subSelectHolder.StreamSpecCompiled is NamedWindowConsumerStreamSpec) { var namedSpec = (NamedWindowConsumerStreamSpec)_subSelectHolder.StreamSpecCompiled; NamedWindowProcessor processor = services.NamedWindowMgmtService.GetProcessor(namedSpec.WindowName); if (processor == null) { throw new EPRuntimeException("Failed to find named window by name '" + namedSpec.WindowName + "'"); } var processorInstance = processor.GetProcessorInstance(agentInstanceContext); if (processorInstance == null) { throw new EPException( "Named window '" + namedSpec.WindowName + "' is associated to context '" + processor.ContextName + "' that is not available for querying"); } var consumerView = processorInstance.TailViewInstance; // preload view for stream ICollection <EventBean> eventsInWindow; if (namedSpec.FilterExpressions != null && !namedSpec.FilterExpressions.IsEmpty()) { try { var types = new StreamTypeServiceImpl( consumerView.EventType, consumerView.EventType.Name, false, services.EngineURI); var tagged = new LinkedHashMap <string, Pair <EventType, string> >(); var filterSpecCompiled = FilterSpecCompiler.MakeFilterSpec( types.EventTypes[0], types.StreamNames[0], namedSpec.FilterExpressions, null, tagged, tagged, types, null, agentInstanceContext.StatementContext, Collections.SingletonSet(0)); var snapshot = consumerView.SnapshotNoLock( filterSpecCompiled, agentInstanceContext.StatementContext.Annotations); eventsInWindow = new List <EventBean>(snapshot.Count); ExprNodeUtility.ApplyFilterExpressions( snapshot, namedSpec.FilterExpressions, agentInstanceContext, eventsInWindow); } catch (Exception ex) { Log.Warn("Unexpected exception analyzing filter paths: " + ex.Message, ex); eventsInWindow = new List <EventBean>(); ExprNodeUtility.ApplyFilterExpressionsIterable( consumerView, namedSpec.FilterExpressions, agentInstanceContext, eventsInWindow); } } else { eventsInWindow = new List <EventBean>(); for (IEnumerator <EventBean> it = consumerView.GetEnumerator(); it.MoveNext();) { eventsInWindow.Add(it.Current); } } EventBean[] newEvents = eventsInWindow.ToArray(); if (subselectView != null) { ((View)subselectView).Update(newEvents, null); } if (eventIndex != null) { foreach (var table in eventIndex) { table.Add(newEvents); // fill index } } } else // preload from the data window that sit on top { // Start up event table from the iterator IEnumerator <EventBean> it = subselectView.GetEnumerator(); if (it.MoveNext()) { var preloadEvents = new List <EventBean>(); do { preloadEvents.Add(it.Current); } while (it.MoveNext()); if (eventIndex != null) { foreach (var table in eventIndex) { table.Add(preloadEvents.ToArray()); } } } } }
public override IEnumerator <EventBean> GetEnumerator() { return(_parent.GetEnumerator()); }
private void Preload( EPServicesContext services, EventTable[] eventIndex, Viewable subselectView, AgentInstanceContext agentInstanceContext) { if (_subSelectHolder.StreamSpecCompiled is NamedWindowConsumerStreamSpec) { var namedSpec = (NamedWindowConsumerStreamSpec)_subSelectHolder.StreamSpecCompiled; NamedWindowProcessor processor = services.NamedWindowMgmtService.GetProcessor(namedSpec.WindowName); if (processor == null) { throw new EPRuntimeException("Failed to find named window by name '" + namedSpec.WindowName + "'"); } var processorInstance = processor.GetProcessorInstance(agentInstanceContext); if (processorInstance == null) { throw new EPException( "Named window '" + namedSpec.WindowName + "' is associated to context '" + processor.ContextName + "' that is not available for querying"); } var consumerView = processorInstance.TailViewInstance; // preload view for stream ICollection <EventBean> eventsInWindow; if (namedSpec.FilterExpressions != null && !namedSpec.FilterExpressions.IsEmpty()) { var types = new StreamTypeServiceImpl(consumerView.EventType, consumerView.EventType.Name, false, services.EngineURI); var queryGraph = ExprNodeUtility.ValidateFilterGetQueryGraphSafe(ExprNodeUtility.ConnectExpressionsByLogicalAndWhenNeeded(namedSpec.FilterExpressions), agentInstanceContext.StatementContext, types); var snapshot = consumerView.SnapshotNoLock(queryGraph, agentInstanceContext.StatementContext.Annotations); eventsInWindow = new List <EventBean>(); ExprNodeUtility.ApplyFilterExpressionsIterable(snapshot, namedSpec.FilterExpressions, agentInstanceContext, eventsInWindow); } else { eventsInWindow = new List <EventBean>(); for (IEnumerator <EventBean> it = consumerView.GetEnumerator(); it.MoveNext();) { eventsInWindow.Add(it.Current); } } EventBean[] newEvents = eventsInWindow.ToArray(); if (subselectView != null) { ((View)subselectView).Update(newEvents, null); } if (eventIndex != null) { foreach (var table in eventIndex) { table.Add(newEvents, agentInstanceContext); // fill index } } } else // preload from the data window that sit on top { // Start up event table from the iterator IEnumerator <EventBean> it = subselectView.GetEnumerator(); if (it.MoveNext()) { var preloadEvents = new List <EventBean>(); do { preloadEvents.Add(it.Current); } while (it.MoveNext()); if (eventIndex != null) { foreach (var table in eventIndex) { table.Add(preloadEvents.ToArray(), agentInstanceContext); } } } } }