Index: CliDriver.java =================================================================== --- CliDriver.java (revision 125579) +++ CliDriver.java (working copy) @@ -18,18 +18,33 @@ package org.apache.hadoop.hive.cli; -import jline.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Vector; +import java.util.regex.Matcher; +import java.util.regex.Pattern; -import java.io.*; -import java.util.*; +import jline.ArgumentCompletor; +import jline.ConsoleReader; +import jline.History; +import jline.SimpleCompletor; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hive.conf.HiveConf; +import org.apache.hadoop.hive.ql.Driver; import org.apache.hadoop.hive.ql.exec.Utilities; import org.apache.hadoop.hive.ql.exec.Utilities.StreamPrinter; import org.apache.hadoop.hive.ql.session.SessionState; -import org.apache.hadoop.hive.ql.Driver; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hive.ql.session.SessionState.LogHelper; public class CliDriver { @@ -134,11 +149,38 @@ public static int processReader(BufferedReader r) throws IOException { 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; }