package org.yamcs.yarch.streamsql;
import java.util.ArrayList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yamcs.yarch.AbstractStream;
import org.yamcs.yarch.MergeStream;
import org.yamcs.yarch.TupleDefinition;
import org.yamcs.yarch.YarchDatabase;
class MergeExpression implements StreamExpression {
ArrayList<TupleSourceExpression> sources=new ArrayList<TupleSourceExpression> ();
String mergeColumn;
boolean ascending=true;
static Logger log=LoggerFactory.getLogger(MergeExpression.class.getName());
public void setMergeColumn(String name) {
mergeColumn=name;
}
public void setAscending(boolean ascending) {
this.ascending = ascending;
}
@Override
public void bind(ExecutionContext c) throws StreamSqlException {
for(TupleSourceExpression tps:sources) {
tps.bind(c);
}
}
@Override
public AbstractStream execute(ExecutionContext c) throws StreamSqlException {
YarchDatabase dict=YarchDatabase.getInstance(c.getDbName());
AbstractStream[] streams=new AbstractStream[sources.size()];
for(int i=0;i<streams.length;i++) {
streams[i]=sources.get(i).execute(c);
}
if(streams.length==1) return streams[0];
else {
AbstractStream ms=new MergeStream(dict,streams,mergeColumn, ascending);
return ms;
}
}
public void addTupleSourceExpression(TupleSourceExpression tsrc) {
sources.add(tsrc);
}
@Override
public TupleDefinition getOutputDefinition() {
return null;
}
}