use of org.wso2.siddhi.query.api.expression.condition.Or in project siddhi by wso2.
the class SetUpdateOrInsertInMemoryTableTestCase method updateFromTableTest5.
@Test
public void updateFromTableTest5() throws InterruptedException, SQLException {
log.info("SET-InMemory-update-or-insert test case 5: assignment expression containing an output attribute " + "with a basic arithmatic operation.");
SiddhiManager siddhiManager = new SiddhiManager();
String streams = "" + "define stream StockStream (symbol string, price float, volume long); " + "define stream UpdateStockStream (symbol string, price float, volume long); " + "define table StockTable (symbol string, price float, volume long); ";
String query = "" + "@info(name = 'query1') " + "from StockStream " + "insert into StockTable ;" + "" + "@info(name = 'query2') " + "from UpdateStockStream " + "update or insert into StockTable " + "set StockTable.price = price + 100 " + " on StockTable.symbol == symbol ;";
SiddhiAppRuntime siddhiAppRuntime = siddhiManager.createSiddhiAppRuntime(streams + query);
InputHandler stockStream = siddhiAppRuntime.getInputHandler("StockStream");
InputHandler updateStockStream = siddhiAppRuntime.getInputHandler("UpdateStockStream");
siddhiAppRuntime.start();
stockStream.send(new Object[] { "WSO2", 55.6f, 100L });
stockStream.send(new Object[] { "IBM", 75.6f, 100L });
stockStream.send(new Object[] { "WSO2", 57.6f, 100L });
updateStockStream.send(new Object[] { "IBM", 100f, 100L });
Thread.sleep(1000);
siddhiAppRuntime.shutdown();
}
use of org.wso2.siddhi.query.api.expression.condition.Or in project siddhi by wso2.
the class SetUpdateOrInsertInMemoryTableTestCase method updateFromTableTest7.
@Test
public void updateFromTableTest7() throws InterruptedException, SQLException {
log.info("SET-InMemory-update-or-insert test case 7: Set clause should be optional.");
SiddhiManager siddhiManager = new SiddhiManager();
String streams = "" + "define stream StockStream (symbol string, price float, volume long); " + "define stream UpdateStockStream (symbol string, price float, volume long); " + "define table StockTable (symbol string, price float, volume long); ";
String query = "" + "@info(name = 'query1') " + "from StockStream " + "insert into StockTable ;" + "" + "@info(name = 'query2') " + "from UpdateStockStream " + "update or insert into StockTable " + " on StockTable.symbol == symbol ;";
SiddhiAppRuntime siddhiAppRuntime = siddhiManager.createSiddhiAppRuntime(streams + query);
InputHandler stockStream = siddhiAppRuntime.getInputHandler("StockStream");
InputHandler updateStockStream = siddhiAppRuntime.getInputHandler("UpdateStockStream");
siddhiAppRuntime.start();
stockStream.send(new Object[] { "WSO2", 55.6f, 100L });
stockStream.send(new Object[] { "IBM", 75.6f, 100L });
stockStream.send(new Object[] { "WSO2", 57.6f, 100L });
updateStockStream.send(new Object[] { "IBM", 100f, 100L });
Thread.sleep(1000);
siddhiAppRuntime.shutdown();
}
use of org.wso2.siddhi.query.api.expression.condition.Or in project siddhi by wso2.
the class SiddhiQLBaseVisitorImpl method visitAttribute_reference.
/**
* {@inheritDoc}
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*
* @param ctx
*/
@Override
public Variable visitAttribute_reference(@NotNull SiddhiQLParser.Attribute_referenceContext ctx) {
// attribute_reference
// : hash1='#'? name1=name ('['attribute_index1=attribute_index']')? (hash2='#' name2=name
// ('['attribute_index2=attribute_index']')?)? '.' attribute_name
// | attribute_name
// ;
Variable variable = Expression.variable((String) visit(ctx.attribute_name()));
if (ctx.name1 != null && ctx.name2 != null) {
// Stream and Function
variable.setStreamId(ctx.hash1 != null, (String) visit(ctx.name1));
if (ctx.attribute_index1 != null) {
variable.setStreamIndex((Integer) visit(ctx.attribute_index1));
}
variable.setFunctionId((String) visit(ctx.name2));
if (ctx.attribute_index2 != null) {
variable.setFunctionIndex((Integer) visit(ctx.attribute_index2));
}
} else if (ctx.name1 != null) {
// name2 == null
if (ctx.hash1 == null) {
// Stream
variable.setStreamId((String) visit(ctx.name1));
if (ctx.attribute_index1 != null) {
variable.setStreamIndex((Integer) visit(ctx.attribute_index1));
}
} else {
// InnerStream or Function
String name = (String) visit(ctx.name1);
if (activeStreams.contains("#" + name)) {
// InnerStream
variable.setStreamId(true, name);
if (ctx.attribute_index1 != null) {
variable.setStreamIndex((Integer) visit(ctx.attribute_index1));
}
} else {
// Function
variable.setFunctionId(name);
if (ctx.attribute_index1 != null) {
variable.setFunctionIndex((Integer) visit(ctx.attribute_index1));
}
}
}
}
populateQueryContext(variable, ctx);
return variable;
}
use of org.wso2.siddhi.query.api.expression.condition.Or in project siddhi by wso2.
the class SiddhiQLBaseVisitorImpl method visitQuery_output.
/**
* {@inheritDoc}
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*
* @param ctx
*/
@Override
public OutputStream visitQuery_output(@NotNull SiddhiQLParser.Query_outputContext ctx) {
if (ctx.INSERT() != null) {
Source source = (Source) visit(ctx.target());
if (ctx.UPDATE() != null && ctx.OR() != null) {
if (source.isInnerStream) {
throw newSiddhiParserException(ctx, "UPDATE OR INTO INSERT be only used with Tables!");
}
if (ctx.output_event_type() != null) {
if (ctx.set_clause() != null) {
OutputStream outputStream = new UpdateOrInsertStream(source.streamId, (OutputStream.OutputEventType) visit(ctx.output_event_type()), (UpdateSet) visit(ctx.set_clause()), (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
} else {
OutputStream outputStream = new UpdateOrInsertStream(source.streamId, (OutputStream.OutputEventType) visit(ctx.output_event_type()), (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
}
} else {
if (ctx.set_clause() != null) {
OutputStream outputStream = new UpdateOrInsertStream(source.streamId, (UpdateSet) visit(ctx.set_clause()), (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
} else {
OutputStream outputStream = new UpdateOrInsertStream(source.streamId, (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
}
}
} else {
if (ctx.output_event_type() != null) {
OutputStream outputStream = new InsertIntoStream(source.streamId, source.isInnerStream, (OutputStream.OutputEventType) visit(ctx.output_event_type()));
populateQueryContext(outputStream, ctx);
return outputStream;
} else {
OutputStream outputStream = new InsertIntoStream(source.streamId, source.isInnerStream);
populateQueryContext(outputStream, ctx);
return outputStream;
}
}
} else if (ctx.DELETE() != null) {
Source source = (Source) visit(ctx.target());
if (source.isInnerStream) {
throw newSiddhiParserException(ctx, "DELETE can be only used with Tables!");
}
if (ctx.output_event_type() != null) {
OutputStream outputStream = new DeleteStream(source.streamId, (OutputStream.OutputEventType) visit(ctx.output_event_type()), (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
} else {
OutputStream outputStream = new DeleteStream(source.streamId, (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
}
} else if (ctx.UPDATE() != null) {
Source source = (Source) visit(ctx.target());
if (source.isInnerStream) {
throw newSiddhiParserException(ctx, "DELETE can be only used with Tables!");
}
if (ctx.output_event_type() != null) {
if (ctx.set_clause() != null) {
OutputStream outputStream = new UpdateStream(source.streamId, (OutputStream.OutputEventType) visit(ctx.output_event_type()), (UpdateSet) visit(ctx.set_clause()), (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
} else {
OutputStream outputStream = new UpdateStream(source.streamId, (OutputStream.OutputEventType) visit(ctx.output_event_type()), (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
}
} else {
if (ctx.set_clause() != null) {
OutputStream outputStream = new UpdateStream(source.streamId, (UpdateSet) visit(ctx.set_clause()), (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
} else {
OutputStream outputStream = new UpdateStream(source.streamId, (Expression) visit(ctx.expression()));
populateQueryContext(outputStream, ctx);
return outputStream;
}
}
} else if (ctx.RETURN() != null) {
if (ctx.output_event_type() != null) {
OutputStream outputStream = new ReturnStream((OutputStream.OutputEventType) visit(ctx.output_event_type()));
populateQueryContext(outputStream, ctx);
return outputStream;
} else {
OutputStream outputStream = new ReturnStream();
populateQueryContext(outputStream, ctx);
return outputStream;
}
} else {
throw newSiddhiParserException(ctx);
}
}
use of org.wso2.siddhi.query.api.expression.condition.Or in project siddhi by wso2.
the class SimpleQueryTestCase method test7.
@Test
public void test7() {
Query query = SiddhiCompiler.parseQuery("from StockStream[7+9.5 < price or 100 <= volume]#window.length(50) " + " " + "select symbol, avg(price) as avgPrice " + "group by symbol " + "having avgPrice!= 50 " + "insert into OutStockStream ;");
AssertJUnit.assertNotNull(query);
Query api = Query.query();
api.from(InputStream.stream("StockStream").filter(Expression.or(Expression.compare(Expression.add(Expression.value(7), Expression.value(9.5)), Compare.Operator.LESS_THAN, Expression.variable("price")), Expression.compare(Expression.value(100), Compare.Operator.LESS_THAN_EQUAL, Expression.variable("volume")))).window("length", Expression.value(50)));
api.select(Selector.selector().select("symbol", Expression.variable("symbol")).select("avgPrice", Expression.function("avg", Expression.variable("price"))).groupBy(Expression.variable("symbol")).having(Expression.compare(Expression.variable("avgPrice"), Compare.Operator.NOT_EQUAL, Expression.value(50))));
api.insertInto("OutStockStream");
AssertJUnit.assertEquals(api, query);
}
Aggregations