diff --git cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java index a2976b5..01ea2b0 100644 --- cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java +++ cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java @@ -610,7 +610,10 @@ public class CliDriver { int ret = 0; String prefix = ""; - String curPrompt = prompt; + String curDB = getFormattedDb(conf, ss); + String curPrompt = prompt + curDB; + String dbSpaces = spacesForString(curDB); + while ((line = reader.readLine(curPrompt + "> ")) != null) { if (!prefix.equals("")) { prefix += '\n'; @@ -619,10 +622,12 @@ public class CliDriver { line = prefix + line; ret = cli.processLine(line, true); prefix = ""; - curPrompt = prompt; + curDB = getFormattedDb(conf, ss); + curPrompt = prompt + curDB; + dbSpaces = dbSpaces.length() == curDB.length() ? dbSpaces : spacesForString(curDB); } else { prefix = prefix + line; - curPrompt = prompt2; + curPrompt = prompt2 + dbSpaces; continue; } } @@ -632,4 +637,37 @@ public class CliDriver { System.exit(ret); } + /** + * Retrieve the current database name string to display, based on the + * configuration value. + * @param conf storing whether or not to show current db + * @param ss CliSessionState to query for db name + * @return String to show user for current db value + */ + private static String getFormattedDb(HiveConf conf, CliSessionState ss) { + if (!HiveConf.getBoolVar(conf, HiveConf.ConfVars.CLIPRINTCURRENTDB)) { + return ""; + } + String currDb = ss.getCurrentDbName(); + + if (currDb == null) { + return ""; + } + + return " (" + currDb + ")"; + } + + /** + * Generate a string of whitespace the same length as the parameter + * + * @param s String for which to generate equivalent whitespace + * @return Whitespace + */ + private static String spacesForString(String s) { + if (s == null || s.length() == 0) { + return ""; + } + return String.format("%1$-" + s.length() +"s", ""); + } + } diff --git cli/src/java/org/apache/hadoop/hive/cli/CliSessionState.java cli/src/java/org/apache/hadoop/hive/cli/CliSessionState.java index c693aeb..a36a53c 100644 --- cli/src/java/org/apache/hadoop/hive/cli/CliSessionState.java +++ cli/src/java/org/apache/hadoop/hive/cli/CliSessionState.java @@ -23,6 +23,8 @@ import java.util.List; import java.util.Properties; import org.apache.hadoop.hive.conf.HiveConf; +import org.apache.hadoop.hive.ql.metadata.Hive; +import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.service.HiveClient; import org.apache.thrift.TException; @@ -68,6 +70,8 @@ public class CliSessionState extends SessionState { private TTransport transport; private HiveClient client; + private Hive hive; // currently only used (and init'ed) in getCurrentDbName + public CliSessionState() { super(); remoteMode = false; @@ -119,4 +123,19 @@ public class CliSessionState extends SessionState { public HiveClient getClient() { return client; } + + /** + * Return the name of the current database + * @return the name of the current database or, if an error, null + */ + public String getCurrentDbName() { + if (hive == null) { + try { + hive = Hive.get(conf); + } catch (HiveException e) { + return null; + } + } + return hive.getCurrentDatabase(); + } } diff --git common/src/java/org/apache/hadoop/hive/conf/HiveConf.java common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index b46976f..12dc868 100644 --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -225,6 +225,7 @@ public class HiveConf extends Configuration { // CLI CLIIGNOREERRORS("hive.cli.errors.ignore", false), + CLIPRINTCURRENTDB("hive.cli.print.current.db", false), HIVE_METASTORE_FS_HANDLER_CLS("hive.metastore.fs.handler.class", "org.apache.hadoop.hive.metastore.HiveMetaStoreFsImpl"), diff --git conf/hive-default.xml conf/hive-default.xml index 3a4f833..a444fdd 100644 --- conf/hive-default.xml +++ conf/hive-default.xml @@ -58,6 +58,12 @@ + hive.cli.print.current.db + false + Whether to include the current database in the hive prompt. + + + hive.exec.scratchdir /tmp/hive-${user.name} Scratch space for Hive jobs