Пример #1
0
        public void ProcessView(
            EventBean[] newData,
            EventBean[] oldData,
            bool isGenerateSynthetic)
        {
            if (newData != null) {
                foreach (var aNewData in newData) {
                    EventBean[] eventsPerStream = {aNewData};
                    var mk = processor.GenerateGroupKeySingle(eventsPerStream, true);

                    // if this is a newly encountered group, generate the remove stream event
                    if (groupReps.Push(mk, eventsPerStream) == null) {
                        if (processor.IsSelectRStream) {
                            var @event = processor.GenerateOutputBatchedNoSortWMap(
                                false,
                                mk,
                                eventsPerStream,
                                true,
                                isGenerateSynthetic);
                            if (@event != null) {
                                groupRepsOutputLastUnordRStream.Put(mk, @event);
                            }
                        }
                    }

                    processor.AggregationService.ApplyEnter(eventsPerStream, mk, processor.GetAgentInstanceContext());
                }
            }

            if (oldData != null) {
                foreach (var anOldData in oldData) {
                    EventBean[] eventsPerStream = {anOldData};
                    var mk = processor.GenerateGroupKeySingle(eventsPerStream, true);

                    if (groupReps.Push(mk, eventsPerStream) == null) {
                        if (processor.IsSelectRStream) {
                            var @event = processor.GenerateOutputBatchedNoSortWMap(
                                false,
                                mk,
                                eventsPerStream,
                                false,
                                isGenerateSynthetic);
                            if (@event != null) {
                                groupRepsOutputLastUnordRStream.Put(mk, @event);
                            }
                        }
                    }

                    processor.AggregationService.ApplyLeave(eventsPerStream, mk, processor.GetAgentInstanceContext());
                }
            }
        }
        public void ProcessView(
            EventBean[] newData,
            EventBean[] oldData,
            bool isGenerateSynthetic)
        {
            GenerateRemoveStreamJustOnce(isGenerateSynthetic, false);

            if (newData != null) {
                foreach (var aNewData in newData) {
                    EventBean[] eventsPerStream = {aNewData};
                    var mk = processor.GenerateGroupKeySingle(eventsPerStream, true);
                    groupReps.Put(mk, eventsPerStream);

                    if (processor.IsSelectRStream && !groupRepsOutputLastUnordRStream.ContainsKey(mk)) {
                        var @event = processor.GenerateOutputBatchedNoSortWMap(
                            false,
                            mk,
                            eventsPerStream,
                            true,
                            isGenerateSynthetic);
                        if (@event != null) {
                            groupRepsOutputLastUnordRStream.Put(mk, @event);
                        }
                    }

                    processor.AggregationService.ApplyEnter(eventsPerStream, mk, processor.GetAgentInstanceContext());
                }
            }

            if (oldData != null) {
                foreach (var anOldData in oldData) {
                    EventBean[] eventsPerStream = {anOldData};
                    var mk = processor.GenerateGroupKeySingle(eventsPerStream, true);

                    if (processor.IsSelectRStream && !groupRepsOutputLastUnordRStream.ContainsKey(mk)) {
                        var @event = processor.GenerateOutputBatchedNoSortWMap(
                            false,
                            mk,
                            eventsPerStream,
                            false,
                            isGenerateSynthetic);
                        if (@event != null) {
                            groupRepsOutputLastUnordRStream.Put(mk, @event);
                        }
                    }

                    processor.AggregationService.ApplyLeave(eventsPerStream, mk, processor.GetAgentInstanceContext());
                }
            }
        }
        public static IEnumerator<EventBean> For(
            IEnumerator<EventBean> sourceIterator,
            ResultSetProcessorRowPerGroup resultSetProcessor,
            AggregationService aggregationService,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            var eventsPerStream = new EventBean[1];
            var priorSeenGroups = new HashSet<object>();
            var hasHavingClause = resultSetProcessor.HasHavingClause;

            while (sourceIterator.MoveNext()) {
                eventsPerStream[0] = sourceIterator.Current;
                var groupKey = resultSetProcessor.GenerateGroupKeySingle(eventsPerStream, true);
                aggregationService.SetCurrentAccess(groupKey, exprEvaluatorContext.AgentInstanceId, null);

                if (hasHavingClause) {
                    var pass = resultSetProcessor.EvaluateHavingClause(eventsPerStream, true, exprEvaluatorContext);
                    if (!pass) {
                        continue;
                    }
                }

                if (priorSeenGroups.Contains(groupKey)) {
                    continue;
                }

                priorSeenGroups.Add(groupKey);
                yield return resultSetProcessor.SelectExprProcessor.Process(
                    eventsPerStream,
                    true,
                    true,
                    exprEvaluatorContext);
            }
        }