Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
 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);
     }
 }
Пример #6
0
        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());
                        }
                    }
                }
            }
        }
Пример #8
0
 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);
                        }
                    }
                }
            }
        }