used cached resultset for additional data in places (wip)

This commit is contained in:
John Woodlock
2012-08-28 23:47:46 +10:00
parent dca9063a07
commit c292acff29
@@ -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<ResultsetColumnHeader> 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<ResultsetDataRow> resultsetDataRows = getResultsetDataRows(
columnHeaders, sql, sqlErrorMsg, type, id);
return new GenericResultsetData(columnHeaders, resultsetDataRows);
}
private List<ResultsetColumnHeader> getResultsetColumnHeaders(
CachedRowSetImpl rsmd, String sqlErrorMsg, String type, String set) {
List<ResultsetColumnHeader> columnHeaders = null;
try {
db_connection = dataSource.getConnection();
List<ResultsetColumnHeader> columnHeaders = null;
List<ResultsetDataRow> resultsetDataRows = null;
if (rsmd.next()) {
String fullDatasetName = getFullDatasetName(type, set);
db_statement2 = db_connection.createStatement();
columnHeaders = new ArrayList<ResultsetColumnHeader>();
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<ResultsetDataRow> getResultsetDataRows(