CE-936 - Add methods getJdbcDriverClassName, getJdbcUrl

This commit is contained in:
2024-03-12 11:45:36 -05:00
parent 621997efd9
commit 2e1bf399f9
2 changed files with 73 additions and 0 deletions

View File

@ -41,10 +41,41 @@ public class ConnectionManager
public Connection getConnection(RDBMSBackendMetaData backend) throws SQLException public Connection getConnection(RDBMSBackendMetaData backend) throws SQLException
{ {
String jdbcURL; String jdbcURL;
String jdbcURL = getJdbcUrl(backend);
return DriverManager.getConnection(jdbcURL, backend.getUsername(), backend.getPassword());
}
/*******************************************************************************
**
*******************************************************************************/
public static String getJdbcDriverClassName(RDBMSBackendMetaData backend)
{
if(StringUtils.hasContent(backend.getJdbcDriverClassName()))
{
return backend.getJdbcDriverClassName();
}
return switch(backend.getVendor())
{
case "mysql", "aurora" -> "com.mysql.cj.jdbc.Driver";
case "h2" -> "org.h2.Driver";
default -> throw (new IllegalStateException("We do not know what jdbc driver to use for vendor name [" + backend.getVendor() + "]. Try setting jdbcDriverClassName in your backend meta data."));
};
}
/*******************************************************************************
**
*******************************************************************************/
public static String getJdbcUrl(RDBMSBackendMetaData backend)
{
if(StringUtils.hasContent(backend.getJdbcUrl())) if(StringUtils.hasContent(backend.getJdbcUrl()))
{ {
jdbcURL = backend.getJdbcUrl(); jdbcURL = backend.getJdbcUrl();
return backend.getJdbcUrl();
} }
else else
{ {
@ -60,6 +91,16 @@ public class ConnectionManager
} }
return DriverManager.getConnection(jdbcURL, backend.getUsername(), backend.getPassword()); return DriverManager.getConnection(jdbcURL, backend.getUsername(), backend.getPassword());
return switch(backend.getVendor())
{
// TODO aws-mysql-jdbc driver not working when running on AWS
// jdbcURL = "jdbc:mysql:aws://" + backend.getHostName() + ":" + backend.getPort() + "/" + backend.getDatabaseName() + "?rewriteBatchedStatements=true&zeroDateTimeBehavior=CONVERT_TO_NULL";
case "aurora" -> "jdbc:mysql://" + backend.getHostName() + ":" + backend.getPort() + "/" + backend.getDatabaseName() + "?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useSSL=false";
case "mysql" -> "jdbc:mysql://" + backend.getHostName() + ":" + backend.getPort() + "/" + backend.getDatabaseName() + "?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull";
case "h2" -> "jdbc:h2:" + backend.getHostName() + ":" + backend.getDatabaseName() + ";MODE=MySQL;DB_CLOSE_DELAY=-1";
default -> throw new IllegalArgumentException("Unsupported rdbms backend vendor: " + backend.getVendor());
};
} }
} }

View File

@ -40,6 +40,7 @@ public class RDBMSBackendMetaData extends QBackendMetaData
private String password; private String password;
private String jdbcUrl; private String jdbcUrl;
private String jdbcDriverClassName;
@ -314,4 +315,35 @@ public class RDBMSBackendMetaData extends QBackendMetaData
return (this); return (this);
} }
/*******************************************************************************
** Getter for jdbcDriverClassName
*******************************************************************************/
public String getJdbcDriverClassName()
{
return (this.jdbcDriverClassName);
}
/*******************************************************************************
** Setter for jdbcDriverClassName
*******************************************************************************/
public void setJdbcDriverClassName(String jdbcDriverClassName)
{
this.jdbcDriverClassName = jdbcDriverClassName;
}
/*******************************************************************************
** Fluent setter for jdbcDriverClassName
*******************************************************************************/
public RDBMSBackendMetaData withJdbcDriverClassName(String jdbcDriverClassName)
{
this.jdbcDriverClassName = jdbcDriverClassName;
return (this);
}
} }