コード例 #1
0
        // Filter and Select
        public Object Evaluate(
            EventBean[] eventsPerStream,
            bool newData,
            ICollection <EventBean> matchingEvents,
            ExprEvaluatorContext exprEvaluatorContext,
            ExprSubselectRowNode parent)
        {
            var eventsZeroBased = EventBeanUtility.AllocatePerStreamShift(eventsPerStream);
            var subSelectResult = ExprSubselectRowNodeUtility.EvaluateFilterExpectSingleMatch(
                eventsZeroBased, newData, matchingEvents, exprEvaluatorContext, parent);

            if (subSelectResult == null)
            {
                return(null);
            }

            eventsZeroBased[0] = subSelectResult;
            Object result;

            if (parent.SelectClauseEvaluator.Length == 1)
            {
                result = parent.SelectClauseEvaluator[0].Evaluate(new EvaluateParams(eventsZeroBased, true, exprEvaluatorContext));
            }
            else
            {
                // we are returning a Map here, not object-array, preferring the self-describing structure
                result = parent.EvaluateRow(eventsZeroBased, true, exprEvaluatorContext);
            }

            return(result);
        }
コード例 #2
0
        // No filter and with select clause
        public virtual object Evaluate(
            EventBean[] eventsPerStream,
            bool newData,
            ICollection <EventBean> matchingEvents,
            ExprEvaluatorContext exprEvaluatorContext,
            ExprSubselectRowNode parent)
        {
            if (matchingEvents.Count > 1)
            {
                Log.Warn(parent.MultirowMessage);
                return(null);
            }

            EventBean[] events = EventBeanUtility.AllocatePerStreamShift(eventsPerStream);
            events[0] = EventBeanUtility.GetNonemptyFirstEvent(matchingEvents);

            object result;

            if (parent.SelectClauseEvaluator.Length == 1)
            {
                result = parent.SelectClauseEvaluator[0].Evaluate(new EvaluateParams(events, true, exprEvaluatorContext));
            }
            else
            {
                // we are returning a Map here, not object-array, preferring the self-describing structure
                result = parent.EvaluateRow(events, true, exprEvaluatorContext);
            }
            return(result);
        }
        public override ICollection <EventBean> EvaluateGetCollEvents(
            EventBean[] eventsPerStream,
            bool newData,
            ICollection <EventBean> matchingEvents,
            ExprEvaluatorContext context,
            ExprSubselectRowNode parent)
        {
            ICollection <object> groupKeys = parent.SubselectAggregationService.GetGroupKeys(context);

            if (groupKeys.IsEmpty())
            {
                return(null);
            }
            ICollection <EventBean> events = new ArrayDeque <EventBean>(groupKeys.Count);

            foreach (object groupKey in groupKeys)
            {
                parent.SubselectAggregationService.SetCurrentAccess(groupKey, context.AgentInstanceId, null);
                IDictionary <string, object> row = parent.EvaluateRow(null, true, context);
                EventBean @event = parent.subselectMultirowType.EventAdapterService.AdapterForTypedMap(
                    row, parent.subselectMultirowType.EventType);
                events.Add(@event);
            }
            return(events);
        }
