Skip to content

Commit 2ecd4d8

Browse files
committed
fix: extract SQL dialect from endpoint url
1 parent e56935d commit 2ecd4d8

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

cli/flamingock-cli/src/main/java/io/flamingock/cli/config/DatabaseConfig.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.flamingock.internal.common.sql.SqlDialect;
1919

2020
import java.util.Map;
21+
import java.util.Optional;
2122

2223
public class DatabaseConfig {
2324
private MongoDBConfig mongodb;
@@ -269,16 +270,34 @@ public void setPassword(String password) {
269270
this.password = password;
270271
}
271272

272-
public SqlDialect getSqlDialect() {
273-
return sqlDialect;
273+
public Optional<SqlDialect> getSqlDialect() {
274+
return sqlDialect == null ? Optional.empty() : Optional.of(sqlDialect);
274275
}
275276

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

281+
public SqlDialect getEffectiveSqlDialect() {
282+
if (this.sqlDialect != null) {
283+
return this.sqlDialect;
284+
}
285+
String[] parts = this.endpoint.split(":", 3);
286+
if (parts.length < 2 || parts[1].isEmpty()) {
287+
throw new IllegalStateException("Cannot determine SQL dialect from endpoint: " + this.endpoint);
288+
}
289+
String dialect = parts[1].toLowerCase();
290+
if ("firebirdsql".equals(dialect)) dialect = "firebird";
291+
if ("informix-sqli".equals(dialect)) dialect = "informix";
292+
try {
293+
return SqlDialect.valueOf(dialect.toUpperCase());
294+
} catch (IllegalArgumentException e) {
295+
throw new IllegalArgumentException("Unsupported SQL Dialect: " + dialect, e);
296+
}
297+
}
298+
280299
public String getDriverClassName() {
281-
switch (sqlDialect) {
300+
switch (this.getEffectiveSqlDialect()) {
282301
case MYSQL:
283302
return "com.mysql.cj.jdbc.Driver";
284303
case MARIADB:
@@ -302,7 +321,7 @@ public String getDriverClassName() {
302321
case DB2:
303322
return "com.ibm.db2.jcc.DB2Driver";
304323
default:
305-
throw new IllegalArgumentException("Unsupported SQL Dialect: " + sqlDialect);
324+
throw new IllegalArgumentException("Unsupported SQL Dialect: " + this.getEffectiveSqlDialect());
306325
}
307326
}
308327

cli/flamingock-cli/src/main/java/io/flamingock/cli/factory/SqlDataSourceFactory.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ public static DataSource createSqlDataSource(DatabaseConfig.SqlConfig config) {
3838
throw new IllegalArgumentException("Database endpoint is required");
3939
}
4040

41-
if (config.getSqlDialect() == null) {
42-
throw new IllegalArgumentException("Sql dialect is required");
43-
}
44-
45-
if (!SqlDialect.SQLITE.equals(config.getSqlDialect())) {
41+
if (!SqlDialect.SQLITE.equals(config.getEffectiveSqlDialect())) {
4642
if (config.getUsername() == null) {
4743
throw new IllegalArgumentException("Database username is required");
4844
}
@@ -54,16 +50,10 @@ public static DataSource createSqlDataSource(DatabaseConfig.SqlConfig config) {
5450
try {
5551
DataSource sqlDatasource;
5652

57-
if (config.getSqlDialect().equals(SqlDialect.SQLITE)) {
53+
if (config.getEffectiveSqlDialect().equals(SqlDialect.SQLITE)) {
5854
SQLiteDataSource sqliteDatasource = new SQLiteDataSource();
5955
sqliteDatasource.setUrl(config.getEndpoint());
6056

61-
try (Connection conn = sqliteDatasource.getConnection();
62-
Statement stmt = conn.createStatement()) {
63-
stmt.execute("PRAGMA journal_mode=WAL;");
64-
stmt.execute("PRAGMA busy_timeout=5000;");
65-
}
66-
6757
sqlDatasource = sqliteDatasource;
6858
} else {
6959
HikariConfig datasourceConfig = new HikariConfig();

cli/flamingock-cli/src/test/java/io/flamingock/cli/SimpleCLITest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,6 @@ void shouldCreateTestConfigs() {
9393

9494
assertThat(sqlConfig).isNotNull();
9595
assertThat(sqlConfig.getAudit().getSql()).isNotNull();
96-
assertThat(sqlConfig.getAudit().getSql().getSqlDialect()).isEqualTo(SQLSERVER);
96+
assertThat(sqlConfig.getAudit().getSql().getEffectiveSqlDialect()).isEqualTo(SQLSERVER);
9797
}
9898
}

0 commit comments

Comments
 (0)