Skip to content

Commit aa15c15

Browse files
authored
Merge pull request #255 from marklogic/feature/db-fix
Ensuring separate database option is not overridden by connection string
2 parents a2b344f + d515146 commit aa15c15

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/main/java/com/marklogic/spark/ContextSupport.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,11 @@ private void parseConnectionString(String value, Map<String, String> connectionP
114114
connectionProps.put(Options.CLIENT_PASSWORD, connectionString.getPassword());
115115
connectionProps.put(Options.CLIENT_HOST, connectionString.getHost());
116116
connectionProps.put(Options.CLIENT_PORT, connectionString.getPort() + "");
117-
connectionProps.put(Options.CLIENT_DATABASE, connectionString.getDatabase());
117+
118+
String db = connectionString.getDatabase();
119+
if (db != null && db.trim().length() > 0) {
120+
connectionProps.put(Options.CLIENT_DATABASE, db);
121+
}
118122
}
119123

120124
protected final long getNumericOption(String optionName, long defaultValue, long minimumValue) {

src/test/java/com/marklogic/spark/BuildConnectionPropertiesTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,22 @@ void useDefaults() {
4040
"they can simply set this to 'direct' instead.");
4141
}
4242

43+
@Test
44+
void clientUriWithDatabase() {
45+
properties.put(Options.CLIENT_DATABASE, "Documents");
46+
properties.put(Options.CLIENT_URI, "user:password@host:8016");
47+
Map<String, String> connectionProps = new ContextSupport(properties).buildConnectionProperties();
48+
49+
assertEquals("Documents", connectionProps.get(Options.CLIENT_DATABASE), "If the user does not specify a " +
50+
"database in the connection string, then the database value specified separately should still be used. " +
51+
"This avoids a potential issue where the user is not aware that the connection string accepts a database " +
52+
"and thus specifies it via the database option.");
53+
assertEquals("user", connectionProps.get(Options.CLIENT_USERNAME));
54+
assertEquals("password", connectionProps.get(Options.CLIENT_PASSWORD));
55+
assertEquals("host", connectionProps.get(Options.CLIENT_HOST));
56+
assertEquals("8016", connectionProps.get(Options.CLIENT_PORT));
57+
}
58+
4359
@Test
4460
void overrideDefaults() {
4561
properties.put(AUTH_TYPE, "basic");

0 commit comments

Comments
 (0)