22
33import java .sql .Connection ;
44import java .sql .SQLException ;
5+ import java .util .ArrayList ;
6+ import java .util .Collections ;
57import java .util .List ;
68
79abstract class BaseMySqlContainer <C extends BaseMySqlContainer <C >> extends BaseJdbcContainer <C > {
@@ -25,6 +27,9 @@ private void createRoleAndDatabase(boolean withDrop) {
2527 if (withDrop ) {
2628 dropUserIfExists (connection , dbConfig .getUsername ());
2729 dropDatabaseIfExists (connection , dbConfig .getDbName ());
30+ for (String extraDb : toDatabaseNames (dbConfig .getExtraDb ())) {
31+ dropDatabaseIfExists (connection , extraDb );
32+ }
2833 }
2934 createDatabase (connection );
3035 createUser (connection );
@@ -34,13 +39,8 @@ private void createRoleAndDatabase(boolean withDrop) {
3439 }
3540 }
3641
37- private void createUser (Connection connection ) {
38- createUser (connection , dbConfig .getUsername (), dbConfig .getPassword (), dbConfig .getDbName ());
39- }
40-
41-
4242 private void dropDatabaseIfExists (Connection connection , String dbName ) {
43- if (databaseExists (connection , dbName )) {
43+ if (notEmpty ( dbName ) && databaseExists (connection , dbName )) {
4444 sqlRun (connection , "drop database " + dbName );
4545 }
4646 }
@@ -51,22 +51,32 @@ private void dropUserIfExists(Connection connection, String username) {
5151 }
5252 }
5353
54- private void createUser (Connection connection , String dbUser , String dbPassword , String db ) {
55- if (!userExists (connection , dbUser )) {
56- sqlRun (connection , "create user '" + dbUser + "'@'%' identified by '" + dbPassword + "'" );
57- sqlRun (connection , "grant all on " + db + ".* to '" + dbUser + "'@'%'" );
54+ private void createUser (Connection connection ) {
55+ if (!userExists (connection , dbConfig .getUsername ())) {
56+ sqlRun (connection , "create user '" + dbConfig .getUsername () + "'@'%' identified by '" + dbConfig .getPassword () + "'" );
57+ sqlRun (connection , "grant all on " + dbConfig .getDbName () + ".* to '" + dbConfig .getUsername () + "'@'%'" );
58+ for (String extraDb : toDatabaseNames (dbConfig .getExtraDb ())) {
59+ sqlRun (connection , "grant all on " + extraDb + ".* to '" + dbConfig .getUsername () + "'@'%'" );
60+ }
5861 }
5962 }
6063
6164 private void createDatabase (Connection connection ) {
6265 if (!databaseExists (connection , dbConfig .getDbName ())) {
6366 createDatabase (connection , dbConfig .getDbName ());
67+ createExtraDatabases (connection );
6468 if (!dbConfig .version ().startsWith ("5" )) {
6569 setLogBinTrustFunction (connection );
6670 }
6771 }
6872 }
6973
74+ private void createExtraDatabases (Connection connection ) {
75+ for (String extraDb : toDatabaseNames (dbConfig .getExtraDb ())) {
76+ createDatabase (connection , extraDb );
77+ }
78+ }
79+
7080 private void setLogBinTrustFunction (Connection connection ) {
7181 sqlRun (connection , "set global log_bin_trust_function_creators=1" );
7282 }
@@ -85,7 +95,6 @@ private boolean userExists(Connection connection, String dbUser) {
8595
8696 @ Override
8797 protected ProcessBuilder runProcess () {
88-
8998 List <String > args = dockerRun ();
9099 if (defined (dbConfig .getAdminPassword ())) {
91100 args .add ("-e" );
@@ -116,4 +125,18 @@ protected ProcessBuilder runProcess() {
116125 return createProcessBuilder (args );
117126 }
118127
128+ static List <String > toDatabaseNames (String dbNames ) {
129+ if (dbNames == null ) {
130+ return Collections .emptyList ();
131+ }
132+ String [] names = dbNames .split ("," );
133+ List <String > dbNameList = new ArrayList <>();
134+ for (String name : names ) {
135+ name = name .trim ();
136+ if (!name .isEmpty ()) {
137+ dbNameList .add (name );
138+ }
139+ }
140+ return dbNameList ;
141+ }
119142}
0 commit comments