This is an automated email from the ASF dual-hosted git repository.
adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 112787cf0 FINERACT-2099: Initial Liquibase got executed every execution
112787cf0 is described below
commit 112787cf071e50f2505b412507a2b51aacab93f5
Author: Marta Jankovics <[email protected]>
AuthorDate: Sun Jun 30 15:31:13 2024 +0200
FINERACT-2099: Initial Liquibase got executed every execution
---
.../core/service/database/MySQLQueryService.java | 5 +----
.../core/service/database/PostgreSQLQueryService.java | 16 +++++++---------
.../service/migration/TenantDatabaseStateVerifier.java | 10 ++++++----
.../test/java/org/apache/fineract/TestConfiguration.java | 4 ++--
4 files changed, 16 insertions(+), 19 deletions(-)
diff --git
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java
index 10dc42a00..ba1e50493 100644
---
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java
+++
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java
@@ -18,8 +18,6 @@
*/
package org.apache.fineract.infrastructure.core.service.database;
-import static java.lang.String.format;
-
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
@@ -45,8 +43,7 @@ public class MySQLQueryService implements
DatabaseQueryService {
@Override
public boolean isTablePresent(DataSource dataSource, String tableName) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
- SqlRowSet rs = jdbcTemplate.queryForRowSet(format("SHOW TABLES LIKE
'%s'", tableName));
- return rs.next();
+ return jdbcTemplate.queryForRowSet("SHOW TABLES LIKE ?",
tableName).next();
}
@Override
diff --git
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java
index db611f421..9c1629383 100644
---
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java
+++
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/PostgreSQLQueryService.java
@@ -18,8 +18,6 @@
*/
package org.apache.fineract.infrastructure.core.service.database;
-import static java.lang.String.format;
-
import java.util.List;
import java.util.Objects;
import javax.sql.DataSource;
@@ -46,8 +44,9 @@ public class PostgreSQLQueryService implements
DatabaseQueryService {
@Override
public boolean isTablePresent(DataSource dataSource, String tableName) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
- Integer result = jdbcTemplate.queryForObject(format("SELECT
COUNT(table_name) " + "FROM information_schema.tables "
- + "WHERE table_schema = 'public' " + "AND table_name = '%s';",
tableName), Integer.class);
+ Integer result = jdbcTemplate.queryForObject(
+ "SELECT COUNT(table_name) FROM information_schema.tables " +
"WHERE table_schema = 'public' AND table_name = ?",
+ Integer.class, tableName);
return Objects.equals(result, 1);
}
@@ -56,9 +55,8 @@ public class PostgreSQLQueryService implements
DatabaseQueryService {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "SELECT column_name, is_nullable, data_type,"
+ " coalesce(character_maximum_length, numeric_precision,
datetime_precision) AS max_length, ordinal_position = 1 AS column_key"
- + " FROM information_schema.columns WHERE table_catalog =
current_catalog AND table_schema = current_schema AND table_name = '"
- + tableName + "' ORDER BY ordinal_position";
- final SqlRowSet columnDefinitions = jdbcTemplate.queryForRowSet(sql);
// NOSONAR
+ + " FROM information_schema.columns WHERE table_catalog =
current_catalog AND table_schema = current_schema AND table_name = ? ORDER BY
ordinal_position";
+ final SqlRowSet columnDefinitions = jdbcTemplate.queryForRowSet(sql,
tableName); // NOSONAR
if (columnDefinitions.next()) {
return columnDefinitions;
} else {
@@ -69,8 +67,8 @@ public class PostgreSQLQueryService implements
DatabaseQueryService {
@Override
public List<IndexDetail> getTableIndexes(DataSource dataSource, String
tableName) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
- String sql = "SELECT indexname FROM pg_indexes WHERE schemaname =
'public' AND tablename = '" + tableName + "'";
- final SqlRowSet indexDefinitions = jdbcTemplate.queryForRowSet(sql);
// NOSONAR
+ String sql = "SELECT indexname FROM pg_indexes WHERE schemaname =
'public' AND tablename = ?";
+ final SqlRowSet indexDefinitions = jdbcTemplate.queryForRowSet(sql,
tableName); // NOSONAR
if (indexDefinitions.next()) {
return DatabaseIndexMapper.getIndexDetails(indexDefinitions);
} else {
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseStateVerifier.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseStateVerifier.java
index 248c57016..6ef80b9d0 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseStateVerifier.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseStateVerifier.java
@@ -23,6 +23,7 @@ import java.util.Objects;
import javax.sql.DataSource;
import lombok.RequiredArgsConstructor;
import
org.apache.fineract.infrastructure.core.service.database.DatabaseIndependentQueryService;
+import
org.apache.fineract.infrastructure.core.service.database.DatabaseTypeResolver;
import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Component;
@@ -40,10 +41,11 @@ public class TenantDatabaseStateVerifier {
private final LiquibaseProperties liquibaseProperties;
private final DatabaseIndependentQueryService dbQueryService;
+ private final DatabaseTypeResolver databaseTypeResolver;
public boolean isFirstLiquibaseMigration(DataSource dataSource) {
- boolean databaseChangelogTableExists =
dbQueryService.isTablePresent(dataSource, "DATABASECHANGELOG");
- return !databaseChangelogTableExists;
+ String tableName = "DATABASECHANGELOG";
+ return !dbQueryService.isTablePresent(dataSource,
databaseTypeResolver.isPostgreSQL() ? tableName.toLowerCase() : tableName);
}
public boolean isFlywayPresent(DataSource dataSource) {
@@ -70,8 +72,8 @@ public class TenantDatabaseStateVerifier {
NamedParameterJdbcTemplate jdbcTemplate = new
NamedParameterJdbcTemplate(dataSource);
Integer result = jdbcTemplate.queryForObject(
- "SELECT COUNT(script) FROM schema_version " + "WHERE version =
:latestFlywayVersion "
- + "AND script = :latestFlywayScriptName " + "AND
checksum = :latestFlywayScriptChecksum " + "AND success = 1",
+ "SELECT COUNT(script) FROM schema_version WHERE version =
:latestFlywayVersion "
+ + "AND script = :latestFlywayScriptName AND checksum =
:latestFlywayScriptChecksum AND success = 1",
paramMap, Integer.class);
return Objects.equals(result, 1);
}
diff --git
a/fineract-provider/src/test/java/org/apache/fineract/TestConfiguration.java
b/fineract-provider/src/test/java/org/apache/fineract/TestConfiguration.java
index 8d4803531..8dc6f8efa 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/TestConfiguration.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/TestConfiguration.java
@@ -143,8 +143,8 @@ public class TestConfiguration {
@Bean
public TenantDatabaseStateVerifier
tenantDatabaseStateVerifier(DatabaseIndependentQueryService
databaseIndependentQueryService,
- LiquibaseProperties liquibaseProperties) {
- return new TenantDatabaseStateVerifier(liquibaseProperties,
databaseIndependentQueryService);
+ LiquibaseProperties liquibaseProperties, DatabaseTypeResolver
databaseTypeResolver) {
+ return new TenantDatabaseStateVerifier(liquibaseProperties,
databaseIndependentQueryService, databaseTypeResolver);
}
/**