Exemple #1
0
        public Object EvaluateEnumMethod(EventBean[] eventsLambda, ICollection <object> target, bool isNewData, ExprEvaluatorContext context)
        {
            var result = new LinkedHashMap <object, ICollection <object> >();

            var resultEvent = new ObjectArrayEventBean(new Object[1], _resultEventType);
            var values      = target;

            foreach (Object next in values)
            {
                resultEvent.Properties[0]     = next;
                eventsLambda[StreamNumLambda] = resultEvent;
                var key = InnerExpression.Evaluate(new EvaluateParams(eventsLambda, isNewData, context));

                resultEvent.Properties[0] = next;
                var entry = _secondExpression.Evaluate(new EvaluateParams(eventsLambda, isNewData, context));

                var value = result.Get(key);
                if (value == null)
                {
                    value = new List <object>();
                    result.Put(key, value);
                }
                value.Add(entry);
            }

            return(result);
        }
        public override View MakeView(AgentInstanceViewFactoryChainContext agentInstanceViewFactoryContext)
        {
            var builtinBean           = new ObjectArrayEventBean(ExpressionViewOAFieldEnumExtensions.GetPrototypeOA(), BuiltinMapType);
            var viewUpdatedCollection = agentInstanceViewFactoryContext.StatementContext.ViewServicePreviousFactory.GetOptPreviousExprRelativeAccess(agentInstanceViewFactoryContext);

            return(new ExpressionBatchView(this, viewUpdatedCollection, ExpiryExpressionEvaluator, AggregationServiceFactoryDesc, builtinBean, VariableNames, agentInstanceViewFactoryContext));
        }
Exemple #3
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            if (enumcoll.IsEmpty()) {
                return Collections.GetEmptyMap<object, object>();
            }

            IDictionary<object, ICollection<object>> result = new LinkedHashMap<object, ICollection<object>>();

            var values = (ICollection<object>) enumcoll;
            var resultEvent = new ObjectArrayEventBean(new object[1], _forge.resultEventType);
            eventsLambda[_forge.StreamNumLambda] = resultEvent;
            var props = resultEvent.Properties;

            foreach (var next in values) {
                props[0] = next;

                var key = _innerExpression.Evaluate(eventsLambda, isNewData, context);

                var value = result.Get(key);
                if (value == null) {
                    value = new List<object>();
                    result.Put(key, value);
                }

                value.Add(next);
            }

            return result;
        }
Exemple #4
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            var agg =
                new EnumAverageDecimalEventsForgeEval.AggregatorAvgDecimal(_forge.optionalMathContext);
            var resultEvent = new ObjectArrayEventBean(new object[1], _forge.resultEventType);
            eventsLambda[_forge.StreamNumLambda] = resultEvent;
            var props = resultEvent.Properties;

            var values = (ICollection<object>) enumcoll;
            foreach (var next in values) {
                props[0] = next;

                var num = _innerExpression.Evaluate(eventsLambda, isNewData, context);
                if (num == null) {
                    continue;
                }

                agg.Enter(num);
            }

            return agg.Value;
        }
        public override View MakeView(AgentInstanceViewFactoryChainContext agentInstanceViewFactoryContext)
        {
            var builtinBean  = new ObjectArrayEventBean(ExpressionViewOAFieldEnumExtensions.GetPrototypeOA(), BuiltinMapType);
            var randomAccess = ViewServiceHelper.GetOptPreviousExprRandomAccess(agentInstanceViewFactoryContext);

            return(new ExpressionWindowView(this, randomAccess, ExpiryExpression.ExprEvaluator, AggregationServiceFactoryDesc, builtinBean, VariableNames, agentInstanceViewFactoryContext));
        }
Exemple #6
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            if (enumcoll.IsEmpty()) {
                return false;
            }

            var evalEvent = new ObjectArrayEventBean(new object[1], _forge.type);
            eventsLambda[_forge.StreamNumLambda] = evalEvent;
            var props = evalEvent.Properties;

            foreach (var next in enumcoll) {
                props[0] = next;

                var pass = _innerExpression.Evaluate(eventsLambda, isNewData, context);
                if (pass != null && ((Boolean) pass)) {
                    return true;
                }
            }

            return false;
        }