コード例 #4
0
        public Object Evaluate(
            EventBean[] eventsPerStream,
            bool newData,
            ICollection <EventBean> matchingEvents,
            ExprEvaluatorContext exprEvaluatorContext,
            ExprSubselectRowNode parent)
        {
            EventBean[] eventsZeroBased = EventBeanUtility.AllocatePerStreamShift(eventsPerStream);
            var         pass            = parent.HavingExpr.Evaluate(new EvaluateParams(eventsZeroBased, newData, exprEvaluatorContext));

            if ((pass == null) || (false.Equals(pass)))
            {
                return(null);
            }

            Object result;

            if (parent.SelectClauseEvaluator.Length == 1)
            {
                result = parent.SelectClauseEvaluator[0].Evaluate(new EvaluateParams(eventsZeroBased, true, exprEvaluatorContext));
            }
            else
            {
                // we are returning a Map here, not object-array, preferring the self-describing structure
                result = parent.EvaluateRow(eventsZeroBased, true, exprEvaluatorContext);
            }

            return(result);
        }
        public override ICollection<EventBean> EvaluateGetCollEvents(
            EventBean[] eventsPerStream,
            bool newData,
            ICollection<EventBean> matchingEvents,
            ExprEvaluatorContext context,
            ExprSubselectRowNode parent)
        {
            AggregationService aggregationService =
                parent.SubselectAggregationService.GetContextPartitionAggregationService(context.AgentInstanceId);
            ICollection<object> groupKeys = aggregationService.GetGroupKeys(context);
            if (groupKeys.IsEmpty())
            {
                return null;
            }
            var events = EventBeanUtility.AllocatePerStreamShift(eventsPerStream);
            var evaluateParams = new EvaluateParams(events, newData, context);
            var result = new ArrayDeque<EventBean>(groupKeys.Count);
            foreach (object groupKey in groupKeys)
            {
                aggregationService.SetCurrentAccess(groupKey, context.AgentInstanceId, null);

                var pass = _havingClause.Evaluate(evaluateParams);
                if (true.Equals(pass))
                {
                    IDictionary<string, object> row = parent.EvaluateRow(events, true, context);
                    EventBean @event = parent.SubselectMultirowType.EventAdapterService.AdapterForTypedMap(
                        row, parent.SubselectMultirowType.EventType);
                    result.Add(@event);
                }
            }
            return result;
        }
コード例 #6
0
        // No filter and with select clause
        public virtual EventBean EvaluateGetEventBean(EventBean[] eventsPerStream, bool newData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext context, ExprSubselectRowNode parent)
        {
            var events = EventBeanUtility.AllocatePerStreamShift(eventsPerStream);

            events[0] = EventBeanUtility.GetNonemptyFirstEvent(matchingEvents);
            var row = parent.EvaluateRow(events, true, context);

            return(parent.SubselectMultirowType.EventAdapterService.AdapterForTypedMap(row, parent.SubselectMultirowType.EventType));
        }
        // Filter and Select
        public EventBean EvaluateGetEventBean(EventBean[] eventsPerStream, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext context, ExprSubselectRowNode parent)
        {
            var events          = EventBeanUtility.AllocatePerStreamShift(eventsPerStream);
            var subSelectResult = ExprSubselectRowNodeUtility.EvaluateFilterExpectSingleMatch(events, isNewData, matchingEvents, context, parent);

            if (subSelectResult == null)
            {
                return(null);
            }
            var row = parent.EvaluateRow(events, true, context);

            return(parent.subselectMultirowType.EventAdapterService.AdapterForTypedMap(row, parent.subselectMultirowType.EventType));
        }
コード例 #8
0
        // No filter and with select clause
        public virtual ICollection <EventBean> EvaluateGetCollEvents(
            EventBean[] eventsPerStream,
            bool newData,
            ICollection <EventBean> matchingEvents,
            ExprEvaluatorContext context,
            ExprSubselectRowNode parent)
        {
            if (matchingEvents.Count == 0)
            {
                return(Collections.GetEmptyList <EventBean>());
            }

            // when selecting a single property in the select clause that provides a fragment
            if (parent.subselectMultirowType == null)
            {
                ICollection <EventBean> eventsX = new ArrayDeque <EventBean>(matchingEvents.Count);
                var eval = (ExprIdentNodeEvaluator)parent.SelectClauseEvaluator[0];
                EventPropertyGetter getter = eval.Getter;
                foreach (EventBean subselectEvent in matchingEvents)
                {
                    object fragment = getter.GetFragment(subselectEvent);
                    if (fragment == null)
                    {
                        continue;
                    }
                    eventsX.Add((EventBean)fragment);
                }
                return(eventsX);
            }

            // when selecting a combined output row that contains multiple fields
            ICollection <EventBean> events = new ArrayDeque <EventBean>(matchingEvents.Count);

            EventBean[] eventsPerStreamEval = EventBeanUtility.AllocatePerStreamShift(eventsPerStream);
            foreach (EventBean subselectEvent in matchingEvents)
            {
                eventsPerStreamEval[0] = subselectEvent;
                var       row    = parent.EvaluateRow(eventsPerStreamEval, true, context);
                EventBean @event = parent.subselectMultirowType.EventAdapterService.AdapterForTypedMap(
                    row, parent.subselectMultirowType.EventType);
                events.Add(@event);
            }
            return(events);
        }