/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
***************************************************************************************
*/
package com.espertech.esper.epl.join.base;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.collection.MultiKey;
import com.espertech.esper.epl.core.ResultSetProcessor;
import com.espertech.esper.epl.expression.core.ExprEvaluatorContext;
import com.espertech.esper.view.internal.BufferView;
import java.util.HashSet;
import java.util.Set;
/**
* Implements a method for pre-loading (initializing) join indexes from a filled buffer.
*/
public class JoinPreloadMethodImpl implements JoinPreloadMethod {
private final int numStreams;
private final BufferView[] bufferViews;
private final JoinSetComposer joinSetComposer;
/**
* Ctor.
*
* @param numStreams number of streams
* @param joinSetComposer the composer holding stream indexes
*/
public JoinPreloadMethodImpl(int numStreams, JoinSetComposer joinSetComposer) {
this.numStreams = numStreams;
this.bufferViews = new BufferView[numStreams];
this.joinSetComposer = joinSetComposer;
}
/**
* Sets the buffer for a stream to preload events from.
*
* @param view buffer
* @param stream the stream number for the buffer
*/
public void setBuffer(BufferView view, int stream) {
bufferViews[stream] = view;
}
public void preloadFromBuffer(int stream, ExprEvaluatorContext exprEvaluatorContext) {
EventBean[] preloadEvents = bufferViews[stream].getNewDataBuffer().getAndFlush();
EventBean[][] eventsPerStream = new EventBean[numStreams][];
eventsPerStream[stream] = preloadEvents;
joinSetComposer.init(eventsPerStream, exprEvaluatorContext);
}
public void preloadAggregation(ResultSetProcessor resultSetProcessor) {
Set<MultiKey<EventBean>> newEvents = joinSetComposer.staticJoin();
Set<MultiKey<EventBean>> oldEvents = new HashSet<MultiKey<EventBean>>();
resultSetProcessor.processJoinResult(newEvents, oldEvents, false);
}
@Override
public boolean isPreloading() {
return true;
}
}