Ejemplo n.º 1
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);
            }
        }
Ejemplo n.º 2
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);
            }
        }