示例#1
0
        protected internal static ResultSetProcessor ProcessorWithAssign(
            ResultSetProcessorFactoryProvider processorProvider,
            AgentInstanceContext agentInstanceContext,
            FAFQueryMethodAssignerSetter assignerSetter,
            IDictionary<int, ExprTableEvalStrategyFactory> tableAccesses)
        {
            // start table-access
            var tableAccessEvals = ExprTableEvalHelperStart.StartTableAccess(tableAccesses, agentInstanceContext);

            // get RSP
            var pair = StatementAgentInstanceFactoryUtil.StartResultSetAndAggregation(
                processorProvider,
                agentInstanceContext,
                false,
                null);

            // assign
            assignerSetter.Assign(
                new StatementAIFactoryAssignmentsImpl(
                    pair.Second,
                    null,
                    null,
                    Collections.GetEmptyMap<int, SubSelectFactoryResult>(),
                    tableAccessEvals,
                    null));

            return pair.First;
        }
        protected internal static ResultSetProcessor ProcessorWithAssign(
            ResultSetProcessorFactoryProvider processorProvider,
            AgentInstanceContext agentInstanceContext,
            FAFQueryMethodAssignerSetter assignerSetter,
            IDictionary<int, ExprTableEvalStrategyFactory> tableAccesses,
            IDictionary<int, SubSelectFactory> subselects)
        {
            // start table-access
            var tableAccessEvals = ExprTableEvalHelperStart.StartTableAccess(tableAccesses, agentInstanceContext);

            // get RSP
            var pair = StatementAgentInstanceFactoryUtil.StartResultSetAndAggregation(
                processorProvider,
                agentInstanceContext,
                false,
                null);
            
            // start subselects
            var subselectStopCallbacks = new List<AgentInstanceMgmtCallback>(2);
            IDictionary<int, SubSelectFactoryResult> subselectActivations = SubSelectHelperStart.StartSubselects(
                subselects, agentInstanceContext, subselectStopCallbacks, false);

            // assign
            assignerSetter.Assign(
                new StatementAIFactoryAssignmentsImpl(
                    pair.Second,
                    null,
                    null,
                    subselectActivations,
                    tableAccessEvals,
                    null));

            return pair.First;
        }
示例#3
0
        public EPPreparedQueryResult Execute(
            FAFQueryMethodSelect select,
            ContextPartitionSelector[] contextPartitionSelectors,
            FAFQueryMethodAssignerSetter assignerSetter,
            ContextManagementService contextManagementService)
        {
            FireAndForgetProcessor processor = select.Processors[0];
            FireAndForgetInstance processorInstance = processor.ProcessorInstanceNoContext;

            ICollection<EventBean> events;
            AgentInstanceContext agentInstanceContext = null;
            if (processorInstance == null) {
                events = EmptyList<EventBean>.Instance;
            }
            else {
                agentInstanceContext = processorInstance.AgentInstanceContext;
                events = Snapshot(select.ConsumerFilters[0], processorInstance, select.QueryGraph, select.Annotations);
            }

            // get RSP
            ResultSetProcessor resultSetProcessor = ProcessorWithAssign(
                select.ResultSetProcessorFactoryProvider,
                agentInstanceContext,
                assignerSetter,
                select.TableAccesses,
                select.Subselects);

            if (select.WhereClause != null) {
                events = Filtered(events, select.WhereClause, agentInstanceContext);
            }

            return ProcessedNonJoin(resultSetProcessor, events, select.DistinctKeyGetter);
        }
示例#4
0
 public EPPreparedQueryResult Execute(
     FAFQueryMethodSelect select,
     ContextPartitionSelector[] contextPartitionSelectors,
     FAFQueryMethodAssignerSetter assignerSetter,
     ContextManagementService contextManagementService)
 {
     throw new UnsupportedOperationException("Context with join is not supported");
 }
示例#5
0
        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);
        }
示例#6
0
 private EPFireAndForgetQueryResult ExecuteInternal(ContextPartitionSelector[] contextPartitionSelectors)
 {
     try {
         FAFQueryMethodAssignerSetter setter = queryMethodProvider.SubstitutionFieldSetter;
         var result = queryMethod.Execute(
             serviceStatusProvider, setter, contextPartitionSelectors, epServicesContext.ContextManagementService);
         return new EPQueryResultImpl(result);
     }
     catch (Exception ex) {
         throw new EPException(ex.Message, ex);
     }
 }
