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 <[email protected]>
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 <[email protected]>
---
 .../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) {

Reply via email to