Exemple #7
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            if (enumcoll.Count <= 1) {
                return enumcoll;
            }

            IDictionary<IComparable, object> distinct = new LinkedHashMap<IComparable, object>();
            var resultEvent = new ObjectArrayEventBean(new object[1], _forge.resultEventType);
            eventsLambda[_forge.StreamNumLambda] = resultEvent;
            var props = resultEvent.Properties;

            var values = enumcoll;
            foreach (var next in values) {
                props[0] = next;

                var comparable = (IComparable) _innerExpression.Evaluate(eventsLambda, isNewData, context);
                if (!distinct.ContainsKey(comparable)) {
                    distinct.Put(comparable, next);
                }
            }

            return distinct.Values;
        }
Exemple #8
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            var sum = 0d;
            var count = 0;
            var resultEvent = new ObjectArrayEventBean(new object[1], _forge.resultEventType);
            eventsLambda[_forge.StreamNumLambda] = resultEvent;
            var props = resultEvent.Properties;

            var values = (ICollection<object>) enumcoll;
            foreach (var next in values) {
                props[0] = next;

                var num = _innerExpression.Evaluate(eventsLambda, isNewData, context);
                if (num == null) {
                    continue;
                }

                count++;
                sum += num.AsDouble();
            }

            if (count == 0) {
                return null;
            }

            return sum / count;
        }
Exemple #9
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            if (enumcoll.IsEmpty()) {
                return enumcoll;
            }

            var resultEvent = new ObjectArrayEventBean(new object[1], _forge.resultEventType);
            eventsLambda[_forge.StreamNumLambda] = resultEvent;
            var props = resultEvent.Properties;
            Deque<object> result = new ArrayDeque<object>(enumcoll.Count);

            var values = (ICollection<object>) enumcoll;
            foreach (var next in values) {
                props[0] = next;

                var item = _innerExpression.Evaluate(eventsLambda, isNewData, context);
                if (item != null) {
                    result.Add(item);
                }
            }

            return result;
        }
Exemple #10
0
        public Object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection <object> target,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            if (target == null || target.Count < 2)
            {
                return(target);
            }

            var evaluateParams = new EvaluateParams(eventsLambda, isNewData, context);
            var set            = new LinkedHashMap <IComparable, Object>();
            var resultEvent    = new ObjectArrayEventBean(new Object[1], _resultEventType);
            var values         = target;

            foreach (Object next in values)
            {
                resultEvent.Properties[0]     = next;
                eventsLambda[StreamNumLambda] = resultEvent;

                var comparable = (IComparable)InnerExpression.Evaluate(evaluateParams);
                if (!set.ContainsKey(comparable))
                {
                    set.Put(comparable, next);
                }
            }
            return(set.Values);
        }
Exemple #11
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            if (enumcoll.IsEmpty()) {
                return new EmptyDictionary<object, object>();
            }

            IDictionary<object, object> map = new Dictionary<object, object>();
            var resultEvent = new ObjectArrayEventBean(new object[1], _forge.resultEventType);
            eventsLambda[_forge.StreamNumLambda] = resultEvent;
            var props = resultEvent.Properties;

            var values = enumcoll;
            foreach (var next in values) {
                props[0] = next;

                var key = _innerExpression.Evaluate(eventsLambda, isNewData, context);
                var value = _secondExpression.Evaluate(eventsLambda, isNewData, context);
                map.Put(key, value);
            }

            return map;
        }
Exemple #12
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            if (enumcoll.IsEmpty()) {
                return enumcoll;
            }

            var result = new ArrayDeque<object>();
            var evalEvent = new ObjectArrayEventBean(new object[1], _forge.evalEventType);
            eventsLambda[_forge.streamNumLambda] = evalEvent;
            var evalProps = evalEvent.Properties;
            var indexEvent = new ObjectArrayEventBean(new object[1], _forge.indexEventType);
            eventsLambda[_forge.streamNumLambda + 1] = indexEvent;
            var indexProps = indexEvent.Properties;

            var count = -1;
            foreach (var next in enumcoll) {
                count++;
                evalProps[0] = next;
                indexProps[0] = count;

                var pass = _innerExpression.Evaluate(eventsLambda, isNewData, context);
                if (pass == null || false.Equals(pass)) {
                    continue;
                }

                result.Add(next);
            }

            return result;
        }
