private CompositeMap sqlQuery(String sql) throws Exception { ResultSet resultSet = null; SqlServiceContext sql_context = null; CompositeMap result = new CompositeMap("result"); try { Connection conn = dataSource.getConnection(); sql_context = SqlServiceContext.createSqlServiceContext(conn); ParsedSql stmt = createStatement(sql); SqlRunner runner = new SqlRunner(sql_context, stmt); resultSet = runner.query(null); ResultSetLoader mRsLoader = new ResultSetLoader(); mRsLoader.setFieldNameCase(Character.LOWERCASE_LETTER); FetchDescriptor desc = FetchDescriptor.fetchAll(); CompositeMapCreator compositeCreator = new CompositeMapCreator(result); mRsLoader.loadByResultSet(resultSet, desc, compositeCreator); } finally { DBUtil.closeResultSet(resultSet); if (sql_context != null) sql_context.freeConnection(); } return result; }
@Override public CompositeMap getCustomizationData( BusinessModel model, String function_code, CompositeMap context) { if (custDimensionsRecords == null || custDimensionsRecords.getChilds() == null) return null; String bm_name = model.getName(); SqlServiceContext ssc = null; ResultSet rs_exists = null; ResultSet rs_details = null; CompositeMap result = new CompositeMap("result"); try { ssc = databaseServiceFactory.createContextWithConnection(); String exits_sql = "select 1 from dual where exists (select 1 from sys_bm_config_customization t " + " where t.bm_code='" + bm_name + "' and t.function_code = '" + function_code + "' and t.enable_flag='Y')"; ParsedSql exits_stmt = createStatement(exits_sql); SqlRunner exits_runner = new SqlRunner(ssc, exits_stmt); rs_exists = exits_runner.query(null); if (!rs_exists.next()) { return null; } String bm_tag = model.getTag(); if (bm_tag != null) { executeDimensionProc(bm_tag, custDimensionsRecords, context); } String dimenson_sql_template = "select d.order_num,record_id,head_id,function_id,function_code,bm_code,dimension_type,dimension_value," + " bm_select_value,bm_data_source,bm_where_clause,bm_order_by,bm_query_condition" + " from sys_bm_config_customization t,sys_bm_config_dimension d " + " where t.dimension_type=d.dimension_code and t.enable_flag = 'Y'" + " and t.bm_code='" + bm_name + "' and t.function_code = '" + function_code + "' and t.dimension_type="; StringBuffer sb = new StringBuffer(""); boolean firstRecord = true; for (Iterator it = custDimensionsRecords.getChildIterator(); it.hasNext(); ) { CompositeMap record = (CompositeMap) it.next(); String dimensionCode = record.getString("dimension_code"); String data_query_sql = record.getString("data_query_sql"); String dimension_tag = record.getString("dimension_tag"); if (dimension_tag != null) { if (bm_tag == null) continue; boolean is_tag_match = bm_tag.contains(dimension_tag); if (!is_tag_match) continue; } if (firstRecord) firstRecord = false; else sb.append(" union all "); sb.append(dimenson_sql_template).append("'").append(dimensionCode).append("'"); if (data_query_sql != null) sb.append(" and ").append(data_query_sql); } if (!firstRecord) sb.append(" order by 1 "); if ("".equals(sb.toString())) return null; String custDetailRecordsSql = sb.toString(); LoggingContext.getLogger(context, this.getClass().getCanonicalName()) .config("custDetailRecordsSql:" + custDetailRecordsSql); ParsedSql stmt = createStatement(custDetailRecordsSql); SqlRunner runner = new SqlRunner(ssc, stmt); rs_details = runner.query(context); ResultSetLoader mRsLoader = new ResultSetLoader(); mRsLoader.setFieldNameCase(Character.LOWERCASE_LETTER); FetchDescriptor desc = FetchDescriptor.fetchAll(); CompositeMapCreator compositeCreator = new CompositeMapCreator(result); mRsLoader.loadByResultSet(rs_details, desc, compositeCreator); if (result.getChilds() == null) return null; } catch (Exception e) { throw new RuntimeException(e); } finally { DBUtil.closeResultSet(rs_exists); DBUtil.closeResultSet(rs_details); if (ssc != null) try { ssc.freeConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } context.putObject(DEFAULT_CUSTOM_DATA, result); return result; }