init: Guess JDBC driver class if not configured
If the JDBC URL points to one of the 3 standard supported database
types, guess the Driver class name automatically. This fixes up any
old installations that are missing the driver class.
Bug: issue 1870
Change-Id: I897ab3a16cf91766a848980302182ab1070f65cb
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/JDBCInitializer.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/JDBCInitializer.java
index 94425ac1..ac3e728 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/JDBCInitializer.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/JDBCInitializer.java
@@ -16,13 +16,28 @@
import static com.google.gerrit.pgm.init.InitUtil.username;
-class JDBCInitializer implements DatabaseConfigInitializer {
+import com.google.common.base.Strings;
+class JDBCInitializer implements DatabaseConfigInitializer {
@Override
- public void initConfig(Section databaseSection) {
- databaseSection.string("Driver class name", "driver", null);
- databaseSection.string("URL", "url", null);
- databaseSection.string("Database username", "username", username());
- databaseSection.password("username", "password");
+ public void initConfig(Section database) {
+ database.string("URL", "url", null);
+ guessDriver(database);
+ database.string("Driver class name", "driver", null);
+ database.string("Database username", "username", username());
+ database.password("username", "password");
+ }
+
+ private void guessDriver(Section database) {
+ String url = Strings.emptyToNull(database.get("url"));
+ if (url != null && Strings.isNullOrEmpty(database.get("driver"))) {
+ if (url.startsWith("jdbc:h2:")) {
+ database.set("driver", "org.h2.Driver");
+ } else if (url.startsWith("jdbc:mysql:")) {
+ database.set("driver", "com.mysql.jdbc.Driver");
+ } else if (url.startsWith("jdbc:postgresql:")) {
+ database.set("driver", "org.postgresql.Driver");
+ }
+ }
}
}