use of org.ballerinalang.siddhi.query.api.execution.query.input.stream.StateInputStream in project ballerina by ballerina-lang.
the class InputStreamParser method parse.
/**
* Parse an InputStream returning corresponding StreamRuntime.
*
* @param inputStream input stream to be parsed
* @param siddhiAppContext associated siddhi siddhiAppContext
* @param streamDefinitionMap map containing user given stream definitions
* @param tableDefinitionMap table definition map
* @param windowDefinitionMap window definition map
* @param aggregationDefinitionMap aggregation definition map
* @param tableMap Table Map
* @param windowMap event window map
* @param aggregationMap aggregator map
* @param executors List to hold VariableExpressionExecutors to update after query parsing
* @param latencyTracker latency tracker
* @param outputExpectsExpiredEvents is output expects ExpiredEvents
* @param queryName query name of input stream belongs to.
* @return StreamRuntime
*/
public static StreamRuntime parse(InputStream inputStream, SiddhiAppContext siddhiAppContext, Map<String, AbstractDefinition> streamDefinitionMap, Map<String, AbstractDefinition> tableDefinitionMap, Map<String, AbstractDefinition> windowDefinitionMap, Map<String, AbstractDefinition> aggregationDefinitionMap, Map<String, Table> tableMap, Map<String, Window> windowMap, Map<String, AggregationRuntime> aggregationMap, List<VariableExpressionExecutor> executors, LatencyTracker latencyTracker, boolean outputExpectsExpiredEvents, String queryName) {
if (inputStream instanceof BasicSingleInputStream || inputStream instanceof SingleInputStream) {
SingleInputStream singleInputStream = (SingleInputStream) inputStream;
Window window = windowMap.get(singleInputStream.getStreamId());
// If stream is from window, allow batch
boolean batchProcessingAllowed = window != null;
// processing
ProcessStreamReceiver processStreamReceiver = new ProcessStreamReceiver(singleInputStream.getStreamId(), latencyTracker, queryName, siddhiAppContext);
processStreamReceiver.setBatchProcessingAllowed(batchProcessingAllowed);
return SingleInputStreamParser.parseInputStream((SingleInputStream) inputStream, siddhiAppContext, executors, streamDefinitionMap, tableDefinitionMap, windowDefinitionMap, aggregationDefinitionMap, tableMap, new MetaStreamEvent(), processStreamReceiver, true, outputExpectsExpiredEvents, queryName);
} else if (inputStream instanceof JoinInputStream) {
return JoinInputStreamParser.parseInputStream(((JoinInputStream) inputStream), siddhiAppContext, streamDefinitionMap, tableDefinitionMap, windowDefinitionMap, aggregationDefinitionMap, tableMap, windowMap, aggregationMap, executors, latencyTracker, outputExpectsExpiredEvents, queryName);
} else if (inputStream instanceof StateInputStream) {
MetaStateEvent metaStateEvent = new MetaStateEvent(inputStream.getAllStreamIds().size());
return StateInputStreamParser.parseInputStream(((StateInputStream) inputStream), siddhiAppContext, metaStateEvent, streamDefinitionMap, tableDefinitionMap, windowDefinitionMap, aggregationDefinitionMap, tableMap, executors, latencyTracker, queryName);
} else {
throw new OperationNotSupportedException();
}
}
use of org.ballerinalang.siddhi.query.api.execution.query.input.stream.StateInputStream in project ballerina by ballerina-lang.
the class SiddhiQLBaseVisitorImpl method visitPattern_stream.
/**
* {@inheritDoc}
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*
* @param ctx
*/
@Override
public Object visitPattern_stream(@NotNull SiddhiQLParser.Pattern_streamContext ctx) {
// pattern_stream
// : every_pattern_source_chain
// | every_absent_pattern_source_chain
// ;
StateElement stateElement;
if (ctx.every_pattern_source_chain() != null) {
stateElement = ((StateElement) visit(ctx.every_pattern_source_chain()));
} else {
stateElement = ((StateElement) visit(ctx.absent_pattern_source_chain()));
}
StateInputStream stateInputStream = new StateInputStream(StateInputStream.Type.PATTERN, stateElement);
populateQueryContext(stateInputStream, ctx);
return stateInputStream;
}
use of org.ballerinalang.siddhi.query.api.execution.query.input.stream.StateInputStream in project ballerina by ballerina-lang.
the class SiddhiQLBaseVisitorImpl method visitEvery_absent_sequence_source_chain.
@Override
public Object visitEvery_absent_sequence_source_chain(SiddhiQLParser.Every_absent_sequence_source_chainContext ctx) {
// every_absent_sequence_source_chain
// : EVERY? absent_sequence_source_chain within_time? ',' sequence_source_chain
// | EVERY? sequence_source within_time? ',' absent_sequence_source_chain
// ;
StateElement stateElement1;
StateElement stateElement2;
if (ctx.EVERY() != null) {
stateElement1 = new EveryStateElement((StateElement) visit(ctx.getChild(1)));
} else {
stateElement1 = (StateElement) visit(ctx.getChild(0));
}
if (ctx.within_time() != null) {
stateElement1.setWithin((TimeConstant) visit(ctx.within_time()));
}
stateElement2 = (StateElement) visit(ctx.getChild(ctx.getChildCount() - 1));
populateQueryContext(stateElement1, ctx);
populateQueryContext(stateElement2, ctx);
NextStateElement nextStateElement = new NextStateElement(stateElement1, stateElement2);
populateQueryContext(nextStateElement, ctx);
StateInputStream stateInputStream = new StateInputStream(StateInputStream.Type.SEQUENCE, nextStateElement);
populateQueryContext(stateInputStream, ctx);
return stateInputStream;
}
use of org.ballerinalang.siddhi.query.api.execution.query.input.stream.StateInputStream in project ballerina by ballerina-lang.
the class PartitionRuntime method addPartitionReceiver.
public void addPartitionReceiver(QueryRuntime queryRuntime, List<VariableExpressionExecutor> executors, MetaStateEvent metaEvent) {
Query query = queryRuntime.getQuery();
List<List<PartitionExecutor>> partitionExecutors = new StreamPartitioner(query.getInputStream(), partition, metaEvent, executors, siddhiAppContext, null).getPartitionExecutorLists();
if (queryRuntime.getStreamRuntime() instanceof SingleStreamRuntime) {
SingleInputStream singleInputStream = (SingleInputStream) query.getInputStream();
addPartitionReceiver(singleInputStream.getStreamId(), singleInputStream.isInnerStream(), metaEvent.getMetaStreamEvent(0), partitionExecutors.get(0));
} else if (queryRuntime.getStreamRuntime() instanceof JoinStreamRuntime) {
SingleInputStream leftSingleInputStream = (SingleInputStream) ((JoinInputStream) query.getInputStream()).getLeftInputStream();
addPartitionReceiver(leftSingleInputStream.getStreamId(), leftSingleInputStream.isInnerStream(), metaEvent.getMetaStreamEvent(0), partitionExecutors.get(0));
SingleInputStream rightSingleInputStream = (SingleInputStream) ((JoinInputStream) query.getInputStream()).getRightInputStream();
addPartitionReceiver(rightSingleInputStream.getStreamId(), rightSingleInputStream.isInnerStream(), metaEvent.getMetaStreamEvent(1), partitionExecutors.get(1));
} else if (queryRuntime.getStreamRuntime() instanceof StateStreamRuntime) {
StateElement stateElement = ((StateInputStream) query.getInputStream()).getStateElement();
addPartitionReceiverForStateElement(stateElement, metaEvent, partitionExecutors, 0);
}
}
use of org.ballerinalang.siddhi.query.api.execution.query.input.stream.StateInputStream in project ballerina by ballerina-lang.
the class SiddhiQLBaseVisitorImpl method visitEvery_sequence_source_chain.
@Override
public Object visitEvery_sequence_source_chain(SiddhiQLParser.Every_sequence_source_chainContext ctx) {
// every_sequence_source_chain
// : EVERY? sequence_source within_time? ',' sequence_source_chain
// ;
StateElement stateElement1;
if (ctx.EVERY() != null) {
stateElement1 = new EveryStateElement((StateElement) visit(ctx.sequence_source()));
} else {
stateElement1 = (StateElement) visit(ctx.sequence_source());
}
if (ctx.within_time() != null) {
stateElement1.setWithin((TimeConstant) visit(ctx.within_time()));
}
populateQueryContext(stateElement1, ctx);
NextStateElement nextStateElement = new NextStateElement(stateElement1, ((StateElement) visit(ctx.sequence_source_chain())));
populateQueryContext(nextStateElement, ctx);
StateInputStream stateInputStream = new StateInputStream(StateInputStream.Type.SEQUENCE, nextStateElement);
populateQueryContext(stateInputStream, ctx);
return stateInputStream;
}
Aggregations