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) {