Skip to content

Commit b8e7cc5

Browse files
authored
[PECOBLR-325] Fix: JDBC Url not being parsed correctly (#784)
* Corrected url parsing. * remove staging ref
1 parent d48abff commit b8e7cc5

File tree

3 files changed

+40
-11
lines changed

3 files changed

+40
-11
lines changed

src/main/java/com/databricks/jdbc/api/impl/DatabricksConnectionContext.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.databricks.jdbc.api.internal.IDatabricksConnectionContext;
1010
import com.databricks.jdbc.common.*;
1111
import com.databricks.jdbc.common.util.ValidationUtil;
12+
import com.databricks.jdbc.common.util.WildcardUtil;
1213
import com.databricks.jdbc.exception.DatabricksParsingException;
1314
import com.databricks.jdbc.exception.DatabricksSQLException;
1415
import com.databricks.jdbc.log.JdbcLogger;
@@ -79,16 +80,19 @@ private DatabricksConnectionContext(
7980
public static ImmutableMap<String, String> buildPropertiesMap(
8081
String connectionParamString, Properties properties) {
8182
ImmutableMap.Builder<String, String> parametersBuilder = ImmutableMap.builder();
82-
String[] urlParts = connectionParamString.split(DatabricksJdbcConstants.URL_DELIMITER);
83-
for (String urlPart : urlParts) {
84-
String[] pair = urlPart.split(DatabricksJdbcConstants.PAIR_DELIMITER);
85-
if (pair.length == 1) {
86-
pair = new String[] {pair[0], ""};
87-
}
88-
if (pair[0].startsWith(DatabricksJdbcUrlParams.HTTP_HEADERS.getParamName())) {
89-
parametersBuilder.put(pair[0], pair[1]);
90-
} else {
91-
parametersBuilder.put(pair[0].toLowerCase(), pair[1]);
83+
// check if connectionParamString is empty or null
84+
if (!WildcardUtil.isNullOrEmpty(connectionParamString)) {
85+
String[] urlParts = connectionParamString.split(DatabricksJdbcConstants.URL_DELIMITER);
86+
for (String urlPart : urlParts) {
87+
String[] pair = urlPart.split(DatabricksJdbcConstants.PAIR_DELIMITER);
88+
if (pair.length == 1) {
89+
pair = new String[] {pair[0], ""};
90+
}
91+
if (pair[0].startsWith(DatabricksJdbcUrlParams.HTTP_HEADERS.getParamName())) {
92+
parametersBuilder.put(pair[0], pair[1]);
93+
} else {
94+
parametersBuilder.put(pair[0].toLowerCase(), pair[1]);
95+
}
9296
}
9397
}
9498
for (Map.Entry<Object, Object> entry : properties.entrySet()) {

src/main/java/com/databricks/jdbc/common/DatabricksJdbcUrlParams.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public enum DatabricksJdbcUrlParams {
1212
PASSWORD("password", "Password for authentication"),
1313
CLIENT_ID("OAuth2ClientId", "OAuth2 Client ID"),
1414
CLIENT_SECRET("OAuth2Secret", "OAuth2 Client Secret"),
15-
AUTH_MECH("authmech", "Authentication mechanism", true),
15+
AUTH_MECH("authmech", "Authentication mechanism", "3", true),
1616
AUTH_ACCESS_TOKEN("Auth_AccessToken", "OAuth2 Access Token"),
1717
CONN_CATALOG("conncatalog", "Connection catalog"),
1818
CONN_SCHEMA("connschema", "Connection schema"),

src/test/java/com/databricks/jdbc/api/impl/DatabricksConnectionContextTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,31 @@ public void testParseValid() throws DatabricksSQLException {
154154
assertEquals(M2M_AUTH_TYPE, connectionContext.getGcpAuthType());
155155
}
156156

157+
@Test
158+
public void testParseValidBasicUrl() throws DatabricksSQLException {
159+
// test default AuthMech
160+
Properties props = new Properties();
161+
String httpPath = "/sql/1.0/warehouses/fgff575757";
162+
props.put("password", "passwd");
163+
props.put("httpPath", httpPath);
164+
DatabricksConnectionContext connectionContext =
165+
(DatabricksConnectionContext)
166+
DatabricksConnectionContext.parse(TestConstants.VALID_BASE_URL_1, props);
167+
assertEquals(AuthMech.PAT, connectionContext.getAuthMech());
168+
assertEquals("passwd", connectionContext.getToken());
169+
assertEquals(httpPath, connectionContext.getHttpPath());
170+
assertEquals(2, connectionContext.parameters.size());
171+
172+
// test url without <;>
173+
connectionContext =
174+
(DatabricksConnectionContext)
175+
DatabricksConnectionContext.parse(TestConstants.VALID_BASE_URL_3, props);
176+
assertEquals(AuthMech.PAT, connectionContext.getAuthMech());
177+
assertEquals("passwd", connectionContext.getToken());
178+
assertEquals(httpPath, connectionContext.getHttpPath());
179+
assertEquals(2, connectionContext.parameters.size());
180+
}
181+
157182
@Test
158183
public void testParseWithDefaultStringColumnLength() throws DatabricksSQLException {
159184
// Test case 1: Valid DefaultStringColumnLength

0 commit comments

Comments
 (0)