Skip to content

Commit a836d2e

Browse files
committed
Polishing
Decouple options map creation. Return unmodifiable options map to prevent unwanted modifications. Add since tag. [#271][resolves #272]
1 parent a05b862 commit a836d2e

File tree

3 files changed

+18
-31
lines changed

3 files changed

+18
-31
lines changed

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

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@
3333
import java.io.File;
3434
import java.time.Duration;
3535
import java.util.ArrayList;
36+
import java.util.Collections;
37+
import java.util.LinkedHashMap;
3638
import java.util.List;
3739
import java.util.Map;
38-
import java.util.HashMap;
3940
import java.util.ServiceLoader;
4041
import java.util.function.Function;
4142
import java.util.function.Supplier;
@@ -83,7 +84,8 @@ public final class PostgresqlConnectionConfiguration {
8384
private final SSLConfig sslConfig;
8485

8586
private PostgresqlConnectionConfiguration(String applicationName, boolean autodetectExtensions,
86-
@Nullable Duration connectTimeout, @Nullable String database, List<Extension> extensions, ToIntFunction<String> fetchSize, boolean forceBinary,
87+
@Nullable Duration connectTimeout, @Nullable String database, List<Extension> extensions,
88+
ToIntFunction<String> fetchSize, boolean forceBinary,
8789
@Nullable String host,
8890
@Nullable Map<String, String> options, @Nullable CharSequence password, int port, @Nullable String schema, @Nullable String socket, String username,
8991
SSLConfig sslConfig) {
@@ -95,29 +97,19 @@ private PostgresqlConnectionConfiguration(String applicationName, boolean autode
9597
this.fetchSize = fetchSize;
9698
this.forceBinary = forceBinary;
9799
this.host = host;
98-
this.options = initOptions(options);
100+
this.options = options == null ? new LinkedHashMap<>() : new LinkedHashMap<>(options);
101+
102+
if (schema != null && !schema.isEmpty()) {
103+
this.options.put("search_path", schema);
104+
}
105+
99106
this.password = password;
100107
this.port = port;
101-
addToOptions(schema);
102108
this.socket = socket;
103109
this.username = Assert.requireNonNull(username, "username must not be null");
104110
this.sslConfig = sslConfig;
105111
}
106112

107-
private Map<String, String> initOptions(@Nullable Map<String, String> options) {
108-
if (options == null) {
109-
return new HashMap<>();
110-
} else {
111-
return options;
112-
}
113-
}
114-
115-
private void addToOptions(String schema) {
116-
if (schema != null && !schema.isEmpty()) {
117-
options.put("search_path", schema);
118-
}
119-
}
120-
121113
/**
122114
* Returns a new {@link Builder}.
123115
*
@@ -198,9 +190,8 @@ String getRequiredHost() {
198190
return host;
199191
}
200192

201-
@Nullable
202193
Map<String, String> getOptions() {
203-
return this.options;
194+
return Collections.unmodifiableMap(this.options);
204195
}
205196

206197
@Nullable

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
import java.net.InetSocketAddress;
4545
import java.net.SocketAddress;
4646
import java.util.ArrayList;
47-
import java.util.HashMap;
47+
import java.util.LinkedHashMap;
4848
import java.util.List;
4949
import java.util.Locale;
5050
import java.util.Map;
@@ -128,13 +128,7 @@ public Mono<io.r2dbc.postgresql.api.PostgresqlConnection> create() {
128128
*/
129129
public Mono<io.r2dbc.postgresql.api.PostgresqlReplicationConnection> replication() {
130130

131-
Map<String, String> options = this.configuration.getOptions();
132-
if (options == null) {
133-
options = new HashMap<>();
134-
} else {
135-
options = new HashMap<>(options);
136-
}
137-
131+
Map<String, String> options = new LinkedHashMap<>(this.configuration.getOptions());
138132
options.put(REPLICATION_OPTION, REPLICATION_DATABASE);
139133

140134
return doCreateConnection(true, options).map(DefaultPostgresqlReplicationConnection::new);
@@ -186,7 +180,7 @@ private Mono<PostgresqlConnection> doCreateConnection(boolean forReplication, @N
186180

187181
private boolean isReplicationConnection() {
188182
Map<String, String> options = this.configuration.getOptions();
189-
return options != null && REPLICATION_DATABASE.equalsIgnoreCase(options.get(REPLICATION_OPTION));
183+
return REPLICATION_DATABASE.equalsIgnoreCase(options.get(REPLICATION_OPTION));
190184
}
191185

192186
private Mono<Client> tryConnectWithConfig(SSLConfig sslConfig, @Nullable Map<String, String> options) {

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ public final class PostgresqlConnectionFactoryProvider implements ConnectionFact
7878

7979
/**
8080
* Schema search path.
81+
*
82+
* @since 0.8.3
8183
*/
8284
public static final Option<String> CURRENT_SCHEMA = Option.valueOf("currentSchema");
8385

@@ -158,13 +160,13 @@ private static PostgresqlConnectionConfiguration createConfiguration(ConnectionF
158160
builder.host(connectionFactoryOptions.getRequiredValue(HOST));
159161
}
160162
builder.password(connectionFactoryOptions.getValue(PASSWORD));
161-
163+
162164
if (connectionFactoryOptions.getValue(CURRENT_SCHEMA) != null) {
163165
builder.schema(connectionFactoryOptions.getValue(CURRENT_SCHEMA));
164166
} else {
165167
builder.schema(connectionFactoryOptions.getValue(SCHEMA));
166168
}
167-
169+
168170
builder.username(connectionFactoryOptions.getRequiredValue(USER));
169171

170172
Integer port = connectionFactoryOptions.getValue(PORT);

0 commit comments

Comments
 (0)