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