package org.yamcs.yarch.streamsql;
import org.yamcs.yarch.AbstractStream;
import org.yamcs.yarch.InternalStream;
import org.yamcs.yarch.TupleDefinition;
import org.yamcs.yarch.YarchDatabase;
import org.yamcs.yarch.YarchException;
public class CreateStreamStatement extends StreamSqlStatement {
String streamName;
StreamExpression expression;
TupleDefinition tupleDefinition;
public CreateStreamStatement(String streamName, StreamExpression expression) {
this.streamName=streamName;
this.expression=expression;
}
public CreateStreamStatement(String name, TupleDefinition tupleDefinition) {
this.streamName=name;
this.tupleDefinition=tupleDefinition;
}
@Override
public StreamSqlResult execute(ExecutionContext c) throws StreamSqlException {
YarchDatabase dict=YarchDatabase.getInstance(c.getDbName());
synchronized(dict) {
if(dict.streamOrTableExists(streamName))
throw new StreamAlreadyExistsException(streamName);
AbstractStream stream;
if(expression!=null) {
expression.bind(c);
stream=expression.execute(c);
stream.setName(streamName);
} else {
stream=new InternalStream(dict, streamName, tupleDefinition);
}
try {
// System.out.println("adding stream "+stream+" to the dictionary");
dict.addStream(stream);
} catch (YarchException e) {
throw new GenericStreamSqlException(e.getMessage());
}
return new StreamSqlResult();
}
}
}