From 50d321af2ca513016ae9b5c3469366fc737fc540 Mon Sep 17 00:00:00 2001 From: mdayakar Date: Fri, 28 Aug 2026 23:13:02 +0530 Subject: [PATCH] HIVE-29850: Remove HOST command from HPLSQL --- .../antlr4/org/apache/hive/hplsql/Hplsql.g4 | 31 +----- .../java/org/apache/hive/hplsql/Exec.java | 95 ------------------- .../apache/hive/hplsql/TestHplsqlLocal.java | 5 - hplsql/src/test/queries/local/seterror.sql | 8 -- .../test/results/local/invalid_syntax.out.txt | 2 +- .../src/test/results/local/seterror.out.txt | 5 - 6 files changed, 2 insertions(+), 144 deletions(-) delete mode 100644 hplsql/src/test/queries/local/seterror.sql delete mode 100644 hplsql/src/test/results/local/seterror.out.txt diff --git a/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4 b/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4 index f2f97fbd34a1..dcac6aff9671 100644 --- a/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4 +++ b/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4 @@ -99,8 +99,6 @@ stmt : | while_stmt | unconditional_loop_stmt | label - | hive - | host | null_stmt | expr_stmt | semicolon_stmt // Placed here to allow null statements ;;... @@ -1195,30 +1193,7 @@ expr_file : file_name | expr ; - -hive : - T_HIVE hive_item* - ; - -hive_item : - T_SUB qident expr - | T_SUB qident L_ID T_EQUAL expr - | T_SUB qident - ; - -host : - '!' host_cmd ';' // OS command - | host_stmt - ; -host_cmd : - .*? - ; - -host_stmt : - T_HOST expr - ; - file_name : L_FILE | ('/' | '.' '/')? qident ('/' qident)* ; @@ -1395,8 +1370,6 @@ non_reserved_words : // Tokens that are not reserved words | T_HASH | T_HAVING | T_HDFS - | T_HIVE - | T_HOST | T_IDENTITY | T_IF | T_IGNORE @@ -1718,9 +1691,7 @@ T_GROUP : G R O U P ; T_HANDLER : H A N D L E R ; T_HASH : H A S H ; T_HAVING : H A V I N G ; -T_HDFS : H D F S ; -T_HIVE : H I V E ; -T_HOST : H O S T ; +T_HDFS : H D F S ; T_IDENTITY : I D E N T I T Y ; T_IF : I F ; T_IGNORE : I G N O R E ; diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java b/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java index 62f067f346ba..763cd8e411ca 100644 --- a/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java +++ b/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java @@ -2283,101 +2283,6 @@ public Integer visitDelete_stmt(HplsqlParser.Delete_stmtContext ctx) { public Integer visitMerge_stmt(HplsqlParser.Merge_stmtContext ctx) { return stmt.merge(ctx); } - - /** - * Run a Hive command line - */ - @Override - public Integer visitHive(@NotNull HplsqlParser.HiveContext ctx) { - trace(ctx, "HIVE"); - ArrayList cmd = new ArrayList<>(); - cmd.add("hive"); - Var params = new Var(Var.Type.STRINGLIST, cmd); - stackPush(params); - visitChildren(ctx); - stackPop(); - try { - String[] cmdarr = new String[cmd.size()]; - cmd.toArray(cmdarr); - if(trace) { - trace(ctx, "HIVE Parameters: " + Utils.toString(cmdarr, ' ')); - } - if (!offline) { - Process p = Runtime.getRuntime().exec(cmdarr); - new StreamGobbler(p.getInputStream(), console).start(); - new StreamGobbler(p.getErrorStream(), console).start(); - int rc = p.waitFor(); - if (trace) { - trace(ctx, "HIVE Process exit code: " + rc); - } - } - } catch (Exception e) { - setSqlCode(SqlCodes.ERROR); - signal(Signal.Type.SQLEXCEPTION, e.getMessage(), e); - return -1; - } - return 0; - } - - @Override - @SuppressWarnings("unchecked") - public Integer visitHive_item(HplsqlParser.Hive_itemContext ctx) { - Var params = stackPeek(); - ArrayList a = (ArrayList)params.value; - String param = ctx.getChild(1).getText(); - switch (param) { - case "e": - a.add("-e"); - a.add(evalPop(ctx.expr()).toString()); - break; - case "f": - a.add("-f"); - a.add(evalPop(ctx.expr()).toString()); - break; - case "hiveconf": - a.add("-hiveconf"); - a.add(ctx.L_ID().toString() + "=" + evalPop(ctx.expr()).toString()); - break; - } - return 0; - } - - /** - * Executing OS command - */ - @Override - public Integer visitHost_cmd(HplsqlParser.Host_cmdContext ctx) { - trace(ctx, "HOST"); - execHost(ctx, ctx.start.getInputStream().getText( - new org.antlr.v4.runtime.misc.Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()))); - return 0; - } - - @Override - public Integer visitHost_stmt(HplsqlParser.Host_stmtContext ctx) { - trace(ctx, "HOST"); - execHost(ctx, evalPop(ctx.expr()).toString()); - return 0; - } - - public void execHost(ParserRuleContext ctx, String cmd) { - try { - if (trace) { - trace(ctx, "HOST Command: " + cmd); - } - Process p = Runtime.getRuntime().exec(cmd); - new StreamGobbler(p.getInputStream(), console).start(); - new StreamGobbler(p.getErrorStream(), console).start(); - int rc = p.waitFor(); - if (trace) { - trace(ctx, "HOST Process exit code: " + rc); - } - setHostCode(rc); - } catch (Exception e) { - setHostCode(1); - signal(Signal.Type.SQLEXCEPTION); - } - } /** * Standalone expression (as a statement) diff --git a/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java b/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java index 14c67417cbf5..05330964f6b1 100644 --- a/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java +++ b/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java @@ -333,11 +333,6 @@ public void testReturn() throws Exception { run("return"); } - @Test - public void testSetError() throws Exception { - run("seterror"); - } - @Test public void testSub() throws Exception { run("sub"); diff --git a/hplsql/src/test/queries/local/seterror.sql b/hplsql/src/test/queries/local/seterror.sql deleted file mode 100644 index 666fbfda2536..000000000000 --- a/hplsql/src/test/queries/local/seterror.sql +++ /dev/null @@ -1,8 +0,0 @@ -BEGIN -HOST 'abcd'; -IF HOSTCODE <> 0 THEN - PRINT 'Correct'; -END IF; -EXCEPTION WHEN OTHERS THEN - PRINT 'FAILED'; -END \ No newline at end of file diff --git a/hplsql/src/test/results/local/invalid_syntax.out.txt b/hplsql/src/test/results/local/invalid_syntax.out.txt index 26eba40e305f..f5004f50f60c 100644 --- a/hplsql/src/test/results/local/invalid_syntax.out.txt +++ b/hplsql/src/test/results/local/invalid_syntax.out.txt @@ -1,3 +1,3 @@ Syntax error at line 1:27 no viable alternative at input 'b,' -Syntax error at line 1:27 mismatched input ',' expecting {, '@', '#', '!', T_ACTION, T_ADD2, T_ALL, T_ALLOCATE, T_ALTER, T_AND, T_ANSI_NULLS, T_ANSI_PADDING, T_AS, T_ASC, T_ASSOCIATE, T_AT, T_AUTO_INCREMENT, T_AVG, T_BATCHSIZE, T_BEGIN, T_BETWEEN, T_BIGINT, T_BINARY_DOUBLE, T_BINARY_FLOAT, T_BIT, T_BODY, T_BREAK, T_BULK, T_BY, T_BYTE, T_CALL, T_CALLER, T_CASCADE, T_CASE, T_CASESPECIFIC, T_CAST, T_CHAR, T_CHARACTER, T_CHARSET, T_CLIENT, T_CLOSE, T_CLUSTERED, T_CMP, T_COLLECT, T_COLLECTION, T_COLUMN, T_COMMENT, T_CONSTANT, T_COMMIT, T_COMPRESS, T_CONCAT, T_CONDITION, T_CONSTRAINT, T_CONTINUE, T_COPY, T_COUNT, T_COUNT_BIG, T_CREATE, T_CREATION, T_CREATOR, T_CS, T_CURRENT, T_CURRENT_SCHEMA, T_CURSOR, T_DATABASE, T_DATA, T_DATE, T_DATETIME, T_DAY, T_DAYS, T_DEC, T_DECIMAL, T_DECLARE, T_DEFAULT, T_DEFERRED, T_DEFINED, T_DEFINER, T_DEFINITION, T_DELETE, T_DELIMITED, T_DELIMITER, T_DESC, T_DESCRIBE, T_DIAGNOSTICS, T_DIR, T_DIRECTORY, T_DISTINCT, T_DISTRIBUTE, T_DO, T_DOUBLE, T_DROP, T_DYNAMIC, T_ENABLE, T_END, T_ENGINE, T_ESCAPED, T_EXCEPT, T_EXEC, T_EXECUTE, T_EXCEPTION, T_EXCLUSIVE, T_EXISTS, T_EXIT, T_FALLBACK, T_FALSE, T_FETCH, T_FIELDS, T_FILE, T_FILES, T_FLOAT, T_FOR, T_FOREIGN, T_FORMAT, T_FOUND, T_FROM, T_FULL, T_FUNCTION, T_GET, T_GLOBAL, T_GO, T_GRANT, T_GROUP, T_HANDLER, T_HASH, T_HAVING, T_HDFS, T_HIVE, T_HOST, T_IDENTITY, T_IF, T_IGNORE, T_IMMEDIATE, T_IN, T_INCLUDE, T_INDEX, T_INITRANS, T_INNER, T_INOUT, T_INSERT, T_INT, T_INT2, T_INT4, T_INT8, T_INTEGER, T_INTERSECT, T_INTERVAL, T_INTO, T_INVOKER, T_IS, T_ISOPEN, T_ITEMS, T_JOIN, T_KEEP, T_KEY, T_KEYS, T_LANGUAGE, T_LEAVE, T_LEFT, T_LIKE, T_LIMIT, T_LINES, T_LOCAL, T_LOCATION, T_LOCATOR, T_LOCATORS, T_LOCKS, T_LOG, T_LOGGED, T_LOGGING, T_LOOP, T_MAP, T_MATCHED, T_MAX, T_MAXTRANS, T_MERGE, T_MESSAGE_TEXT, T_MICROSECOND, T_MICROSECONDS, T_MIN, T_MULTISET, T_NCHAR, T_NEW, T_NVARCHAR, T_NO, T_NOCOUNT, T_NOCOMPRESS, T_NOLOGGING, T_NONE, T_NOT, T_NOTFOUND, T_NULL, T_NUMERIC, T_NUMBER, T_OBJECT, T_OFF, T_ON, T_ONLY, T_OPEN, T_OR, T_ORDER, T_OUT, T_OUTER, T_OVER, T_OVERWRITE, T_OWNER, T_PACKAGE, T_PARTITION, T_PCTFREE, T_PCTUSED, T_PRECISION, T_PRESERVE, T_PRIMARY, T_PRINT, T_PROC, T_PROCEDURE, T_QUALIFY, T_QUERY_BAND, T_QUIT, T_QUOTED_IDENTIFIER, T_RAISE, T_REAL, T_REFERENCES, T_REGEXP, T_REPLACE, T_RESIGNAL, T_RESTRICT, T_RESULT, T_RESULT_SET_LOCATOR, T_RETURN, T_RETURNS, T_REVERSE, T_RIGHT, T_RLIKE, T_ROLE, T_ROLLBACK, T_ROW, T_ROWS, T_ROW_COUNT, T_RR, T_RS, T_PWD, T_TRIM, T_SCHEMA, T_SECOND, T_SECONDS, T_SECURITY, T_SEGMENT, T_SEL, T_SELECT, T_SET, T_SESSION, T_SESSIONS, T_SETS, T_SHARE, T_SIGNAL, T_SIMPLE_DOUBLE, T_SIMPLE_FLOAT, T_SMALLDATETIME, T_SMALLINT, T_SQL, T_SQLEXCEPTION, T_SQLINSERT, T_SQLSTATE, T_SQLWARNING, T_STATS, T_STATISTICS, T_STEP, T_STORAGE, T_STORED, T_STRING, T_SUBDIR, T_SUBSTRING, T_SUM, T_SUMMARY, T_SYS_REFCURSOR, T_TABLE, T_TABLESPACE, T_TEMPORARY, T_TERMINATED, T_TEXTIMAGE_ON, T_THEN, T_TIMESTAMP, T_TITLE, T_TO, T_TOP, T_TRANSACTION, T_TRUE, T_TRUNCATE, T_TYPE, T_UNIQUE, T_UPDATE, T_UR, T_USE, T_USING, T_VALUE, T_VALUES, T_VAR, T_VARCHAR, T_VARCHAR2, T_VARYING, T_VOLATILE, T_WHILE, T_WITH, T_WITHOUT, T_WORK, T_XACT_ABORT, T_XML, T_YES, T_ACTIVITY_COUNT, T_CUME_DIST, T_CURRENT_DATE, T_CURRENT_TIME_MILLIS, T_CURRENT_TIMESTAMP, T_CURRENT_USER, T_DENSE_RANK, T_FIRST_VALUE, T_LAG, T_LAST_VALUE, T_LEAD, T_MAX_PART_STRING, T_MIN_PART_STRING, T_MAX_PART_INT, T_MIN_PART_INT, T_MAX_PART_DATE, T_MIN_PART_DATE, T_PART_COUNT, T_PART_LOC, T_RANK, T_ROW_NUMBER, T_STDEV, T_SYSDATE, T_VARIANCE, T_USER, '+', '/', '.', '<', '*', '(', ';', '-', L_ID, L_S_STRING, L_D_STRING, L_INT, L_DEC, L_LABEL} +Syntax error at line 1:27 mismatched input ',' expecting {, '@', '#', T_ACTION, T_ADD2, T_ALL, T_ALLOCATE, T_ALTER, T_AND, T_ANSI_NULLS, T_ANSI_PADDING, T_AS, T_ASC, T_ASSOCIATE, T_AT, T_AUTO_INCREMENT, T_AVG, T_BATCHSIZE, T_BEGIN, T_BETWEEN, T_BIGINT, T_BINARY_DOUBLE, T_BINARY_FLOAT, T_BIT, T_BODY, T_BREAK, T_BULK, T_BY, T_BYTE, T_CALL, T_CALLER, T_CASCADE, T_CASE, T_CASESPECIFIC, T_CAST, T_CHAR, T_CHARACTER, T_CHARSET, T_CLIENT, T_CLOSE, T_CLUSTERED, T_CMP, T_COLLECT, T_COLLECTION, T_COLUMN, T_COMMENT, T_CONSTANT, T_COMMIT, T_COMPRESS, T_CONCAT, T_CONDITION, T_CONSTRAINT, T_CONTINUE, T_COPY, T_COUNT, T_COUNT_BIG, T_CREATE, T_CREATION, T_CREATOR, T_CS, T_CURRENT, T_CURRENT_SCHEMA, T_CURSOR, T_DATABASE, T_DATA, T_DATE, T_DATETIME, T_DAY, T_DAYS, T_DEC, T_DECIMAL, T_DECLARE, T_DEFAULT, T_DEFERRED, T_DEFINED, T_DEFINER, T_DEFINITION, T_DELETE, T_DELIMITED, T_DELIMITER, T_DESC, T_DESCRIBE, T_DIAGNOSTICS, T_DIR, T_DIRECTORY, T_DISTINCT, T_DISTRIBUTE, T_DO, T_DOUBLE, T_DROP, T_DYNAMIC, T_ENABLE, T_END, T_ENGINE, T_ESCAPED, T_EXCEPT, T_EXEC, T_EXECUTE, T_EXCEPTION, T_EXCLUSIVE, T_EXISTS, T_EXIT, T_FALLBACK, T_FALSE, T_FETCH, T_FIELDS, T_FILE, T_FILES, T_FLOAT, T_FOR, T_FOREIGN, T_FORMAT, T_FOUND, T_FROM, T_FULL, T_FUNCTION, T_GET, T_GLOBAL, T_GO, T_GRANT, T_GROUP, T_HANDLER, T_HASH, T_HAVING, T_HDFS, T_IDENTITY, T_IF, T_IGNORE, T_IMMEDIATE, T_IN, T_INCLUDE, T_INDEX, T_INITRANS, T_INNER, T_INOUT, T_INSERT, T_INT, T_INT2, T_INT4, T_INT8, T_INTEGER, T_INTERSECT, T_INTERVAL, T_INTO, T_INVOKER, T_IS, T_ISOPEN, T_ITEMS, T_JOIN, T_KEEP, T_KEY, T_KEYS, T_LANGUAGE, T_LEAVE, T_LEFT, T_LIKE, T_LIMIT, T_LINES, T_LOCAL, T_LOCATION, T_LOCATOR, T_LOCATORS, T_LOCKS, T_LOG, T_LOGGED, T_LOGGING, T_LOOP, T_MAP, T_MATCHED, T_MAX, T_MAXTRANS, T_MERGE, T_MESSAGE_TEXT, T_MICROSECOND, T_MICROSECONDS, T_MIN, T_MULTISET, T_NCHAR, T_NEW, T_NVARCHAR, T_NO, T_NOCOUNT, T_NOCOMPRESS, T_NOLOGGING, T_NONE, T_NOT, T_NOTFOUND, T_NULL, T_NUMERIC, T_NUMBER, T_OBJECT, T_OFF, T_ON, T_ONLY, T_OPEN, T_OR, T_ORDER, T_OUT, T_OUTER, T_OVER, T_OVERWRITE, T_OWNER, T_PACKAGE, T_PARTITION, T_PCTFREE, T_PCTUSED, T_PRECISION, T_PRESERVE, T_PRIMARY, T_PRINT, T_PROC, T_PROCEDURE, T_QUALIFY, T_QUERY_BAND, T_QUIT, T_QUOTED_IDENTIFIER, T_RAISE, T_REAL, T_REFERENCES, T_REGEXP, T_REPLACE, T_RESIGNAL, T_RESTRICT, T_RESULT, T_RESULT_SET_LOCATOR, T_RETURN, T_RETURNS, T_REVERSE, T_RIGHT, T_RLIKE, T_ROLE, T_ROLLBACK, T_ROW, T_ROWS, T_ROW_COUNT, T_RR, T_RS, T_PWD, T_TRIM, T_SCHEMA, T_SECOND, T_SECONDS, T_SECURITY, T_SEGMENT, T_SEL, T_SELECT, T_SET, T_SESSION, T_SESSIONS, T_SETS, T_SHARE, T_SIGNAL, T_SIMPLE_DOUBLE, T_SIMPLE_FLOAT, T_SMALLDATETIME, T_SMALLINT, T_SQL, T_SQLEXCEPTION, T_SQLINSERT, T_SQLSTATE, T_SQLWARNING, T_STATS, T_STATISTICS, T_STEP, T_STORAGE, T_STORED, T_STRING, T_SUBDIR, T_SUBSTRING, T_SUM, T_SUMMARY, T_SYS_REFCURSOR, T_TABLE, T_TABLESPACE, T_TEMPORARY, T_TERMINATED, T_TEXTIMAGE_ON, T_THEN, T_TIMESTAMP, T_TITLE, T_TO, T_TOP, T_TRANSACTION, T_TRUE, T_TRUNCATE, T_TYPE, T_UNIQUE, T_UPDATE, T_UR, T_USE, T_USING, T_VALUE, T_VALUES, T_VAR, T_VARCHAR, T_VARCHAR2, T_VARYING, T_VOLATILE, T_WHILE, T_WITH, T_WITHOUT, T_WORK, T_XACT_ABORT, T_XML, T_YES, T_ACTIVITY_COUNT, T_CUME_DIST, T_CURRENT_DATE, T_CURRENT_TIME_MILLIS, T_CURRENT_TIMESTAMP, T_CURRENT_USER, T_DENSE_RANK, T_FIRST_VALUE, T_LAG, T_LAST_VALUE, T_LEAD, T_MAX_PART_STRING, T_MIN_PART_STRING, T_MAX_PART_INT, T_MIN_PART_INT, T_MAX_PART_DATE, T_MIN_PART_DATE, T_PART_COUNT, T_PART_LOC, T_RANK, T_ROW_NUMBER, T_STDEV, T_SYSDATE, T_VARIANCE, T_USER, '+', '/', '.', '<', '*', '(', ';', '-', L_ID, L_S_STRING, L_D_STRING, L_INT, L_DEC, L_LABEL} Ln:1 identifier 'CREATE' must be declared. diff --git a/hplsql/src/test/results/local/seterror.out.txt b/hplsql/src/test/results/local/seterror.out.txt deleted file mode 100644 index 37816f2c64e2..000000000000 --- a/hplsql/src/test/results/local/seterror.out.txt +++ /dev/null @@ -1,5 +0,0 @@ -Ln:2 HOST -Ln:2 HOST Command: abcd -Ln:6 EXCEPTION HANDLER -Ln:7 PRINT -FAILED