diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index f79d73d..c312ece 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -103,8 +103,6 @@ */ public class HiveConnection implements java.sql.Connection { public static final Logger LOG = LoggerFactory.getLogger(HiveConnection.class.getName()); - private static final String HIVE_VAR_PREFIX = "hivevar:"; - private static final String HIVE_CONF_PREFIX = "hiveconf:"; private String jdbcUriString; private String host; @@ -128,12 +126,11 @@ public HiveConnection(String uri, Properties info) throws SQLException { setupLoginTimeout(); try { - connParams = Utils.parseURL(uri); + connParams = Utils.parseURL(uri, info); } catch (ZooKeeperHiveClientException e) { throw new SQLException(e); } jdbcUriString = connParams.getJdbcUriString(); - // extract parsed connection parameters: // JDBC URL: jdbc:hive2://:/dbName;sess_var_list?hive_conf_list#hive_var_list // each list: =;= and so on // sess_var_list -> sessConfMap @@ -143,19 +140,7 @@ 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)); - } else if (key.startsWith(HIVE_CONF_PREFIX)) { - hiveConfMap.put(key.substring(HIVE_CONF_PREFIX.length()), info.getProperty(key)); - } - } - } - isEmbeddedMode = connParams.isEmbeddedMode(); if (isEmbeddedMode) { @@ -163,17 +148,6 @@ public HiveConnection(String uri, Properties info) throws SQLException { embeddedClient.init(null); client = embeddedClient; } else { - // extract user/password from JDBC connection properties if its not supplied in the - // connection URL - if (info.containsKey(JdbcConnectionParams.AUTH_USER)) { - sessConfMap.put(JdbcConnectionParams.AUTH_USER, info.getProperty(JdbcConnectionParams.AUTH_USER)); - if (info.containsKey(JdbcConnectionParams.AUTH_PASSWD)) { - sessConfMap.put(JdbcConnectionParams.AUTH_PASSWD, info.getProperty(JdbcConnectionParams.AUTH_PASSWD)); - } - } - if (info.containsKey(JdbcConnectionParams.AUTH_TYPE)) { - sessConfMap.put(JdbcConnectionParams.AUTH_TYPE, info.getProperty(JdbcConnectionParams.AUTH_TYPE)); - } // open the client transport openTransport(); // set up the client diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveDriver.java b/jdbc/src/java/org/apache/hive/jdbc/HiveDriver.java index dbc9612..a349f8b 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveDriver.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveDriver.java @@ -238,7 +238,7 @@ private Properties parseURLforPropertyInfo(String url, Properties defaults) thro JdbcConnectionParams params = null; try { - params = Utils.parseURL(url); + params = Utils.parseURL(url, defaults); } catch (ZooKeeperHiveClientException e) { throw new SQLException(e); } diff --git a/jdbc/src/java/org/apache/hive/jdbc/Utils.java b/jdbc/src/java/org/apache/hive/jdbc/Utils.java index 11b4109..d3f8878 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/Utils.java +++ b/jdbc/src/java/org/apache/hive/jdbc/Utils.java @@ -25,6 +25,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -127,6 +128,8 @@ // Currently supports JKS keystore format static final String SSL_TRUST_STORE_TYPE = "JKS"; + private static final String HIVE_VAR_PREFIX = "hivevar:"; + private static final String HIVE_CONF_PREFIX = "hiveconf:"; private String host = null; private int port = 0; private String jdbcUriString; @@ -278,7 +281,7 @@ static void verifySuccess(TStatus status, boolean withInfo) throws SQLException * @return * @throws SQLException */ - static JdbcConnectionParams parseURL(String uri) throws JdbcUriParseException, + static JdbcConnectionParams parseURL(String uri, Properties info) throws JdbcUriParseException, SQLException, ZooKeeperHiveClientException { JdbcConnectionParams connParams = new JdbcConnectionParams(); @@ -363,6 +366,34 @@ static JdbcConnectionParams parseURL(String uri) throws JdbcUriParseException, connParams.getHiveVars().put(varMatcher.group(1), varMatcher.group(2)); } } + + // Apply configs supplied in the JDBC connection properties object + for (Map.Entry kv : info.entrySet()) { + if ((kv.getKey() instanceof String)) { + String key = (String) kv.getKey(); + if (key.startsWith(JdbcConnectionParams.HIVE_VAR_PREFIX)) { + connParams.getHiveVars().put( + key.substring(JdbcConnectionParams.HIVE_VAR_PREFIX.length()), info.getProperty(key)); + } else if (key.startsWith(JdbcConnectionParams.HIVE_CONF_PREFIX)) { + connParams.getHiveConfs().put( + key.substring(JdbcConnectionParams.HIVE_CONF_PREFIX.length()), info.getProperty(key)); + } + } + } + // Extract user/password from JDBC connection properties if its not supplied + // in the connection URL + if (info.containsKey(JdbcConnectionParams.AUTH_USER)) { + connParams.getSessionVars().put(JdbcConnectionParams.AUTH_USER, + info.getProperty(JdbcConnectionParams.AUTH_USER)); + if (info.containsKey(JdbcConnectionParams.AUTH_PASSWD)) { + connParams.getSessionVars().put(JdbcConnectionParams.AUTH_PASSWD, + info.getProperty(JdbcConnectionParams.AUTH_PASSWD)); + } + } + if (info.containsKey(JdbcConnectionParams.AUTH_TYPE)) { + connParams.getSessionVars().put(JdbcConnectionParams.AUTH_TYPE, + info.getProperty(JdbcConnectionParams.AUTH_TYPE)); + } // Handle all deprecations here: String newUsage;