This is an automated email from the ASF dual-hosted git repository.

kasakrisz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 24b4de68d8a HIVE-29555: [HPLSQL]Errorcode handling is not proper in 
HPLSQL. (#6422)
24b4de68d8a is described below

commit 24b4de68d8aca689132b053d41c7579d17d64042
Author: Dayakar M <[email protected]>
AuthorDate: Wed Apr 29 15:57:18 2026 +0530

    HIVE-29555: [HPLSQL]Errorcode handling is not proper in HPLSQL. (#6422)
    
    Co-authored-by: mdayakar <[email protected]>
---
 .../src/main/java/org/apache/hive/hplsql/Exec.java |  2 +-
 .../main/java/org/apache/hive/hplsql/Select.java   |  6 +--
 .../src/main/java/org/apache/hive/hplsql/Stmt.java | 26 +++++----
 .../apache/hive/beeline/TestHplSqlViaBeeLine.java  | 61 ++++++++++++++++++++++
 4 files changed, 80 insertions(+), 15 deletions(-)

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 de233e225f6..a1b2a2d3c71 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java
@@ -768,7 +768,7 @@ public void setSqlSuccess() {
    */
   public void setSqlNoData() {
     setSqlCode(SqlCodes.NO_DATA_FOUND);
-    setSqlState("01000");
+    setSqlState("02000");
   }
 
   public Integer run(String[] args) throws Exception {
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Select.java 
b/hplsql/src/main/java/org/apache/hive/hplsql/Select.java
index 9a5cde2a57e..108343ef497 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Select.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Select.java
@@ -125,8 +125,8 @@ public Integer select(HplsqlParser.Select_stmtContext ctx) {
               exec.signal(Signal.Type.TOO_MANY_ROWS);
             }
           } else {
-            exec.setSqlCode(SqlCodes.NO_DATA_FOUND);
-            exec.signal(Signal.Type.NOTFOUND);
+            exec.setSqlNoData();
+            exec.signal(Signal.Type.NOTFOUND, null, null);
           }
         }
       } else if (ctx.parent instanceof HplsqlParser.StmtContext) { // Print 
all results for standalone SELECT statement
@@ -156,7 +156,7 @@ public Integer select(HplsqlParser.Select_stmtContext ctx) {
           exec.setSqlSuccess();
         } else {
           evalNull();
-          exec.setSqlCode(SqlCodes.NO_DATA_FOUND);
+          exec.setSqlNoData();
         }
       }
     } catch (QueryException e) {
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java 
b/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java
index a39a60948d2..034afbc29ce 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java
@@ -81,7 +81,8 @@ public Integer 
allocateCursor(HplsqlParser.Allocate_cursor_stmtContext ctx) {
       exec.signal(Signal.Type.SQLEXCEPTION);
       return -1;
     }
-    exec.addVariable(new Var(name, Type.CURSOR, cur.value)); 
+    exec.addVariable(new Var(name, Type.CURSOR, cur.value));
+    exec.setSqlSuccess();
     return 0; 
   }
   
@@ -475,7 +476,7 @@ public Integer open(HplsqlParser.Open_stmtContext ctx) {
         exec.signal(queryResult);
         return 1;
       } else if (!exec.getOffline()) {
-        exec.setSqlCode(SqlCodes.SUCCESS);
+        exec.setSqlSuccess();
       }
       if (cursor.isWithReturn()) {
         exec.addReturnCursor(var);
@@ -507,8 +508,8 @@ public Integer fetch(HplsqlParser.Fetch_stmtContext ctx) {
       exec.signal(Signal.Type.SQLEXCEPTION);
       return 1;
     } else if (exec.getOffline()) {
-      exec.setSqlCode(SqlCodes.NO_DATA_FOUND);
-      exec.signal(Signal.Type.NOTFOUND);
+      exec.setSqlNoData();
+      exec.signal(Signal.Type.NOTFOUND, null, null);
       return 0;
     }
     // Assign values from the row to local variables
@@ -533,6 +534,7 @@ public Integer fetch(HplsqlParser.Fetch_stmtContext ctx) {
             break;
           }
         }
+        exec.setSqlSuccess();
       } else {
         if(queryResult.next()) {
           cursor.setFetch(true);
@@ -555,7 +557,7 @@ public Integer fetch(HplsqlParser.Fetch_stmtContext ctx) {
           exec.setSqlSuccess();
         } else {
           cursor.setFetch(false);
-          exec.setSqlCode(SqlCodes.NO_DATA_FOUND);
+          exec.setSqlNoData();
         }
       }
     } catch (QueryException e) {
@@ -581,7 +583,7 @@ public Integer close(HplsqlParser.Close_stmtContext ctx) {
     Var var = exec.findVariable(name);
     if(var != null && var.type == Type.CURSOR) {
       ((Cursor)var.value).close();
-      exec.setSqlCode(SqlCodes.SUCCESS);
+      exec.setSqlSuccess();
     } else if(trace) {
       trace(ctx, "Cursor not found: " + name);
     }
@@ -716,8 +718,8 @@ else if(trace) {
       exec.incRowCount();
       exec.setSqlSuccess();
     } else {
-      exec.setSqlCode(SqlCodes.NO_DATA_FOUND);
-      exec.signal(Signal.Type.NOTFOUND);
+      exec.setSqlNoData();
+      exec.signal(Signal.Type.NOTFOUND, null, null);
     }
   }
 
@@ -892,7 +894,7 @@ public Integer use(ParserRuleContext ctx, String sql) {
       exec.signal(query);
       return 1;
     }
-    exec.setSqlCode(SqlCodes.SUCCESS);
+    exec.setSqlSuccess();
     query.close();
     return 0; 
   }
