Beispiel #1
0
 /** Evaluate the expression and pop value from the stack */
 Var evalPop(ParserRuleContext ctx) {
   exec.visit(ctx);
   if (!exec.stack.isEmpty()) {
     return exec.stackPop();
   }
   return Var.Empty;
 }
Beispiel #2
0
 Var evalPop(ParserRuleContext ctx, long def) {
   if (ctx != null) {
     exec.visit(ctx);
     return exec.stackPop();
   }
   return new Var(def);
 }
Beispiel #3
0
 /** IF statement (Transact-SQL syntax) */
 public Integer ifTsql(HplsqlParser.If_tsql_stmtContext ctx) {
   trace(ctx, "IF");
   visit(ctx.bool_expr());
   if (exec.stackPop().isTrue()) {
     trace(ctx, "IF TRUE executed");
     visit(ctx.single_block_stmt(0));
   } else if (ctx.T_ELSE() != null) {
     trace(ctx, "ELSE executed");
     visit(ctx.single_block_stmt(1));
   }
   return 0;
 }
Beispiel #4
0
 /** Evaluate an expression in executable SQL statement */
 public void execSql(HplsqlParser.ExprContext ctx) {
   StringBuilder sql = new StringBuilder();
   if (ctx.T_OPEN_P() != null) {
     sql.append("(");
     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 {
       sql.append(evalPop(ctx.expr(0)).toString());
       sql.append(")");
     }
   } else if (ctx.T_MUL() != null) {
     sql.append(evalPop(ctx.expr(0)).toString());
     sql.append(" * ");
     sql.append(evalPop(ctx.expr(1)).toString());
   } else if (ctx.T_DIV() != null) {
     sql.append(evalPop(ctx.expr(0)).toString());
     sql.append(" / ");
     sql.append(evalPop(ctx.expr(1)).toString());
   } else if (ctx.T_ADD() != null) {
     sql.append(evalPop(ctx.expr(0)).toString());
     sql.append(" + ");
     sql.append(evalPop(ctx.expr(1)).toString());
   } else if (ctx.T_SUB() != null) {
     sql.append(evalPop(ctx.expr(0)).toString());
     sql.append(" - ");
     sql.append(evalPop(ctx.expr(1)).toString());
   } else if (ctx.interval_item() != null) {
     sql.append(exec.getFormattedText(ctx));
   } else {
     visitChildren(ctx);
     sql.append(exec.stackPop().toString());
   }
   exec.stackPush(sql);
 }