From c292acff29eb47a91a4e5ba4e290cf811ca5c892 Mon Sep 17 00:00:00 2001 From: John Woodlock Date: Tue, 28 Aug 2012 23:47:46 +1000 Subject: [PATCH] used cached resultset for additional data in places (wip) --- .../ReadWriteNonCoreDataServiceImpl.java | 88 ++++++++++--------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java index 534d2e902..c18c15678 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java @@ -123,37 +123,53 @@ public class ReadWriteNonCoreDataServiceImpl implements CachedRowSetImpl rsmd = genericDataService.getCachedResultSet(sql, sqlErrorMsg); - Connection db_connection = null; - Statement db_statement2 = null; - // Statement db_statement3 = null; + List columnHeaders = getResultsetColumnHeaders( + rsmd, sqlErrorMsg, type, set); + + Boolean firstColumn = true; + String selectFieldList = ""; + String selectFieldSeparator = ""; + + for (ResultsetColumnHeader columnHeader : columnHeaders) { + if (firstColumn) { + selectFieldSeparator = " "; + firstColumn = false; + } else { + selectFieldSeparator = ", "; + } + selectFieldList += selectFieldSeparator + "s.`" + + columnHeader.getColumnName() + "`"; + } + + String unScopedSQL = "select " + selectFieldList + " from `" + type + + "` t ${dataScopeCriteria} left join `" + + getFullDatasetName(type, set) + "` s on s.id = t.id " + + " where t.id = " + id; + sql = dataScopedSQL(unScopedSQL, type); + logger.info("addition fields sql: " + sql); + // maybe can reduce parameters a bit (type and id only needed + // because of exception) + List resultsetDataRows = getResultsetDataRows( + columnHeaders, sql, sqlErrorMsg, type, id); + + return new GenericResultsetData(columnHeaders, resultsetDataRows); + + } + + private List getResultsetColumnHeaders( + CachedRowSetImpl rsmd, String sqlErrorMsg, String type, String set) { + + List columnHeaders = null; + try { - db_connection = dataSource.getConnection(); - - List columnHeaders = null; - List resultsetDataRows = null; - if (rsmd.next()) { - String fullDatasetName = getFullDatasetName(type, set); - db_statement2 = db_connection.createStatement(); columnHeaders = new ArrayList(); - Boolean firstColumn = true; Integer allowedListId; - String selectFieldList = ""; - String selectFieldSeparator = ""; do { ResultsetColumnHeader rsch = new ResultsetColumnHeader(); rsch.setColumnName(rsmd.getString("name")); - if (firstColumn) { - selectFieldSeparator = " "; - firstColumn = false; - } else { - selectFieldSeparator = ", "; - } - selectFieldList += selectFieldSeparator + "s.`" - + rsch.getColumnName() + "`"; - rsch.setColumnType(rsmd.getString("data_type")); if (rsmd.getInt("data_length") > 0) rsch.setColumnLength(rsmd.getInt("data_length")); @@ -165,9 +181,10 @@ public class ReadWriteNonCoreDataServiceImpl implements // logger.info("allowedListId != null: Column: " + // rsch.getColumnName()); - sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = " + String sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = " + allowedListId + " order by id"; - ResultSet rsValues = db_statement2.executeQuery(sql); + CachedRowSetImpl rsValues = genericDataService + .getCachedResultSet(sql, sqlErrorMsg); while (rsValues.next()) { rsch.getColumnValues().add( rsValues.getString("name")); @@ -175,31 +192,16 @@ public class ReadWriteNonCoreDataServiceImpl implements } columnHeaders.add(rsch); } while (rsmd.next()); + return columnHeaders; - String unScopedSQL = "select " + selectFieldList + " from `" - + type + "` t ${dataScopeCriteria} left join `" - + fullDatasetName + "` s on s.id = t.id " - + " where t.id = " + id; - sql = dataScopedSQL(unScopedSQL, type); - logger.info("addition fields sql: " + sql); - //maybe can reduce parameters a bit (type and id only needed because of exception) - resultsetDataRows = getResultsetDataRows(columnHeaders, sql, - sqlErrorMsg, type, id); - - } else { - throw new AdditionalFieldsNotFoundException(type, set); } - return new GenericResultsetData(columnHeaders, resultsetDataRows); - } catch (SQLException e) { throw new PlatformDataIntegrityException("error.msg.sql.error", - e.getMessage(), "Additional Fields Type: " + type - + " Set: " + set + " Id: " + id); - } finally { - - genericDataService.dbClose(db_statement2, db_connection); + e.getMessage(), sqlErrorMsg); } + + throw new AdditionalFieldsNotFoundException(type, set); } private List getResultsetDataRows(