* @return
*/
private Stream createStream(final Subscription sub, final SerializingMessageService msgService_param) {
try {
final StreamQueryEvaluator evaluator = new StreamQueryEvaluator();
final NotifyStreamResult notifyStreamResult = new NotifyStreamResult() {
private final StreamQueryEvaluator e = evaluator;
@Override
public void notifyStreamResult(final QueryResult result) {
// empty query results get discarded
if(result==null || result.isEmpty()) {
System.out.println("emtpy QueryResult, not sending it");
return;
}
// serializing and sending the query result
try {
Set<Variable> vars = this.e.getVariablesOfQuery();
SerializedQueryResult r = new SerializedQueryResult(vars, result, sub.getId());
msgService_param.sendMessage(r);
} catch (IOException e1) {
System.err.println(e1);
e1.printStackTrace();
}
}
};
evaluator.setupArguments();
Bindings.instanceClass = BindingsMap.class;
evaluator.getArgs().set("result", QueryResult.TYPE.MEMORY);
evaluator.getArgs().set("codemap", LiteralFactory.MapType.HASHMAP);
evaluator.getArgs().set("datastructure", Indices.DATA_STRUCT.HASHMAP);
evaluator.init();
evaluator.compileQuery(sub.getQuery());
evaluator.logicalOptimization();
evaluator.physicalOptimization();
if (evaluator.getRootNode() instanceof Stream) {
Stream stream = (Stream) evaluator.getRootNode();
stream.addNotifyStreamResult(notifyStreamResult);
stream.sendMessage(new StartOfEvaluationMessage());
return stream;
}