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(); }
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); }
public abstract void Apply( EventBean matchingEvent, EventBean[] eventsPerStream, TableInstance tableStateInstance, OnExprViewTableChangeHandler changeHandlerAdded, OnExprViewTableChangeHandler changeHandlerRemoved, AgentInstanceContext agentInstanceContext);
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); }
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); }
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(); }
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(); }