Ejemplo n.º 1
0
        /// <summary>
        /// Resolve a string value by first looking at the parameter value provider and by using the evaluator if one was provided
        /// or returning null if no value was found.
        /// </summary>
        /// <param name="name">parameter name</param>
        /// <param name="optionalEvaluator">evaluator</param>
        /// <param name="context">initialization context</param>
        /// <returns>value</returns>
        /// <throws>EPException if no value was found</throws>
        public static string ResolveStringOptional(
            string name,
            ExprEvaluator optionalEvaluator,
            DataFlowOpInitializeContext context)
        {
            string resolvedFromProvider = TryParameterProvider<string>(name, context);
            if (resolvedFromProvider != null) {
                return resolvedFromProvider;
            }

            return (string) optionalEvaluator?.Evaluate(null, true, context.AgentInstanceContext);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Pre-proces the event.
        /// </summary>
        /// <param name="theEvent">to pre-process</param>
        /// <param name="exprEvaluatorContext">expression evaluation context</param>
        /// <returns>
        /// processed event
        /// </returns>
        public EventBean Process(EventBean theEvent, ExprEvaluatorContext exprEvaluatorContext)
        {
            if (_empty)
            {
                return(theEvent);
            }

            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QUpdateIStream(_entries);
            }

            EventBean oldEvent        = theEvent;
            bool      haveCloned      = false;
            var       eventsPerStream = new EventBean[1];

            eventsPerStream[0] = theEvent;
            InternalEventRouterEntry lastEntry = null;

            for (int i = 0; i < _entries.Length; i++)
            {
                InternalEventRouterEntry entry = _entries[i];
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QUpdateIStreamApply(i, entry);
                }

                ExprEvaluator whereClause = entry.OptionalWhereClause;
                if (whereClause != null)
                {
                    if (InstrumentationHelper.ENABLED)
                    {
                        InstrumentationHelper.Get().QUpdateIStreamApplyWhere();
                    }

                    var result = whereClause.Evaluate(new EvaluateParams(eventsPerStream, true, exprEvaluatorContext));
                    if ((result == null) || (false.Equals(result)))
                    {
                        if (InstrumentationHelper.ENABLED)
                        {
                            InstrumentationHelper.Get().AUpdateIStreamApplyWhere((bool?)result);
                        }
                        if (InstrumentationHelper.ENABLED)
                        {
                            InstrumentationHelper.Get().AUpdateIStreamApply(null, false);
                        }

                        continue;
                    }
                    if (InstrumentationHelper.ENABLED)
                    {
                        InstrumentationHelper.Get().AUpdateIStreamApplyWhere(true);
                    }
                }

                if (entry.IsDrop)
                {
                    return(null);
                }

                // before applying the changes, indicate to last-entries output view
                if (lastEntry != null)
                {
                    InternalRoutePreprocessView view = lastEntry.OutputView;
                    if (view.IsIndicate)
                    {
                        EventBean copied = _copyMethod.Copy(theEvent);
                        view.Indicate(copied, oldEvent);
                        oldEvent = copied;
                    }
                    else
                    {
                        if (_entries[i].OutputView.IsIndicate)
                        {
                            oldEvent = _copyMethod.Copy(theEvent);
                        }
                    }
                }

                // copy event for the first Update that applies
                if (!haveCloned)
                {
                    EventBean copiedEvent = _copyMethod.Copy(theEvent);
                    if (copiedEvent == null)
                    {
                        Log.Warn("Event of type " + theEvent.EventType.Name + " could not be copied");
                        if (InstrumentationHelper.ENABLED)
                        {
                            InstrumentationHelper.Get().AUpdateIStreamApply(null, false);
                        }
                        return(null);
                    }
                    haveCloned         = true;
                    eventsPerStream[0] = copiedEvent;
                    theEvent           = copiedEvent;
                }

                Apply(theEvent, eventsPerStream, entry, exprEvaluatorContext);
                lastEntry = entry;
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AUpdateIStreamApply(theEvent, true);
                }
            }

            if (lastEntry != null)
            {
                InternalRoutePreprocessView view = lastEntry.OutputView;
                if (view.IsIndicate)
                {
                    view.Indicate(theEvent, oldEvent);
                }
            }

            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AUpdateIStream(theEvent, haveCloned);
            }
            return(theEvent);
        }
Ejemplo n.º 3
0
 public object Evaluate(EvaluateParams evaluateParams)
 {
     return(_inner.Evaluate(evaluateParams));
 }
        public object Evaluate(EvaluateParams evaluateParams)
        {
            var result = _eval.Evaluate(evaluateParams);

            return(_widener.Invoke(result));
        }
