used cached resultset for reporting in places (wip)
This commit is contained in:
@@ -3,13 +3,13 @@ package org.mifosng.platform.noncore;
|
||||
import java.sql.Connection;
|
||||
import java.sql.Statement;
|
||||
|
||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||
import javax.sql.rowset.CachedRowSet;
|
||||
|
||||
import com.sun.rowset.CachedRowSetImpl;
|
||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||
|
||||
public interface GenericDataService {
|
||||
|
||||
public CachedRowSetImpl getCachedResultSet(String sql, String errorMsg);
|
||||
public CachedRowSet getCachedResultSet(String sql, String errorMsg);
|
||||
|
||||
GenericResultsetData fillGenericResultSet(final String sql);
|
||||
|
||||
|
||||
+11
-13
@@ -9,6 +9,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import javax.sql.rowset.CachedRowSet;
|
||||
|
||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
||||
@@ -37,7 +38,7 @@ public class GenericDataServiceImpl implements GenericDataService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CachedRowSetImpl getCachedResultSet(String sql, String sqlErrorMsg) {
|
||||
public CachedRowSet getCachedResultSet(String sql, String sqlErrorMsg) {
|
||||
|
||||
Connection db_connection = null;
|
||||
Statement db_statement = null;
|
||||
@@ -46,8 +47,9 @@ public class GenericDataServiceImpl implements GenericDataService {
|
||||
db_statement = db_connection.createStatement();
|
||||
ResultSet rs = db_statement.executeQuery(sql);
|
||||
|
||||
CachedRowSetImpl crs = new CachedRowSetImpl();
|
||||
CachedRowSet crs = new CachedRowSetImpl();
|
||||
crs.populate(rs);
|
||||
//logger.info("RS Size: " + crs.size() + " getCachedResultSet sql: " + sql);
|
||||
return crs;
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||
@@ -62,15 +64,13 @@ public class GenericDataServiceImpl implements GenericDataService {
|
||||
@Override
|
||||
public GenericResultsetData fillGenericResultSet(final String sql) {
|
||||
|
||||
Connection db_connection = null;
|
||||
Statement db_statement = null;
|
||||
try {
|
||||
db_connection = dataSource.getConnection();
|
||||
db_statement = db_connection.createStatement();
|
||||
ResultSet rs = db_statement.executeQuery(sql);
|
||||
String sqlErrorMsg = "Sql: " + sql;
|
||||
CachedRowSet rs = getCachedResultSet(sql, sqlErrorMsg);
|
||||
|
||||
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
||||
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>();
|
||||
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
||||
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>();
|
||||
|
||||
try {
|
||||
|
||||
ResultSetMetaData rsmd = rs.getMetaData();
|
||||
String columnName = null;
|
||||
@@ -98,9 +98,7 @@ public class GenericDataServiceImpl implements GenericDataService {
|
||||
return new GenericResultsetData(columnHeaders, resultsetDataRows);
|
||||
} catch (SQLException e) {
|
||||
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||
e.getMessage(), "Sql: " + sql);
|
||||
} finally {
|
||||
dbClose(db_statement, db_connection);
|
||||
e.getMessage(), sqlErrorMsg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+18
-22
@@ -15,6 +15,7 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import javax.sql.rowset.CachedRowSet;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.StreamingOutput;
|
||||
|
||||
@@ -46,8 +47,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class ReadReportingServiceImpl implements
|
||||
ReadReportingService {
|
||||
public class ReadReportingServiceImpl implements ReadReportingService {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
@@ -58,8 +58,7 @@ public class ReadReportingServiceImpl implements
|
||||
private Boolean noPentaho = false;
|
||||
|
||||
@Autowired
|
||||
public ReadReportingServiceImpl(
|
||||
final PlatformSecurityContext context,
|
||||
public ReadReportingServiceImpl(final PlatformSecurityContext context,
|
||||
final TenantAwareRoutingDataSource dataSource) {
|
||||
// kick off pentaho reports server
|
||||
ClassicEngineBoot.getInstance().start();
|
||||
@@ -231,41 +230,38 @@ public class ReadReportingServiceImpl implements
|
||||
}
|
||||
|
||||
private String getReportSql(String reportName) {
|
||||
String sql = "select report_sql as the_sql from stretchy_report where report_name = '"
|
||||
+ reportName + "'";
|
||||
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7046875 - prevent
|
||||
// Invalid Column Name bug in sun's CachedRowSetImpl where it doesn't
|
||||
// pick up on label names, only column names
|
||||
String sql = "select * from (select report_sql as the_sql from stretchy_report where report_name = '"
|
||||
+ reportName + "') x";
|
||||
return getSql(sql);
|
||||
}
|
||||
|
||||
private String getParameterSql(String parameterName) {
|
||||
String sql = "select parameter_sql as the_sql from stretchy_parameter where parameter_name = '"
|
||||
+ parameterName + "'";
|
||||
String sql = "select * from (select parameter_sql as the_sql from stretchy_parameter where parameter_name = '"
|
||||
+ parameterName + "') x";
|
||||
return getSql(sql);
|
||||
}
|
||||
|
||||
private String getSql(String inputSql) {
|
||||
|
||||
String sql = null;
|
||||
Connection db_connection = null;
|
||||
Statement db_statement = null;
|
||||
try {
|
||||
db_connection = dataSource.getConnection();
|
||||
db_statement = db_connection.createStatement();
|
||||
ResultSet rs = db_statement.executeQuery(inputSql);
|
||||
String sqlErrorMsg = "Sql: " + inputSql;
|
||||
CachedRowSet rs = genericDataService.getCachedResultSet(inputSql,
|
||||
sqlErrorMsg);
|
||||
|
||||
try {
|
||||
if (rs.next()) {
|
||||
sql = rs.getString("the_sql");
|
||||
} else {
|
||||
throw new ReportNotFoundException(inputSql);
|
||||
return rs.getString("the_sql");
|
||||
}
|
||||
throw new ReportNotFoundException(inputSql);
|
||||
|
||||
} catch (SQLException e) {
|
||||
logger.info("msg: " + e.getMessage() + " sql: " + inputSql);
|
||||
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||
e.getMessage(), "Input Sql: " + inputSql);
|
||||
} finally {
|
||||
genericDataService.dbClose(db_statement, db_connection);
|
||||
e.getMessage(), sqlErrorMsg);
|
||||
}
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+5
-6
@@ -10,6 +10,7 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import javax.sql.rowset.CachedRowSet;
|
||||
|
||||
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||
@@ -25,8 +26,6 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.sun.rowset.CachedRowSetImpl;
|
||||
|
||||
@Service
|
||||
public class ReadWriteNonCoreDataServiceImpl implements
|
||||
ReadWriteNonCoreDataService {
|
||||
@@ -120,7 +119,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
String sqlErrorMsg = "Additional Fields Type: " + type + " Set: "
|
||||
+ set + " Id: " + id;
|
||||
|
||||
CachedRowSetImpl rsmd = genericDataService.getCachedResultSet(sql,
|
||||
CachedRowSet rsmd = genericDataService.getCachedResultSet(sql,
|
||||
sqlErrorMsg);
|
||||
|
||||
List<ResultsetColumnHeader> columnHeaders = getResultsetColumnHeaders(
|
||||
@@ -157,7 +156,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
}
|
||||
|
||||
private List<ResultsetColumnHeader> getResultsetColumnHeaders(
|
||||
CachedRowSetImpl rsmd, String sqlErrorMsg, String type, String set) {
|
||||
CachedRowSet rsmd, String sqlErrorMsg, String type, String set) {
|
||||
|
||||
List<ResultsetColumnHeader> columnHeaders = null;
|
||||
|
||||
@@ -183,7 +182,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
// rsch.getColumnName());
|
||||
String sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = "
|
||||
+ allowedListId + " order by id";
|
||||
CachedRowSetImpl rsValues = genericDataService
|
||||
CachedRowSet rsValues = genericDataService
|
||||
.getCachedResultSet(sql, sqlErrorMsg);
|
||||
while (rsValues.next()) {
|
||||
rsch.getColumnValues().add(
|
||||
@@ -209,7 +208,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
String sqlErrorMsg, String type, Long id) {
|
||||
|
||||
List<ResultsetDataRow> resultsetDataRows = null;
|
||||
CachedRowSetImpl rs = genericDataService.getCachedResultSet(sql,
|
||||
CachedRowSet rs = genericDataService.getCachedResultSet(sql,
|
||||
sqlErrorMsg);
|
||||
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user