Commit 2b090505 authored by Stephane Nicoll's avatar Stephane Nicoll

Merge branch '1.4.x' into 1.5.x

parents 0fbe56ea 477c874e
...@@ -16,6 +16,10 @@ ...@@ -16,6 +16,10 @@
package org.springframework.boot.jdbc; package org.springframework.boot.jdbc;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
...@@ -107,6 +111,11 @@ public enum DatabaseDriver { ...@@ -107,6 +111,11 @@ public enum DatabaseDriver {
"org.firebirdsql.pool.FBConnectionPoolDataSource", "org.firebirdsql.pool.FBConnectionPoolDataSource",
"SELECT 1 FROM RDB$DATABASE") { "SELECT 1 FROM RDB$DATABASE") {
@Override
protected Collection<String> getUrlPrefixes() {
return Collections.singleton("firebirdsql");
}
@Override @Override
protected boolean matchProductName(String productName) { protected boolean matchProductName(String productName) {
return super.matchProductName(productName) return super.matchProductName(productName)
...@@ -134,6 +143,11 @@ public enum DatabaseDriver { ...@@ -134,6 +143,11 @@ public enum DatabaseDriver {
"com.ibm.as400.access.AS400JDBCXADataSource", "com.ibm.as400.access.AS400JDBCXADataSource",
"SELECT 1 FROM SYSIBM.SYSDUMMY1") { "SELECT 1 FROM SYSIBM.SYSDUMMY1") {
@Override
protected Collection<String> getUrlPrefixes() {
return Collections.singleton("as400");
}
@Override @Override
protected boolean matchProductName(String productName) { protected boolean matchProductName(String productName) {
return super.matchProductName(productName) return super.matchProductName(productName)
...@@ -150,7 +164,13 @@ public enum DatabaseDriver { ...@@ -150,7 +164,13 @@ public enum DatabaseDriver {
* Informix. * Informix.
*/ */
INFORMIX("informix", "Informix Dynamic Server", "com.informix.jdbc.IfxDriver", null, INFORMIX("informix", "Informix Dynamic Server", "com.informix.jdbc.IfxDriver", null,
"select count(*) from systables"); "select count(*) from systables") {
@Override
protected Collection<String> getUrlPrefixes() {
return Arrays.asList("informix-sqli", "informix-direct");
}
};
private final String id; private final String id;
...@@ -192,6 +212,10 @@ public enum DatabaseDriver { ...@@ -192,6 +212,10 @@ public enum DatabaseDriver {
return this.productName != null && this.productName.equalsIgnoreCase(productName); return this.productName != null && this.productName.equalsIgnoreCase(productName);
} }
protected Collection<String> getUrlPrefixes() {
return Collections.singleton(this.name().toLowerCase());
}
/** /**
* Return the driver class name. * Return the driver class name.
* @return the class name or {@code null} * @return the class name or {@code null}
...@@ -226,9 +250,11 @@ public enum DatabaseDriver { ...@@ -226,9 +250,11 @@ public enum DatabaseDriver {
Assert.isTrue(url.startsWith("jdbc"), "URL must start with 'jdbc'"); Assert.isTrue(url.startsWith("jdbc"), "URL must start with 'jdbc'");
String urlWithoutPrefix = url.substring("jdbc".length()).toLowerCase(); String urlWithoutPrefix = url.substring("jdbc".length()).toLowerCase();
for (DatabaseDriver driver : values()) { for (DatabaseDriver driver : values()) {
String prefix = ":" + driver.name().toLowerCase() + ":"; for (String urlPrefix : driver.getUrlPrefixes()) {
if (driver != UNKNOWN && urlWithoutPrefix.startsWith(prefix)) { String prefix = ":" + urlPrefix + ":";
return driver; if (driver != UNKNOWN && urlWithoutPrefix.startsWith(prefix)) {
return driver;
}
} }
} }
} }
......
...@@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat; ...@@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* *
* @author Phillip Webb * @author Phillip Webb
* @author Maciej Walkowiak * @author Maciej Walkowiak
* @author Stephane Nicoll
*/ */
public class DatabaseDriverTests { public class DatabaseDriverTests {
...@@ -70,25 +71,73 @@ public class DatabaseDriverTests { ...@@ -70,25 +71,73 @@ public class DatabaseDriverTests {
public void databaseProductNameLookups() throws Exception { public void databaseProductNameLookups() throws Exception {
assertThat(DatabaseDriver.fromProductName("newone")) assertThat(DatabaseDriver.fromProductName("newone"))
.isEqualTo(DatabaseDriver.UNKNOWN); .isEqualTo(DatabaseDriver.UNKNOWN);
assertThat(DatabaseDriver.fromProductName("Apache Derby"))
.isEqualTo(DatabaseDriver.DERBY);
assertThat(DatabaseDriver.fromProductName("H2"))
.isEqualTo(DatabaseDriver.H2);
assertThat(DatabaseDriver.fromProductName("HSQL Database Engine")) assertThat(DatabaseDriver.fromProductName("HSQL Database Engine"))
.isEqualTo(DatabaseDriver.HSQLDB); .isEqualTo(DatabaseDriver.HSQLDB);
assertThat(DatabaseDriver.fromProductName("SQLite"))
.isEqualTo(DatabaseDriver.SQLITE);
assertThat(DatabaseDriver.fromProductName("MySQL"))
.isEqualTo(DatabaseDriver.MYSQL);
assertThat(DatabaseDriver.fromProductName("Oracle")) assertThat(DatabaseDriver.fromProductName("Oracle"))
.isEqualTo(DatabaseDriver.ORACLE); .isEqualTo(DatabaseDriver.ORACLE);
assertThat(DatabaseDriver.fromProductName("Apache Derby")) assertThat(DatabaseDriver.fromProductName("PostgreSQL"))
.isEqualTo(DatabaseDriver.DERBY); .isEqualTo(DatabaseDriver.POSTGRESQL);
assertThat(DatabaseDriver.fromProductName("SQL SERVER"))
.isEqualTo(DatabaseDriver.SQLSERVER);
assertThat(DatabaseDriver.fromProductName("DB2")).isEqualTo(DatabaseDriver.DB2); assertThat(DatabaseDriver.fromProductName("DB2")).isEqualTo(DatabaseDriver.DB2);
assertThat(DatabaseDriver.fromProductName("Firebird 2.5.WI"))
.isEqualTo(DatabaseDriver.FIREBIRD);
assertThat(DatabaseDriver.fromProductName("Firebird 2.1.LI"))
.isEqualTo(DatabaseDriver.FIREBIRD);
assertThat(DatabaseDriver.fromProductName("DB2/LINUXX8664")) assertThat(DatabaseDriver.fromProductName("DB2/LINUXX8664"))
.isEqualTo(DatabaseDriver.DB2); .isEqualTo(DatabaseDriver.DB2);
assertThat(DatabaseDriver.fromProductName("DB2 UDB for AS/400")) assertThat(DatabaseDriver.fromProductName("DB2 UDB for AS/400"))
.isEqualTo(DatabaseDriver.DB2_AS400); .isEqualTo(DatabaseDriver.DB2_AS400);
assertThat(DatabaseDriver.fromProductName("DB3 XDB for AS/400")) assertThat(DatabaseDriver.fromProductName("DB3 XDB for AS/400"))
.isEqualTo(DatabaseDriver.DB2_AS400); .isEqualTo(DatabaseDriver.DB2_AS400);
assertThat(DatabaseDriver.fromProductName("Teradata"))
.isEqualTo(DatabaseDriver.TERADATA);
assertThat(DatabaseDriver.fromProductName("Informix Dynamic Server")) assertThat(DatabaseDriver.fromProductName("Informix Dynamic Server"))
.isEqualTo(DatabaseDriver.INFORMIX); .isEqualTo(DatabaseDriver.INFORMIX);
assertThat(DatabaseDriver.fromProductName("Firebird 2.5.WI")) }
.isEqualTo(DatabaseDriver.FIREBIRD);
assertThat(DatabaseDriver.fromProductName("Firebird 2.1.LI")) @Test
public void databaseJdbcUrlLookups() {
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:newone://localhost"))
.isEqualTo(DatabaseDriver.UNKNOWN);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:derby:sample"))
.isEqualTo(DatabaseDriver.DERBY);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:h2:~/sample"))
.isEqualTo(DatabaseDriver.H2);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:hsqldb:hsql://localhost"))
.isEqualTo(DatabaseDriver.HSQLDB);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:sqlite:sample.db"))
.isEqualTo(DatabaseDriver.SQLITE);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:mysql://localhost:3306/sample"))
.isEqualTo(DatabaseDriver.MYSQL);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:oracle:thin:@localhost:1521:orcl"))
.isEqualTo(DatabaseDriver.ORACLE);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:postgresql://127.0.0.1:5432/sample"))
.isEqualTo(DatabaseDriver.POSTGRESQL);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:jtds:sqlserver://127.0.0.1:1433/sample"))
.isEqualTo(DatabaseDriver.JTDS);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:sqlserver://127.0.0.1:1433"))
.isEqualTo(DatabaseDriver.SQLSERVER);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:firebirdsql://localhost/sample"))
.isEqualTo(DatabaseDriver.FIREBIRD); .isEqualTo(DatabaseDriver.FIREBIRD);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:db2://localhost:50000/sample "))
.isEqualTo(DatabaseDriver.DB2);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:as400://localhost"))
.isEqualTo(DatabaseDriver.DB2_AS400);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:teradata://localhost/SAMPLE"))
.isEqualTo(DatabaseDriver.TERADATA);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:informix-sqli://localhost:1533/sample"))
.isEqualTo(DatabaseDriver.INFORMIX);
assertThat(DatabaseDriver.fromJdbcUrl("jdbc:informix-direct://sample"))
.isEqualTo(DatabaseDriver.INFORMIX);
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment