From a6602669719b9e3bfa831a85a304691c82a770a2 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Tue, 9 Jan 2024 16:15:36 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=E3=80=90=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E3=80=91=E8=A7=86=E5=9B=BE=E6=97=B6=E9=97=B4=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E7=B1=BB=E5=9E=8B=E5=B8=8C=E6=9C=9B=E4=B8=8D?= =?UTF-8?q?=E8=A6=81=E8=BD=AC=E6=8D=A2=20#6931?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/doris/DorisQueryProvider.java | 12 +++++++++++- .../engine/mysql/MysqlQueryProvider.java | 5 ++++- .../provider/query/es/EsQueryProvider.java | 2 +- .../provider/query/hive/HiveQueryProvider.java | 7 +------ .../query/impala/ImpalaQueryProvider.java | 6 +----- .../query/mysql/MysqlQueryProvider.java | 17 ++++++++++++++++- .../query/oracle/OracleQueryProvider.java | 6 +----- .../provider/query/pg/PgQueryProvider.java | 7 +------ .../query/redshift/RedshiftQueryProvider.java | 6 +----- .../service/chart/ChartViewService.java | 17 ----------------- .../kingbase/query/KingbaseQueryProvider.java | 7 +------ 11 files changed, 38 insertions(+), 54 deletions(-) diff --git a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java index d60b2b339e..482b541015 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java @@ -1340,7 +1340,7 @@ public class DorisQueryProvider extends QueryProvider { if (field.getDeType() == 1) { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT); if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) { date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + date + ",'-01-01')", "%Y-01-01"); @@ -1351,6 +1351,16 @@ public class DorisQueryProvider extends QueryProvider { whereName = String.format(MySQLConstants.DATE_FORMAT, date, format); } } + if (field.getDeExtractType() == 1) { + String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT); + if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) { + date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + date + ",'-01-01')", "%Y-01-01"); + whereName = String.format(MySQLConstants.DATE_FORMAT, date, format); + }else { + whereName = originName; + } + + } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { if (request.getOperator().equals("between")) { whereName = originName; diff --git a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java index 12c5de1c14..acdd4ac67a 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java @@ -1300,7 +1300,7 @@ public class MysqlQueryProvider extends QueryProvider { if (field.getDeType() == 1) { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT); if (request.getOperator().equals("between")) { whereName = date; @@ -1308,6 +1308,9 @@ public class MysqlQueryProvider extends QueryProvider { whereName = String.format(MySQLConstants.DATE_FORMAT, date, format); } } + if (field.getDeExtractType() == 1) { + whereName = originName; + } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { if (request.getOperator().equals("between")) { whereName = originName; diff --git a/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java index a75324bb79..577e684448 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java @@ -1342,7 +1342,7 @@ public class EsQueryProvider extends QueryProvider { whereName = String.format(EsSqlLConstants.DATETIME_FORMAT, cast, format); } if (field.getDeExtractType() == 1) { - whereName = String.format(EsSqlLConstants.DATETIME_FORMAT, originName, format); + whereName = originName; } } else if (field.getDeType() == 2 || field.getDeType() == 3) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { diff --git a/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java index 314c72c783..b239e216d5 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java @@ -1299,12 +1299,7 @@ public class HiveQueryProvider extends QueryProvider { whereName = String.format(HiveConstants.FROM_UNIXTIME, cast, format); } if (field.getDeExtractType() == DeTypeConstants.DE_TIME) { - if (request.getOperator().equals("between")) { - whereName = originName; - } else { - whereName = String.format(HiveConstants.DATE_FORMAT, originName, format); - } - + whereName = originName; } } else if (field.getDeType() == 2 || field.getDeType() == 3) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { diff --git a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java index f429134db4..1828db449f 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java @@ -1314,11 +1314,7 @@ public class ImpalaQueryProvider extends QueryProvider { } } if (field.getDeExtractType() == DeTypeConstants.DE_TIME) { - if (request.getOperator().equals("between")) { - whereName = originName; - } else { - whereName = String.format(ImpalaConstants.DATE_FORMAT, originName, format); - } + whereName = originName; } } else if (field.getDeType() == 2 || field.getDeType() == 3) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { diff --git a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java index b1d6bf5f20..43cec13ccb 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java @@ -1330,7 +1330,7 @@ public class MysqlQueryProvider extends QueryProvider { if (field.getDeType() == 1) { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { String date; if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) { date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + originName + ",'-01-01')", StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MySQLConstants.DEFAULT_DATE_FORMAT); @@ -1350,6 +1350,21 @@ public class MysqlQueryProvider extends QueryProvider { } } + if (field.getDeExtractType() == 1) { + String date; + if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) { + date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + originName + ",'-01-01')", StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MySQLConstants.DEFAULT_DATE_FORMAT); + } else { + date = originName; + } + if (StringUtils.equalsIgnoreCase(request.getDateStyle(), "y_Q")) { + whereName = String.format(format, + String.format(MySQLConstants.DATE_FORMAT, originName, "%Y"), + String.format(MySQLConstants.QUARTER, String.format(MySQLConstants.DATE_FORMAT, originName, MySQLConstants.DEFAULT_DATE_FORMAT))); + } else { + whereName = date; + } + } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { if (request.getOperator().equals("between")) { whereName = originName; diff --git a/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java index d3a4cff540..6544bbd6ab 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java @@ -1487,11 +1487,7 @@ public class OracleQueryProvider extends QueryProvider { } } if (field.getDeExtractType() == 1) { - if (!request.getOperator().equals("between")) { - whereName = String.format(OracleConstants.TO_CHAR, originName, format); - } else { - whereName = originName; - } + whereName = originName; } } else if (field.getDeType() == 2 || field.getDeType() == 3) { diff --git a/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java index 7a5d3f540e..3d2a3a6810 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java @@ -1339,12 +1339,7 @@ public class PgQueryProvider extends QueryProvider { } } if (field.getDeExtractType() == 1) { - if (request.getOperator().equals("between")) { - whereName = originName; - } else { - whereName = String.format(PgConstants.DATE_FORMAT, originName, format); - } - + whereName = originName; } } else if (field.getDeType() == 2 || field.getDeType() == 3) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { diff --git a/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java index cb059ef4a6..e39776a3ad 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java @@ -1325,11 +1325,7 @@ public class RedshiftQueryProvider extends QueryProvider { } } if (field.getDeExtractType() == 1) { - if (request.getOperator().equals("between")) { - whereName = originName; - } else { - whereName = String.format(PgConstants.DATE_FORMAT, originName, format); - } + whereName = originName; } } else if (field.getDeType() == 2 || field.getDeType() == 3) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { diff --git a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index d3c8a7f4a5..78c4d47b4a 100644 --- a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -639,8 +639,6 @@ public class ChartViewService { } Type tokenType = new TypeToken>() { }.getType(); -// Type filterTokenType = new TypeToken>() { -// }.getType(); List viewFields = gson.fromJson(view.getViewFields(), tokenType); final Map> extFieldsMap = new LinkedHashMap<>(); @@ -709,7 +707,6 @@ public class ChartViewService { //将没有权限的列删掉 List dataeaseNames = columnPermissionFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()); dataeaseNames.add("*"); -// fieldCustomFilter = fieldCustomFilter.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); extStack = extStack.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); extBubble = extBubble.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); drill = drill.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); @@ -717,9 +714,6 @@ public class ChartViewService { //行权限 List rowPermissionsTree = permissionsTreeService.getRowPermissionsTree(fields, table, chartExtRequest.getUser()); - /*for (ChartFieldCustomFilterDTO ele : fieldCustomFilter) { - ele.setField(dataSetTableFieldsService.get(ele.getId())); - }*/ chartFilterTreeService.searchFieldAndSet(fieldCustomFilter); if (CollectionUtils.isEmpty(xAxis) && CollectionUtils.isEmpty(yAxis)) { @@ -1043,17 +1037,6 @@ public class ChartViewService { assistFields = getAssistFields(dynamicAssistFields, yAxis, xAxis); } - // 处理过滤条件中的单引号 - /*fieldCustomFilter = fieldCustomFilter.stream().peek(ele -> { - if (CollectionUtils.isNotEmpty(ele.getEnumCheckField())) { - List collect = ele.getEnumCheckField().stream().map(SQLUtils::transKeyword).collect(Collectors.toList()); - ele.setEnumCheckField(collect); - } - if (CollectionUtils.isNotEmpty(ele.getFilter())) { - List collect = ele.getFilter().stream().peek(f -> f.setValue(SQLUtils.transKeyword(f.getValue()))).collect(Collectors.toList()); - ele.setFilter(collect); - } - }).collect(Collectors.toList());*/ fieldCustomFilter = chartFilterTreeService.charReplace(fieldCustomFilter); extFilterList = extFilterList.stream().peek(ele -> { diff --git a/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java b/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java index 4785d35df7..036749d4ea 100644 --- a/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java +++ b/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java @@ -1544,12 +1544,7 @@ public class KingbaseQueryProvider extends QueryProvider { } } if (field.getDeExtractType() == 1) { - if (request.getOperator().equals("between")) { - whereName = originName; - } else { - whereName = String.format(KingbaseConstants.DATE_FORMAT, originName, format); - } - + whereName = originName; } } else if (field.getDeType() == 2 || field.getDeType() == 3) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { From fd994c92cc1b36b76844eff8a930f8ede4d459fc Mon Sep 17 00:00:00 2001 From: taojinlong Date: Tue, 9 Jan 2024 16:40:42 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E3=80=90=E4=BB=AA=E8=A1=A8?= =?UTF-8?q?=E6=9D=BF=E3=80=91=E6=95=B0=E5=AD=97=E5=88=97=E8=A1=A8=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E7=BB=84=E4=BB=B6=E6=94=AF=E6=8C=81=E5=8F=82=E6=95=B0?= =?UTF-8?q?=20#6743?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/panel/filter/filterMain/FilterControl.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/frontend/src/views/panel/filter/filterMain/FilterControl.vue b/core/frontend/src/views/panel/filter/filterMain/FilterControl.vue index d4ce4b3a16..6522a314ff 100644 --- a/core/frontend/src/views/panel/filter/filterMain/FilterControl.vue +++ b/core/frontend/src/views/panel/filter/filterMain/FilterControl.vue @@ -368,7 +368,7 @@ export default { this.showParams = true this.isRangeParamWidget = this.widget.isRangeParamWidget && this.widget.isRangeParamWidget() } - if ('textInputWidget,timeYearWidget,timeMonthWidget,timeDateWidget,textSelectWidget,numberSelectWidget'.indexOf(this.widget.name) !== -1) { + if ('textInputWidget,timeYearWidget,timeMonthWidget,timeDateWidget,textSelectWidget,numberSelectWidget,numberSelectGridWidget,textSelectGridWidget'.indexOf(this.widget.name) !== -1) { this.showParams = true } }, From 1f2f489c6364b674d97560d826d3d28f6e964e82 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 10 Jan 2024 17:07:13 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E3=80=90=E4=BB=AA=E8=A1=A8=E6=9D=BF?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E3=80=91=E4=BD=BF=E7=94=A8SqlServer=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E7=9A=84sql=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=EF=BC=8C=E6=98=8E=E7=BB=86=E8=A1=A8=E8=A7=86=E5=9B=BE=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/datasource/ApiProvider.java | 14 +- .../provider/datasource/EsProvider.java | 10 +- .../provider/datasource/JdbcProvider.java | 19 ++- .../sqlserver/SqlserverQueryProvider.java | 19 ++- .../service/datasource/DatasourceService.java | 58 +++++--- .../resources/db/migration/V60__1.18.15.sql | 3 + .../common/base/domain/Datasource.java | 2 + .../common/base/domain/DatasourceExample.java | 126 ++++++++++++++---- .../common/base/mapper/DatasourceMapper.xml | 79 ++++++----- .../plugins/datasource/entity/Status.java | 9 ++ .../provider/DefaultJdbcProvider.java | 8 ++ .../plugins/datasource/provider/Provider.java | 3 + 12 files changed, 257 insertions(+), 93 deletions(-) create mode 100644 core/backend/src/main/resources/db/migration/V60__1.18.15.sql create mode 100644 sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/entity/Status.java diff --git a/core/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java b/core/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java index 4f850deeea..439c538a0b 100644 --- a/core/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java @@ -11,11 +11,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.google.gson.JsonObject; -import io.dataease.controller.sys.response.BasicInfo; import io.dataease.dto.dataset.DatasetTableFieldDTO; import io.dataease.plugins.common.dto.datasource.TableDesc; import io.dataease.plugins.common.dto.datasource.TableField; import io.dataease.plugins.common.request.datasource.DatasourceRequest; +import io.dataease.plugins.datasource.entity.Status; import io.dataease.plugins.datasource.provider.Provider; import com.jayway.jsonpath.JsonPath; import io.dataease.commons.utils.HttpClientConfig; @@ -23,14 +23,9 @@ import io.dataease.commons.utils.HttpClientUtil; import io.dataease.controller.request.datasource.ApiDefinition; import io.dataease.controller.request.datasource.ApiDefinitionRequest; -import io.dataease.service.system.SystemParameterService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; - import org.springframework.stereotype.Service; - - -import javax.annotation.Resource; import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; @@ -106,6 +101,13 @@ public class ApiProvider extends Provider { return tableFields; } + @Override + public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception { + Status status = new Status(); + status.setStatus(checkStatus(datasourceRequest)); + return status; + } + public String checkStatus(DatasourceRequest datasourceRequest) throws Exception { Gson gson = new Gson(); List apiDefinitionList = gson.fromJson(datasourceRequest.getDatasource().getConfiguration(), new TypeToken>() { diff --git a/core/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java b/core/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java index 4bbc3b4787..c4518f15a8 100644 --- a/core/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java @@ -14,6 +14,7 @@ import io.dataease.plugins.common.dto.datasource.TableDesc; import io.dataease.plugins.common.dto.datasource.TableField; import io.dataease.plugins.common.exception.DataEaseException; import io.dataease.plugins.common.request.datasource.DatasourceRequest; +import io.dataease.plugins.datasource.entity.Status; import io.dataease.plugins.datasource.provider.Provider; import io.dataease.provider.query.es.EsQueryProvider; import org.apache.commons.codec.binary.Base64; @@ -181,7 +182,7 @@ public class EsProvider extends Provider { } for (String[] row : esResponse.getRows()) { - if(!row[1].equalsIgnoreCase("STRUCT") && !row[2].equalsIgnoreCase("unsupported")){ + if (!row[1].equalsIgnoreCase("STRUCT") && !row[2].equalsIgnoreCase("unsupported")) { TableField field = new TableField(); field.setFieldName(row[0]); field.setRemarks(row[0]); @@ -251,6 +252,13 @@ public class EsProvider extends Provider { return new ArrayList<>(); } + @Override + public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception { + Status status = new Status(); + status.setStatus(checkStatus(datasourceRequest)); + return status; + } + @Override public String checkStatus(DatasourceRequest datasourceRequest) throws Exception { diff --git a/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index 63300ea9fd..5238f3d664 100644 --- a/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -18,6 +18,7 @@ import io.dataease.plugins.common.exception.DataEaseException; import io.dataease.plugins.common.request.datasource.DatasourceRequest; import io.dataease.plugins.common.util.SpringContextUtil; import io.dataease.plugins.datasource.entity.JdbcConfiguration; +import io.dataease.plugins.datasource.entity.Status; import io.dataease.plugins.datasource.provider.DefaultJdbcProvider; import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader; import io.dataease.plugins.datasource.query.QueryProvider; @@ -369,6 +370,22 @@ public class JdbcProvider extends DefaultJdbcProvider { return list; } + @Override + public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception { + Status status = new Status(); + String queryStr = getTablesSql(datasourceRequest); + JdbcConfiguration jdbcConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), JdbcConfiguration.class); + int queryTimeout = jdbcConfiguration.getQueryTimeout() > 0 ? jdbcConfiguration.getQueryTimeout() : 0; + try (Connection con = getConnection(datasourceRequest); Statement statement = getStatement(con, queryTimeout); ResultSet resultSet = statement.executeQuery(queryStr)) { + status.setVersion(String.valueOf(con.getMetaData().getDatabaseMajorVersion())); + } catch (Exception e) { + LogUtil.error("Datasource is invalid: " + datasourceRequest.getDatasource().getName(), e); + DataEaseException.throwException(e.getMessage()); + } + status.setStatus("Success"); + return status; + } + @Override public String checkStatus(DatasourceRequest datasourceRequest) throws Exception { String queryStr = getTablesSql(datasourceRequest); @@ -377,7 +394,7 @@ public class JdbcProvider extends DefaultJdbcProvider { try (Connection con = getConnection(datasourceRequest); Statement statement = getStatement(con, queryTimeout); ResultSet resultSet = statement.executeQuery(queryStr)) { } catch (Exception e) { LogUtil.error("Datasource is invalid: " + datasourceRequest.getDatasource().getName(), e); - io.dataease.plugins.common.exception.DataEaseException.throwException(e.getMessage()); + DataEaseException.throwException(e.getMessage()); } return "Success"; } diff --git a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java index 57d428638c..bec8a38d11 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java @@ -529,14 +529,21 @@ public class SqlserverQueryProvider extends QueryProvider { return originTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, null, view, needOrder, true); } - @Override public String getSQLWithPage(boolean isTable, String sql, List xAxis, FilterTreeObj fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { - boolean isPage = (pageInfo.getGoPage() != null && pageInfo.getPageSize() != null); - String limit = (isPage ? " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " ROW FETCH NEXT " + pageInfo.getPageSize() + " ROW ONLY " : ""); - if (isTable) { - return originTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true, !isPage) + limit; + if (Integer.valueOf(ds.getVersion()) < 11) { + if (isTable) { + return getSQLTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view); + } else { + return getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view); + } } else { - return originTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true, !isPage) + limit; + boolean isPage = (pageInfo.getGoPage() != null && pageInfo.getPageSize() != null); + String limit = (isPage ? " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " ROW FETCH NEXT " + pageInfo.getPageSize() + " ROW ONLY " : ""); + if (isTable) { + return originTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true, !isPage) + limit; + } else { + return originTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true, !isPage) + limit; + } } } diff --git a/core/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/core/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index 0189e64be2..81d1a028e8 100644 --- a/core/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/core/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -42,6 +42,7 @@ import io.dataease.plugins.common.exception.DataEaseException; import io.dataease.plugins.common.request.datasource.DatasourceRequest; import io.dataease.plugins.common.util.SpringContextUtil; import io.dataease.plugins.datasource.entity.JdbcConfiguration; +import io.dataease.plugins.datasource.entity.Status; import io.dataease.plugins.datasource.provider.Provider; import io.dataease.provider.ProviderFactory; import io.dataease.provider.datasource.ApiProvider; @@ -53,6 +54,8 @@ import io.dataease.service.system.SystemParameterService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.zookeeper.data.Stat; +import org.mozilla.javascript.EcmaError; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.data.redis.core.RedisTemplate; @@ -116,7 +119,9 @@ public class DatasourceService { datasource.setUpdateTime(currentTimeMillis); datasource.setCreateTime(currentTimeMillis); datasource.setCreateBy(String.valueOf(AuthUtils.getUser().getUsername())); - checkAndUpdateDatasourceStatus(datasource); + Status status = checkDatasourceStatus(datasource); + datasource.setStatus(status.getStatus()); + datasource.setVersion(status.getVersion()); datasourceMapper.insertSelective(datasource); handleConnectionPool(datasource, "add"); sysAuthService.copyAuth(datasource.getId(), SysAuthConstants.AUTH_SOURCE_TYPE_DATASOURCE); @@ -278,7 +283,9 @@ public class DatasourceService { public void updateDatasource(String id, Datasource datasource) { DatasourceExample example = new DatasourceExample(); example.createCriteria().andIdEqualTo(id); - checkAndUpdateDatasourceStatus(datasource); + Status status = checkDatasourceStatus(datasource); + datasource.setStatus(status.getStatus()); + datasource.setVersion(status.getVersion()); datasourceMapper.updateByExampleSelective(datasource, example); handleConnectionPool(id); @@ -328,15 +335,15 @@ public class DatasourceService { datasourceProvider.checkConfiguration(datasource); DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(datasource); - String datasourceStatus = datasourceProvider.checkStatus(datasourceRequest); + Status datasourceStatus = datasourceProvider.checkDsStatus(datasourceRequest); if (datasource.getType().equalsIgnoreCase("api")) { int success = 0; List apiDefinitionList = new Gson().fromJson(datasource.getConfiguration(), new TypeToken>() { }.getType()); List apiDefinitionListWithStatus = new ArrayList<>(); - if (StringUtils.isNotEmpty(datasourceStatus)) { - JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus).getAsJsonObject(); + if (StringUtils.isNotEmpty(datasourceStatus.getStatus())) { + JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus.getStatus()).getAsJsonObject(); for (ApiDefinition apiDefinition : apiDefinitionList) { String status = apiItemStatuses.get(apiDefinition.getName()).getAsString(); apiDefinition.setStatus(status); @@ -349,7 +356,7 @@ public class DatasourceService { datasourceDTO.setApiConfiguration(apiDefinitionListWithStatus); if (success == apiDefinitionList.size()) { - datasource.setStatus(datasourceStatus); + datasource.setStatus(datasourceStatus.getStatus()); return ResultHolder.success(datasourceDTO); } if (success > 0 && success < apiDefinitionList.size()) { @@ -368,16 +375,16 @@ public class DatasourceService { if (datasource == null) { return ResultHolder.error("Can not find datasource: " + datasourceId); } - String datasourceStatus = null; + Status datasourceStatus = new Status(); try { Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(datasource); - datasourceStatus = datasourceProvider.checkStatus(datasourceRequest); + datasourceStatus = datasourceProvider.checkDsStatus(datasourceRequest); if (datasource.getType().equalsIgnoreCase("api")) { List apiDefinitionList = new Gson().fromJson(datasource.getConfiguration(), new TypeToken>() { }.getType()); - JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus).getAsJsonObject(); + JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus.getStatus()).getAsJsonObject(); int success = 0; for (ApiDefinition apiDefinition : apiDefinitionList) { String status = apiItemStatuses.get(apiDefinition.getName()).getAsString(); @@ -387,7 +394,7 @@ public class DatasourceService { } } if (success == apiDefinitionList.size()) { - datasource.setStatus(datasourceStatus); + datasource.setStatus(datasourceStatus.getStatus()); return ResultHolder.success(datasource); } if (success > 0 && success < apiDefinitionList.size()) { @@ -399,14 +406,14 @@ public class DatasourceService { return ResultHolder.success("Success"); } catch (Exception e) { e.printStackTrace(); - datasourceStatus = "Error"; + datasourceStatus.setStatus("Error"); return ResultHolder.error(Translator.get("I18N_DS_INVALID") + ": " + e.getMessage()); } finally { Datasource record = new Datasource(); - record.setStatus(datasourceStatus); + record.setStatus(datasourceStatus.getStatus()); + record.setVersion(datasourceStatus.getVersion()); DatasourceExample example = new DatasourceExample(); example.createCriteria().andIdEqualTo(datasource.getId()); - System.out.println(new Gson().toJson(record)); datasourceMapper.updateByExampleSelective(record, example); } } @@ -427,7 +434,7 @@ public class DatasourceService { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(ds); if (!ds.getType().equalsIgnoreCase(DatasetType.API.name())) { - datasourceProvider.checkStatus(datasourceRequest); + datasourceProvider.checkDsStatus(datasourceRequest); } List tables = datasourceProvider.getTables(datasourceRequest); @@ -479,6 +486,15 @@ public class DatasourceService { List datasources = datasourceMapper.selectByExampleWithBLOBs(new DatasourceExample()); datasources.forEach(datasource -> { commonThreadPool.addTask(() -> { + try { + DatasourceExample example = new DatasourceExample(); + example.createCriteria().andIdEqualTo(datasource.getId()); + Status status = checkDatasourceStatus(datasource); + Datasource record = new Datasource(); + record.setVersion(status.getVersion()); + record.setStatus(status.getStatus()); + datasourceMapper.updateByExampleSelective(record, example); + }catch (Exception ignore){} try { handleConnectionPool(datasource, "add"); } catch (Exception e) { @@ -536,16 +552,17 @@ public class DatasourceService { return datasourceMapper.selectByExampleWithBLOBs(example); } - public void checkAndUpdateDatasourceStatus(Datasource datasource) { + public Status checkDatasourceStatus(Datasource datasource) { + Status status = new Status(); try { Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(datasource); - String status = datasourceProvider.checkStatus(datasourceRequest); - datasource.setStatus(status); + status = datasourceProvider.checkDsStatus(datasourceRequest); } catch (Exception e) { - datasource.setStatus("Error"); + status.setStatus("Error"); } + return status; } private void checkAndUpdateDatasourceStatus(Datasource datasource, Boolean withMsg) { @@ -556,8 +573,9 @@ public class DatasourceService { Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(datasource); - String status = datasourceProvider.checkStatus(datasourceRequest); - record.setStatus(status); + Status status = datasourceProvider.checkDsStatus(datasourceRequest); + datasource.setStatus(status.getStatus()); + datasource.setVersion(status.getVersion()); datasourceMapper.updateByExampleSelective(record, example); } catch (Exception e) { Datasource temp = datasourceMapper.selectByPrimaryKey(datasource.getId()); diff --git a/core/backend/src/main/resources/db/migration/V60__1.18.15.sql b/core/backend/src/main/resources/db/migration/V60__1.18.15.sql new file mode 100644 index 0000000000..f812e6c05e --- /dev/null +++ b/core/backend/src/main/resources/db/migration/V60__1.18.15.sql @@ -0,0 +1,3 @@ + ALTER TABLE `datasource` + ADD COLUMN `version` varchar(255) NULL COMMENT '版本' AFTER `status`; + diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/Datasource.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/Datasource.java index f7dba9ea9d..3f70bcf627 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/Datasource.java +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/Datasource.java @@ -23,6 +23,8 @@ public class Datasource implements Serializable { private String createBy; @ApiModelProperty("状态") private String status; + @ApiModelProperty("版本") + private String version; @ApiModelProperty(value = "配置详情", required = true) private String configuration; diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasourceExample.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasourceExample.java index de33817272..8668cc4fbb 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasourceExample.java +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasourceExample.java @@ -384,6 +384,76 @@ public class DatasourceExample { return (Criteria) this; } + public Criteria andConfigurationIsNull() { + addCriterion("configuration is null"); + return (Criteria) this; + } + + public Criteria andConfigurationIsNotNull() { + addCriterion("configuration is not null"); + return (Criteria) this; + } + + public Criteria andConfigurationEqualTo(String value) { + addCriterion("configuration =", value, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationNotEqualTo(String value) { + addCriterion("configuration <>", value, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationGreaterThan(String value) { + addCriterion("configuration >", value, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationGreaterThanOrEqualTo(String value) { + addCriterion("configuration >=", value, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationLessThan(String value) { + addCriterion("configuration <", value, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationLessThanOrEqualTo(String value) { + addCriterion("configuration <=", value, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationLike(String value) { + addCriterion("configuration like", value, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationNotLike(String value) { + addCriterion("configuration not like", value, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationIn(List values) { + addCriterion("configuration in", values, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationNotIn(List values) { + addCriterion("configuration not in", values, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationBetween(String value1, String value2) { + addCriterion("configuration between", value1, value2, "configuration"); + return (Criteria) this; + } + + public Criteria andConfigurationNotBetween(String value1, String value2) { + addCriterion("configuration not between", value1, value2, "configuration"); + return (Criteria) this; + } + public Criteria andCreateTimeIsNull() { addCriterion("create_time is null"); return (Criteria) this; @@ -574,73 +644,73 @@ public class DatasourceExample { return (Criteria) this; } - public Criteria andStatusIsNull() { - addCriterion("`status` is null"); + public Criteria andVersionIsNull() { + addCriterion("version is null"); return (Criteria) this; } - public Criteria andStatusIsNotNull() { - addCriterion("`status` is not null"); + public Criteria andVersionIsNotNull() { + addCriterion("version is not null"); return (Criteria) this; } - public Criteria andStatusEqualTo(String value) { - addCriterion("`status` =", value, "status"); + public Criteria andVersionEqualTo(String value) { + addCriterion("version =", value, "version"); return (Criteria) this; } - public Criteria andStatusNotEqualTo(String value) { - addCriterion("`status` <>", value, "status"); + public Criteria andVersionNotEqualTo(String value) { + addCriterion("version <>", value, "version"); return (Criteria) this; } - public Criteria andStatusGreaterThan(String value) { - addCriterion("`status` >", value, "status"); + public Criteria andVersionGreaterThan(String value) { + addCriterion("version >", value, "version"); return (Criteria) this; } - public Criteria andStatusGreaterThanOrEqualTo(String value) { - addCriterion("`status` >=", value, "status"); + public Criteria andVersionGreaterThanOrEqualTo(String value) { + addCriterion("version >=", value, "version"); return (Criteria) this; } - public Criteria andStatusLessThan(String value) { - addCriterion("`status` <", value, "status"); + public Criteria andVersionLessThan(String value) { + addCriterion("version <", value, "version"); return (Criteria) this; } - public Criteria andStatusLessThanOrEqualTo(String value) { - addCriterion("`status` <=", value, "status"); + public Criteria andVersionLessThanOrEqualTo(String value) { + addCriterion("version <=", value, "version"); return (Criteria) this; } - public Criteria andStatusLike(String value) { - addCriterion("`status` like", value, "status"); + public Criteria andVersionLike(String value) { + addCriterion("version like", value, "version"); return (Criteria) this; } - public Criteria andStatusNotLike(String value) { - addCriterion("`status` not like", value, "status"); + public Criteria andVersionNotLike(String value) { + addCriterion("version not like", value, "version"); return (Criteria) this; } - public Criteria andStatusIn(List values) { - addCriterion("`status` in", values, "status"); + public Criteria andVersionIn(List values) { + addCriterion("version in", values, "version"); return (Criteria) this; } - public Criteria andStatusNotIn(List values) { - addCriterion("`status` not in", values, "status"); + public Criteria andVersionNotIn(List values) { + addCriterion("version not in", values, "version"); return (Criteria) this; } - public Criteria andStatusBetween(String value1, String value2) { - addCriterion("`status` between", value1, value2, "status"); + public Criteria andVersionBetween(String value1, String value2) { + addCriterion("version between", value1, value2, "version"); return (Criteria) this; } - public Criteria andStatusNotBetween(String value1, String value2) { - addCriterion("`status` not between", value1, value2, "status"); + public Criteria andVersionNotBetween(String value1, String value2) { + addCriterion("version not between", value1, value2, "version"); return (Criteria) this; } } diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/DatasourceMapper.xml b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/DatasourceMapper.xml index 75fae42fe8..14b67d64b9 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/DatasourceMapper.xml +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/DatasourceMapper.xml @@ -6,13 +6,14 @@ + - + - + @@ -73,10 +74,10 @@ - id, `name`, `desc`, `type`, create_time, update_time, create_by, `status` + id, `name`, `desc`, `type`, configuration, create_time, update_time, create_by, version - configuration + `status`