Search in sources :

Example 1 with Within

use of org.ballerinalang.siddhi.query.api.aggregation.Within in project ballerina by ballerina-lang.

the class StoreQueryParser method parse.

/**
 * Parse a storeQuery and return corresponding StoreQueryRuntime.
 *
 * @param storeQuery       storeQuery to be parsed.
 * @param siddhiAppContext associated Siddhi app context.
 * @param tableMap         keyvalue containing tables.
 * @param windowMap        keyvalue containing windows.
 * @param aggregationMap   keyvalue containing aggregation runtimes.
 * @return StoreQueryRuntime
 */
public static StoreQueryRuntime parse(StoreQuery storeQuery, SiddhiAppContext siddhiAppContext, Map<String, Table> tableMap, Map<String, Window> windowMap, Map<String, AggregationRuntime> aggregationMap) {
    String queryName = "store_query_" + storeQuery.getInputStore().getStoreId();
    InputStore inputStore = storeQuery.getInputStore();
    int metaPosition = SiddhiConstants.UNKNOWN_STATE;
    Within within = null;
    Expression per = null;
    try {
        SnapshotService.getSkipSnapshotableThreadLocal().set(true);
        Expression onCondition = Expression.value(true);
        MetaStreamEvent metaStreamEvent = new MetaStreamEvent();
        metaStreamEvent.setInputReferenceId(inputStore.getStoreReferenceId());
        if (inputStore instanceof AggregationInputStore) {
            AggregationInputStore aggregationInputStore = (AggregationInputStore) inputStore;
            if (aggregationMap.get(inputStore.getStoreId()) == null) {
                throw new StoreQueryCreationException("Aggregation \"" + inputStore.getStoreId() + "\" has not been defined");
            }
            if (aggregationInputStore.getPer() != null && aggregationInputStore.getWithin() != null) {
                within = aggregationInputStore.getWithin();
                per = aggregationInputStore.getPer();
            } else if (aggregationInputStore.getPer() != null || aggregationInputStore.getWithin() != null) {
                throw new StoreQueryCreationException(inputStore.getStoreId() + " should either have both 'within' and 'per' defined or none.");
            }
            if (((AggregationInputStore) inputStore).getOnCondition() != null) {
                onCondition = ((AggregationInputStore) inputStore).getOnCondition();
            }
        } else if (inputStore instanceof ConditionInputStore) {
            if (((ConditionInputStore) inputStore).getOnCondition() != null) {
                onCondition = ((ConditionInputStore) inputStore).getOnCondition();
            }
        }
        List<VariableExpressionExecutor> variableExpressionExecutors = new ArrayList<>();
        Table table = tableMap.get(inputStore.getStoreId());
        if (table != null) {
            return constructStoreQueryRuntime(table, storeQuery, siddhiAppContext, tableMap, queryName, metaPosition, onCondition, metaStreamEvent, variableExpressionExecutors);
        } else {
            AggregationRuntime aggregation = aggregationMap.get(inputStore.getStoreId());
            if (aggregation != null) {
                return constructStoreQueryRuntime(aggregation, storeQuery, siddhiAppContext, tableMap, queryName, within, per, onCondition, metaStreamEvent, variableExpressionExecutors);
            } else {
                Window window = windowMap.get(inputStore.getStoreId());
                if (window != null) {
                    return constructStoreQueryRuntime(window, storeQuery, siddhiAppContext, tableMap, queryName, metaPosition, onCondition, metaStreamEvent, variableExpressionExecutors);
                } else {
                    throw new StoreQueryCreationException(inputStore.getStoreId() + " is neither a table, aggregation or window");
                }
            }
        }
    } finally {
        SnapshotService.getSkipSnapshotableThreadLocal().set(null);
    }
}
Also used : Window(org.ballerinalang.siddhi.core.window.Window) Table(org.ballerinalang.siddhi.core.table.Table) VariableExpressionExecutor(org.ballerinalang.siddhi.core.executor.VariableExpressionExecutor) ArrayList(java.util.ArrayList) AggregationInputStore(org.ballerinalang.siddhi.query.api.execution.query.input.store.AggregationInputStore) Expression(org.ballerinalang.siddhi.query.api.expression.Expression) ConditionInputStore(org.ballerinalang.siddhi.query.api.execution.query.input.store.ConditionInputStore) AggregationInputStore(org.ballerinalang.siddhi.query.api.execution.query.input.store.AggregationInputStore) InputStore(org.ballerinalang.siddhi.query.api.execution.query.input.store.InputStore) ConditionInputStore(org.ballerinalang.siddhi.query.api.execution.query.input.store.ConditionInputStore) Within(org.ballerinalang.siddhi.query.api.aggregation.Within) StoreQueryCreationException(org.ballerinalang.siddhi.core.exception.StoreQueryCreationException) MetaStreamEvent(org.ballerinalang.siddhi.core.event.stream.MetaStreamEvent) AggregationRuntime(org.ballerinalang.siddhi.core.aggregation.AggregationRuntime)

Example 2 with Within

use of org.ballerinalang.siddhi.query.api.aggregation.Within in project ballerina by ballerina-lang.

the class SiddhiQLBaseVisitorImpl method visitWithin_time_range.

@Override
public Object visitWithin_time_range(SiddhiQLParser.Within_time_rangeContext ctx) {
    Within within;
    if (ctx.end_pattern == null) {
        within = Within.within((Expression) visit(ctx.start_pattern));
    } else {
        within = Within.within((Expression) visit(ctx.start_pattern), (Expression) visit(ctx.end_pattern));
    }
    populateQueryContext(within, ctx);
    return within;
}
Also used : Expression(org.ballerinalang.siddhi.query.api.expression.Expression) Within(org.ballerinalang.siddhi.query.api.aggregation.Within)

