/** Searched CASE expression */ public void execSearchedCase(HplsqlParser.Expr_case_searchedContext ctx) { int cnt = ctx.bool_expr().size(); boolean found = false; for (int i = 0; i < cnt; i++) { if (evalPop(ctx.bool_expr(i)).isTrue()) { visit(ctx.expr(i)); found = true; break; } } if (!found) { if (ctx.T_ELSE() != null) { visit(ctx.expr(cnt)); } else { evalNull(); } } }
/** Searched CASE expression in executable SQL statement */ public void execSearchedCaseSql(HplsqlParser.Expr_case_searchedContext ctx) { StringBuilder sql = new StringBuilder(); sql.append("CASE"); int cnt = ctx.T_WHEN().size(); for (int i = 0; i < cnt; i++) { sql.append(" WHEN "); sql.append(evalPop(ctx.bool_expr(i)).toString()); sql.append(" THEN "); sql.append(evalPop(ctx.expr(i)).toString()); } if (ctx.T_ELSE() != null) { sql.append(" ELSE "); sql.append(evalPop(ctx.expr(cnt)).toString()); } sql.append(" END"); exec.stackPush(sql); }