Exemple #13
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            var count = 0;

            var evalEvent = new ObjectArrayEventBean(new object[1], _forge.type);
            eventsLambda[_forge.StreamNumLambda] = evalEvent;
            var props = evalEvent.Properties;

            foreach (var next in enumcoll) {
                props[0] = next;

                var pass = _innerExpression.Evaluate(eventsLambda, isNewData, context);
                if (pass == null || false.Equals(pass)) {
                    continue;
                }

                count++;
            }

            return count;
        }
Exemple #14
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            if (enumcoll.IsEmpty()) {
                return null;
            }

            IDictionary<object, int> items = new LinkedHashMap<object, int>();
            var values = (ICollection<object>) enumcoll;

            var resultEvent = new ObjectArrayEventBean(new object[1], _forge.resultEventType);
            eventsLambda[_forge.StreamNumLambda] = resultEvent;
            var props = resultEvent.Properties;

            foreach (var next in values) {
                props[0] = next;

                var item = _innerExpression.Evaluate(eventsLambda, isNewData, context);
                int? existing = items.Get(item);

                if (existing == null) {
                    existing = 1;
                }
                else {
                    existing++;
                }

                items.Put(item, existing.Value);
            }

            return EnumMostLeastFrequentEventForgeEval.GetEnumMostLeastFrequentResult(items, _forge.isMostFrequent);
        }
        public Object EvaluateEnumMethod(EventBean[] eventsLambda,
                                         ICollection <object> target,
                                         bool isNewData,
                                         ExprEvaluatorContext context)
        {
            double sum                  = 0d;
            int    count                = 0;
            var    resultEvent          = new ObjectArrayEventBean(new Object[1], _resultEventType);
            ICollection <object> values = target;

            foreach (object next in values)
            {
                resultEvent.Properties[0]     = next;
                eventsLambda[StreamNumLambda] = resultEvent;

                object num = InnerExpression.Evaluate(new EvaluateParams(eventsLambda, isNewData, context));
                if (num == null)
                {
                    continue;
                }
                count++;
                sum += num.AsDouble();
            }

            if (count == 0)
            {
                return(null);
            }
            return(sum / count);
        }
        public override Object EvaluateEnumMethod(EventBean[] eventsLambda, ICollection <object> target, bool isNewData, ExprEvaluatorContext context)
        {
            if (target.IsEmpty())
            {
                return(target);
            }

            var result     = new LinkedList <Object>();
            var indexEvent = new ObjectArrayEventBean(new Object[1], IndexEventType);

            int count = -1;

            foreach (EventBean next in target)
            {
                count++;

                indexEvent.Properties[0]          = count;
                eventsLambda[StreamNumLambda]     = next;
                eventsLambda[StreamNumLambda + 1] = indexEvent;

                var pass = (bool?)InnerExpression.Evaluate(new EvaluateParams(eventsLambda, isNewData, context));
                if (!pass.HasValue || !pass.Value)
                {
                    continue;
                }

                result.AddLast(next);
            }

            return(result);
        }
Exemple #17
0
        public object EvaluateEnumMethod(
            EventBean[] eventsLambda,
            ICollection<object> enumcoll,
            bool isNewData,
            ExprEvaluatorContext context)
        {
            var value = _initialization.Evaluate(eventsLambda, isNewData, context);

            if (enumcoll.IsEmpty()) {
                return value;
            }

            var beans = (ICollection<EventBean>) enumcoll;
            var resultEvent = new ObjectArrayEventBean(new object[1], _forge.ResultEventType);
            eventsLambda[_forge.StreamNumLambda] = resultEvent;
            var props = resultEvent.Properties;

            foreach (var next in beans) {
                props[0] = value;
                eventsLambda[_forge.StreamNumLambda + 1] = next;
                value = _innerExpression.Evaluate(eventsLambda, isNewData, context);
            }

            return value;
        }
