@Override protected R visitWhenClause(final WhenClause node, final C context) { process(node.getOperand(), context); process(node.getResult(), context); return null; }
@Override protected String visitWhenClause(final WhenClause node, final Boolean unmangleNames) { return "WHEN " + process(node.getOperand(), unmangleNames) + " THEN " + process( node.getResult(), unmangleNames); }
@Override protected R visitWhenClause(final WhenClause node, final C context) { process(node.getOperand(), context); process(node.getResult(), context); return null; }
protected Node visitWhenClause(final WhenClause 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 WhenClause(node.getLocation().get(), (Expression) process(node.getOperand(), context), (Expression) process(node.getResult(), context)); } else { return new WhenClause((Expression) process(node.getOperand(), context), (Expression) process(node.getResult(), context)); } }
@Override protected Node visitWhenClause(final WhenClause node, final Node parent) { node.setParent(parent); process(node.getOperand(), node); process(node.getResult(), node); return null; }
@Test public void shouldBuildSearchedCaseStatement() { // Given: final String statementString = "CREATE STREAM S AS SELECT CASE WHEN orderunits < 10 THEN 'small' WHEN orderunits < 100 THEN 'medium' ELSE 'large' END FROM orders;"; // When: final Statement statement = KSQL_PARSER.buildAst(statementString, metaStore).get(0) .getStatement(); // Then: final SearchedCaseExpression searchedCaseExpression = getSearchedCaseExpressionFromCsas(statement); assertThat(searchedCaseExpression.getWhenClauses().size(), equalTo(2)); assertThat(searchedCaseExpression.getWhenClauses().get(0).getOperand().toString(), equalTo("(ORDERS.ORDERUNITS < 10)")); assertThat(searchedCaseExpression.getWhenClauses().get(0).getResult().toString(), equalTo("'small'")); assertThat(searchedCaseExpression.getWhenClauses().get(1).getOperand().toString(), equalTo("(ORDERS.ORDERUNITS < 100)")); assertThat(searchedCaseExpression.getWhenClauses().get(1).getResult().toString(), equalTo("'medium'")); assertTrue(searchedCaseExpression.getDefaultValue().isPresent()); assertThat(searchedCaseExpression.getDefaultValue().get().toString(), equalTo("'large'")); }