예제 #1
0
파일: Stmt.java 프로젝트: ewascent/hive
 /** Create a temporary table statement */
 public Integer createTemporaryTable(
     ParserRuleContext ctx, Create_table_columnsContext colCtx, String name) {
   String managedName = null;
   String sql = null;
   String columns = exec.getFormattedText(colCtx);
   if (conf.tempTables == Conf.TempTables.NATIVE) {
     sql = "CREATE TEMPORARY TABLE " + name + "\n(" + columns + "\n)";
   } else if (conf.tempTables == Conf.TempTables.MANAGED) {
     managedName = name + "_" + UUID.randomUUID().toString().replace("-", "");
     if (!conf.tempTablesSchema.isEmpty()) {
       managedName = conf.tempTablesSchema + "." + managedName;
     }
     sql = "CREATE TABLE " + managedName + "\n(" + columns + "\n)";
     if (!conf.tempTablesLocation.isEmpty()) {
       sql += "\nLOCATION '" + conf.tempTablesLocation + "/" + managedName + "'";
     }
     if (trace) {
       trace(ctx, "Managed table name: " + managedName);
     }
   }
   if (sql != null) {
     Query query = exec.executeSql(ctx, sql, exec.conf.defaultConnection);
     if (query.error()) {
       exec.signal(query);
       return 1;
     }
     if (managedName != null) {
       exec.addManagedTable(name, managedName);
     }
     exec.setSqlSuccess();
     exec.closeQuery(query, exec.conf.defaultConnection);
   }
   return 0;
 }
예제 #2
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;
 }
예제 #3
0
파일: Stmt.java 프로젝트: ewascent/hive
 /** SQL INSERT VALUES statement */
 public Integer insertValues(HplsqlParser.Insert_stmtContext ctx) {
   trace(ctx, "INSERT VALUES");
   String table = evalPop(ctx.table_name()).toString();
   String conn = exec.getObjectConnection(ctx.table_name().getText());
   Conn.Type type = exec.getConnectionType(conn);
   StringBuilder sql = new StringBuilder();
   if (type == Conn.Type.HIVE) {
     sql.append("INSERT INTO TABLE " + table + " ");
     if (conf.insertValues == Conf.InsertValues.NATIVE) {
       sql.append("VALUES\n(");
     }
   } else {
     sql.append("INSERT INTO " + table);
     if (ctx.insert_stmt_cols() != null) {
       sql.append(" " + exec.getFormattedText(ctx.insert_stmt_cols()));
     }
     sql.append(" VALUES\n(");
   }
   int rows = ctx.insert_stmt_rows().insert_stmt_row().size();
   for (int i = 0; i < rows; i++) {
     HplsqlParser.Insert_stmt_rowContext row = ctx.insert_stmt_rows().insert_stmt_row(i);
     int cols = row.expr().size();
     for (int j = 0; j < cols; j++) {
       String value = evalPop(row.expr(j)).toSqlString();
       if (j == 0 && type == Conn.Type.HIVE && conf.insertValues == Conf.InsertValues.SELECT) {
         sql.append("SELECT ");
       }
       sql.append(value);
       if (j + 1 != cols) {
         sql.append(", ");
       }
     }
     if (type != Conn.Type.HIVE || conf.insertValues == Conf.InsertValues.NATIVE) {
       if (i + 1 == rows) {
         sql.append(")");
       } else {
         sql.append("),\n(");
       }
     } else if (type == Conn.Type.HIVE && conf.insertValues == Conf.InsertValues.SELECT) {
       sql.append(" FROM " + conf.dualTable);
       if (i + 1 < rows) {
         sql.append("\nUNION ALL\n");
       }
     }
   }
   if (trace) {
     trace(ctx, sql.toString());
   }
   Query query = exec.executeSql(ctx, sql.toString(), conn);
   if (query.error()) {
     exec.signal(query);
     return 1;
   }
   exec.setSqlSuccess();
   exec.closeQuery(query, exec.conf.defaultConnection);
   return 0;
 }
예제 #4
0
파일: Stmt.java 프로젝트: ewascent/hive
 /** MERGE statement */
 public Integer merge(HplsqlParser.Merge_stmtContext ctx) {
   trace(ctx, "MERGE");
   String sql = exec.getFormattedText(ctx);
   trace(ctx, sql);
   Query query = exec.executeSql(ctx, sql, exec.conf.defaultConnection);
   if (query.error()) {
     exec.signal(query);
     return 1;
   }
   exec.setSqlSuccess();
   exec.closeQuery(query, exec.conf.defaultConnection);
   return 0;
 }
예제 #5
0
파일: Select.java 프로젝트: nssalian/hive
 /** 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;
 }
예제 #6
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);
 }