Skip to content

Commit c44037d

Browse files
committed
Polishing
Align parameter conversion with existing converter methods. Simplify tests. [#273]
1 parent 642ff3b commit c44037d

File tree

2 files changed

+30
-31
lines changed

2 files changed

+30
-31
lines changed

src/main/java/io/r2dbc/postgresql/PostgresqlConnectionFactoryProvider.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import io.r2dbc.spi.Option;
2525

2626
import javax.net.ssl.HostnameVerifier;
27-
import java.util.HashMap;
27+
import java.util.LinkedHashMap;
2828
import java.util.Locale;
2929
import java.util.Map;
3030
import java.util.function.Function;
@@ -188,15 +188,9 @@ private static PostgresqlConnectionConfiguration createConfiguration(ConnectionF
188188
builder.forceBinary(convertToBoolean(forceBinary));
189189
}
190190

191-
Option<Object> optionsAsObject = Option.valueOf("options");
192-
Object optionsObject = connectionFactoryOptions.getValue(optionsAsObject);
193-
194-
Map<String, String> options = optionsObject instanceof String
195-
? mapOptionsFromUrlString((String) optionsObject)
196-
: connectionFactoryOptions.getValue(OPTIONS);
197-
191+
Object options = connectionFactoryOptions.getValue(Option.valueOf("options"));
198192
if (options != null) {
199-
builder.options(options);
193+
builder.options(convertToMap(options));
200194
}
201195

202196
if (tcp) {
@@ -281,15 +275,21 @@ private static int convertToInt(Object value) {
281275
return value instanceof Integer ? (int) value : Integer.parseInt(value.toString());
282276
}
283277

284-
private static Map<String, String> mapOptionsFromUrlString(String optionsString) {
285-
Map<String, String> result = new HashMap<>();
286-
for (String pair : optionsString.split(";")) {
287-
String[] nameValue = pair.split("=");
288-
if (nameValue.length != 2) {
289-
throw new IllegalArgumentException(String.format("One of the options, provided via URL is not a valid name=value pair: %s", pair));
278+
@SuppressWarnings("unchecked")
279+
private static Map<String, String> convertToMap(Object options) {
280+
if (options instanceof Map) {
281+
return Map.class.cast(options);
282+
}
283+
284+
Map<String, String> result = new LinkedHashMap<>();
285+
for (String pair : options.toString().split(";")) {
286+
String[] items = pair.split("=");
287+
if (items.length != 2) {
288+
throw new IllegalArgumentException(String.format("Provided options pair is not a valid name=value pair: %s", pair));
290289
}
291-
result.put(nameValue[0], nameValue[1]);
290+
result.put(items[0], items[1]);
292291
}
292+
293293
return result;
294294
}
295295
}

src/test/java/io/r2dbc/postgresql/PostgresqlConnectionFactoryProviderTest.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import io.r2dbc.spi.Option;
2323
import org.junit.jupiter.api.Test;
2424

25-
import java.util.Collections;
2625
import java.util.HashMap;
2726
import java.util.Map;
2827

@@ -156,25 +155,25 @@ void shouldCreateConnectionFactoryWithoutPassword() {
156155
@Test
157156
void providerShouldConsiderFetchSize() {
158157
PostgresqlConnectionFactory factory = this.provider.create(builder()
159-
.option(DRIVER, LEGACY_POSTGRESQL_DRIVER)
160-
.option(HOST, "test-host")
161-
.option(PASSWORD, "test-password")
162-
.option(USER, "test-user")
163-
.option(FETCH_SIZE, 100)
164-
.build());
158+
.option(DRIVER, LEGACY_POSTGRESQL_DRIVER)
159+
.option(HOST, "test-host")
160+
.option(PASSWORD, "test-password")
161+
.option(USER, "test-user")
162+
.option(FETCH_SIZE, 100)
163+
.build());
165164

166165
assertThat(factory.getConfiguration().getFetchSize().applyAsInt("")).isEqualTo(100);
167166
}
168167

169168
@Test
170169
void providerShouldConsiderFetchSizeAsString() {
171170
PostgresqlConnectionFactory factory = this.provider.create(builder()
172-
.option(DRIVER, LEGACY_POSTGRESQL_DRIVER)
173-
.option(HOST, "test-host")
174-
.option(PASSWORD, "test-password")
175-
.option(USER, "test-user")
176-
.option(Option.valueOf("fetchSize"), "100")
177-
.build());
171+
.option(DRIVER, LEGACY_POSTGRESQL_DRIVER)
172+
.option(HOST, "test-host")
173+
.option(PASSWORD, "test-password")
174+
.option(USER, "test-user")
175+
.option(Option.valueOf("fetchSize"), "100")
176+
.build());
178177

179178
assertThat(factory.getConfiguration().getFetchSize().applyAsInt("")).isEqualTo(100);
180179
}
@@ -279,7 +278,7 @@ void shouldConnectUsingUnixDomainSocket() {
279278

280279
@Test
281280
void shouldParseOptionsProvidedAsString() {
282-
final Option<String> options = Option.valueOf("options");
281+
Option<String> options = Option.valueOf("options");
283282
PostgresqlConnectionFactory factory = this.provider.create(builder()
284283
.option(DRIVER, POSTGRESQL_DRIVER)
285284
.option(HOST, "test-host")
@@ -294,7 +293,7 @@ void shouldParseOptionsProvidedAsString() {
294293

295294
@Test
296295
void shouldParseOptionsProvidedAsMap() {
297-
final Option<Map<String, String>> options = Option.valueOf("options");
296+
Option<Map<String, String>> options = Option.valueOf("options");
298297

299298
Map<String, String> optionsMap = new HashMap<>();
300299
optionsMap.put("search_path", "public,private");

0 commit comments

Comments
 (0)