Esempio n. 1
0
        public void ApplyTable(
            EventBean matchingEvent,
            EventBean[] eventsPerStream,
            TableInstance stateInstance,
            OnExprViewTableChangeHandler changeHandlerAdded,
            OnExprViewTableChangeHandler changeHandlerRemoved,
            AgentInstanceContext agentInstanceContext)
        {
            InstrumentationCommon instrumentationCommon = agentInstanceContext.InstrumentationProvider;
            instrumentationCommon.QInfraMergeWhenThenActions(actions.Count);

            int count = -1;
            foreach (InfraOnMergeAction action in actions) {
                count++;
                instrumentationCommon.QInfraMergeWhenThenActionItem(count, action.Name);

                bool applies = action.IsApplies(eventsPerStream, agentInstanceContext);
                if (applies) {
                    action.Apply(
                        matchingEvent,
                        eventsPerStream,
                        stateInstance,
                        changeHandlerAdded,
                        changeHandlerRemoved,
                        agentInstanceContext);
                }

                instrumentationCommon.AInfraMergeWhenThenActionItem(applies);
            }

            instrumentationCommon.AInfraMergeWhenThenActions();
        }
Esempio n. 2
0
        public override void Apply(
            EventBean matchingEvent,
            EventBean[] eventsPerStream,
            TableInstance tableStateInstance,
            OnExprViewTableChangeHandler changeHandlerAdded,
            OnExprViewTableChangeHandler changeHandlerRemoved,
            AgentInstanceContext agentInstanceContext)
        {
            var theEvent = insertHelper.Process(eventsPerStream, true, true, agentInstanceContext);
            if (!route) {
                var aggs = tableStateInstance.Table.AggregationRowFactory.Make();
                ((Array) theEvent.Underlying).SetValue(aggs, 0);
                tableStateInstance.AddEvent(theEvent);
                changeHandlerAdded?.Add(theEvent, eventsPerStream, true, agentInstanceContext);

                return;
            }
            
            if (insertIntoTable != null) {
                var tableInstance = insertIntoTable.GetTableInstance(agentInstanceContext.AgentInstanceId);
                tableInstance.AddEventUnadorned(theEvent);
                return;
            }

            if (audit) {
                agentInstanceContext.AuditProvider.Insert(theEvent, agentInstanceContext);
            }

            agentInstanceContext.InternalEventRouter.Route(theEvent, agentInstanceContext, false);
        }
Esempio n. 3
0
 public abstract void Apply(
     EventBean matchingEvent,
     EventBean[] eventsPerStream,
     TableInstance tableStateInstance,
     OnExprViewTableChangeHandler changeHandlerAdded,
     OnExprViewTableChangeHandler changeHandlerRemoved,
     AgentInstanceContext agentInstanceContext);
Esempio n. 4
0
 public override void Apply(
     EventBean matchingEvent,
     EventBean[] eventsPerStream,
     TableInstance tableStateInstance,
     OnExprViewTableChangeHandler changeHandlerAdded,
     OnExprViewTableChangeHandler changeHandlerRemoved,
     AgentInstanceContext agentInstanceContext)
 {
     tableStateInstance.DeleteEvent(matchingEvent);
     changeHandlerRemoved?.Add(matchingEvent, eventsPerStream, false, agentInstanceContext);
 }
Esempio n. 5
0
        public override void Apply(
            EventBean matchingEvent,
            EventBean[] eventsPerStream,
            TableInstance tableStateInstance,
            OnExprViewTableChangeHandler changeHandlerAdded,
            OnExprViewTableChangeHandler changeHandlerRemoved,
            AgentInstanceContext agentInstanceContext)
        {
            changeHandlerRemoved?.Add(matchingEvent, eventsPerStream, false, agentInstanceContext);

            tableUpdateStrategy.UpdateTable(
                Collections.SingletonList(matchingEvent),
                tableStateInstance,
                eventsPerStream,
                agentInstanceContext);
            changeHandlerAdded?.Add(matchingEvent, eventsPerStream, false, agentInstanceContext);
        }
