private String getTableName(NativeQuery query, String tableName) { if (query.getSchemaName() != null) { return query.getSchemaName() + '.' + tableName; } return tableName; }
Map<String, String> aliases = new HashMap<String, String>(); sql.append("SELECT "); if (query.isDistinct()) { sql.append(" DISTINCT "); appendLimitOffsetInfixClause(sql, query.getOffset(), query.getLimit()); String tableName = getTableName(query, query.getTableName()); String talias = getTableNativeAlias(aliases, tableName); boolean isAppendSymbol = false; for (NativeQuery.Column column : query.getColumnList()) { if (isAppendSymbol) { sql.append(", "); if (query.isJoin()) { for (NativeQuery.Join join : query.getJoinList()) { String tableA = getTableName(query, join.getTableA()); String tableB = getTableName(query, join.getTableB()); if (query.isFilter()) { sql.append(" WHERE "); for (NativeQuery.Filter filter : query.getFilterList()) { if (isAppendSymbol) { sql.append(" AND "); appendLimitOffsetSuffixClause(sql, query.getOffset(), query.getLimit(), query.isFilter()); return sql.toString();
@Override public List<? extends Listable> execute(Locale locale, DynamicSqlParams params) throws UnifyException { if (params.getConfigName() != null) { SqlDistinctRowListConfigManager manager = (SqlDistinctRowListConfigManager) this .getComponent(ApplicationAliasConstants.SQL_DISTINCTROWLIST_CONFIG_MANAGER); SqlDistinctRowListConfig config = manager.getSqlDistinctRowListConfig(params.getConfigName()); String tableName = config.getTable(); NativeQuery query = new NativeQuery().schemaName(config.getSchema()).tableName(tableName) .addColumn(tableName, config.getKeyColumn()).addColumn(tableName, config.getDescColumn()) .distinct(true); List<Object[]> rows = getDsManager().getRows(config.getDataSource(), query); List<ListData> resultList = new ArrayList<ListData>(); for (Object[] item : rows) { resultList.add(new ListData(String.valueOf(item[0]), String.valueOf(item[1]))); } DataUtils.sort(resultList, ListData.class, "listDescription", true); return resultList; } return Collections.emptyList(); }
@Override public List<Object[]> getRows(NativeQuery query) throws UnifyException { String nativeSql = getDialect().generateNativeQuery(query); List<Object[]> resultList = new ArrayList<Object[]>(); Connection connection = getConnection(); PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = connection.prepareStatement(nativeSql); rs = pstmt.executeQuery(); int columns = query.columns(); while (rs.next()) { Object[] item = new Object[columns]; for (int i = 0; i < columns; i++) { item[i] = rs.getObject(i + 1); } resultList.add(item); } } catch (SQLException e) { throwOperationErrorException(e); } finally { SqlUtils.close(rs); SqlUtils.close(pstmt); restoreConnection(connection); } return resultList; }