Exemplo n.º 1
0
 /** Comparison operator */
 public void operatorCompare(
     HplsqlParser.Bool_expr_binaryContext ctx, HplsqlParser.Bool_expr_binary_operatorContext op) {
   Var v1 = evalPop(ctx.expr(0));
   Var v2 = evalPop(ctx.expr(1));
   int cmp = v1.compareTo(v2);
   boolean bool = false;
   if (op.T_GREATER() != null) {
     if (cmp > 0) {
       bool = true;
     }
   } else if (op.T_GREATEREQUAL() != null) {
     if (cmp >= 0) {
       bool = true;
     }
   }
   if (op.T_LESS() != null) {
     if (cmp < 0) {
       bool = true;
     }
   } else if (op.T_LESSEQUAL() != null) {
     if (cmp <= 0) {
       bool = true;
     }
   }
   exec.stackPush(bool);
 }
Exemplo n.º 2
0
 /** WHERE clause */
 public Integer where(HplsqlParser.Where_clauseContext ctx) {
   StringBuilder sql = new StringBuilder();
   sql.append(ctx.T_WHERE().getText());
   sql.append(" " + evalPop(ctx.bool_expr()));
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 3
0
 public Integer subselect(HplsqlParser.Subselect_stmtContext ctx) {
   StringBuilder sql = new StringBuilder();
   if (ctx.T_SELECT() != null) {
     sql.append(ctx.T_SELECT().getText());
   }
   sql.append(" " + evalPop(ctx.select_list()));
   if (ctx.from_clause() != null) {
     sql.append(" " + evalPop(ctx.from_clause()));
   } else {
     sql.append(" FROM " + conf.dualTable);
   }
   if (ctx.where_clause() != null) {
     sql.append(" " + evalPop(ctx.where_clause()));
   }
   if (ctx.group_by_clause() != null) {
     sql.append(" " + getText(ctx.group_by_clause()));
   }
   if (ctx.having_clause() != null) {
     sql.append(" " + getText(ctx.having_clause()));
   }
   if (ctx.order_by_clause() != null) {
     sql.append(" " + getText(ctx.order_by_clause()));
   }
   if (ctx.select_options() != null) {
     sql.append(" " + evalPop(ctx.select_options()));
   }
   if (ctx.select_list().select_list_limit() != null) {
     sql.append(" LIMIT " + evalPop(ctx.select_list().select_list_limit().expr()));
   }
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 4
0
 /** 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;
 }
Exemplo n.º 5
0
 /** FROM TABLE (VALUES ...) clause */
 public Integer fromTableValues(HplsqlParser.From_table_values_clauseContext ctx) {
   StringBuilder sql = new StringBuilder();
   int rows = ctx.from_table_values_row().size();
   sql.append("(");
   for (int i = 0; i < rows; i++) {
     int cols = ctx.from_table_values_row(i).expr().size();
     int cols_as = ctx.from_alias_clause().L_ID().size();
     sql.append("SELECT ");
     for (int j = 0; j < cols; j++) {
       sql.append(evalPop(ctx.from_table_values_row(i).expr(j)));
       if (j < cols_as) {
         sql.append(" AS ");
         sql.append(ctx.from_alias_clause().L_ID(j));
       }
       if (j + 1 < cols) {
         sql.append(", ");
       }
     }
     sql.append(" FROM " + conf.dualTable);
     if (i + 1 < rows) {
       sql.append("\nUNION ALL\n");
     }
   }
   sql.append(") ");
   if (ctx.from_alias_clause() != null) {
     sql.append(ctx.from_alias_clause().ident().getText());
   }
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 6
0
 /** Binary boolean expression in executable SQL statement */
 public Integer execBoolBinarySql(HplsqlParser.Bool_expr_binaryContext ctx) {
   StringBuilder sql = new StringBuilder();
   sql.append(evalPop(ctx.expr(0)).toString());
   sql.append(" " + exec.getFormattedText(ctx.bool_expr_binary_operator()) + " ");
   sql.append(evalPop(ctx.expr(1)).toString());
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 7
0
 /** Equality operator */
 public void operatorEqual(HplsqlParser.Bool_expr_binaryContext ctx, boolean equal) {
   Var v1 = evalPop(ctx.expr(0));
   Var v2 = evalPop(ctx.expr(1));
   boolean eq = v1.equals(v2);
   if (!equal) {
     eq = !eq;
   }
   exec.stackPush(eq);
 }
Exemplo n.º 8
0
 /** Single table name in FROM */
 public Integer fromTable(HplsqlParser.From_table_name_clauseContext ctx) {
   StringBuilder sql = new StringBuilder();
   sql.append(evalPop(ctx.table_name()));
   if (ctx.from_alias_clause() != null) {
     sql.append(" ").append(exec.getText(ctx.from_alias_clause()));
   }
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 9
0
 /** Division operator */
 public void operatorDiv(HplsqlParser.ExprContext ctx) {
   Var v1 = evalPop(ctx.expr(0));
   Var v2 = evalPop(ctx.expr(1));
   if (v1.value == null || v2.value == null) {
     evalNull();
   } else if (v1.type == Type.BIGINT && v2.type == Type.BIGINT) {
     exec.stackPush(new Var((Long) v1.value / (Long) v2.value));
   } else {
     exec.signal(Signal.Type.UNSUPPORTED_OPERATION, "Unsupported data types in division operator");
   }
 }
Exemplo n.º 10
0
 /** FROM clause */
 public Integer from(HplsqlParser.From_clauseContext ctx) {
   StringBuilder sql = new StringBuilder();
   sql.append(ctx.T_FROM().getText()).append(" ");
   sql.append(evalPop(ctx.from_table_clause()));
   int cnt = ctx.from_join_clause().size();
   for (int i = 0; i < cnt; i++) {
     sql.append(evalPop(ctx.from_join_clause(i)));
   }
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 11
0
 /** Subtraction operator */
 public void operatorSub(HplsqlParser.ExprContext ctx) {
   Var v1 = evalPop(ctx.expr(0));
   Var v2 = evalPop(ctx.expr(1));
   if (v1.value == null || v2.value == null) {
     evalNull();
   } else if (v1.type == Type.BIGINT && v2.type == Type.BIGINT) {
     exec.stackPush(new Var((Long) v1.value - (Long) v2.value));
   } else if (v1.type == Type.DATE && v2.type == Type.BIGINT) {
     exec.stackPush(changeDateByInt((Date) v1.value, (Long) v2.value, false /*subtract*/));
   } else if (v1.type == Type.DATE && v2.type == Type.INTERVAL) {
     exec.stackPush(
         new Var(((Interval) v2.value).dateChange((Date) v1.value, false /*subtract*/)));
   } else if (v1.type == Type.TIMESTAMP && v2.type == Type.INTERVAL) {
     exec.stackPush(
         new Var(
             ((Interval) v2.value).timestampChange((Timestamp) v1.value, false /*subtract*/),
             v1.scale));
   } else {
     evalNull();
   }
 }
Exemplo n.º 12
0
 /** Part of SELECT */
 public Integer fullselect(HplsqlParser.Fullselect_stmtContext ctx) {
   int cnt = ctx.fullselect_stmt_item().size();
   StringBuilder sql = new StringBuilder();
   for (int i = 0; i < cnt; i++) {
     String part = evalPop(ctx.fullselect_stmt_item(i)).toString();
     sql.append(part);
     if (i + 1 != cnt) {
       sql.append("\n" + getText(ctx.fullselect_set_clause(i)) + "\n");
     }
   }
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 13
0
 /** String concatenation operator in executable SQL statement */
 public void operatorConcatSql(HplsqlParser.Expr_concatContext ctx) {
   StringBuilder sql = new StringBuilder();
   sql.append("CONCAT(");
   int cnt = ctx.expr_concat_item().size();
   for (int i = 0; i < cnt; i++) {
     sql.append(evalPop(ctx.expr_concat_item(i)).toString());
     if (i + 1 < cnt) {
       sql.append(", ");
     }
   }
   sql.append(")");
   exec.stackPush(sql);
 }
Exemplo n.º 14
0
 /** Evaluate a boolean expression in executable SQL statement */
 public void execBoolSql(HplsqlParser.Bool_exprContext ctx) {
   StringBuilder sql = new StringBuilder();
   if (ctx.T_OPEN_P() != null) {
     sql.append("(");
     sql.append(evalPop(ctx.bool_expr(0)).toString());
     sql.append(")");
   } else if (ctx.bool_expr_atom() != null) {
     sql.append(evalPop(ctx.bool_expr_atom()).toString());
   } else if (ctx.bool_expr_logical_operator() != null) {
     sql.append(evalPop(ctx.bool_expr(0)).toString());
     sql.append(" " + ctx.bool_expr_logical_operator().getText() + " ");
     sql.append(evalPop(ctx.bool_expr(1)).toString());
   }
   exec.stackPush(sql);
 }
Exemplo n.º 15
0
 /** JOIN clause in FROM */
 public Integer fromJoin(HplsqlParser.From_join_clauseContext ctx) {
   StringBuilder sql = new StringBuilder();
   if (ctx.T_COMMA() != null) {
     sql.append(", ");
     sql.append(evalPop(ctx.from_table_clause()));
   } else if (ctx.from_join_type_clause() != null) {
     sql.append(" ");
     sql.append(exec.getText(ctx.from_join_type_clause()));
     sql.append(" ");
     sql.append(evalPop(ctx.from_table_clause()));
     sql.append(" ");
     sql.append(exec.getText(ctx, ctx.T_ON().getSymbol(), ctx.bool_expr().getStop()));
   }
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 16
0
 /** Binary boolean expression */
 public Integer execBoolBinary(HplsqlParser.Bool_expr_binaryContext ctx) {
   HplsqlParser.Bool_expr_binary_operatorContext op = ctx.bool_expr_binary_operator();
   if (op.T_EQUAL() != null || op.T_EQUAL2() != null) {
     operatorEqual(ctx, true);
   } else if (op.T_NOTEQUAL() != null || op.T_NOTEQUAL2() != null) {
     operatorEqual(ctx, false);
   } else if (op.T_GREATER() != null
       || op.T_LESS() != null
       || op.T_GREATEREQUAL() != null
       || op.T_LESSEQUAL() != null) {
     operatorCompare(ctx, op);
   } else {
     exec.stackPush(false);
   }
   return 0;
 }
Exemplo n.º 17
0
 /** 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);
 }
Exemplo n.º 18
0
 /** Common table expression (WITH clause) */
 public Integer cte(HplsqlParser.Cte_select_stmtContext ctx) {
   int cnt = ctx.cte_select_stmt_item().size();
   StringBuilder sql = new StringBuilder();
   sql.append("WITH ");
   for (int i = 0; i < cnt; i++) {
     HplsqlParser.Cte_select_stmt_itemContext c = ctx.cte_select_stmt_item(i);
     sql.append(c.ident().getText());
     if (c.cte_select_cols() != null) {
       sql.append(" " + exec.getFormattedText(c.cte_select_cols()));
     }
     sql.append(" AS (");
     sql.append(evalPop(ctx.cte_select_stmt_item(i).fullselect_stmt()).toString());
     sql.append(")");
     if (i + 1 != cnt) {
       sql.append(",\n");
     }
   }
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 19
0
 /** Cursor attribute %ISOPEN, %FOUND and %NOTFOUND */
 public void execCursorAttribute(HplsqlParser.Expr_cursor_attributeContext ctx) {
   String name = ctx.ident().getText();
   Var val = new Var(Var.Type.BOOL);
   Var cursor = exec.findCursor(name);
   if (cursor != null) {
     Query query = (Query) cursor.value;
     if (query != null) {
       if (ctx.T_ISOPEN() != null) {
         val.setValue(query.isOpen());
       } else if (ctx.T_FOUND() != null) {
         val.setValue(query.isFound());
       } else if (ctx.T_NOTFOUND() != null) {
         val.setValue(query.isNotFound());
       }
     }
     exec.stackPush(val);
   } else {
     trace(ctx, "Cursor not found: " + name);
     exec.signal(Signal.Type.SQLEXCEPTION);
   }
 }
Exemplo n.º 20
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);
 }
Exemplo n.º 21
0
 /** Unary boolean expression */
 public Integer execBoolUnary(HplsqlParser.Bool_expr_unaryContext ctx) {
   boolean val = false;
   if (ctx.T_IS() != null) {
     val = evalPop(ctx.expr(0)).isNull();
     if (ctx.T_NOT() != null) {
       val = !val;
     }
   } else if (ctx.T_BETWEEN() != null) {
     Var v = evalPop(ctx.expr(0));
     Var v1 = evalPop(ctx.expr(1));
     int cmp = v.compareTo(v1);
     if (cmp >= 0) {
       Var v2 = evalPop(ctx.expr(2));
       cmp = v.compareTo(v2);
       if (cmp <= 0) {
         val = true;
       }
     }
   }
   exec.stackPush(val);
   return 0;
 }
Exemplo n.º 22
0
 /** SELECT list */
 public Integer selectList(HplsqlParser.Select_listContext ctx) {
   StringBuilder sql = new StringBuilder();
   if (ctx.select_list_set() != null) {
     sql.append(exec.getText(ctx.select_list_set())).append(" ");
   }
   int cnt = ctx.select_list_item().size();
   for (int i = 0; i < cnt; i++) {
     if (ctx.select_list_item(i).select_list_asterisk() == null) {
       sql.append(evalPop(ctx.select_list_item(i).expr()));
       if (ctx.select_list_item(i).select_list_alias() != null) {
         sql.append(" " + exec.getText(ctx.select_list_item(i).select_list_alias()));
       }
     } else {
       sql.append(exec.getText(ctx.select_list_item(i).select_list_asterisk()));
     }
     if (i + 1 < cnt) {
       sql.append(", ");
     }
   }
   exec.stackPush(sql);
   return 0;
 }
Exemplo n.º 23
0
 /** Evaluate a boolean expression */
 public void execBool(HplsqlParser.Bool_exprContext ctx) {
   if (ctx.bool_expr_atom() != null) {
     eval(ctx.bool_expr_atom());
     return;
   }
   Var result = evalPop(ctx.bool_expr(0));
   if (ctx.T_OPEN_P() != null) {
     if (ctx.T_NOT() != null) {
       result.negate();
     }
   } else if (ctx.bool_expr_logical_operator() != null) {
     if (ctx.bool_expr_logical_operator().T_AND() != null) {
       if (result.isTrue()) {
         result = evalPop(ctx.bool_expr(1));
       }
     } else if (ctx.bool_expr_logical_operator().T_OR() != null) {
       if (!result.isTrue()) {
         result = evalPop(ctx.bool_expr(1));
       }
     }
   }
   exec.stackPush(result);
 }
Exemplo n.º 24
0
 /** Executing or building SELECT statement */
 public Integer select(HplsqlParser.Select_stmtContext ctx) {
   if (ctx.parent instanceof HplsqlParser.StmtContext) {
     exec.stmtConnList.clear();
     trace(ctx, "SELECT");
   }
   boolean oldBuildSql = exec.buildSql;
   exec.buildSql = true;
   StringBuilder sql = new StringBuilder();
   if (ctx.cte_select_stmt() != null) {
     sql.append(evalPop(ctx.cte_select_stmt()).toString());
     sql.append("\n");
   }
   sql.append(evalPop(ctx.fullselect_stmt()).toString());
   exec.buildSql = oldBuildSql;
   if (!(ctx.parent instanceof HplsqlParser.StmtContext)) { // No need to execute at this stage
     exec.stackPush(sql);
     return 0;
   }
   if (trace && ctx.parent instanceof HplsqlParser.StmtContext) {
     trace(ctx, sql.toString());
   }
   if (exec.getOffline()) {
     trace(ctx, "Not executed - offline mode set");
     return 0;
   }
   String conn = exec.getStatementConnection();
   Query query = exec.executeQuery(ctx, sql.toString(), conn);
   if (query.error()) {
     exec.signal(query);
     return 1;
   }
   trace(ctx, "SELECT completed successfully");
   exec.setSqlSuccess();
   try {
     ResultSet rs = query.getResultSet();
     ResultSetMetaData rm = null;
     if (rs != null) {
       rm = rs.getMetaData();
     }
     int into_cnt = getIntoCount(ctx);
     if (into_cnt > 0) {
       trace(ctx, "SELECT INTO statement executed");
       if (rs.next()) {
         for (int i = 1; i <= into_cnt; i++) {
           String into_name = getIntoVariable(ctx, i - 1);
           Var var = exec.findVariable(into_name);
           if (var != null) {
             var.setValue(rs, rm, i);
             if (trace) {
               trace(ctx, "COLUMN: " + rm.getColumnName(i) + ", " + rm.getColumnTypeName(i));
               trace(ctx, "SET " + var.getName() + " = " + var.toString());
             }
           } else {
             trace(ctx, "Variable not found: " + into_name);
           }
         }
         exec.incRowCount();
         exec.setSqlSuccess();
       } else {
         exec.setSqlCode(100);
         exec.signal(Signal.Type.NOTFOUND);
       }
     }
     // Print all results for standalone SELECT statement
     else if (ctx.parent instanceof HplsqlParser.StmtContext) {
       int cols = rm.getColumnCount();
       if (trace) {
         trace(ctx, "Standalone SELECT executed: " + cols + " columns in the result set");
       }
       while (rs.next()) {
         for (int i = 1; i <= cols; i++) {
           if (i > 1) {
             System.out.print("\t");
           }
           System.out.print(rs.getString(i));
         }
         System.out.println("");
         exec.incRowCount();
       }
     }
     // Scalar subquery
     else {
       trace(ctx, "Scalar subquery executed, first row and first column fetched only");
       if (rs.next()) {
         exec.stackPush(new Var().setValue(rs, rm, 1));
         exec.setSqlSuccess();
       } else {
         evalNull();
         exec.setSqlCode(100);
       }
     }
   } catch (SQLException e) {
     exec.signal(query);
     exec.closeQuery(query, exec.conf.defaultConnection);
     return 1;
   }
   exec.closeQuery(query, exec.conf.defaultConnection);
   return 0;
 }
Exemplo n.º 25
0
 /** Evaluate the expression to NULL */
 void evalNull() {
   exec.stackPush(Var.Null);
 }
Exemplo n.º 26
0
 /** Create an interval variable */
 public void createInterval(HplsqlParser.ExprContext ctx) {
   int num = evalPop(ctx.expr(0)).intValue();
   Interval interval = new Interval().set(num, ctx.interval_item().getText());
   exec.stackPush(new Var(interval));
 }
Exemplo n.º 27
0
 /** SELECT statement options - LIMIT n, WITH UR i.e */
 public Integer option(HplsqlParser.Select_options_itemContext ctx) {
   if (ctx.T_LIMIT() != null) {
     exec.stackPush("LIMIT " + evalPop(ctx.expr()));
   }
   return 0;
 }
Exemplo n.º 28
0
 /** Evaluate the expression to specified String value */
 void evalString(String string) {
   exec.stackPush(new Var(string));
 }