public override void Apply(EventBean matchingEvent, EventBean[] eventsPerStream, OneEventCollection newData, OneEventCollection oldData, ExprEvaluatorContext exprEvaluatorContext) { EventBean theEvent = _insertHelper.Process(eventsPerStream, true, true, exprEvaluatorContext); if (_insertIntoTableName != null) { TableStateInstance tableStateInstance = _tableService.GetState(_insertIntoTableName, exprEvaluatorContext.AgentInstanceId); if (_audit) { AuditPath.AuditInsertInto(tableStateInstance.AgentInstanceContext.EngineURI, _statementHandle.StatementName, theEvent); } tableStateInstance.AddEventUnadorned(theEvent); return; } if (_internalEventRouter == null) { newData.Add(theEvent); return; } if (_audit) { AuditPath.AuditInsertInto(_internalEventRouteDest.EngineURI, _statementHandle.StatementName, theEvent); } _internalEventRouter.Route(theEvent, _statementHandle, _internalEventRouteDest, exprEvaluatorContext, false); }
private void Route(EventBean[] events, ExprEvaluatorContext exprEvaluatorContext) { foreach (var routed in events) { if (routed is NaturalEventBean) { var natural = (NaturalEventBean)routed; if (_audit) { AuditPath.AuditInsertInto(_agentInstanceContext.EngineURI, _agentInstanceContext.StatementName, natural.OptionalSynthetic); } if (_tableStateInstance != null) { _tableStateInstance.AddEventUnadorned(natural.OptionalSynthetic); } else { _parent.InternalEventRouter.Route(natural.OptionalSynthetic, _parent.EpStatementHandle, _agentInstanceContext.StatementContext.InternalEventEngineRouteDest, exprEvaluatorContext, _parent.IsAddToFront); } } else { if (_audit) { AuditPath.AuditInsertInto(_agentInstanceContext.EngineURI, _agentInstanceContext.StatementName, routed); } if (_tableStateInstance != null) { ExprTableEvalLockUtil.ObtainLockUnless(_tableStateInstance.TableLevelRWLock.WriteLock, exprEvaluatorContext); _tableStateInstance.AddEventUnadorned(routed); } else { _parent.InternalEventRouter.Route(routed, _parent.EpStatementHandle, _agentInstanceContext.StatementContext.InternalEventEngineRouteDest, exprEvaluatorContext, _parent.IsAddToFront); } } } }
private void Route(EventBean routed, int index, ExprEvaluatorContext exprEvaluatorContext) { if (Audit) { AuditPath.AuditInsertInto(AgentInstanceContext.EngineURI, AgentInstanceContext.StatementName, routed); } TableStateInstance tableStateInstance = _tableStateInstances[index]; if (tableStateInstance != null) { tableStateInstance.AddEventUnadorned(routed); } else { bool isNamedWindowInsert = Items[index].IsNamedWindowInsert; InternalEventRouter.Route( routed, EPStatementHandle, AgentInstanceContext.StatementContext.InternalEventEngineRouteDest, exprEvaluatorContext, isNamedWindowInsert); } }
public override void HandleMatching(EventBean[] triggerEvents, EventBean[] matchingEvents) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QInfraOnAction(OnTriggerType.ON_SELECT, triggerEvents, matchingEvents); } EventBean[] newData; // clear state from prior results _resultSetProcessor.Clear(); // build join result // use linked hash set to retain order of join results for last/first/window to work most intuitively var newEvents = BuildJoinResult(triggerEvents, matchingEvents); // process matches var pair = _resultSetProcessor.ProcessJoinResult(newEvents, _oldEvents, false); newData = (pair != null ? pair.First : null); if (_parent.IsDistinct) { newData = EventBeanUtility.GetDistinctByProp(newData, _parent.EventBeanReader); } if (_tableStateInstanceInsertInto != null) { if (newData != null) { foreach (var aNewData in newData) { if (_audit) { AuditPath.AuditInsertInto(ExprEvaluatorContext.EngineURI, ExprEvaluatorContext.StatementName, aNewData); } _tableStateInstanceInsertInto.AddEventUnadorned(aNewData); } } } else if (_parent.InternalEventRouter != null) { if (newData != null) { foreach (var aNewData in newData) { if (_audit) { AuditPath.AuditInsertInto(ExprEvaluatorContext.EngineURI, ExprEvaluatorContext.StatementName, aNewData); } _parent.InternalEventRouter.Route(aNewData, _parent.StatementHandle, _parent.InternalEventRouteDest, ExprEvaluatorContext, _parent.IsAddToFront); } } } // The on-select listeners receive the events selected if ((newData != null) && (newData.Length > 0)) { // And post only if we have listeners/subscribers that need the data if (_parent.StatementResultService.IsMakeNatural || _parent.StatementResultService.IsMakeSynthetic) { UpdateChildren(newData, null); } } _lastResult = newData; // clear state from prior results _resultSetProcessor.Clear(); // Events to delete are indicated via old data if (_isDelete) { RootView.Update(null, matchingEvents); } if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AInfraOnAction(); } }