@Override protected R visitQuery(final Query node, final C context) { process(node.getQueryBody(), context); return null; }
@Override protected R visitQuery(final Query node, final C context) { process(node.getQueryBody(), context); return null; }
@Override protected Void visitQuery(final Query node, final Integer indent) { processRelation(node.getQueryBody(), indent); if (node.getLimit().isPresent()) { append(indent, "LIMIT " + node.getLimit().get()) .append('\n'); } return null; }
@Override protected Node visitQuery(final Query node, final Node parent) { node.setParent(parent); process(node.getQueryBody(), node); return null; }
private QuerySpecification getQuerySpecification(final Statement statement) { assertThat(statement, instanceOf(Query.class)); final Query query = (Query) statement; assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); return (QuerySpecification) query.getQueryBody(); }
protected Node visitQuery(final Query node, final Object context) { return new Query((QueryBody) process(node.getQueryBody(), context), node.getLimit()); }
@Test public void shouldSetParentsCorrectlyForSimpleQuery() { final Statement statement = getAstWithParent("SELECT col0, col2, col3 FROM test1 WHERE col0 > 100;"); Assert.assertFalse(statement.getParent().isPresent()); assertThat(statement, instanceOf(Query.class)); final Query query = (Query) statement; Assert.assertTrue(query.getQueryBody().getParent().isPresent()); assertThat(query.getQueryBody().getParent().get(), equalTo(query)); assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); final Select select = querySpecification.getSelect(); assertThat(select.getParent().get(), equalTo(querySpecification)); }
@Override public Node visitQuery(final SqlBaseParser.QueryContext context) { final Query body = (Query) visit(context.queryNoWith()); return new Query( getLocation(context), body.getQueryBody(), body.getLimit() ); }
@Test public void shouldSetParentsCorrectlyForQueryWithUDF() { final Statement statement = getAstWithParent("SELECT lcase(col1), concat(col2,'hello'), floor(abs(col3)) FROM test1 t1;"); final Query query = (Query) statement; final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); final SingleColumn firstSelectItem = (SingleColumn) querySpecification.getSelect().getSelectItems().get(0); final FunctionCall functionCall = (FunctionCall) firstSelectItem.getExpression(); assertThat(functionCall.getParent().get(), equalTo(firstSelectItem)); assertThat(functionCall.getArguments().get(0).getParent().get(), equalTo(functionCall)); }
@Test public void testSelectAll() { final String queryStr = "SELECT * FROM test1 t1;"; 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(8)); }
@Test public void shouldSetParentsCorrectlyForCreateStreamAsSelect() { final Statement statement = getAstWithParent("CREATE STREAM bigorders_json WITH (value_format = 'json', " + "kafka_topic='bigorders_topic') AS SELECT * FROM orders WHERE orderunits > 5 ;"); final CreateStreamAsSelect createStreamAsSelect = (CreateStreamAsSelect) statement; final Query query = createStreamAsSelect.getQuery(); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); assertThat(querySpecification.getWhere().get().getParent().get(), equalTo(querySpecification)); assertThat(querySpecification.getFrom().getParent().get(), equalTo(querySpecification)); }
private static SearchedCaseExpression getSearchedCaseExpressionFromCsas(final Statement statement) { final Query query = ((CreateStreamAsSelect) statement).getQuery(); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); final Expression caseExpression = ((SingleColumn) querySpecification.getSelect().getSelectItems().get(0)).getExpression(); return (SearchedCaseExpression) caseExpression; }
@Test public void testSelectAll() { final String queryStr = "SELECT * FROM test1 t1;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); Assert.assertTrue("testSelectAll fails", statement instanceof Query); final Query query = (Query) statement; Assert.assertTrue("testSelectAll fails", query.getQueryBody() instanceof QuerySpecification); final QuerySpecification querySpecification = (QuerySpecification)query.getQueryBody(); Assert.assertTrue("testSelectAll fails", querySpecification.getSelect().getSelectItems() .size() == 8); }
@Test public void testBooleanExpression() { final String queryStr = "SELECT col0 = 10, col2, col3 > col1 FROM test1;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); Assert.assertTrue("testBooleanExpression fails", statement instanceof Query); final Query query = (Query) statement; Assert.assertTrue("testProjection fails", query.getQueryBody() instanceof QuerySpecification); final QuerySpecification querySpecification = (QuerySpecification)query.getQueryBody(); final SingleColumn column0 = (SingleColumn)querySpecification.getSelect().getSelectItems().get(0); Assert.assertTrue("testBooleanExpression fails", column0.getAlias().get().equalsIgnoreCase("KSQL_COL_0")); Assert.assertTrue("testBooleanExpression fails", column0.getExpression().toString().equalsIgnoreCase("(TEST1.COL0 = 10)")); }
@Test public void testBinaryExpression() { final String queryStr = "SELECT col0+10, col2, col3-col1 FROM test1;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); Assert.assertTrue("testBinaryExpression fails", statement instanceof Query); final Query query = (Query) statement; Assert.assertTrue("testBinaryExpression fails", query.getQueryBody() instanceof QuerySpecification); final QuerySpecification querySpecification = (QuerySpecification)query.getQueryBody(); final SingleColumn column0 = (SingleColumn)querySpecification.getSelect().getSelectItems().get(0); Assert.assertTrue("testBinaryExpression fails", column0.getAlias().get().equalsIgnoreCase("KSQL_COL_0")); Assert.assertTrue("testBinaryExpression fails", column0.getExpression().toString().equalsIgnoreCase("(TEST1.COL0 + 10)")); }
@Test public void testProjectFilter() { final String queryStr = "SELECT col0, col2, col3 FROM test1 WHERE col0 > 100;"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); Assert.assertTrue("testSimpleQuery fails", statement instanceof Query); final Query query = (Query) statement; Assert.assertTrue("testProjectFilter fails", query.getQueryBody() instanceof QuerySpecification); final QuerySpecification querySpecification = (QuerySpecification)query.getQueryBody(); Assert.assertTrue("testProjectFilter fails", querySpecification.getWhere().get() instanceof ComparisonExpression); final ComparisonExpression comparisonExpression = (ComparisonExpression)querySpecification.getWhere().get(); Assert.assertTrue("testProjectFilter fails", comparisonExpression.toString().equalsIgnoreCase("(TEST1.COL0 > 100)")); Assert.assertTrue("testProjectFilter fails", querySpecification.getSelect().getSelectItems().size() == 3); }
@Test public void shouldPassJoinQueryParseIfStreamColumnNameWithAliasIsNotAmbiguous() { final String statementString = "CREATE STREAM S AS SELECT itemid.itemid FROM address a JOIN itemid on a.itemid = itemid.itemid;"; final Statement statement = KSQL_PARSER.buildAst(statementString, metaStore).get(0) .getStatement(); assertThat(statement, instanceOf(CreateStreamAsSelect.class)); final Query query = ((CreateStreamAsSelect) statement).getQuery(); assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); assertThat(querySpecification.getSelect().getSelectItems().get(0).toString(), equalTo("ITEMID.ITEMID ITEMID_ITEMID")); }
@Test public void shouldAddPrefixEvenIfColumnNameIsTheSameAsStream() { final String statementString = "CREATE STREAM S AS SELECT address FROM address a;"; final Statement statement = KSQL_PARSER.buildAst(statementString, metaStore).get(0) .getStatement(); assertThat(statement, instanceOf(CreateStreamAsSelect.class)); final Query query = ((CreateStreamAsSelect) statement).getQuery(); assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); assertThat(querySpecification.getSelect().getSelectItems().get(0).toString(), equalTo("A.ADDRESS ADDRESS")); }
private Query mockCSASQuery(final String name) { final Query mockQuery = mock(Query.class); final QuerySpecification mockQuerySpec = mock(QuerySpecification.class); final Table mockRelation = mock(Table.class); expect(mockQuery.getQueryBody()).andStubReturn(mockQuerySpec); expect(mockQuery.getLimit()).andStubReturn(Optional.empty()); expect(mockQuerySpec.getInto()).andStubReturn(mockRelation); expect(mockRelation.getName()).andStubReturn(QualifiedName.of(name)); return mockQuery; }
@Test public void shouldPassIfStreamColumnNameIsNotAmbiguous() { final String statementString = "CREATE STREAM S AS SELECT address.address->city FROM address a;"; final Statement statement = KSQL_PARSER.buildAst(statementString, metaStore).get(0) .getStatement(); assertThat(statement, instanceOf(CreateStreamAsSelect.class)); final Query query = ((CreateStreamAsSelect) statement).getQuery(); assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification) query.getQueryBody(); assertThat(querySpecification.getSelect().getSelectItems().get(0).toString(), equalTo("FETCH_FIELD_FROM_STRUCT(ADDRESS.ADDRESS, 'CITY') ADDRESS__CITY")); }