HIVE-10659 : Beeline command which contains semi-colon as a non-command 
terminator will fail (Hari Subramaniyan via Sushanth Sowmyan)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/8d2dfe19
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/8d2dfe19
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/8d2dfe19

Branch: refs/heads/branch-1.2
Commit: 8d2dfe19ff169b67cfb61e94a3bddd59ecd85858
Parents: 1deece3
Author: Sushanth Sowmyan <[email protected]>
Authored: Wed May 20 15:24:02 2015 -0700
Committer: Sushanth Sowmyan <[email protected]>
Committed: Wed May 20 15:29:14 2015 -0700

----------------------------------------------------------------------
 .../src/java/org/apache/hive/beeline/BeeLine.java |  2 +-
 .../java/org/apache/hive/beeline/BeeLineOpts.java |  9 +++++++++
 .../java/org/apache/hive/beeline/Commands.java    | 18 ++++++++++++++----
 .../org/apache/hive/beeline/HiveSchemaHelper.java |  1 -
 .../org/apache/hive/beeline/HiveSchemaTool.java   |  3 +++
 5 files changed, 27 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/8d2dfe19/beeline/src/java/org/apache/hive/beeline/BeeLine.java
----------------------------------------------------------------------
diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java 
b/beeline/src/java/org/apache/hive/beeline/BeeLine.java
index b3d89cb..7d17c5c 100644
--- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java
+++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java
@@ -970,7 +970,7 @@ public class BeeLine implements Closeable {
       return cmdMap.values().iterator().next()
           .execute(line);
     } else {
-      return commands.sql(line);
+      return commands.sql(line, getOpts().getEntireLineAsCommand());
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/8d2dfe19/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java
----------------------------------------------------------------------
diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java 
b/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java
index 649bb63..c1ec82a 100644
--- a/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java
+++ b/beeline/src/java/org/apache/hive/beeline/BeeLineOpts.java
@@ -69,6 +69,7 @@ class BeeLineOpts implements Completer {
   private boolean showWarnings = false;
   private boolean showNestedErrs = false;
   private boolean showElapsedTime = true;
+  private boolean entireLineAsCommand = false;
   private String numberFormat = "default";
   private final Terminal terminal = TerminalFactory.get();
   private int maxWidth = DEFAULT_MAX_WIDTH;
@@ -345,6 +346,14 @@ class BeeLineOpts implements Completer {
     return isolation;
   }
 
+  public void setEntireLineAsCommand(boolean entireLineAsCommand) {
+    this.entireLineAsCommand = entireLineAsCommand;
+  }
+
+  public boolean getEntireLineAsCommand() {
+    return entireLineAsCommand;
+  }
+
   public void setHistoryFile(String historyFile) {
     this.historyFile = historyFile;
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/8d2dfe19/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 4c60525..903849c 100644
--- a/beeline/src/java/org/apache/hive/beeline/Commands.java
+++ b/beeline/src/java/org/apache/hive/beeline/Commands.java
@@ -706,7 +706,11 @@ public class Commands {
   }
 
   public boolean sql(String line) {
-    return execute(line, false);
+    return execute(line, false, false);
+  }
+
+  public boolean sql(String line, boolean entireLineAsCommand) {
+    return execute(line, false, entireLineAsCommand);
   }
 
   public boolean sh(String line) {
@@ -740,10 +744,10 @@ public class Commands {
   }
 
   public boolean call(String line) {
-    return execute(line, true);
+    return execute(line, true, false);
   }
 
-  private boolean execute(String line, boolean call) {
+  private boolean execute(String line, boolean call, boolean 
entireLineAsCommand) {
     if (line == null || line.length() == 0) {
       return false; // ???
     }
@@ -792,7 +796,13 @@ public class Commands {
     }
 
     line = line.trim();
-    String[] cmds = line.split(";");
+    String[] cmds;
+    if (entireLineAsCommand) {
+      cmds = new String[1];
+      cmds[0] = line;
+    } else {
+      cmds = line.split(";");
+    }
     for (int i = 0; i < cmds.length; i++) {
       String sql = cmds[i].trim();
       if (sql.length() != 0) {

http://git-wip-us.apache.org/repos/asf/hive/blob/8d2dfe19/beeline/src/java/org/apache/hive/beeline/HiveSchemaHelper.java
----------------------------------------------------------------------
diff --git a/beeline/src/java/org/apache/hive/beeline/HiveSchemaHelper.java 
b/beeline/src/java/org/apache/hive/beeline/HiveSchemaHelper.java
index 58760d8..a6b11ba 100644
--- a/beeline/src/java/org/apache/hive/beeline/HiveSchemaHelper.java
+++ b/beeline/src/java/org/apache/hive/beeline/HiveSchemaHelper.java
@@ -248,7 +248,6 @@ public class HiveSchemaHelper {
         // if this is a valid executable command then add it to the buffer
         if (!isNonExecCommand(currentCommand)) {
           currentCommand = cleanseCommand(currentCommand);
-
           if (isNestedScript(currentCommand)) {
             // if this is a nested sql script then flatten it
             String currScript = getScriptName(currentCommand);

http://git-wip-us.apache.org/repos/asf/hive/blob/8d2dfe19/beeline/src/java/org/apache/hive/beeline/HiveSchemaTool.java
----------------------------------------------------------------------
diff --git a/beeline/src/java/org/apache/hive/beeline/HiveSchemaTool.java 
b/beeline/src/java/org/apache/hive/beeline/HiveSchemaTool.java
index 409126e..2477e5f 100644
--- a/beeline/src/java/org/apache/hive/beeline/HiveSchemaTool.java
+++ b/beeline/src/java/org/apache/hive/beeline/HiveSchemaTool.java
@@ -350,6 +350,9 @@ public class HiveSchemaTool {
     }
     beeLine.getOpts().setAllowMultiLineCommand(false);
     beeLine.getOpts().setIsolation("TRANSACTION_READ_COMMITTED");
+    // We can be pretty sure that an entire line can be processed as a single 
command since
+    // we always add a line separator at the end while calling 
dbCommandParser.buildCommand.
+    beeLine.getOpts().setEntireLineAsCommand(true);
     int status = beeLine.begin(argList.toArray(new String[0]), null);
     if (status != 0) {
       throw new IOException("Schema script failed, errorcode " + status);

Reply via email to