Exemple #18
0
        public override Object EvaluateEnumMethod(EventBean[] eventsLambda, ICollection <object> target, bool isNewData, ExprEvaluatorContext context)
        {
            if (target.IsEmpty())
            {
                return(target);
            }

            var result    = new LinkedList <Object>();
            var evalEvent = new ObjectArrayEventBean(new Object[1], Type);

            foreach (Object next in target)
            {
                evalEvent.Properties[0]       = next;
                eventsLambda[StreamNumLambda] = evalEvent;

                var pass = (bool?)InnerExpression.Evaluate(new EvaluateParams(eventsLambda, isNewData, context));
                if (!pass.GetValueOrDefault(false))
                {
                    continue;
                }

                result.AddLast(next);
            }

            return(result);
        }
        public Object EvaluateEnumMethod(EventBean[] eventsLambda, ICollection <object> target, bool isNewData, ExprEvaluatorContext context)
        {
            var items  = new LinkedHashMap <Object, int?>();
            var values = target;

            var resultEvent = new ObjectArrayEventBean(new Object[1], _resultEventType);

            foreach (Object next in values)
            {
                resultEvent.Properties[0]     = next;
                eventsLambda[StreamNumLambda] = resultEvent;

                var item = InnerExpression.Evaluate(new EvaluateParams(eventsLambda, isNewData, context));

                int?existing;
                if (!items.TryGetValue(item, out existing))
                {
                    existing = 1;
                }
                else
                {
                    existing++;
                }
                items.Put(item, existing);
            }

            return(EnumEvalMostLeastFrequentEvent.GetResult(items, _isMostFrequent));
        }
Exemple #20
0
        public void UpdateTable(
            ICollection <EventBean> eventsUnsafeIter,
            TableStateInstance instance,
            EventBean[] eventsPerStream,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            // update (no-copy unless original values required)
            foreach (EventBean @event in eventsUnsafeIter)
            {
                eventsPerStream[0] = @event;
                var updatedEvent = (ObjectArrayBackedEventBean)@event;

                // if "initial.property" is part of the assignment expressions, provide initial value event
                if (_updateHelper.IsRequiresStream2InitialValueEvent)
                {
                    var prev = new object[updatedEvent.Properties.Length];
                    Array.Copy(updatedEvent.Properties, 0, prev, 0, prev.Length);
                    eventsPerStream[2] = new ObjectArrayEventBean(prev, updatedEvent.EventType);
                }

                // apply in-place updates
                _updateHelper.UpdateNoCopy(updatedEvent, eventsPerStream, exprEvaluatorContext);
                instance.HandleRowUpdated(updatedEvent);
            }
        }
Exemple #21
0
        public Object EvaluateEnumMethod(EventBean[] eventsLambda, ICollection <object> target, bool isNewData, ExprEvaluatorContext context)
        {
            if (target.IsEmpty())
            {
                return(target);
            }

            var resultEvent = new ObjectArrayEventBean(new Object[1], _resultEventType);
            var values      = (ICollection <Object>)target;
            var queue       = new LinkedList <object>();

            foreach (Object next in values)
            {
                resultEvent.Properties[0]     = next;
                eventsLambda[StreamNumLambda] = resultEvent;

                var item = InnerExpression.Evaluate(new EvaluateParams(eventsLambda, isNewData, context));
                if (item != null)
                {
                    queue.AddLast(item);
                }
            }

            return(queue);
        }
Exemple #22
0
 public ExpressionBatchView(
     ExpressionBatchViewFactory factory,
     ViewUpdatedCollection viewUpdatedCollection,
     ObjectArrayEventBean builtinEventProps,
     AgentInstanceViewFactoryChainContext agentInstanceContext)
     : base(factory, viewUpdatedCollection, builtinEventProps, agentInstanceContext)
 {
 }
