/** Unary boolean expression in executable SQL statement */ public Integer execBoolUnarySql(HplsqlParser.Bool_expr_unaryContext ctx) { StringBuilder sql = new StringBuilder(); if (ctx.T_IS() != null) { sql.append(evalPop(ctx.expr(0)).toString()); sql.append(" " + exec.getText(ctx, ctx.T_IS().getSymbol(), ctx.T_NULL().getSymbol())); } else if (ctx.T_BETWEEN() != null) { sql.append(evalPop(ctx.expr(0)).toString()); sql.append(" " + ctx.T_BETWEEN().getText() + " "); sql.append(evalPop(ctx.expr(1)).toString()); sql.append(" " + ctx.T_AND().getText() + " "); sql.append(evalPop(ctx.expr(2)).toString()); } else if (ctx.T_EXISTS() != null) { exec.append(sql, exec.nvl(ctx.T_NOT(), ctx.T_EXISTS()), ctx.T_OPEN_P()); exec.append( sql, evalPop(ctx.select_stmt()).toString(), ctx.T_OPEN_P().getSymbol(), ctx.select_stmt().getStart()); exec.append( sql, ctx.T_CLOSE_P().getText(), ctx.select_stmt().stop, ctx.T_CLOSE_P().getSymbol()); } else if (ctx.bool_expr_single_in() != null) { singleInClauseSql(ctx.bool_expr_single_in(), sql); } else if (ctx.bool_expr_multi_in() != null) { multiInClauseSql(ctx.bool_expr_multi_in(), sql); } exec.stackPush(sql); return 0; }
/** Single value IN clause in executable SQL statement */ public void singleInClauseSql(HplsqlParser.Bool_expr_single_inContext ctx, StringBuilder sql) { sql.append(evalPop(ctx.expr(0)).toString() + " "); exec.append(sql, exec.nvl(ctx.T_NOT(), ctx.T_IN()), ctx.T_OPEN_P()); if (ctx.select_stmt() != null) { exec.append( sql, evalPop(ctx.select_stmt()).toString(), ctx.T_OPEN_P().getSymbol(), ctx.select_stmt().getStart()); exec.append( sql, ctx.T_CLOSE_P().getText(), ctx.select_stmt().stop, ctx.T_CLOSE_P().getSymbol()); } else { int cnt = ctx.expr().size(); for (int i = 1; i < cnt; i++) { sql.append(evalPop(ctx.expr(i)).toString()); if (i + 1 < cnt) { sql.append(", "); } } sql.append(")"); } }