You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2014/09/01 03:55:15 UTC

svn commit: r1621659 - in /hive/trunk/beeline/src: java/org/apache/hive/beeline/ test/org/apache/hive/beeline/

Author: hashutosh
Date: Mon Sep  1 01:55:14 2014
New Revision: 1621659

URL: http://svn.apache.org/r1621659
Log:
HIVE-6978 : beeline always exits with 0 status, should exit with non-zero status on error (Navis via Ashutosh Chauhan)

Modified:
    hive/trunk/beeline/src/java/org/apache/hive/beeline/AbstractCommandHandler.java
    hive/trunk/beeline/src/java/org/apache/hive/beeline/BeeLine.java
    hive/trunk/beeline/src/java/org/apache/hive/beeline/CommandHandler.java
    hive/trunk/beeline/src/java/org/apache/hive/beeline/ReflectiveCommandHandler.java
    hive/trunk/beeline/src/test/org/apache/hive/beeline/TestBeelineArgParsing.java

Modified: hive/trunk/beeline/src/java/org/apache/hive/beeline/AbstractCommandHandler.java
URL: http://svn.apache.org/viewvc/hive/trunk/beeline/src/java/org/apache/hive/beeline/AbstractCommandHandler.java?rev=1621659&r1=1621658&r2=1621659&view=diff
==============================================================================
--- hive/trunk/beeline/src/java/org/apache/hive/beeline/AbstractCommandHandler.java (original)
+++ hive/trunk/beeline/src/java/org/apache/hive/beeline/AbstractCommandHandler.java Mon Sep  1 01:55:14 2014
@@ -40,6 +40,7 @@ public abstract class AbstractCommandHan
   private final String helpText;
   private Completor[] parameterCompletors = new Completor[0];
 
+  protected transient Throwable lastException;
 
   public AbstractCommandHandler(BeeLine beeLine, String[] names, String helpText,
       Completor[] completors) {
@@ -101,4 +102,9 @@ public abstract class AbstractCommandHan
   public Completor[] getParameterCompletors() {
     return parameterCompletors;
   }
+
+  @Override
+  public Throwable getLastException() {
+    return lastException;
+  }
 }

Modified: hive/trunk/beeline/src/java/org/apache/hive/beeline/BeeLine.java
URL: http://svn.apache.org/viewvc/hive/trunk/beeline/src/java/org/apache/hive/beeline/BeeLine.java?rev=1621659&r1=1621658&r2=1621659&view=diff
==============================================================================
--- hive/trunk/beeline/src/java/org/apache/hive/beeline/BeeLine.java (original)
+++ hive/trunk/beeline/src/java/org/apache/hive/beeline/BeeLine.java Mon Sep  1 01:55:14 2014
@@ -57,7 +57,6 @@ import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
@@ -618,9 +617,9 @@ public class BeeLine implements Closeabl
 
   }
 
-  boolean initArgs(String[] args) {
-    List<String> commands = new LinkedList<String>();
-    List<String> files = new LinkedList<String>();
+  int initArgs(String[] args) {
+    List<String> commands = Collections.emptyList();
+    List<String> files = Collections.emptyList();
 
     CommandLine cl;
     BeelineParser beelineParser;
@@ -630,7 +629,8 @@ public class BeeLine implements Closeabl
       cl = beelineParser.parse(options, args);
     } catch (ParseException e1) {
       output(e1.getMessage());
-      return false;
+      usage();
+      return -1;
     }
 
     String driver = null, user = null, pass = null, url = null;
@@ -638,8 +638,8 @@ public class BeeLine implements Closeabl
 
 
     if (cl.hasOption("help")) {
-      // Return false here, so usage will be printed.
-      return false;
+      usage();
+      return 0;
     }
 
     Properties hiveVars = cl.getOptionProperties("hivevar");
@@ -690,7 +690,8 @@ public class BeeLine implements Closeabl
       dispatch("!properties " + i.next());
     }
 