@@ -1061,6 +1063,7 @@ public Integer exec(HplsqlParser.Exec_stmtContext ctx) {
       exec.signal(query);
       return 1;
     }
+    exec.setSqlSuccess();
     try {
       if (ctx.T_INTO() != null) {
         int cols = ctx.L_ID().size();
@@ -1082,7 +1085,7 @@ else if (trace) {
               trace(ctx, "Variable not found: " + ctx.L_ID(i).getText());
             }
           }
-          exec.setSqlCode(SqlCodes.SUCCESS);
+          exec.setSqlSuccess();
         }
       }
       // Print the results
@@ -1595,7 +1598,8 @@ public Integer return_(HplsqlParser.Return_stmtContext 
ctx) {
     if (ctx.expr() != null) {
       eval(ctx.expr());
     }
-    exec.signal(Signal.Type.LEAVE_ROUTINE);    
+    exec.signal(Signal.Type.LEAVE_ROUTINE, null, null);
+    exec.setSqlSuccess();
     return 0; 
   }  
   
diff --git 
a/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestHplSqlViaBeeLine.java
 
b/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestHplSqlViaBeeLine.java
index e186790d487..73792f6f4f8 100644
--- 
a/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestHplSqlViaBeeLine.java
+++ 
b/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestHplSqlViaBeeLine.java
@@ -586,6 +586,56 @@ public void testBulkCollectFetchLoop() throws Throwable {
     testScriptFile(scriptText, args(), "e1=1 e2=2 e3=3 e4=4 e5=5 e6=6");
   }
 
+  @Test
+  public void testErrorcodeWithBulkCollectFetch() throws Throwable {
+    String scriptText =
+        "SET hplsql.onerror='seterror';\n" +
+            "DROP TABLE IF EXISTS result;\n" +
+            "CREATE TABLE result (s string);\n" +
+            "DROP TABLE IF EXISTS emp;\n" +
+            "CREATE TABLE emp (name string, age int);\n" +
+            "INSERT INTO emp VALUES('alice', 20),('bob', 30);\n" +
+            "TYPE t_rows IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER;\n" +
+            "SELECT * FROM UNKNOWN; --Exception expted and errorcode is set to 
-1\n" +
+            "PRINT 'First ERRORCODE: ' || errorcode\n" +
+            "DECLARE rows t_rows;\n" +
+            "DECLARE cur SYS_REFCURSOR;\n" +
+            "OPEN cur FOR SELECT * FROM emp;\n" +
+            "PRINT 'Second ERRORCODE: ' || errorcode\n" +
+            "SELECT * FROM UNKNOWN1; --Exception expted and errorcode is set 
to -1\n" +
+            "PRINT 'Third ERRORCODE: ' || errorcode\n" +
+            "FETCH cur BULK COLLECT INTO rows;\n" +
+            "PRINT 'Fourth ERRORCODE: ' || errorcode\n" +
+            "CLOSE cur;\n" +
+            "INSERT INTO result VALUES(rows(1).name || ' = ' || rows(1).age || 
' ' || rows(2).name || ' = ' || rows(2).age);\n" +
+            "SELECT * FROM result;\n";
+    testScriptFile(scriptText, args(), "First ERRORCODE: -1.*Second ERRORCODE: 
0.*Third ERRORCODE: -1.*Fourth ERRORCODE: 0.*alice = 20 bob = 30", 
OutStream.ERR);
+  }
+
+  @Test
+  public void testErrorCodeWithAllocateCursor() throws Throwable {
+    String scriptText =
+        "SET hplsql.onerror='seterror';\n" +
+            "DROP TABLE IF EXISTS issues;\n" +
+            "CREATE TABLE issues (id int, name string);\n" +
+            "CREATE PROCEDURE spOpenIssues \n" +
+            "  DYNAMIC RESULT SETS 1\n" +
+            "BEGIN\n" +
+            "  DECLARE cur CURSOR WITH RETURN FOR\n" +
+            "    SELECT id, name FROM issues;\n" +
+            "  OPEN cur;\n" +
+            "END;\n" +
+            "DECLARE id INT;\n" +
+            "DECLARE name VARCHAR(30);\n" +
+             "CALL spOpenIssues;\n" +
+            "SELECT * FROM UNKNOWN; --Exception expted and errorcode is set to 
-1\n" +
+            "PRINT 'First ERRORCODE: ' || errorcode\n" +
+            "ALLOCATE c1 CURSOR FOR PROCEDURE spOpenIssues;\n" +
+            "PRINT 'Second ERRORCODE: ' || errorcode\n" +
+            "CLOSE c1;";
+    testScriptFile(scriptText, args(), "First ERRORCODE: -1.*Second ERRORCODE: 
0", OutStream.ERR);
+  }
+
   @Test
   public void testDecimalCast() throws Throwable {
     String scriptText =
@@ -1419,6 +1469,17 @@ public void testQuit() throws Throwable {
         OutStream.ERR);
   }
 
+  @Test
+  public void testERRORCODEForExecuteStatements() throws Throwable {
+    String scriptText =
+        "SET hplsql.onerror='seterror';\n" +
+            "EXECUTE 'select * from unknown';\n" +
+            "PRINT 'First ERRORCODE: ' || errorcode\n" +
+            "EXECUTE 'select 1';\n" +
+            "PRINT 'Second ERRORCODE: ' || errorcode";
+    testScriptFile(scriptText, args(), "First ERRORCODE: -1.*Second ERRORCODE: 
0", OutStream.ERR);
+  }
+
   private static List<String> args() {
     return Arrays.asList("-d", BeeLine.BEELINE_DEFAULT_JDBC_DRIVER,
             "-u", miniHS2.getBaseJdbcURL() + ";mode=hplsql", "-n", USER_NAME);

Reply via email to