diff --git beeline/src/java/org/apache/hive/beeline/DatabaseConnection.java beeline/src/java/org/apache/hive/beeline/DatabaseConnection.java index 553722d..a4b34c7 100644 --- beeline/src/java/org/apache/hive/beeline/DatabaseConnection.java +++ beeline/src/java/org/apache/hive/beeline/DatabaseConnection.java @@ -28,10 +28,10 @@ import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; import java.util.TreeSet; @@ -39,6 +39,10 @@ import jline.Completor; class DatabaseConnection { + private static final String HIVE_AUTH_USER = "user"; + private static final String HIVE_AUTH_PASSWD = "password"; + private static final String HIVE_VAR_PREFIX = "hivevar:"; + private final BeeLine beeLine; private Connection connection; private DatabaseMetaData meta; @@ -56,38 +60,9 @@ public DatabaseConnection(BeeLine beeLine, String driver, String url, this.driver = driver; this.username = username; this.password = password; - this.url = appendHiveVariables(beeLine, url); + this.url = url; } -/** - * Append hive variables specified on the command line to the connection url - * (after #). They will be set later on the session on the server side. - */ - private static String appendHiveVariables(BeeLine beeLine, String url) { - StringBuilder sb = new StringBuilder( url ); - Map hiveVars = beeLine.getOpts().getHiveVariables(); - if (hiveVars.size() > 0) { - if (url.indexOf("#") == -1) { - sb.append("#"); - } else { - sb.append(";"); - } - Set> vars = hiveVars.entrySet(); - Iterator> it = vars.iterator(); - while (it.hasNext()) { - Map.Entry var = it.next(); - sb.append(var.getKey()); - sb.append("="); - sb.append(var.getValue()); - if (it.hasNext()) { - sb.append(";"); - } - } - } - return sb.toString(); - } - - @Override public String toString() { return getUrl() + ""; @@ -157,7 +132,14 @@ boolean connect() throws SQLException { return beeLine.error(e); } - setConnection(DriverManager.getConnection(getUrl(), username, password)); + Properties info = new Properties(); + info.put(HIVE_AUTH_USER, username); + info.put(HIVE_AUTH_PASSWD, password); + Map hiveVars = beeLine.getOpts().getHiveVariables(); + for (Map.Entry var : hiveVars.entrySet()) { + info.put(HIVE_VAR_PREFIX + var.getKey(), var.getValue()); + } + setConnection(DriverManager.getConnection(getUrl(), info)); setDatabaseMetaData(getConnection().getMetaData()); try { diff --git jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index aabb5cb..354b554 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -84,6 +84,7 @@ private static final String HIVE_USE_SSL = "ssl"; private static final String HIVE_SSL_TRUST_STORE = "sslTrustStore"; private static final String HIVE_SSL_TRUST_STORE_PASSWORD = "trustStorePassword"; + private static final String HIVE_VAR_PREFIX = "hivevar:"; private final String jdbcURI; private final String host; @@ -116,7 +117,17 @@ public HiveConnection(String uri, Properties info) throws SQLException { port = connParams.getPort(); sessConfMap = connParams.getSessionVars(); hiveConfMap = connParams.getHiveConfs(); + hiveVarMap = connParams.getHiveVars(); + for (Map.Entry kv : info.entrySet()) { + if ((kv.getKey() instanceof String)) { + String key = (String) kv.getKey(); + if (key.startsWith(HIVE_VAR_PREFIX)) { + hiveVarMap.put(key.substring(HIVE_VAR_PREFIX.length()), info.getProperty(key)); + } + } + } + isEmbeddedMode = connParams.isEmbeddedMode(); if (isEmbeddedMode) {