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; }
public void query(CompositeMap context_map) throws Exception { super.doPopulate(); ILogger logger = LoggingContext.getLogger(context_map, DatabaseConstant.AURORA_DATABASE_LOGGING_TOPIC); SqlServiceContext context = (SqlServiceContext) DynamicObject.cast(context_map, SqlServiceContext.class); String cache_key = null; boolean is_cache = false; ICache cache_for_data = null; if (cacheKey != null) { is_cache = true; cache_for_data = CacheUtil.getNamedCache(mObjectReg, KEY_DATA_CACHE_NAME); cache_key = TextParser.parse(cacheKey, context_map); CompositeMap data = (CompositeMap) cache_for_data.getValue(cache_key); if (data != null) { logger.config("Cached data found with key " + cache_key); // write cache to context CompositeMap root_node = getMapFromRootPath( context.getModel(), TextParser.parse(this.rootPath, context.getObjectContext())); root_node.copy(data); return; } else { logger.config( "Cached data not found with key " + cache_key + ", doing normal database query"); } } prepare(context_map); // context.setTrace(trace); ServiceOption option = ServiceOption.createInstance(); option.setQueryMode(mode); option.setAutoCount(autoCount); option.setConnectionName(connectionName); option.setFieldCase(fieldNameCaseValue); option.setRecordName(recordName); transferServiceOption(option, ServiceOption.KEY_DEFAULT_WHERE_CLAUSE); transferServiceOption(option, ServiceOption.KEY_QUERY_ORDER_BY); context.setServiceOption(option); IResultSetConsumer consumer = null; // CompositeMapCreator compositeCreator = null; try { // get parameter CompositeMap param = context.getCurrentParameter(); if (parameter != null) { Object obj = param.getObject(parameter); if (obj != null) { if (!(obj instanceof CompositeMap)) throw new IllegalArgumentException( "query parameter should be instance of CompositeMap, but actually got " + obj.getClass().getName()); param = (CompositeMap) obj; } } // page settings FetchDescriptor desc = FetchDescriptor.createFromParameter(context.getParameter()); desc.setFetchAll(fetchAll); if (pageSize != null) desc.setPageSize(pageSize.intValue()); // ResultSet consumer if (this.rsConsummer != null) consumer = this.rsConsummer; else { consumer = (IResultSetConsumer) context.getInstanceOfType(IResultSetConsumer.class); if (consumer == null) { consumer = new CompositeMapCreator(); mOCManager.populateObject(mEntryConfig, consumer); } } if (consumer instanceof IContextAcceptable) ((IContextAcceptable) consumer).setContext(context_map); // set root path if (consumer instanceof IRootMapAcceptable) { CompositeMap result = getMapFromRootPath( context.getModel(), TextParser.parse(this.rootPath, context.getObjectContext())); if (result != null) ((IRootMapAcceptable) consumer).setRoot(result); } context.setResultsetConsumer(consumer); doQuery(param, consumer, desc); // write data to cache if (is_cache) { CompositeMap d = (CompositeMap) consumer.getResult(); CompositeMap copied_data = (CompositeMap) d.clone(); copied_data.setParent(null); cache_for_data.setValue(cache_key, copied_data); } /* if( transform_list != null && consumer instanceof IRootMapAcceptable){ CompositeMap root = ((IRootMapAcceptable)consumer).getRoot(); Transformer.doBatchTransform( root, transform_list ); } */ } finally { context.setServiceOption(null); context.setResultsetConsumer(null); cleanUp(context_map); } }