From 6fcf8ad861ab49e4b9888cbd952e462c81aa9a16 Mon Sep 17 00:00:00 2001 From: Jose Hernandez Date: Thu, 21 Apr 2022 17:15:59 -0500 Subject: [PATCH] Fix for supporting numeric postgres data type in datatables --- .../data/ResultsetColumnHeaderData.java | 3 ++- .../service/ReadWriteNonCoreDataServiceImpl.java | 16 ++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnHeaderData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnHeaderData.java index 68cbc84f5..b8718b584 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnHeaderData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnHeaderData.java @@ -157,7 +157,8 @@ public final class ResultsetColumnHeaderData implements Serializable { } private boolean isDecimal() { - return "decimal".equalsIgnoreCase(this.columnType) || "NEWDECIMAL".equalsIgnoreCase(this.columnType); + return "decimal".equalsIgnoreCase(this.columnType) || "NEWDECIMAL".equalsIgnoreCase(this.columnType) + || "numeric".equalsIgnoreCase(this.columnType); // Refer org.drizzle.jdbc.internal.mysql.MySQLType.java } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java index 2582e0f79..8eef93a43 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java @@ -149,18 +149,22 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ @Override public List retrieveDatatableNames(final String appTable) { - + Object[] params = new Object[] { this.context.authenticatedUser().getId() }; // PERMITTED datatables - final String sql = "select application_table_name, registered_table_name, entity_subtype " + " from x_registered_table " - + " where exists" + " (select 'f'" + " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id" + String sql = "select application_table_name, registered_table_name, entity_subtype " + " from x_registered_table " + " where exists" + + " (select 'f'" + " from m_appuser_role ur " + " join m_role r on r.id = ur.role_id" + " left join m_role_permission rp on rp.role_id = r.id" + " left join m_permission p on p.id = rp.permission_id" + " where ur.appuser_id = ? and (p.code in ('ALL_FUNCTIONS', 'ALL_FUNCTIONS_READ') or p.code = concat" - + "('READ_', registered_table_name))) " - + " and application_table_name like ? order by application_table_name, registered_table_name"; + + "('READ_', registered_table_name))) "; + if (appTable != null) { + sql = sql + " and application_table_name like ? "; + params = new Object[] { this.context.authenticatedUser().getId(), appTable }; + } + sql = sql + " order by application_table_name, registered_table_name"; final List datatables = new ArrayList<>(); - final SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql, new Object[] { this.context.authenticatedUser().getId(), appTable }); // NOSONAR + final SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql, params); // NOSONAR while (rowSet.next()) { final String appTableName = rowSet.getString("application_table_name"); final String registeredDatatableName = rowSet.getString("registered_table_name");