Repository: hive Updated Branches: refs/heads/master e6b511586 -> a638746c3
HIVE-14538: beeline throws exceptions with parsing hive config when using !sh statement (Yongzhi Chen, reviewed by Chaoyu Tang) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/a638746c Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/a638746c Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/a638746c Branch: refs/heads/master Commit: a638746c3e19071a5de49d37a40c6e0cd17aede2 Parents: e6b5115 Author: Yongzhi Chen <[email protected]> Authored: Mon Aug 15 22:51:29 2016 -0400 Committer: Yongzhi Chen <[email protected]> Committed: Thu Sep 1 10:20:55 2016 -0400 ---------------------------------------------------------------------- .../java/org/apache/hive/beeline/Commands.java | 36 +++++++++++++------- .../hive/beeline/TestBeeLineWithArgs.java | 8 +++++ 2 files changed, 31 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/a638746c/beeline/src/java/org/apache/hive/beeline/Commands.java ---------------------------------------------------------------------- diff --git a/beeline/src/java/org/apache/hive/beeline/Commands.java b/beeline/src/java/org/apache/hive/beeline/Commands.java index 47f5022..2f3ec13 100644 --- a/beeline/src/java/org/apache/hive/beeline/Commands.java +++ b/beeline/src/java/org/apache/hive/beeline/Commands.java @@ -742,10 +742,12 @@ public class Commands { private Map<String, String> getHiveVariables() { Map<String, String> result = new HashMap<>(); BufferedRows rows = getConfInternal(true); - while (rows.hasNext()) { - Rows.Row row = (Rows.Row) rows.next(); - if (!row.isMeta) { - result.put(row.values[0], row.values[1]); + if (rows != null) { + while (rows.hasNext()) { + Rows.Row row = (Rows.Row) rows.next(); + if (!row.isMeta) { + result.put(row.values[0], row.values[1]); + } } } return result; @@ -784,13 +786,19 @@ public class Commands { Statement stmnt = null; BufferedRows rows = null; try { - boolean hasResults; - if (call) { - stmnt = beeLine.getDatabaseConnection().getConnection().prepareCall("set"); - hasResults = ((CallableStatement) stmnt).execute(); - } else { - stmnt = beeLine.createStatement(); - hasResults = stmnt.execute("set"); + boolean hasResults = false; + DatabaseConnection dbconn = beeLine.getDatabaseConnection(); + Connection conn = null; + if (dbconn != null) + conn = dbconn.getConnection(); + if (conn != null) { + if (call) { + stmnt = conn.prepareCall("set"); + hasResults = ((CallableStatement) stmnt).execute(); + } else { + stmnt = beeLine.createStatement(); + hasResults = stmnt.execute("set"); + } } if (hasResults) { ResultSet rs = stmnt.getResultSet(); @@ -823,7 +831,8 @@ public class Commands { return; } else { String[] kv = val.split("=", 2); - hiveConf.set(kv[0], kv[1]); + if (kv.length == 2) + hiveConf.set(kv[0], kv[1]); } } @@ -1085,7 +1094,8 @@ public class Commands { } line = line.substring("sh".length()).trim(); - line = substituteVariables(getHiveConf(false), line.trim()); + if (!beeLine.isBeeLine()) + line = substituteVariables(getHiveConf(false), line.trim()); try { ShellCmdExecutor executor = new ShellCmdExecutor(line, beeLine.getOutputStream(), http://git-wip-us.apache.org/repos/asf/hive/blob/a638746c/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java ---------------------------------------------------------------------- diff --git a/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java b/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java index 49c1120..1ca7623 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/beeline/TestBeeLineWithArgs.java @@ -903,4 +903,12 @@ public class TestBeeLineWithArgs { testScriptFile( SCRIPT_TEXT, EXPECTED_PATTERN, true, argList); } + + @Test + public void testBeelineShellCommandWithoutConn() throws Throwable { + List<String> argList = new ArrayList<String>(); + final String SCRIPT_TEXT = "!sh echo hello world"; + final String EXPECTED_PATTERN = "hello world"; + testScriptFile(SCRIPT_TEXT, EXPECTED_PATTERN, true, argList,true,false); + } }