Exemple #23
0
        public override Object EvaluateEnumMethod(EventBean[] eventsLambda, ICollection <object> target, bool isNewData, ExprEvaluatorContext context)
        {
            if (target.IsEmpty())
            {
                return(target);
            }

            var evalEvent  = new ObjectArrayEventBean(new Object[1], EvalEventType);
            var indexEvent = new ObjectArrayEventBean(new Object[1], IndexEventType);

            if (target.Count == 1)
            {
                Object item = target.First();

                evalEvent.Properties[0]       = item;
                eventsLambda[StreamNumLambda] = evalEvent;

                indexEvent.Properties[0]          = 0;
                eventsLambda[StreamNumLambda + 1] = indexEvent;

                var pass = (bool?)InnerExpression.Evaluate(new EvaluateParams(eventsLambda, isNewData, context));
                if (!pass.GetValueOrDefault(false))
                {
                    return(Collections.GetEmptyList <object>());
                }
                return(Collections.SingletonList(item));
            }

            var size  = target.Count;
            var all   = new Object[size];
            var count = 0;

            foreach (Object item in target)
            {
                all[count++] = item;
            }

            var result = new LinkedList <Object>();
            int index  = 0;

            for (int i = all.Length - 1; i >= 0; i--)
            {
                evalEvent.Properties[0]       = all[i];
                eventsLambda[StreamNumLambda] = evalEvent;

                indexEvent.Properties[0]          = index++;
                eventsLambda[StreamNumLambda + 1] = indexEvent;

                var pass = (bool?)InnerExpression.Evaluate(new EvaluateParams(eventsLambda, isNewData, context));
                if (!pass.GetValueOrDefault(false))
                {
                    break;
                }
                result.AddFirst(all[i]);
            }

            return(result);
        }
        protected ExpressionViewBase(
            ViewUpdatedCollection viewUpdatedCollection,
            ExprEvaluator expiryExpression,
            AggregationServiceFactoryDesc aggregationServiceFactoryDesc,
            ObjectArrayEventBean builtinEventProps,
            ISet <String> variableNames,
            AgentInstanceViewFactoryChainContext agentInstanceContext)
        {
            ViewUpdatedCollection = viewUpdatedCollection;
            ExpiryExpression      = expiryExpression;
            BuiltinEventProps     = builtinEventProps;
            EventsPerStream       = new EventBean[] { null, builtinEventProps };
            VariableNames         = variableNames;
            AgentInstanceContext  = agentInstanceContext;

            if (variableNames != null && !variableNames.IsEmpty())
            {
                foreach (String variable in variableNames)
                {
                    var variableName    = variable;
                    var agentInstanceId = agentInstanceContext.AgentInstanceId;
                    var variableService = agentInstanceContext.StatementContext.VariableService;

                    agentInstanceContext.StatementContext.VariableService.RegisterCallback(variable, agentInstanceId, Update);
                    agentInstanceContext.AddTerminationCallback(
                        new ProxyStopCallback(() => variableService.UnregisterCallback(variableName, agentInstanceId, Update)));
                }

                ScheduleHandleCallback callback = new ProxyScheduleHandleCallback
                {
                    ProcScheduledTrigger = extensionServicesContext => Instrument.With(
                        i => i.QViewScheduledEval(this, ViewName),
                        i => i.AViewScheduledEval(),
                        ScheduleCallback)
                };
                ScheduleSlot   = agentInstanceContext.StatementContext.ScheduleBucket.AllocateSlot();
                ScheduleHandle = new EPStatementHandleCallback(agentInstanceContext.EpStatementAgentInstanceHandle, callback);
                agentInstanceContext.AddTerminationCallback(this);
            }
            else
            {
                ScheduleSlot   = -1;
                ScheduleHandle = null;
            }

            if (aggregationServiceFactoryDesc != null)
            {
                AggregationService = aggregationServiceFactoryDesc.AggregationServiceFactory.MakeService(
                    agentInstanceContext.AgentInstanceContext,
                    agentInstanceContext.AgentInstanceContext.StatementContext.EngineImportService, false, null);
                AggregateNodes = aggregationServiceFactoryDesc.Expressions;
            }
            else
            {
                AggregationService = null;
                AggregateNodes     = Collections.GetEmptyList <AggregationServiceAggExpressionDesc>();
            }
        }
 public override View MakeView(AgentInstanceViewFactoryChainContext agentInstanceViewFactoryContext)
 {
     var builtinBean = new ObjectArrayEventBean(
         ExpressionViewOAFieldEnumExtensions.GetPrototypeOA(),
         BuiltinMapType);
     var randomAccess =
         agentInstanceViewFactoryContext.StatementContext.ViewServicePreviousFactory
             .GetOptPreviousExprRandomAccess(agentInstanceViewFactoryContext);
     return new ExpressionWindowView(this, randomAccess, builtinBean, agentInstanceViewFactoryContext);
 }
 public OutputConditionPolledExpression(
     OutputConditionPolledExpressionFactory factory,
     OutputConditionPolledExpressionState state,
     AgentInstanceContext agentInstanceContext,
     ObjectArrayEventBean builtinProperties)
 {
     _factory              = factory;
     _state                = state;
     _builtinProperties    = builtinProperties;
     _agentInstanceContext = agentInstanceContext;
 }
