From 923f3f38e3271d7f1d22b3abc3497cecb6957e4a Mon Sep 17 00:00:00 2001 From: Kerwin <37063904+zhuangchong@users.noreply.github.com> Date: Mon, 11 Apr 2022 13:19:48 +0800 Subject: [PATCH] [Fix-9316] [Task] Configure DB2 data source SQL script execution report ResultSet has been closed exception in SQL task (#9317) * fix db2 error in the sql task * update limit in sql task --- .../dolphinscheduler/plugin/task/sql/SqlTask.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-sql/src/main/java/org/apache/dolphinscheduler/plugin/task/sql/SqlTask.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-sql/src/main/java/org/apache/dolphinscheduler/plugin/task/sql/SqlTask.java index e85ccc643216..ad3120200419 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-sql/src/main/java/org/apache/dolphinscheduler/plugin/task/sql/SqlTask.java +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-sql/src/main/java/org/apache/dolphinscheduler/plugin/task/sql/SqlTask.java @@ -243,7 +243,11 @@ private String resultProcess(ResultSet resultSet) throws Exception { int rowCount = 0; int limit = sqlParameters.getLimit() == 0 ? QUERY_LIMIT : sqlParameters.getLimit(); - while (rowCount < limit && resultSet.next()) { + while (resultSet.next()) { + if (rowCount == limit) { + logger.info("sql result limit : {} exceeding results are filtered", limit); + break; + } ObjectNode mapOfColValues = JSONUtils.createObjectNode(); for (int i = 1; i <= num; i++) { mapOfColValues.set(md.getColumnLabel(i), JSONUtils.toJsonNode(resultSet.getObject(i))); @@ -252,17 +256,12 @@ private String resultProcess(ResultSet resultSet) throws Exception { rowCount++; } int displayRows = sqlParameters.getDisplayRows() > 0 ? sqlParameters.getDisplayRows() : TaskConstants.DEFAULT_DISPLAY_ROWS; - displayRows = Math.min(displayRows, resultJSONArray.size()); + displayRows = Math.min(displayRows, rowCount); logger.info("display sql result {} rows as follows:", displayRows); for (int i = 0; i < displayRows; i++) { String row = JSONUtils.toJsonString(resultJSONArray.get(i)); logger.info("row {} : {}", i + 1, row); } - if (resultSet.next()) { - logger.info("sql result limit : {} exceeding results are filtered", limit); - String log = String.format("sql result limit : %d exceeding results are filtered", limit); - resultJSONArray.add(JSONUtils.toJsonNode(log)); - } } String result = JSONUtils.toJsonString(resultJSONArray); if (sqlParameters.getSendEmail() == null || sqlParameters.getSendEmail()) {