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)); }