You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by kr...@apache.org on 2024/05/02 07:09:15 UTC

(hive) branch master updated: HIVE-28214: HPLSQL not using the hive variables passed through beeline using --hivevar option (Dayakar M, reviewed by Krisztian Kasa)

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

krisztiankasa 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 a02be2bf460 HIVE-28214: HPLSQL not using the hive variables passed through beeline using --hivevar option (Dayakar M, reviewed by Krisztian Kasa)
a02be2bf460 is described below

commit a02be2bf460b5d84e4fdd62b350ddb071590b2a1
Author: Dayakar M <da...@gmail.com>
AuthorDate: Thu May 2 12:39:09 2024 +0530

    HIVE-28214: HPLSQL not using the hive variables passed through beeline using --hivevar option (Dayakar M, reviewed by Krisztian Kasa)
    
    Co-authored-by: mdayakar <md...@cloudera.com>
---
 .../src/main/java/org/apache/hive/hplsql/Exec.java  |  2 +-
 .../apache/hive/beeline/TestHplSqlViaBeeLine.java   | 21 +++++++++++++++++++++
 .../cli/operation/ExecuteStatementOperation.java    | 15 +++++++++++++++
 3 files changed, 37 insertions(+), 1 deletion(-)

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 e423452e3da..40e188d3735 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java
@@ -914,7 +914,7 @@ public class Exec extends HplsqlBaseVisitor<Integer> implements Closeable {
   /**
    * Parse command line arguments
    */
-  boolean parseArguments(String[] args) {
+  public boolean parseArguments(String[] args) {
     boolean parsed = arguments.parse(args);
     if (parsed && arguments.hasVersionOption()) {
       console.printError(VERSION);
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 819a5b12b02..87e9e56901b 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
@@ -986,6 +986,27 @@ public class TestHplSqlViaBeeLine {
     testScriptFile(SCRIPT_TEXT, args(), "wrong number of arguments in call to 'p1'. Expected 0 got 1.", OutStream.ERR);
   }
 
+  @Test
+  public void testHiveVariableInHplsql() throws Throwable {
+    String SCRIPT_TEXT =
+        "DROP TABLE IF EXISTS result;\n" +
+            "CREATE TABLE result (s string);\n" +
+            "CREATE PROCEDURE p1()\n" +
+            "DECLARE hivedb_tbl string;\n" +
+            "BEGIN\n" +
+            "SELECT hivedb || '.' || hivetbl into hivedb_tbl;\n" +
+            "INSERT INTO result VALUES(hivedb_tbl);\n" +
+            "END;\n" +
+            "p1();\n" +
+            "SELECT * FROM result;" ;
+    List<String> args = new ArrayList<>(args());
+    args.add("--hivevar");
+    args.add("hivedb=sys");
+    args.add("--hivevar");
+    args.add("hivetbl=tbls");
+    testScriptFile(SCRIPT_TEXT, args, "sys.tbls");
+  }
+
   private static List<String> args() {
     return Arrays.asList("-d", BeeLine.BEELINE_DEFAULT_JDBC_DRIVER,
             "-u", miniHS2.getBaseJdbcURL() + ";mode=hplsql", "-n", userName);
diff --git a/service/src/java/org/apache/hive/service/cli/operation/ExecuteStatementOperation.java b/service/src/java/org/apache/hive/service/cli/operation/ExecuteStatementOperation.java
index aad4c7700a1..d51251d49ad 100644
--- a/service/src/java/org/apache/hive/service/cli/operation/ExecuteStatementOperation.java
+++ b/service/src/java/org/apache/hive/service/cli/operation/ExecuteStatementOperation.java
@@ -75,6 +75,7 @@ public abstract class ExecuteStatementOperation extends Operation {
                 parentSession.getMetaStoreClient(),
                 new HiveHplSqlSessionState(SessionState.get())
         );
+        setHiveVariables(parentSession, interpreter);
         interpreter.init();
         registerUdf();
         SessionState.get().addDynamicVar(interpreter);
@@ -97,6 +98,20 @@ public abstract class ExecuteStatementOperation extends Operation {
     return new HiveCommandOperation(parentSession, cleanStatement, processor, confOverlay);
   }
 
+  private static void setHiveVariables(HiveSession parentSession, Exec interpreter) {
+    Map<String, String> hiveVars = parentSession.getSessionState().getHiveVariables();
+    if (hiveVars.size() > 0) {
+      String[] hiveVarArray = new String[hiveVars.size() * 2];
+      int i = 0;
+      for (Map.Entry<String, String> entry : hiveVars.entrySet()) {
+        hiveVarArray[i] = "--hivevar";
+        hiveVarArray[i+1] = entry.getKey() + "=" + entry.getValue();
+        i = i + 2;
+      }
+      interpreter.parseArguments(hiveVarArray);
+    }
+  }
+
   private static void registerUdf() throws HiveSQLException {
     try {
       if (FunctionRegistry.getTemporaryFunctionInfo(Udf.NAME) == null) {