Index: src/contrib/hive/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java =================================================================== --- src/contrib/hive/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java (revision 703611) +++ src/contrib/hive/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java (working copy) @@ -22,6 +22,8 @@ import java.io.*; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.exec.Utilities; @@ -125,13 +127,40 @@ } public static int processReader(BufferedReader r) throws IOException { - String line; + String line; int ret = 0; + Pattern p = Pattern.compile("^(.*);\\s*$"); + StringBuffer buf = new StringBuffer(""); while((line = r.readLine()) != null) { - ret = processLine(line); - if(ret != 0) { - return ret; - } + // ultimately we shouldn't trim to debug error position properly, + // but the QL parser apparently trims... + // so we trim for logging/debuging purpose. + line=line.trim(); + + //ignore empty lines + if (line.isEmpty()) + continue; + + //simply using ; at the end of a line as separator + Matcher m = p.matcher(line); + if(m.matches()){ + buf.append(m.group(1)); + ret = processCmd(buf.toString()); + buf = new StringBuffer(""); + if(ret != 0) { + return ret; + } + }else{ + //no trim, keep spaces for debugging purpose + buf.append(line+"\n"); + } + } + //remaining lines + if (buf.length()!=0){ + ret = processCmd(buf.toString()); + if(ret != 0) { + return ret; + } } return 0; }