示例#7
0
        public EPPreparedQueryResult Execute(
            FAFQueryMethodSelect select,
            ContextPartitionSelector[] contextPartitionSelectors,
            FAFQueryMethodAssignerSetter assignerSetter,
            ContextManagementService contextManagementService)
        {
            FireAndForgetProcessor processor = select.Processors[0];

            ContextPartitionSelector singleSelector =
                contextPartitionSelectors != null && contextPartitionSelectors.Length > 0
                    ? contextPartitionSelectors[0]
                    : null;
            ICollection<int> agentInstanceIds = AgentInstanceIds(processor, singleSelector, contextManagementService);

            ICollection<EventBean> events = new ArrayDeque<EventBean>();
            AgentInstanceContext agentInstanceContext = null;
            foreach (int agentInstanceId in agentInstanceIds) {
                FireAndForgetInstance processorInstance = processor.GetProcessorInstanceContextById(agentInstanceId);
                if (processorInstance != null) {
                    agentInstanceContext = processorInstance.AgentInstanceContext;
                    ICollection<EventBean> coll = processorInstance.SnapshotBestEffort(
                        select.QueryGraph,
                        select.Annotations);
                    events.AddAll(coll);
                }
            }

            // get RSP
            ResultSetProcessor resultSetProcessor = ProcessorWithAssign(
                select.ResultSetProcessorFactoryProvider,
                agentInstanceContext,
                assignerSetter,
                select.TableAccesses,
                select.Subselects);

            if (select.WhereClause != null) {
                events = Filtered(events, select.WhereClause, agentInstanceContext);
            }

            return ProcessedNonJoin(resultSetProcessor, events, select.DistinctKeyGetter);
        }
示例#8
0
 public EPFireAndForgetPreparedQueryParameterizedImpl(
     AtomicBoolean serviceProviderStatus,
     FAFQueryMethodAssignerSetter fields,
     FAFQueryMethod queryMethod,
     FAFQueryInformationals queryInformationals)
 {
     ServiceProviderStatus = serviceProviderStatus;
     Fields = fields;
     QueryMethod = queryMethod;
     types = queryInformationals.SubstitutionParamsTypes;
     Names = queryInformationals.SubstitutionParamsNames;
     if (types != null && types.Length > 0) {
         UnsatisfiedParamsOneOffset = new LinkedHashSet<int>();
         for (var i = 0; i < types.Length; i++) {
             UnsatisfiedParamsOneOffset.Add(i + 1);
         }
     }
     else {
         UnsatisfiedParamsOneOffset = new EmptySet<int>();
     }
 }
示例#9
0
        public EPPreparedQueryResult Execute(
            AtomicBoolean serviceStatusProvider,
            FAFQueryMethodAssignerSetter assignerSetter,
            ContextPartitionSelector[] contextPartitionSelectors,
            ContextManagementService contextManagementService)
        {
            if (!serviceStatusProvider.Get()) {
                throw FAFQueryMethodUtil.RuntimeDestroyed();
            }

            if (contextPartitionSelectors != null && contextPartitionSelectors.Length != Processors.Length) {
                throw new ArgumentException(
                    "The number of context partition selectors does not match the number of named windows or tables in the from-clause");
            }

            try {
                return SelectExec.Execute(this, contextPartitionSelectors, assignerSetter, contextManagementService);
            }
            finally {
                if (HasTableAccess) {
                    Processors[0].StatementContext.TableExprEvaluatorContext.ReleaseAcquiredLocks();
                }
            }
        }
        public EPPreparedQueryResult Execute(
            FAFQueryMethodSelect select,
            ContextPartitionSelector[] contextPartitionSelectors,
            FAFQueryMethodAssignerSetter assignerSetter,
            ContextManagementService contextManagementService)
        {
            int numStreams = select.Processors.Length;
            ICollection<EventBean>[] snapshots = new ICollection<EventBean>[numStreams];

            AgentInstanceContext agentInstanceContext = null;
            Viewable[] viewablePerStream = new Viewable[numStreams];

            for (int i = 0; i < numStreams; i++) {
                FireAndForgetProcessor processor = select.Processors[i];
                FireAndForgetInstance processorInstance = processor.ProcessorInstanceNoContext;
                snapshots[i] = Snapshot(
                    select.ConsumerFilters[i],
                    processorInstance,
                    select.QueryGraph,
                    select.Annotations);
                agentInstanceContext = processorInstance.AgentInstanceContext;
                viewablePerStream[i] = processorInstance.TailViewInstance;
            }

            // get RSP
            ResultSetProcessor resultSetProcessor = ProcessorWithAssign(
                select.ResultSetProcessorFactoryProvider,
                agentInstanceContext,
                assignerSetter,
                select.TableAccesses,
                select.Subselects);

            // determine join
            JoinSetComposerDesc joinSetComposerDesc = select.JoinSetComposerPrototype.Create(
                viewablePerStream,
                true,
                agentInstanceContext,
                false);
            JoinSetComposer joinComposer = joinSetComposerDesc.JoinSetComposer;

            EventBean[][] oldDataPerStream = new EventBean[numStreams][];
            EventBean[][] newDataPerStream = new EventBean[numStreams][];
            for (int i = 0; i < numStreams; i++) {
                newDataPerStream[i] = snapshots[i].ToArray();
            }

            UniformPair<ISet<MultiKeyArrayOfKeys<EventBean>>> result = joinComposer.Join(
                newDataPerStream,
                oldDataPerStream,
                agentInstanceContext);
            if (joinSetComposerDesc.PostJoinFilterEvaluator != null) {
                JoinSetComposerUtil.Filter(
                    joinSetComposerDesc.PostJoinFilterEvaluator,
                    result.First,
                    true,
                    agentInstanceContext);
            }

            UniformPair<EventBean[]> results = resultSetProcessor.ProcessJoinResult(result.First, null, true);

            EventBean[] distinct = EventBeanUtility.GetDistinctByProp(results.First, select.DistinctKeyGetter);

            return new EPPreparedQueryResult(resultSetProcessor.ResultEventType, distinct);
        }