protected Node visitComparisonExpression(final ComparisonExpression node, final Object context) { // use an if/else block here (instead of isPresent.map(...).orElse(...)) so only one object // gets instantiated (issue #1784) if (node.getLocation().isPresent()) { return new ComparisonExpression(node.getLocation().get(), node.getType(), (Expression) process(node.getLeft(), context), (Expression) process(node.getRight(), context)); } else { return new ComparisonExpression(node.getType(), (Expression) process(node.getLeft(), context), (Expression) process(node.getRight(), context)); } }
@Override public Node visitDistinctFrom(final SqlBaseParser.DistinctFromContext context) { Expression expression = new ComparisonExpression( getLocation(context), ComparisonExpression.Type.IS_DISTINCT_FROM, (Expression) visit(context.value), (Expression) visit(context.right) ); if (context.NOT() != null) { expression = new NotExpression(getLocation(context), expression); } return expression; }
@Test public void testInsertInto() { final String insertIntoString = "INSERT INTO test2 SELECT col0, col2, col3 FROM test1 WHERE col0 > " + "100;"; final Statement statement = KSQL_PARSER.buildAst(insertIntoString, metaStore).get(0) .getStatement(); final StatementRewriter statementRewriter = new StatementRewriter(); final Statement rewrittenStatement = (Statement) statementRewriter.process(statement, null); assertThat(rewrittenStatement, instanceOf(InsertInto.class)); final InsertInto insertInto = (InsertInto) rewrittenStatement; assertThat(insertInto.getTarget().toString(), equalTo("TEST2")); final Query query = insertInto.getQuery(); assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification)query.getQueryBody(); assertThat(querySpecification.getSelect().getSelectItems().size(), equalTo(3)); assertThat(querySpecification.getFrom(), not(nullValue())); assertThat(querySpecification.getWhere().isPresent(), equalTo(true)); assertThat(querySpecification.getWhere().get(), instanceOf(ComparisonExpression.class)); final ComparisonExpression comparisonExpression = (ComparisonExpression)querySpecification.getWhere().get(); assertThat(comparisonExpression.getType().getValue(), equalTo(">")); }
@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(); final StatementRewriter statementRewriter = new StatementRewriter(); final Statement rewrittenStatement = (Statement) statementRewriter.process(statement, null); assertThat(rewrittenStatement, instanceOf(Query.class)); final Query query = (Query) rewrittenStatement; assertThat("testProjectFilter fails", query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification)query.getQueryBody(); assertThat("testProjectFilter fails", querySpecification.getWhere().get(), instanceOf(ComparisonExpression.class)); final ComparisonExpression comparisonExpression = (ComparisonExpression)querySpecification.getWhere().get(); assertThat("testProjectFilter fails", comparisonExpression.toString(), equalTo("(TEST1.COL0 > 100)")); assertThat("testProjectFilter fails", querySpecification.getSelect().getSelectItems().size(), equalTo(3)); }
@Override public Node visitComparison(final SqlBaseParser.ComparisonContext context) { return new ComparisonExpression( getLocation(context.comparisonOperator()), getComparisonOperator( ((TerminalNode) context.comparisonOperator().getChild(0)).getSymbol()), (Expression) visit(context.value), (Expression) visit(context.right) ); }
@Test public void testInsertInto() { final String insertIntoString = "INSERT INTO test2 SELECT col0, col2, col3 FROM test1 WHERE col0 > " + "100;"; final Statement statement = KSQL_PARSER.buildAst(insertIntoString, metaStore).get(0) .getStatement(); assertThat(statement, instanceOf(InsertInto.class)); final InsertInto insertInto = (InsertInto) statement; assertThat(insertInto.getTarget().toString(), equalTo("TEST2")); final Query query = insertInto.getQuery(); assertThat(query.getQueryBody(), instanceOf(QuerySpecification.class)); final QuerySpecification querySpecification = (QuerySpecification)query.getQueryBody(); assertThat( querySpecification.getSelect().getSelectItems().size(), equalTo(3)); assertThat(querySpecification.getFrom(), not(nullValue())); assertThat(querySpecification.getWhere().isPresent(), equalTo(true)); assertThat(querySpecification.getWhere().get(), instanceOf(ComparisonExpression.class)); final ComparisonExpression comparisonExpression = (ComparisonExpression)querySpecification.getWhere().get(); assertThat(comparisonExpression.getType().getValue(), equalTo(">")); }
@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 shouldFormatComparisonExpression() { assertThat(ExpressionFormatter.formatExpression( new ComparisonExpression(ComparisonExpression.Type.EQUAL, new LongLiteral(1), new LongLiteral(1))), equalTo("(1 = 1)")); }
@Test public void testSimpleQuery() { final String simpleQuery = "SELECT col0, col2, col3 FROM test1 WHERE col0 > 100;"; final PreparedStatement statement = KSQL_PARSER.buildAst(simpleQuery, metaStore).get(0); assertThat(statement.getStatementText(), is(simpleQuery)); Assert.assertTrue("testSimpleQuery fails", statement.getStatement() instanceof Query); final Query query = (Query) statement.getStatement(); Assert.assertTrue("testSimpleQuery fails", query.getQueryBody() instanceof QuerySpecification); final QuerySpecification querySpecification = (QuerySpecification)query.getQueryBody(); Assert.assertTrue("testSimpleQuery fails", querySpecification.getSelect().getSelectItems().size() == 3); assertThat(querySpecification.getFrom(), not(nullValue())); Assert.assertTrue("testSimpleQuery fails", querySpecification.getWhere().isPresent()); Assert.assertTrue("testSimpleQuery fails", querySpecification.getWhere().get() instanceof ComparisonExpression); final ComparisonExpression comparisonExpression = (ComparisonExpression)querySpecification.getWhere().get(); Assert.assertTrue("testSimpleQuery fails", comparisonExpression.getType().getValue().equalsIgnoreCase(">")); }
rightAlias = new AliasedRelation(right, "r", Collections.emptyList()); criteria = new JoinOn(new ComparisonExpression(ComparisonExpression.Type.EQUAL, new StringLiteral("left.col0"), new StringLiteral("right.col0")));