protected Node visitQuerySpecification(final QuerySpecification node, final Object context) { final Optional<WindowExpression> windowExpression = node.getWindowExpression().isPresent() ? Optional.ofNullable((WindowExpression) process(node.getWindowExpression().get(), context)) : Optional.empty(); final Optional<Expression> where = node.getWhere().isPresent()
@Test public void testSelectHoppingWindow() { final String queryStr = "select itemid, sum(orderunits) from orders window HOPPING ( size 30 second, advance by 5" + " seconds) " + "where " + "orderunits" + " > 5 group by itemid;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); final StatementRewriter statementRewriter = new StatementRewriter(); final Statement rewrittenStatement = (Statement) statementRewriter.process(statement, null); assertThat(rewrittenStatement, instanceOf(Query.class)); final Query query = (Query) rewrittenStatement; assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); assertThat(querySpecification.getSelect().getSelectItems().size(), equalTo(2)); assertThat(querySpecification.getWhere().get().toString(), equalTo("(ORDERS.ORDERUNITS > 5)")); assertThat(((AliasedRelation)querySpecification.getFrom()).getAlias().toUpperCase(), equalTo("ORDERS")); assertThat("window expression isn't present", querySpecification .getWindowExpression().isPresent()); assertThat(querySpecification.getWindowExpression().get().toString().toUpperCase(), equalTo(" WINDOW STREAMWINDOW HOPPING ( SIZE 30 SECONDS , ADVANCE BY 5 SECONDS ) ")); }
@Test public void testSelectTumblingWindow() { final String queryStr = "select itemid, sum(orderunits) from orders window TUMBLING ( size 30 second) where orderunits > 5 group by itemid;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); final StatementRewriter statementRewriter = new StatementRewriter(); final Statement rewrittenStatement = (Statement) statementRewriter.process(statement, null); assertThat(rewrittenStatement, instanceOf(Query.class)); final Query query = (Query) rewrittenStatement; assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); assertThat(querySpecification.getSelect().getSelectItems().size(), equalTo(2)); assertThat(querySpecification.getWhere().get().toString(), equalTo("(ORDERS.ORDERUNITS > 5)")); assertThat(((AliasedRelation)querySpecification.getFrom()).getAlias(), equalTo("ORDERS")); Assert.assertTrue( querySpecification.getWindowExpression().isPresent()); assertThat(querySpecification .getWindowExpression().get().toString(), equalTo(" WINDOW STREAMWINDOW TUMBLING ( SIZE 30 SECONDS ) ")); }
@Test public void testSelectSessionWindow() { final String queryStr = "select itemid, sum(orderunits) from orders window SESSION ( 30 second) where " + "orderunits > 5 group by itemid;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); final StatementRewriter statementRewriter = new StatementRewriter(); final Statement rewrittenStatement = (Statement) statementRewriter.process(statement, null); assertThat(rewrittenStatement, instanceOf(Query.class)); final Query query = (Query) rewrittenStatement; assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); assertThat(querySpecification.getSelect().getSelectItems().size(), equalTo(2)); assertThat(querySpecification.getWhere().get().toString(), equalTo("(ORDERS.ORDERUNITS > 5)")); assertThat(((AliasedRelation)querySpecification.getFrom()).getAlias(), equalTo("ORDERS")); Assert.assertTrue( querySpecification.getWindowExpression().isPresent()); assertThat(querySpecification .getWindowExpression().get().toString(), equalTo(" WINDOW STREAMWINDOW SESSION " + "( 30 SECONDS ) ")); }
@Test public void testSelectHoppingWindow() { final String queryStr = "select itemid, sum(orderunits) from orders window HOPPING ( size 30 second, advance by 5" + " seconds) " + "where " + "orderunits" + " > 5 group by itemid;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); assertThat(statement, instanceOf(Query.class)); final Query query = (Query) statement; assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); assertThat(querySpecification.getSelect().getSelectItems().size(), equalTo(2)); assertThat(querySpecification.getWhere().get().toString(), equalTo("(ORDERS.ORDERUNITS > 5)")); assertThat(((AliasedRelation)querySpecification.getFrom()).getAlias().toUpperCase(), equalTo("ORDERS")); Assert.assertTrue("window expression isn't present", querySpecification .getWindowExpression().isPresent()); assertThat(querySpecification.getWindowExpression().get().toString().toUpperCase(), equalTo(" WINDOW STREAMWINDOW HOPPING ( SIZE 30 SECONDS , ADVANCE BY 5 SECONDS ) ")); }
@Test public void testSelectTumblingWindow() { final String queryStr = "select itemid, sum(orderunits) from orders window TUMBLING ( size 30 second) where orderunits > 5 group by itemid;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); Assert.assertTrue("testSelectTumblingWindow failed.", statement instanceof Query); final Query query = (Query) statement; Assert.assertTrue("testSelectTumblingWindow failed.", query.getQueryBody() instanceof QuerySpecification); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); Assert.assertTrue("testCreateTable failed.", querySpecification.getSelect().getSelectItems ().size() == 2); Assert.assertTrue("testSelectTumblingWindow failed.", querySpecification.getWhere().get().toString().equalsIgnoreCase("(ORDERS.ORDERUNITS > 5)")); Assert.assertTrue("testSelectTumblingWindow failed.", ((AliasedRelation)querySpecification.getFrom()).getAlias().equalsIgnoreCase("ORDERS")); Assert.assertTrue("testSelectTumblingWindow failed.", querySpecification .getWindowExpression().isPresent()); Assert.assertTrue("testSelectTumblingWindow failed.", querySpecification .getWindowExpression().get().toString().equalsIgnoreCase(" WINDOW STREAMWINDOW TUMBLING ( SIZE 30 SECONDS ) ")); }
@Test public void testSelectSessionWindow() { final String queryStr = "select itemid, sum(orderunits) from orders window SESSION ( 30 second) where " + "orderunits > 5 group by itemid;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); Assert.assertTrue("testSelectSessionWindow failed.", statement instanceof Query); final Query query = (Query) statement; Assert.assertTrue("testSelectSessionWindow failed.", query.getQueryBody() instanceof QuerySpecification); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); Assert.assertTrue("testCreateTable failed.", querySpecification.getSelect().getSelectItems ().size() == 2); Assert.assertTrue("testSelectSessionWindow failed.", querySpecification.getWhere().get().toString().equalsIgnoreCase("(ORDERS.ORDERUNITS > 5)")); Assert.assertTrue("testSelectSessionWindow failed.", ((AliasedRelation)querySpecification.getFrom()).getAlias().equalsIgnoreCase("ORDERS")); Assert.assertTrue("testSelectSessionWindow failed.", querySpecification .getWindowExpression().isPresent()); Assert.assertTrue("testSelectSessionWindow failed.", querySpecification .getWindowExpression().get().toString().equalsIgnoreCase(" WINDOW STREAMWINDOW SESSION " + "( 30 SECONDS ) ")); }
query.isShouldCreateInto(), query.getFrom(), query.getWindowExpression(), query.getWhere(), query.getGroupBy(),