Beispiel #1
0
        public UniformPair<ISet<MultiKeyArrayOfKeys<EventBean>>> Join(
            EventBean[][] newDataPerStream,
            EventBean[][] oldDataPerStream,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            var instrumentationCommon = exprEvaluatorContext.InstrumentationProvider;
            instrumentationCommon.QJoinCompositionStreamToWin();

            newResults.Clear();

            // We add and remove data in one call to each index.
            // Most indexes will add first then remove as newdata and olddata may contain the same event.
            // Unique indexes may remove then add.
            for (var stream = 0; stream < newDataPerStream.Length; stream++) {
                if (stream != streamNumber) {
                    instrumentationCommon.QJoinCompositionStepUpdIndex(
                        stream,
                        newDataPerStream[stream],
                        oldDataPerStream[stream]);
                    for (var j = 0; j < repositories[stream].Length; j++) {
                        repositories[stream][j]
                            .AddRemove(
                                newDataPerStream[stream],
                                oldDataPerStream[stream],
                                exprEvaluatorContext);
                    }

                    instrumentationCommon.AJoinCompositionStepUpdIndex();
                }
            }

            // join new data
            if (newDataPerStream[streamNumber] != null) {
                instrumentationCommon.QJoinCompositionQueryStrategy(true, streamNumber, newDataPerStream[streamNumber]);
                queryStrategy.Lookup(newDataPerStream[streamNumber], newResults, exprEvaluatorContext);
                instrumentationCommon.AJoinCompositionQueryStrategy();
            }

            // on self-joins there can be repositories which are temporary for join execution
            if (isResetSelfJoinRepositories) {
                for (var i = 0; i < selfJoinRepositoryResets.Length; i++) {
                    if (!selfJoinRepositoryResets[i]) {
                        continue;
                    }

                    for (var j = 0; j < repositories[i].Length; j++) {
                        repositories[i][j].Clear();
                    }
                }
            }

            exprEvaluatorContext.InstrumentationProvider.AJoinCompositionStreamToWin(newResults);

            return new UniformPair<ISet<MultiKeyArrayOfKeys<EventBean>>>(newResults, emptyResults);
        }
        public UniformPair <ISet <MultiKey <EventBean> > > Join(EventBean[][] newDataPerStream, EventBean[][] oldDataPerStream, ExprEvaluatorContext exprEvaluatorContext)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QJoinCompositionStreamToWin();
            }
            _newResults.Clear();

            // We add and remove data in one call to each index.
            // Most indexes will add first then remove as newdata and olddata may contain the same event.
            // Unique indexes may remove then add.
            for (int stream = 0; stream < newDataPerStream.Length; stream++)
            {
                if (stream != _streamNumber)
                {
                    if (InstrumentationHelper.ENABLED)
                    {
                        InstrumentationHelper.Get().QJoinCompositionStepUpdIndex(stream, newDataPerStream[stream], oldDataPerStream[stream]);
                    }
                    for (int j = 0; j < _repositories[stream].Length; j++)
                    {
                        _repositories[stream][j].AddRemove(newDataPerStream[stream], oldDataPerStream[stream]);
                    }
                    if (InstrumentationHelper.ENABLED)
                    {
                        InstrumentationHelper.Get().AJoinCompositionStepUpdIndex();
                    }
                }
            }

            // join new data
            if (newDataPerStream[_streamNumber] != null)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QJoinCompositionQueryStrategy(true, _streamNumber, newDataPerStream[_streamNumber]);
                }
                _queryStrategy.Lookup(newDataPerStream[_streamNumber], _newResults, exprEvaluatorContext);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AJoinCompositionQueryStrategy();
                }
            }

            // on self-joins there can be repositories which are temporary for join execution
            if (_isResetSelfJoinRepositories)
            {
                for (int i = 0; i < _selfJoinRepositoryResets.Length; i++)
                {
                    if (!_selfJoinRepositoryResets[i])
                    {
                        continue;
                    }
                    for (int j = 0; j < _repositories[i].Length; j++)
                    {
                        _repositories[i][j].Clear();
                    }
                }
            }

            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AJoinCompositionStreamToWin(_newResults);
            }
            return(new UniformPair <ISet <MultiKey <EventBean> > >(_newResults, _emptyResults));
        }