public EPPreparedQueryResult Execute( FAFQueryMethodSelect select, ContextPartitionSelector[] contextPartitionSelectors, FAFQueryMethodAssignerSetter assignerSetter, ContextManagementService contextManagementService) { var processor = select.Processors[0]; var singleSelector = contextPartitionSelectors != null && contextPartitionSelectors.Length > 0 ? contextPartitionSelectors[0] : null; var agentInstanceIds = AgentInstanceIds(processor, singleSelector, contextManagementService); IList<ContextPartitionResult> contextPartitionResults = new List<ContextPartitionResult>(); foreach (var agentInstanceId in agentInstanceIds) { var processorInstance = processor.GetProcessorInstanceContextById(agentInstanceId); if (processorInstance != null) { var coll = processorInstance.SnapshotBestEffort(select.QueryGraph, select.Annotations); contextPartitionResults.Add( new ContextPartitionResult(coll, processorInstance.AgentInstanceContext)); } } // process context partitions var events = new ArrayDeque<EventBean[]>(); ResultSetProcessor resultSetProcessor = null; foreach (var contextPartitionResult in contextPartitionResults) { if (resultSetProcessor == null) { resultSetProcessor = ProcessorWithAssign( select.ResultSetProcessorFactoryProvider, contextPartitionResult.Context, assignerSetter, select.TableAccesses); } var snapshot = contextPartitionResult.Events; if (select.WhereClause != null) { snapshot = Filtered( snapshot, select.WhereClause, contextPartitionResult.Context); } var rows = snapshot.ToArray(); resultSetProcessor.SetAgentInstanceContext(contextPartitionResult.Context); var results = resultSetProcessor.ProcessViewResult(rows, null, true); if (results != null && results.First != null && results.First.Length > 0) { events.Add(results.First); } } var distinct = EventBeanUtility.GetDistinctByProp( EventBeanUtility.Flatten(events), select.EventBeanReaderDistinct); return new EPPreparedQueryResult(select.EventType, distinct); }
/// <summary> /// Executes the prepared query. /// </summary> /// <returns>query results</returns> public EPPreparedQueryResult Execute(ContextPartitionSelector[] contextPartitionSelectors) { try { var numStreams = _processors.Length; if (contextPartitionSelectors != null && contextPartitionSelectors.Length != numStreams) { throw new ArgumentException("Number of context partition selectors does not match the number of named windows in the from-clause"); } // handle non-context case if (_statementSpec.OptionalContextName == null) { ICollection <EventBean>[] snapshots = new ICollection <EventBean> [numStreams]; for (var i = 0; i < numStreams; i++) { var selector = contextPartitionSelectors == null ? null : contextPartitionSelectors[i]; snapshots[i] = GetStreamFilterSnapshot(i, selector); } _resultSetProcessor.Clear(); return(Process(snapshots)); } IList <ContextPartitionResult> contextPartitionResults = new List <ContextPartitionResult>(); var singleSelector = contextPartitionSelectors != null && contextPartitionSelectors.Length > 0 ? contextPartitionSelectors[0] : null; // context partition runtime query ICollection <int> agentInstanceIds = EPPreparedExecuteMethodHelper.GetAgentInstanceIds(_processors[0], singleSelector, _services.ContextManagementService, _statementSpec.OptionalContextName); // collect events and agent instances foreach (int agentInstanceId in agentInstanceIds) { var processorInstance = _processors[0].GetProcessorInstanceContextById(agentInstanceId); if (processorInstance != null) { EPPreparedExecuteTableHelper.AssignTableAccessStrategies(_services, _statementSpec.TableNodes, processorInstance.AgentInstanceContext); var coll = processorInstance.SnapshotBestEffort(this, _filters[0], _statementSpec.Annotations); contextPartitionResults.Add(new ContextPartitionResult(coll, processorInstance.AgentInstanceContext)); } } // process context partitions var events = new ArrayDeque <EventBean[]>(); foreach (var contextPartitionResult in contextPartitionResults) { var snapshot = contextPartitionResult.Events; if (_statementSpec.FilterRootNode != null) { snapshot = GetFiltered(snapshot, Collections.SingletonList(_statementSpec.FilterRootNode)); } EventBean[] rows = snapshot.ToArray(); _resultSetProcessor.AgentInstanceContext = contextPartitionResult.Context; var results = _resultSetProcessor.ProcessViewResult(rows, null, true); if (results != null && results.First != null && results.First.Length > 0) { events.Add(results.First); } } return(new EPPreparedQueryResult(_resultSetProcessor.ResultEventType, EventBeanUtility.Flatten(events))); } finally { if (_hasTableAccess) { _services.TableService.TableExprEvaluatorContext.ReleaseAcquiredLocks(); } } }