Exemple #27
0
 /// <summary>
 /// Constructor creates a moving window extending the specified number of elements into the past.
 /// </summary>
 /// <param name="dataWindowViewFactory">for copying this view in a group-by</param>
 /// <param name="viewUpdatedCollection">is a collection that the view must update when receiving events</param>
 /// <param name="expiryExpression">The expiry expression.</param>
 /// <param name="AggregationServiceFactoryDesc">The aggregation service factory desc.</param>
 /// <param name="builtinEventProps">The builtin event props.</param>
 /// <param name="variableNames">variable names</param>
 /// <param name="AgentInstanceContext">The agent instance context.</param>
 public ExpressionWindowView(ExpressionWindowViewFactory dataWindowViewFactory,
                             ViewUpdatedCollection viewUpdatedCollection,
                             ExprEvaluator expiryExpression,
                             AggregationServiceFactoryDesc AggregationServiceFactoryDesc,
                             ObjectArrayEventBean builtinEventProps,
                             ISet <String> variableNames,
                             AgentInstanceViewFactoryChainContext AgentInstanceContext)
     : base(viewUpdatedCollection, expiryExpression, AggregationServiceFactoryDesc, builtinEventProps, variableNames, AgentInstanceContext)
 {
     _dataWindowViewFactory = dataWindowViewFactory;
 }
Exemple #28
0
        public OutputConditionPolled MakeFromState(AgentInstanceContext agentInstanceContext, OutputConditionPolledState state)
        {
            ObjectArrayEventBean builtinProperties = null;

            if (_oatypeBuiltinProperties != null)
            {
                builtinProperties = new ObjectArrayEventBean(OutputConditionExpressionTypeUtil.OAPrototype, _oatypeBuiltinProperties);
            }
            var expressionState = (OutputConditionPolledExpressionState)state;

            return(new OutputConditionPolledExpression(this, expressionState, agentInstanceContext, builtinProperties));
        }
Exemple #29
0
        public OutputConditionPolled MakeNew(AgentInstanceContext agentInstanceContext)
        {
            ObjectArrayEventBean builtinProperties = null;
            long?lastOutputTimestamp = null;

            if (_oatypeBuiltinProperties != null)
            {
                builtinProperties   = new ObjectArrayEventBean(OutputConditionExpressionTypeUtil.OAPrototype, _oatypeBuiltinProperties);
                lastOutputTimestamp = agentInstanceContext.StatementContext.SchedulingService.Time;
            }
            var state = new OutputConditionPolledExpressionState(0, 0, 0, 0, lastOutputTimestamp);

            return(new OutputConditionPolledExpression(this, state, agentInstanceContext, builtinProperties));
        }
Exemple #30
0
        public void UpdateTable(
            ICollection <EventBean> eventsUnsafeIter,
            TableStateInstance instance,
            EventBean[] eventsPerStream,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            // copy references to array - as it is allowed to pass an index-originating collection
            // and those same indexes are being changed now
            var events = new EventBean[eventsUnsafeIter.Count];
            int count  = 0;

            foreach (EventBean @event in eventsUnsafeIter)
            {
                events[count++] = @event;
            }

            // remove from affected indexes
            foreach (string affectedIndexName in _affectedIndexNames)
            {
                EventTable index = instance.GetIndex(affectedIndexName);
                index.Remove(events, instance.AgentInstanceContext);
            }

            // update (no-copy unless original values required)
            foreach (EventBean @event in events)
            {
                eventsPerStream[0] = @event;
                var updatedEvent = (ObjectArrayBackedEventBean)@event;

                // if "initial.property" is part of the assignment expressions, provide initial value event
                if (_updateHelper.IsRequiresStream2InitialValueEvent)
                {
                    var prev = new object[updatedEvent.Properties.Length];
                    Array.Copy(updatedEvent.Properties, 0, prev, 0, prev.Length);
                    eventsPerStream[2] = new ObjectArrayEventBean(prev, updatedEvent.EventType);
                }

                // apply in-place updates
                _updateHelper.UpdateNoCopy(updatedEvent, eventsPerStream, exprEvaluatorContext);
                instance.HandleRowUpdated(updatedEvent);
            }

            // add to affected indexes
            foreach (string affectedIndexName in _affectedIndexNames)
            {
                EventTable index = instance.GetIndex(affectedIndexName);
                index.Add(events, instance.AgentInstanceContext);
            }
        }