// Filter and Select public Object Evaluate( EventBean[] eventsPerStream, bool newData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext, ExprSubselectRowNode parent) { var eventsZeroBased = EventBeanUtility.AllocatePerStreamShift(eventsPerStream); var subSelectResult = ExprSubselectRowNodeUtility.EvaluateFilterExpectSingleMatch( eventsZeroBased, newData, matchingEvents, exprEvaluatorContext, parent); if (subSelectResult == null) { return(null); } eventsZeroBased[0] = subSelectResult; Object result; if (parent.SelectClauseEvaluator.Length == 1) { result = parent.SelectClauseEvaluator[0].Evaluate(new EvaluateParams(eventsZeroBased, true, exprEvaluatorContext)); } else { // we are returning a Map here, not object-array, preferring the self-describing structure result = parent.EvaluateRow(eventsZeroBased, true, exprEvaluatorContext); } return(result); }
// No filter and with select clause public virtual object Evaluate( EventBean[] eventsPerStream, bool newData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext, ExprSubselectRowNode parent) { if (matchingEvents.Count > 1) { Log.Warn(parent.MultirowMessage); return(null); } EventBean[] events = EventBeanUtility.AllocatePerStreamShift(eventsPerStream); events[0] = EventBeanUtility.GetNonemptyFirstEvent(matchingEvents); object result; if (parent.SelectClauseEvaluator.Length == 1) { result = parent.SelectClauseEvaluator[0].Evaluate(new EvaluateParams(events, true, exprEvaluatorContext)); } else { // we are returning a Map here, not object-array, preferring the self-describing structure result = parent.EvaluateRow(events, true, exprEvaluatorContext); } return(result); }
public override ICollection <EventBean> EvaluateGetCollEvents( EventBean[] eventsPerStream, bool newData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext context, ExprSubselectRowNode parent) { ICollection <object> groupKeys = parent.SubselectAggregationService.GetGroupKeys(context); if (groupKeys.IsEmpty()) { return(null); } ICollection <EventBean> events = new ArrayDeque <EventBean>(groupKeys.Count); foreach (object groupKey in groupKeys) { parent.SubselectAggregationService.SetCurrentAccess(groupKey, context.AgentInstanceId, null); IDictionary <string, object> row = parent.EvaluateRow(null, true, context); EventBean @event = parent.subselectMultirowType.EventAdapterService.AdapterForTypedMap( row, parent.subselectMultirowType.EventType); events.Add(@event); } return(events); }
public Object Evaluate( EventBean[] eventsPerStream, bool newData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext, ExprSubselectRowNode parent) { EventBean[] eventsZeroBased = EventBeanUtility.AllocatePerStreamShift(eventsPerStream); var pass = parent.HavingExpr.Evaluate(new EvaluateParams(eventsZeroBased, newData, exprEvaluatorContext)); if ((pass == null) || (false.Equals(pass))) { return(null); } Object result; if (parent.SelectClauseEvaluator.Length == 1) { result = parent.SelectClauseEvaluator[0].Evaluate(new EvaluateParams(eventsZeroBased, true, exprEvaluatorContext)); } else { // we are returning a Map here, not object-array, preferring the self-describing structure result = parent.EvaluateRow(eventsZeroBased, true, exprEvaluatorContext); } return(result); }
public override ICollection<EventBean> EvaluateGetCollEvents( EventBean[] eventsPerStream, bool newData, ICollection<EventBean> matchingEvents, ExprEvaluatorContext context, ExprSubselectRowNode parent) { AggregationService aggregationService = parent.SubselectAggregationService.GetContextPartitionAggregationService(context.AgentInstanceId); ICollection<object> groupKeys = aggregationService.GetGroupKeys(context); if (groupKeys.IsEmpty()) { return null; } var events = EventBeanUtility.AllocatePerStreamShift(eventsPerStream); var evaluateParams = new EvaluateParams(events, newData, context); var result = new ArrayDeque<EventBean>(groupKeys.Count); foreach (object groupKey in groupKeys) { aggregationService.SetCurrentAccess(groupKey, context.AgentInstanceId, null); var pass = _havingClause.Evaluate(evaluateParams); if (true.Equals(pass)) { IDictionary<string, object> row = parent.EvaluateRow(events, true, context); EventBean @event = parent.SubselectMultirowType.EventAdapterService.AdapterForTypedMap( row, parent.SubselectMultirowType.EventType); result.Add(@event); } } return result; }
// No filter and with select clause public virtual EventBean EvaluateGetEventBean(EventBean[] eventsPerStream, bool newData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext context, ExprSubselectRowNode parent) { var events = EventBeanUtility.AllocatePerStreamShift(eventsPerStream); events[0] = EventBeanUtility.GetNonemptyFirstEvent(matchingEvents); var row = parent.EvaluateRow(events, true, context); return(parent.SubselectMultirowType.EventAdapterService.AdapterForTypedMap(row, parent.SubselectMultirowType.EventType)); }
// Filter and Select public EventBean EvaluateGetEventBean(EventBean[] eventsPerStream, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext context, ExprSubselectRowNode parent) { var events = EventBeanUtility.AllocatePerStreamShift(eventsPerStream); var subSelectResult = ExprSubselectRowNodeUtility.EvaluateFilterExpectSingleMatch(events, isNewData, matchingEvents, context, parent); if (subSelectResult == null) { return(null); } var row = parent.EvaluateRow(events, true, context); return(parent.subselectMultirowType.EventAdapterService.AdapterForTypedMap(row, parent.subselectMultirowType.EventType)); }
// No filter and with select clause public virtual ICollection <EventBean> EvaluateGetCollEvents( EventBean[] eventsPerStream, bool newData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext context, ExprSubselectRowNode parent) { if (matchingEvents.Count == 0) { return(Collections.GetEmptyList <EventBean>()); } // when selecting a single property in the select clause that provides a fragment if (parent.subselectMultirowType == null) { ICollection <EventBean> eventsX = new ArrayDeque <EventBean>(matchingEvents.Count); var eval = (ExprIdentNodeEvaluator)parent.SelectClauseEvaluator[0]; EventPropertyGetter getter = eval.Getter; foreach (EventBean subselectEvent in matchingEvents) { object fragment = getter.GetFragment(subselectEvent); if (fragment == null) { continue; } eventsX.Add((EventBean)fragment); } return(eventsX); } // when selecting a combined output row that contains multiple fields ICollection <EventBean> events = new ArrayDeque <EventBean>(matchingEvents.Count); EventBean[] eventsPerStreamEval = EventBeanUtility.AllocatePerStreamShift(eventsPerStream); foreach (EventBean subselectEvent in matchingEvents) { eventsPerStreamEval[0] = subselectEvent; var row = parent.EvaluateRow(eventsPerStreamEval, true, context); EventBean @event = parent.subselectMultirowType.EventAdapterService.AdapterForTypedMap( row, parent.subselectMultirowType.EventType); events.Add(@event); } return(events); }