Ejemplo n.º 5
0
        public override object Evaluate(EventBean[] eventsPerStream, bool isNewData, ExprEvaluatorContext exprEvaluatorContext)
        {
            object groupKey = _groupExpr.Evaluate(new EvaluateParams(eventsPerStream, isNewData, exprEvaluatorContext));

            return(base.EvaluateInternal(groupKey, eventsPerStream, isNewData, exprEvaluatorContext));
        }
        public Object Evaluate(EventBean[] eventsPerStream, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext)
        {
            // Evaluate the value expression
            Object valueLeft = _valueExpr.Evaluate(new EvaluateParams(eventsPerStream, isNewData, exprEvaluatorContext));

            if (matchingEvents == null)
            {
                return(true);
            }
            if (matchingEvents.Count == 0)
            {
                return(true);
            }

            // Evaluation event-per-stream
            var events = new EventBean[eventsPerStream.Length + 1];

            Array.Copy(eventsPerStream, 0, events, 1, eventsPerStream.Length);

            // Filter and check each row.
            var hasRows    = false;
            var hasNullRow = false;

            foreach (EventBean subselectEvent in matchingEvents)
            {
                // Prepare filter expression event list
                events[0] = subselectEvent;

                // Eval filter expression
                if (_filterExpr != null)
                {
                    var pass = (bool?)_filterExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext));
                    if (!pass.GetValueOrDefault(false))
                    {
                        continue;
                    }
                }
                hasRows = true;

                Object valueRight;
                if (_selectClauseExpr != null)
                {
                    valueRight = _selectClauseExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext));
                }
                else
                {
                    valueRight = events[0].Underlying;
                }

                if (valueRight == null)
                {
                    hasNullRow = true;
                }
                else
                {
                    if (valueLeft != null)
                    {
                        if (!_computer.Invoke(valueLeft, valueRight))
                        {
                            return(false);
                        }
                    }
                }
            }

            if (!hasRows)
            {
                return(true);
            }
            if (valueLeft == null)
            {
                return(null);
            }
            if (hasNullRow)
            {
                return(null);
            }
            return(true);
        }
Ejemplo n.º 7
0
        public Object Evaluate(EventBean[] eventsPerStream,
                               bool isNewData,
                               ICollection <EventBean> matchingEvents,
                               ExprEvaluatorContext exprEvaluatorContext)
        {
            if ((matchingEvents == null) || (matchingEvents.Count == 0))
            {
                return(false);
            }

            // Evaluate the child expression
            Object leftResult = _valueExpr.Evaluate(new EvaluateParams(eventsPerStream, isNewData, exprEvaluatorContext));

            // Evaluation event-per-stream
            var events = new EventBean[eventsPerStream.Length + 1];

            Array.Copy(eventsPerStream, 0, events, 1, eventsPerStream.Length);

            if (_isNot)
            {
                // Evaluate each select until we have a match
                bool hasNonNullRow = false;
                bool hasNullRow    = false;
                foreach (EventBean theEvent in matchingEvents)
                {
                    events[0] = theEvent;

                    Object rightResult;
                    if (_selectClauseExpr != null)
                    {
                        rightResult = _selectClauseExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext));
                    }
                    else
                    {
                        rightResult = events[0].Underlying;
                    }

                    // Eval filter expression
                    if (_filterExpr != null)
                    {
                        var pass = (bool?)_filterExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext));
                        if (!pass.GetValueOrDefault(false))
                        {
                            continue;
                        }
                    }
                    if (leftResult == null)
                    {
                        return(null);
                    }

                    if (rightResult != null)
                    {
                        hasNonNullRow = true;
                        if (!_mustCoerce)
                        {
                            if (!leftResult.Equals(rightResult))
                            {
                                return(true);
                            }
                        }
                        else
                        {
                            object left  = _coercer.Invoke(leftResult);
                            object right = _coercer.Invoke(rightResult);
                            if (!left.Equals(right))
                            {
                                return(true);
                            }
                        }
                    }
                    else
                    {
                        hasNullRow = true;
                    }
                }

                if ((!hasNonNullRow) || (hasNullRow))
                {
                    return(null);
                }

                return(false);
            }
            else
            {
                // Evaluate each select until we have a match
                bool hasNonNullRow = false;
                bool hasNullRow    = false;
                foreach (EventBean theEvent in matchingEvents)
                {
                    events[0] = theEvent;

                    Object rightResult;
                    if (_selectClauseExpr != null)
                    {
                        rightResult = _selectClauseExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext));
                    }
                    else
                    {
                        rightResult = events[0].Underlying;
                    }

                    // Eval filter expression
                    if (_filterExpr != null)
                    {
                        var pass = (bool?)_filterExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext));
                        if (!pass.GetValueOrDefault(false))
                        {
                            continue;
                        }
                    }
                    if (leftResult == null)
                    {
                        return(null);
                    }

                    if (rightResult != null)
                    {
                        hasNonNullRow = true;
                        if (!_mustCoerce)
                        {
                            if (leftResult.Equals(rightResult))
                            {
                                return(true);
                            }
                        }
                        else
                        {
                            object left  = _coercer.Invoke(leftResult);
                            object right = _coercer.Invoke(rightResult);
                            if (left.Equals(right))
                            {
                                return(true);
                            }
                        }
                    }
                    else
                    {
                        hasNullRow = true;
                    }
                }

                if ((!hasNonNullRow) || (hasNullRow))
                {
                    return(null);
                }

                return(false);
            }
        }