@@ -84,6 +84,8 @@ public final class MySqlConnectionConfiguration {
8484
8585 private final String database ;
8686
87+ private final boolean createDatabaseIfNotExist ;
88+
8789 @ Nullable
8890 private final Predicate <String > preferPrepareStatement ;
8991
@@ -96,12 +98,15 @@ public final class MySqlConnectionConfiguration {
9698 @ Nullable
9799 private final Publisher <String > passwordPublisher ;
98100
99- private MySqlConnectionConfiguration (boolean isHost , String domain , int port , MySqlSslConfiguration ssl ,
101+ private MySqlConnectionConfiguration (
102+ boolean isHost , String domain , int port , MySqlSslConfiguration ssl ,
100103 boolean tcpKeepAlive , boolean tcpNoDelay , @ Nullable Duration connectTimeout ,
101104 @ Nullable Duration socketTimeout , ZeroDateOption zeroDateOption , @ Nullable ZoneId serverZoneId ,
102105 String user , @ Nullable CharSequence password , @ Nullable String database ,
103- @ Nullable Predicate <String > preferPrepareStatement , int queryCacheSize , int prepareCacheSize ,
104- Extensions extensions , @ Nullable Publisher <String > passwordPublisher ) {
106+ boolean createDatabaseIfNotExist , @ Nullable Predicate <String > preferPrepareStatement ,
107+ int queryCacheSize , int prepareCacheSize , Extensions extensions ,
108+ @ Nullable Publisher <String > passwordPublisher
109+ ) {
105110 this .isHost = isHost ;
106111 this .domain = domain ;
107112 this .port = port ;
@@ -115,6 +120,7 @@ private MySqlConnectionConfiguration(boolean isHost, String domain, int port, My
115120 this .user = requireNonNull (user , "user must not be null" );
116121 this .password = password ;
117122 this .database = database == null || database .isEmpty () ? "" : database ;
123+ this .createDatabaseIfNotExist = createDatabaseIfNotExist ;
118124 this .preferPrepareStatement = preferPrepareStatement ;
119125 this .queryCacheSize = queryCacheSize ;
120126 this .prepareCacheSize = prepareCacheSize ;
@@ -192,6 +198,10 @@ String getDatabase() {
192198 return database ;
193199 }
194200
201+ boolean isCreateDatabaseIfNotExist () {
202+ return createDatabaseIfNotExist ;
203+ }
204+
195205 @ Nullable
196206 Predicate <String > getPreferPrepareStatement () {
197207 return preferPrepareStatement ;
@@ -236,6 +246,7 @@ public boolean equals(Object o) {
236246 user .equals (that .user ) &&
237247 Objects .equals (password , that .password ) &&
238248 database .equals (that .database ) &&
249+ createDatabaseIfNotExist == that .createDatabaseIfNotExist &&
239250 Objects .equals (preferPrepareStatement , that .preferPrepareStatement ) &&
240251 queryCacheSize == that .queryCacheSize &&
241252 prepareCacheSize == that .prepareCacheSize &&
@@ -245,29 +256,31 @@ public boolean equals(Object o) {
245256
246257 @ Override
247258 public int hashCode () {
248- return Objects .hash (isHost , domain , port , ssl , tcpKeepAlive , tcpNoDelay ,
249- connectTimeout , socketTimeout , serverZoneId , zeroDateOption , user , password , database ,
250- preferPrepareStatement , queryCacheSize , prepareCacheSize , extensions , passwordPublisher );
259+ return Objects .hash (isHost , domain , port , ssl , tcpKeepAlive , tcpNoDelay , connectTimeout ,
260+ socketTimeout , serverZoneId , zeroDateOption , user , password , database , createDatabaseIfNotExist ,
261+ preferPrepareStatement , queryCacheSize , prepareCacheSize , extensions , passwordPublisher );
251262 }
252263
253264 @ Override
254265 public String toString () {
255266 if (isHost ) {
256- return "MySqlConnectionConfiguration{, host='" + domain + "', port=" + port + ", ssl=" + ssl +
257- ", tcpNoDelay=" + tcpNoDelay + ", tcpKeepAlive=" + tcpKeepAlive + ", connectTimeout=" +
258- connectTimeout + ", socketTimeout=" + socketTimeout + ", serverZoneId=" + serverZoneId +
259- ", zeroDateOption=" + zeroDateOption + ", user='" + user + '\'' + ", password=" + password +
260- ", database='" + database + "', preferPrepareStatement=" + preferPrepareStatement +
261- ", queryCacheSize=" + queryCacheSize + ", prepareCacheSize=" + prepareCacheSize +
262- ", extensions=" + extensions + ", passwordPublisher=" + passwordPublisher + '}' ;
263- }
264-
265- return "MySqlConnectionConfiguration{, unixSocket='" + domain + "', connectTimeout=" +
266- connectTimeout + ", socketTimeout=" + socketTimeout + ", serverZoneId=" + serverZoneId +
267- ", zeroDateOption=" + zeroDateOption + ", user='" + user + "', password=" + password +
268- ", database='" + database + "', preferPrepareStatement=" + preferPrepareStatement +
269- ", queryCacheSize=" + queryCacheSize + ", prepareCacheSize=" + prepareCacheSize +
270- ", extensions=" + extensions + ", passwordPublisher=" + passwordPublisher + '}' ;
267+ return "MySqlConnectionConfiguration{host='" + domain + "', port=" + port + ", ssl=" + ssl +
268+ ", tcpNoDelay=" + tcpNoDelay + ", tcpKeepAlive=" + tcpKeepAlive + ", connectTimeout=" +
269+ connectTimeout + ", socketTimeout=" + socketTimeout + ", serverZoneId=" + serverZoneId +
270+ ", zeroDateOption=" + zeroDateOption + ", user='" + user + "', password=" + password +
271+ ", database='" + database + "', createDatabaseIfNotExist=" + createDatabaseIfNotExist +
272+ ", preferPrepareStatement=" + preferPrepareStatement + ", queryCacheSize=" + queryCacheSize +
273+ ", prepareCacheSize=" + prepareCacheSize + ", extensions=" + extensions +
274+ ", passwordPublisher=" + passwordPublisher + '}' ;
275+ }
276+
277+ return "MySqlConnectionConfiguration{unixSocket='" + domain + "', connectTimeout=" +
278+ connectTimeout + ", socketTimeout=" + socketTimeout + ", serverZoneId=" + serverZoneId +
279+ ", zeroDateOption=" + zeroDateOption + ", user='" + user + "', password=" + password +
280+ ", database='" + database + "', createDatabaseIfNotExist=" + createDatabaseIfNotExist +
281+ ", preferPrepareStatement=" + preferPrepareStatement + ", queryCacheSize=" + queryCacheSize +
282+ ", prepareCacheSize=" + prepareCacheSize + ", extensions=" + extensions +
283+ ", passwordPublisher=" + passwordPublisher + '}' ;
271284 }
272285
273286 /**
@@ -278,6 +291,8 @@ public static final class Builder {
278291 @ Nullable
279292 private String database ;
280293
294+ private boolean createDatabaseIfNotExist ;
295+
281296 private boolean isHost = true ;
282297
283298 private String domain ;
@@ -364,7 +379,7 @@ public MySqlConnectionConfiguration build() {
364379 sslCa , sslKey , sslKeyPassword , sslCert , sslContextBuilderCustomizer );
365380 return new MySqlConnectionConfiguration (isHost , domain , port , ssl , tcpKeepAlive , tcpNoDelay ,
366381 connectTimeout , socketTimeout , zeroDateOption , serverZoneId , user , password , database ,
367- preferPrepareStatement , queryCacheSize , prepareCacheSize ,
382+ createDatabaseIfNotExist , preferPrepareStatement , queryCacheSize , prepareCacheSize ,
368383 Extensions .from (extensions , autodetectExtensions ), passwordPublisher );
369384 }
370385
@@ -380,6 +395,19 @@ public Builder database(@Nullable String database) {
380395 return this ;
381396 }
382397
398+ /**
399+ * Configure to create the database given in the configuration if it does not yet exist. Default to
400+ * {@code false}.
401+ *
402+ * @param enabled to discover and register extensions.
403+ * @return this {@link Builder}.
404+ * @since 1.0.6
405+ */
406+ public Builder createDatabaseIfNotExist (boolean enabled ) {
407+ this .createDatabaseIfNotExist = enabled ;
408+ return this ;
409+ }
410+
383411 /**
384412 * Configure the Unix Domain Socket to connect to.
385413 *
0 commit comments