commit a7051f6029da8a016bf272ce0459aa95dfb363b6 Author: Bharath Krishna Date: Tue Mar 27 14:28:56 2018 -0700 HIVE-19047 : Only the first init file is interpreted diff --git beeline/src/java/org/apache/hive/beeline/BeeLine.java beeline/src/java/org/apache/hive/beeline/BeeLine.java index 402fadddde707714ae00defcf0b430f509a4405a..5f56002a27da95913b61ce97a2c5f2f53d83e146 100644 --- beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -357,7 +357,7 @@ // -i options.addOption(OptionBuilder - .hasArg() + .hasArgs() .withArgName("init") .withDescription("script file for initialization") .create('i')); @@ -1119,17 +1119,28 @@ public HS2ConnectionFileParser getHiveSiteHS2ConnectionFileParser() { int runInit() { String initFiles[] = getOpts().getInitFiles(); + + //executionResult will be ERRNO_OK only if all initFiles execute successfully + int executionResult = ERRNO_OK; + boolean exitOnError = !getOpts().getForce(); + if (initFiles != null && initFiles.length != 0) { for (String initFile : initFiles) { info("Running init script " + initFile); try { - return executeFile(initFile); + int currentResult = executeFile(initFile); + if(currentResult != ERRNO_OK) { + executionResult = currentResult; + + if(exitOnError) + return executionResult; + } } finally { exit = false; } } } - return ERRNO_OK; + return executionResult; } private int embeddedConnect() { diff --git beeline/src/test/org/apache/hive/beeline/TestBeelineArgParsing.java beeline/src/test/org/apache/hive/beeline/TestBeelineArgParsing.java index 40dbc223c831cf322c826bcef8fbd29de25917fd..4994ff87b775312990c11e755c0fb1c5e56c9196 100644 --- beeline/src/test/org/apache/hive/beeline/TestBeelineArgParsing.java +++ beeline/src/test/org/apache/hive/beeline/TestBeelineArgParsing.java @@ -254,6 +254,19 @@ public void testCommandAndFileSimultaneously() throws Exception { Assert.assertEquals(1, bl.initArgs(args)); } + /** + * Test beeline with multiple initfiles in -i + */ + @Test + public void testMultipleInitFiles() { + TestBeeline bl = new TestBeeline(); + String args[] = new String[] {"-i","/url/to/file1","-i","/url/to/file2"}; + Assert.assertEquals(0, bl.initArgs(args)); + String[] files = bl.getOpts().getInitFiles(); + Assert.assertEquals("/url/to/file1",files[0]); + Assert.assertEquals("/url/to/file2",files[1]); + } + /** * Displays the usage. */