public void Join(EventBean[][] newDataPerStream, EventBean[][] oldDataPerStream)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QJoinExexStrategy();
            }
            var joinSet = _composer.Join(newDataPerStream, oldDataPerStream, _staticExprEvaluatorContext);

            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AJoinExecStrategy(joinSet);
            }

            _filter.Process(joinSet.First, joinSet.Second, _staticExprEvaluatorContext);

            if ((!joinSet.First.IsEmpty()) || (!joinSet.Second.IsEmpty()))
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QJoinExecProcess(joinSet);
                }
                _indicator.Process(joinSet.First, joinSet.Second, _staticExprEvaluatorContext);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AJoinExecProcess();
                }
            }
        }
Exemple #2
0
        public void Join(
            EventBean[][] newDataPerStream,
            EventBean[][] oldDataPerStream)
        {
            var instrumentationCommon = staticExprEvaluatorContext.InstrumentationProvider;
            instrumentationCommon.QJoinExecStrategy();

            var joinSet = composer.Join(newDataPerStream, oldDataPerStream, staticExprEvaluatorContext);

            instrumentationCommon.AJoinExecStrategy(joinSet);

            if (optionalFilter != null) {
                instrumentationCommon.QJoinExecFilter();
                ProcessFilter(joinSet.First, joinSet.Second, staticExprEvaluatorContext);
                instrumentationCommon.AJoinExecFilter(joinSet.First, joinSet.Second);
            }

            if (!joinSet.First.IsEmpty() || !joinSet.Second.IsEmpty()) {
                instrumentationCommon.QJoinExecProcess(joinSet);
                indicator.Process(joinSet.First, joinSet.Second, staticExprEvaluatorContext);
                instrumentationCommon.AJoinExecProcess();
            }
        }
        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);
        }