Example 3 with Within

use of org.ballerinalang.siddhi.query.api.aggregation.Within in project ballerina by ballerina-lang.

the class SiddhiQLBaseVisitorImpl method visitJoin_stream.

/**
 * {@inheritDoc}
 * <p>The default implementation returns the result of calling
 * {@link #visitChildren} on {@code ctx}.</p>
 *
 * @param ctx
 */
@Override
public Object visitJoin_stream(@NotNull SiddhiQLParser.Join_streamContext ctx) {
    // join_stream
    // :left_source=join_source join right_source=join_source right_unidirectional=UNIDIRECTIONAL (ON expression)?
    // within_time?
    // |left_source=join_source join right_source=join_source (ON expression)? within_time?
    // |left_source=join_source left_unidirectional=UNIDIRECTIONAL join right_source=join_source (ON expression)?
    // within_time?
    // ;
    SingleInputStream leftStream = (SingleInputStream) visit(ctx.left_source);
    SingleInputStream rightStream = (SingleInputStream) visit(ctx.right_source);
    JoinInputStream.Type joinType = (JoinInputStream.Type) visit(ctx.join());
    JoinInputStream.EventTrigger eventTrigger = null;
    Expression onCondition = null;
    Within within = null;
    Expression per = null;
    if (ctx.within_time_range() != null) {
        within = (Within) visit(ctx.within_time_range());
    }
    if (ctx.per() != null) {
        per = (Expression) visit(ctx.per());
    }
    if (ctx.expression() != null) {
        onCondition = (Expression) visit(ctx.expression());
    }
    if (ctx.right_unidirectional != null) {
        eventTrigger = JoinInputStream.EventTrigger.RIGHT;
    } else if (ctx.left_unidirectional != null) {
        eventTrigger = JoinInputStream.EventTrigger.LEFT;
    } else {
        eventTrigger = JoinInputStream.EventTrigger.ALL;
    }
    InputStream inputStream = InputStream.joinStream(leftStream, joinType, rightStream, onCondition, eventTrigger, within, per);
    populateQueryContext(inputStream, ctx);
    return inputStream;
}
Also used : RangePartitionType(org.ballerinalang.siddhi.query.api.execution.partition.RangePartitionType) ValuePartitionType(org.ballerinalang.siddhi.query.api.execution.partition.ValuePartitionType) PartitionType(org.ballerinalang.siddhi.query.api.execution.partition.PartitionType) Expression(org.ballerinalang.siddhi.query.api.expression.Expression) BasicSingleInputStream(org.ballerinalang.siddhi.query.api.execution.query.input.stream.BasicSingleInputStream) SingleInputStream(org.ballerinalang.siddhi.query.api.execution.query.input.stream.SingleInputStream) JoinInputStream(org.ballerinalang.siddhi.query.api.execution.query.input.stream.JoinInputStream) InputStream(org.ballerinalang.siddhi.query.api.execution.query.input.stream.InputStream) BasicSingleInputStream(org.ballerinalang.siddhi.query.api.execution.query.input.stream.BasicSingleInputStream) SingleInputStream(org.ballerinalang.siddhi.query.api.execution.query.input.stream.SingleInputStream) JoinInputStream(org.ballerinalang.siddhi.query.api.execution.query.input.stream.JoinInputStream) AnonymousInputStream(org.ballerinalang.siddhi.query.api.execution.query.input.stream.AnonymousInputStream) StateInputStream(org.ballerinalang.siddhi.query.api.execution.query.input.stream.StateInputStream) Within(org.ballerinalang.siddhi.query.api.aggregation.Within)

Aggregations

Within (org.ballerinalang.siddhi.query.api.aggregation.Within)3 Expression (org.ballerinalang.siddhi.query.api.expression.Expression)3 ArrayList (java.util.ArrayList)1 AggregationRuntime (org.ballerinalang.siddhi.core.aggregation.AggregationRuntime)1 MetaStreamEvent (org.ballerinalang.siddhi.core.event.stream.MetaStreamEvent)1 StoreQueryCreationException (org.ballerinalang.siddhi.core.exception.StoreQueryCreationException)1 VariableExpressionExecutor (org.ballerinalang.siddhi.core.executor.VariableExpressionExecutor)1 Table (org.ballerinalang.siddhi.core.table.Table)1 Window (org.ballerinalang.siddhi.core.window.Window)1 PartitionType (org.ballerinalang.siddhi.query.api.execution.partition.PartitionType)1 RangePartitionType (org.ballerinalang.siddhi.query.api.execution.partition.RangePartitionType)1 ValuePartitionType (org.ballerinalang.siddhi.query.api.execution.partition.ValuePartitionType)1 AggregationInputStore (org.ballerinalang.siddhi.query.api.execution.query.input.store.AggregationInputStore)1 ConditionInputStore (org.ballerinalang.siddhi.query.api.execution.query.input.store.ConditionInputStore)1 InputStore (org.ballerinalang.siddhi.query.api.execution.query.input.store.InputStore)1 AnonymousInputStream (org.ballerinalang.siddhi.query.api.execution.query.input.stream.AnonymousInputStream)1 BasicSingleInputStream (org.ballerinalang.siddhi.query.api.execution.query.input.stream.BasicSingleInputStream)1 InputStream (org.ballerinalang.siddhi.query.api.execution.query.input.stream.InputStream)1 JoinInputStream (org.ballerinalang.siddhi.query.api.execution.query.input.stream.JoinInputStream)1 SingleInputStream (org.ballerinalang.siddhi.query.api.execution.query.input.stream.SingleInputStream)1