Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import io.flamingock.internal.common.sql.SqlDialect;

import java.util.Map;
import java.util.Optional;

public class DatabaseConfig {
private MongoDBConfig mongodb;
Expand Down Expand Up @@ -269,16 +270,27 @@ public void setPassword(String password) {
this.password = password;
}

public SqlDialect getSqlDialect() {
return sqlDialect;
public Optional<SqlDialect> getSqlDialect() {
return Optional.ofNullable(sqlDialect);
}

public void setSqlDialect(String sqlDialect) {
this.sqlDialect = SqlDialect.valueOf(sqlDialect.toUpperCase());
}

public SqlDialect getEffectiveSqlDialect() {
if (this.sqlDialect != null) {
return this.sqlDialect;
}
String[] parts = this.endpoint.split(":", 3);
if (parts.length < 2 || parts[1].isEmpty()) {
throw new IllegalStateException("Cannot determine SQL dialect from endpoint: " + this.endpoint);
}
return SqlDialect.fromString(parts[1].toLowerCase());
}

public String getDriverClassName() {
switch (sqlDialect) {
switch (this.getEffectiveSqlDialect()) {
case MYSQL:
return "com.mysql.cj.jdbc.Driver";
case MARIADB:
Expand All @@ -302,7 +314,7 @@ public String getDriverClassName() {
case DB2:
return "com.ibm.db2.jcc.DB2Driver";
default:
throw new IllegalArgumentException("Unsupported SQL Dialect: " + sqlDialect);
throw new IllegalArgumentException("Unsupported SQL Dialect: " + this.getEffectiveSqlDialect());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,7 @@ public static DataSource createSqlDataSource(DatabaseConfig.SqlConfig config) {
throw new IllegalArgumentException("Database endpoint is required");
}

if (config.getSqlDialect() == null) {
throw new IllegalArgumentException("Sql dialect is required");
}

if (!SqlDialect.SQLITE.equals(config.getSqlDialect())) {
if (config.getEffectiveSqlDialect() != SqlDialect.SQLITE) {
if (config.getUsername() == null) {
throw new IllegalArgumentException("Database username is required");
}
Expand All @@ -54,16 +50,10 @@ public static DataSource createSqlDataSource(DatabaseConfig.SqlConfig config) {
try {
DataSource sqlDatasource;

if (config.getSqlDialect().equals(SqlDialect.SQLITE)) {
if (config.getEffectiveSqlDialect() == (SqlDialect.SQLITE)) {
SQLiteDataSource sqliteDatasource = new SQLiteDataSource();
sqliteDatasource.setUrl(config.getEndpoint());

try (Connection conn = sqliteDatasource.getConnection();
Statement stmt = conn.createStatement()) {
stmt.execute("PRAGMA journal_mode=WAL;");
stmt.execute("PRAGMA busy_timeout=5000;");
}

sqlDatasource = sqliteDatasource;
} else {
HikariConfig datasourceConfig = new HikariConfig();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,6 @@ void shouldCreateTestConfigs() {

assertThat(sqlConfig).isNotNull();
assertThat(sqlConfig.getAudit().getSql()).isNotNull();
assertThat(sqlConfig.getAudit().getSql().getSqlDialect()).isEqualTo(SQLSERVER);
assertThat(sqlConfig.getAudit().getSql().getEffectiveSqlDialect()).isEqualTo(SQLSERVER);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;

import static io.flamingock.internal.common.sql.SqlDialect.SQLSERVER;
import static org.assertj.core.api.Assertions.*;
Expand Down Expand Up @@ -100,7 +101,7 @@ void shouldLoadValidSqlConfiguration() throws IOException {
assertThat(config.getAudit().getSql().getEndpoint()).isEqualTo("jdbc:sqlserver://localhost:1433");
assertThat(config.getAudit().getSql().getUsername()).isEqualTo("test-user");
assertThat(config.getAudit().getSql().getPassword()).isEqualTo("test-password");
assertThat(config.getAudit().getSql().getSqlDialect()).isEqualTo(SQLSERVER);
assertThat(config.getAudit().getSql().getSqlDialect()).isEqualTo(Optional.of(SQLSERVER));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,7 @@ void shouldRunAuditListCommandWithSql(SqlDialect sqlDialect, String dialectName)
" sql:\n" +
" endpoint: \"" + sqlContainer.getJdbcUrl() + "\"\n" +
" username: \"" + sqlContainer.getUsername() + "\"\n" +
" password: \"" + sqlContainer.getPassword() + "\"\n" +
" sql-dialect: \"" + dialectName + "\"\n";
" password: \"" + sqlContainer.getPassword() + "\"\n";

Files.write(configFile, sqlConfig.getBytes());

Expand Down Expand Up @@ -182,8 +181,7 @@ void shouldHandleInvalidSqlConnectionGracefully(SqlDialect sqlDialect, String di
" sql:\n" +
" endpoint: \"jdbc:sqlserver://invalid-host:1433\"\n" +
" username: \"" + sqlContainer.getUsername() + "\"\n" +
" password: \"" + sqlContainer.getPassword() + "\"\n" +
" sql-dialect: \"" + dialectName + "\"\n";
" password: \"" + sqlContainer.getPassword() + "\"\n";

Files.write(configFile, invalidConfig.getBytes());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ public static FlamingockConfig createSqlConfig() {
sqlConfig.setEndpoint("jdbc:sqlserver://localhost:1433");
sqlConfig.setUsername("test-user");
sqlConfig.setPassword("test-password");
sqlConfig.setSqlDialect("SqlServer");
databaseConfig.setSql(sqlConfig);

config.setAudit(databaseConfig);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
*/
package io.flamingock.internal.common.sql;

import java.util.Locale;
import java.util.Optional;

public enum SqlDialect {
MYSQL,
MARIADB,
Expand All @@ -28,5 +31,15 @@ public enum SqlDialect {
FIREBIRD,
INFORMIX,
ORACLE,
DB2,
DB2;

public static SqlDialect fromString(String dialect) {
if ("firebirdsql".equals(dialect.toLowerCase())) return FIREBIRD;
if ("informix-sqli".equals(dialect.toLowerCase())) return INFORMIX;
try {
return SqlDialect.valueOf(dialect.toUpperCase());
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Unsupported SQL Dialect: " + dialect, e);
}
}
}
Loading