-    if (commands.size() > 0) {
+    int code = 0;
+    if (!commands.isEmpty()) {
       // for single command execute, disable color
       getOpts().setColor(false);
       getOpts().setHeaderInterval(-1);
@@ -698,11 +699,13 @@ public class BeeLine implements Closeabl
       for (Iterator<String> i = commands.iterator(); i.hasNext();) {
         String command = i.next().toString();
         debug(loc("executing-command", command));
-        dispatch(command);
+        if (!dispatch(command)) {
+          code++;
+        }
       }
       exit = true; // execute and exit
     }
-    return true;
+    return code;
   }
 
 
@@ -720,9 +723,9 @@ public class BeeLine implements Closeabl
     }
 
     try {
-      if (!initArgs(args)) {
-        usage();
-        return ERRNO_ARGS;
+      int code = initArgs(args);
+      if (code != 0) {
+        return code;
       }
 
       if (getOpts().getScriptFile() != null) {

Modified: hive/trunk/beeline/src/java/org/apache/hive/beeline/CommandHandler.java
URL: http://svn.apache.org/viewvc/hive/trunk/beeline/src/java/org/apache/hive/beeline/CommandHandler.java?rev=1621659&r1=1621658&r2=1621659&view=diff
==============================================================================
--- hive/trunk/beeline/src/java/org/apache/hive/beeline/CommandHandler.java (original)
+++ hive/trunk/beeline/src/java/org/apache/hive/beeline/CommandHandler.java Mon Sep  1 01:55:14 2014
@@ -74,4 +74,10 @@ interface CommandHandler {
    * Returns the completors that can handle parameters.
    */
   public Completor[] getParameterCompletors();
+
+  /**
+   * Returns exception thrown for last command
+   * @return
+   */
+  public Throwable getLastException();
 }
\ No newline at end of file

Modified: hive/trunk/beeline/src/java/org/apache/hive/beeline/ReflectiveCommandHandler.java
URL: http://svn.apache.org/viewvc/hive/trunk/beeline/src/java/org/apache/hive/beeline/ReflectiveCommandHandler.java?rev=1621659&r1=1621658&r2=1621659&view=diff
==============================================================================
--- hive/trunk/beeline/src/java/org/apache/hive/beeline/ReflectiveCommandHandler.java (original)
+++ hive/trunk/beeline/src/java/org/apache/hive/beeline/ReflectiveCommandHandler.java Mon Sep  1 01:55:14 2014
@@ -40,6 +40,7 @@ public class ReflectiveCommandHandler ex
   }
 
   public boolean execute(String line) {
+    lastException = null;
     try {
       Object ob = beeLine.getCommands().getClass().getMethod(getName(),
           new Class[] {String.class})
@@ -47,6 +48,7 @@ public class ReflectiveCommandHandler ex
       return ob != null && ob instanceof Boolean
           && ((Boolean) ob).booleanValue();
     } catch (Throwable e) {
+      lastException = e;
       return beeLine.error(e);
     }
   }

Modified: hive/trunk/beeline/src/test/org/apache/hive/beeline/TestBeelineArgParsing.java
URL: http://svn.apache.org/viewvc/hive/trunk/beeline/src/test/org/apache/hive/beeline/TestBeelineArgParsing.java?rev=1621659&r1=1621658&r2=1621659&view=diff
==============================================================================
--- hive/trunk/beeline/src/test/org/apache/hive/beeline/TestBeelineArgParsing.java (original)
+++ hive/trunk/beeline/src/test/org/apache/hive/beeline/TestBeelineArgParsing.java Mon Sep  1 01:55:14 2014
@@ -56,7 +56,7 @@ public class TestBeelineArgParsing {
     TestBeeline bl = new TestBeeline();
     String args[] = new String[] {"-u", "url", "-n", "name",
       "-p", "password", "-d", "driver", "-a", "authType"};
-    Assert.assertTrue(bl.initArgs(args));
+    Assert.assertEquals(0, bl.initArgs(args));
     Assert.assertTrue(bl.connectArgs.equals("url name password driver"));
     Assert.assertTrue(bl.getOpts().getAuthType().equals("authType"));
   }
@@ -69,7 +69,7 @@ public class TestBeelineArgParsing {
     TestBeeline bl = new TestBeeline();
     String args[] = new String[] {"-u", "url", "-u", "url2", "-n", "name",
       "-p", "password", "-d", "driver"};
-    Assert.assertTrue(bl.initArgs(args));
+    Assert.assertEquals(0, bl.initArgs(args));
     Assert.assertTrue(bl.connectArgs.equals("url name password driver"));
   }
 
@@ -78,7 +78,7 @@ public class TestBeelineArgParsing {
     TestBeeline bl = new TestBeeline();
     String args[] = new String[] {"-u", "url", "-n", "name",
       "-p", "password", "-d", "driver", "-e", "select1", "-e", "select2"};
-    Assert.assertTrue(bl.initArgs(args));
+    Assert.assertEquals(0, bl.initArgs(args));
     Assert.assertTrue(bl.connectArgs.equals("url name password driver"));
     Assert.assertTrue(bl.queries.contains("select1"));
     Assert.assertTrue(bl.queries.contains("select2"));
@@ -93,7 +93,7 @@ public class TestBeelineArgParsing {
     String args[] = new String[] {"-u", "url", "-n", "name",
       "-p", "password", "-d", "driver", "--hiveconf", "a=avalue", "--hiveconf", "b=bvalue",
       "--hivevar", "c=cvalue", "--hivevar", "d=dvalue"};
-    Assert.assertTrue(bl.initArgs(args));
+    Assert.assertEquals(0, bl.initArgs(args));
     Assert.assertTrue(bl.connectArgs.equals("url name password driver"));
     Assert.assertTrue(bl.getOpts().getHiveConfVariables().get("a").equals("avalue"));
     Assert.assertTrue(bl.getOpts().getHiveConfVariables().get("b").equals("bvalue"));
@@ -107,7 +107,7 @@ public class TestBeelineArgParsing {
     String args[] =
         new String[] { "-u", "url", "-n", "name", "-p", "password", "-d", "driver",
             "--autoCommit=true", "--verbose", "--truncateTable" };
-    Assert.assertTrue(bl.initArgs(args));
+    Assert.assertEquals(0, bl.initArgs(args));
     Assert.assertTrue(bl.connectArgs.equals("url name password driver"));
     Assert.assertTrue(bl.getOpts().getAutoCommit());
     Assert.assertTrue(bl.getOpts().getVerbose());
@@ -122,7 +122,7 @@ public class TestBeelineArgParsing {
     TestBeeline bl = new TestBeeline();
     String args[] = new String[] {"-u", "url", "-n", "name",
       "-p", "password", "-d", "driver", "-f", "myscript"};
-    Assert.assertTrue(bl.initArgs(args));
+    Assert.assertEquals(0, bl.initArgs(args));
     Assert.assertTrue(bl.connectArgs.equals("url name password driver"));
     Assert.assertTrue(bl.getOpts().getScriptFile().equals("myscript"));
   }
@@ -134,7 +134,7 @@ public class TestBeelineArgParsing {
   public void testHelp() throws Exception {
     TestBeeline bl = new TestBeeline();
     String args[] = new String[] {"--help"};
-    Assert.assertFalse(bl.initArgs(args));
+    Assert.assertEquals(0, bl.initArgs(args));
   }
 
   /**
@@ -144,7 +144,7 @@ public class TestBeelineArgParsing {
   public void testUnmatchedArgs() throws Exception {
     TestBeeline bl = new TestBeeline();
     String args[] = new String[] {"-u", "url", "-n"};
-    Assert.assertFalse(bl.initArgs(args));
+    Assert.assertEquals(-1, bl.initArgs(args));
   }
 
 }