public override void HandleMatching(EventBean[] triggerEvents, EventBean[] matchingEvents) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QInfraOnAction(OnTriggerType.ON_DELETE, triggerEvents, matchingEvents); } if ((matchingEvents != null) && (matchingEvents.Length > 0)) { foreach (EventBean @event in matchingEvents) { TableStateInstance.DeleteEvent(@event); } // The on-delete listeners receive the events deleted, but only if there is interest if (parent.StatementResultService.IsMakeNatural || parent.StatementResultService.IsMakeSynthetic) { EventBean[] posted = TableOnViewUtil.ToPublic(matchingEvents, parent.TableMetadata, triggerEvents, true, base.ExprEvaluatorContext); UpdateChildren(posted, null); } } if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AInfraOnAction(); } }
public override void Apply(EventBean matchingEvent, EventBean[] eventsPerStream, TableStateInstance tableStateInstance, TableOnMergeViewChangeHandler changeHandlerAdded, TableOnMergeViewChangeHandler changeHandlerRemoved, ExprEvaluatorContext exprEvaluatorContext) { tableStateInstance.DeleteEvent(matchingEvent); if (changeHandlerRemoved != null) { changeHandlerRemoved.Add(matchingEvent, eventsPerStream, false, exprEvaluatorContext); } }
public override EventBean[] ProcessDelete(EPPreparedExecuteIUDSingleStreamExecDelete delete) { ExprTableEvalLockUtil.ObtainLockUnless(_instance.TableLevelRWLock.WriteLock, delete.Services.TableService.TableExprEvaluatorContext); if (delete.OptionalWhereClause == null) { _instance.ClearEvents(); } var found = SnapshotAndApplyFilter(delete.Filter, delete.Annotations, delete.OptionalWhereClause, _instance.AgentInstanceContext); foreach (var @event in found) { _instance.DeleteEvent(@event); } return(CollectionUtil.EVENTBEANARRAY_EMPTY); }
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 ISet <MultiKey <EventBean> > newEvents = NamedWindowOnSelectView.BuildJoinResult(triggerEvents, matchingEvents); // process matches UniformPair <EventBean[]> pair = _resultSetProcessor.ProcessJoinResult(newEvents, Collections.GetEmptySet <MultiKey <EventBean> >(), false); newData = (pair != null ? pair.First : null); if (_parent.IsDistinct) { newData = EventBeanUtility.GetDistinctByProp(newData, _parent.EventBeanReader); } if (_parent.InternalEventRouter != null) { if (newData != null) { for (int i = 0; i < newData.Length; i++) { if (_audit) { AuditPath.AuditInsertInto(ExprEvaluatorContext.EngineURI, ExprEvaluatorContext.StatementName, newData[i]); } _parent.InternalEventRouter.Route(newData[i], _parent.StatementHandle, _parent.InternalEventRouteDest, ExprEvaluatorContext, false); } } } // 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); } } // clear state from prior results _resultSetProcessor.Clear(); // Events to delete are indicated via old data if (_deleteAndSelect) { foreach (EventBean @event in matchingEvents) { TableStateInstance.DeleteEvent(@event); } } if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AInfraOnAction(); } }