Esempio n. 6
0
        public override void Update(
            EventBean[] newData,
            EventBean[] oldData)
        {
            agentInstanceContext.InstrumentationProvider.QInfraOnAction(
                OnTriggerType.ON_MERGE,
                newData,
                CollectionUtil.EVENTBEANARRAY_EMPTY);

            if (newData == null) {
                agentInstanceContext.InstrumentationProvider.AInfraOnAction();
                return;
            }

            var statementResultService = agentInstanceContext.StatementResultService;
            var postResultsToListeners = statementResultService.IsMakeNatural || statementResultService.IsMakeSynthetic;
            OnExprViewTableChangeHandler changeHandlerAdded = null;
            if (postResultsToListeners) {
                changeHandlerAdded = new OnExprViewTableChangeHandler(tableInstance.Table);
            }

            var eventsPerStream =
                new EventBean[3]; // first:named window, second: trigger, third:before-update (optional)
            foreach (var trigger in newData) {
                eventsPerStream[1] = trigger;
                parent.OnMergeHelper.InsertUnmatched.Apply(
                    null,
                    eventsPerStream,
                    tableInstance,
                    changeHandlerAdded,
                    null,
                    agentInstanceContext);

                // The on-delete listeners receive the events deleted, but only if there is interest
                if (postResultsToListeners) {
                    var postedNew = changeHandlerAdded.Events;
                    if (postedNew != null) {
                        Child.Update(postedNew, null);
                    }
                }
            }

            agentInstanceContext.InstrumentationProvider.AInfraOnAction();
        }
Esempio n. 7
0
        public override void HandleMatching(
            EventBean[] triggerEvents,
            EventBean[] matchingEvents)
        {
            var instrumentationCommon = agentInstanceContext.InstrumentationProvider;
            instrumentationCommon.QInfraOnAction(OnTriggerType.ON_MERGE, triggerEvents, matchingEvents);

            var eventsPerStream = new EventBean[3]; // first:table, second: trigger, third:before-update (optional)

            var statementResultService = agentInstanceContext.StatementResultService;
            var postResultsToListeners = statementResultService.IsMakeNatural || statementResultService.IsMakeSynthetic;
            OnExprViewTableChangeHandler changeHandlerRemoved = null;
            OnExprViewTableChangeHandler changeHandlerAdded = null;
            if (postResultsToListeners) {
                changeHandlerRemoved = new OnExprViewTableChangeHandler(tableInstance.Table);
                changeHandlerAdded = new OnExprViewTableChangeHandler(tableInstance.Table);
            }

            if (matchingEvents == null || matchingEvents.Length == 0) {
                var unmatched = parent.OnMergeHelper.Unmatched;

                foreach (var triggerEvent in triggerEvents) {
                    eventsPerStream[1] = triggerEvent;
                    instrumentationCommon.QInfraMergeWhenThens(false, triggerEvent, unmatched.Count);

                    var count = -1;
                    foreach (var action in unmatched) {
                        count++;
                        instrumentationCommon.QInfraMergeWhenThenItem(false, count);

                        if (!action.IsApplies(eventsPerStream, ExprEvaluatorContext)) {
                            instrumentationCommon.AInfraMergeWhenThenItem(false, false);
                            continue;
                        }

                        action.ApplyTable(
                            null,
                            eventsPerStream,
                            tableInstance,
                            changeHandlerAdded,
                            changeHandlerRemoved,
                            agentInstanceContext);
                        instrumentationCommon.AInfraMergeWhenThenItem(false, true);
                        break; // apply no other actions
                    }

                    instrumentationCommon.AInfraMergeWhenThens(false);
                }
            }
            else {
                var matched = parent.OnMergeHelper.Matched;

                foreach (var triggerEvent in triggerEvents) {
                    eventsPerStream[1] = triggerEvent;
                    instrumentationCommon.QInfraMergeWhenThens(true, triggerEvent, matched.Count);

                    foreach (var matchingEvent in matchingEvents) {
                        eventsPerStream[0] = matchingEvent;

                        var count = -1;
                        foreach (var action in matched) {
                            count++;
                            instrumentationCommon.QInfraMergeWhenThenItem(true, count);

                            if (!action.IsApplies(eventsPerStream, ExprEvaluatorContext)) {
                                instrumentationCommon.AInfraMergeWhenThenItem(true, false);
                                continue;
                            }

                            action.ApplyTable(
                                matchingEvent,
                                eventsPerStream,
                                tableInstance,
                                changeHandlerAdded,
                                changeHandlerRemoved,
                                agentInstanceContext);
                            instrumentationCommon.AInfraMergeWhenThenItem(true, true);
                            break; // apply no other actions
                        }
                    }

                    instrumentationCommon.AInfraMergeWhenThens(true);
                }
            }

            // The on-delete listeners receive the events deleted, but only if there is interest
            if (postResultsToListeners) {
                var postedNew = changeHandlerAdded.Events;
                var postedOld = changeHandlerRemoved.Events;
                if (postedNew != null || postedOld != null) {
                    Child.Update(postedNew, postedOld);
                }
            }

            instrumentationCommon.AInfraOnAction();
        }