Skip to content

Commit eb286ee

Browse files
XiaJunjie2020xuwei-fit2cloud
authored andcommitted
fix(图表): 修复NVARCHAR字段类型无法过滤的问题 dataease#15597
1 parent 1dd26fc commit eb286ee

File tree

3 files changed

+42
-16
lines changed

3 files changed

+42
-16
lines changed

core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
1010
import io.dataease.extensions.datasource.model.SQLMeta;
1111
import io.dataease.extensions.datasource.model.SQLObj;
12+
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
1213
import io.dataease.extensions.view.filter.DynamicTimeSetting;
1314
import io.dataease.extensions.view.filter.FilterTreeItem;
1415
import io.dataease.extensions.view.filter.FilterTreeObj;
@@ -167,7 +168,9 @@ private static String transTreeItem(SQLObj tableObj, FilterTreeItem item, Map<St
167168
if (StringUtils.equalsIgnoreCase(item.getFilterType(), "enum")) {
168169
if (ObjectUtils.isNotEmpty(item.getEnumValue())) {
169170
if ((StringUtils.containsIgnoreCase(field.getType(), "NVARCHAR")
170-
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR")) && !isCross) {
171+
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR"))
172+
&& !isCross
173+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
171174
res = "(" + whereName + " IN (" + item.getEnumValue().stream().map(str -> "'" + SQLConstants.MSSQL_N_PREFIX + str + "'").collect(Collectors.joining(",")) + "))";
172175
} else {
173176
res = "(" + whereName + " IN ('" + String.join("','", item.getEnumValue()) + "'))";
@@ -193,14 +196,18 @@ private static String transTreeItem(SQLObj tableObj, FilterTreeItem item, Map<St
193196
whereValue = "''";
194197
} else if (StringUtils.containsIgnoreCase(item.getTerm(), "in") || StringUtils.containsIgnoreCase(item.getTerm(), "not in")) {
195198
if ((StringUtils.containsIgnoreCase(field.getType(), "NVARCHAR")
196-
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR")) && !isCross) {
199+
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR"))
200+
&& !isCross
201+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
197202
whereValue = "(" + Arrays.stream(value.split(",")).map(str -> "'" + SQLConstants.MSSQL_N_PREFIX + str + "'").collect(Collectors.joining(",")) + ")";
198203
} else {
199204
whereValue = "('" + String.join("','", value.split(",")) + "')";
200205
}
201206
} else if (StringUtils.containsIgnoreCase(item.getTerm(), "like")) {
202207
if ((StringUtils.containsIgnoreCase(field.getType(), "NVARCHAR")
203-
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR")) && !isCross) {
208+
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR"))
209+
&& !isCross
210+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
204211
whereValue = "'" + SQLConstants.MSSQL_N_PREFIX + "%" + value + "%'";
205212
} else {
206213
whereValue = "'%" + value + "%'";
@@ -246,7 +253,9 @@ private static String transTreeItem(SQLObj tableObj, FilterTreeItem item, Map<St
246253
}
247254
} else {
248255
if ((StringUtils.containsIgnoreCase(field.getType(), "NVARCHAR")
249-
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR")) && !isCross) {
256+
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR"))
257+
&& !isCross
258+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
250259
whereValue = String.format(SQLConstants.WHERE_VALUE_VALUE_CH, value);
251260
} else {
252261
whereValue = String.format(SQLConstants.WHERE_VALUE_VALUE, value);

core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
1010
import io.dataease.extensions.datasource.model.SQLMeta;
1111
import io.dataease.extensions.datasource.model.SQLObj;
12+
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
1213
import io.dataease.extensions.view.dto.ChartExtFilterDTO;
1314
import org.apache.commons.lang3.ObjectUtils;
1415
import org.apache.commons.lang3.StringUtils;
@@ -166,14 +167,16 @@ public static void extWhere2sqlOjb(SQLMeta meta, List<ChartExtFilterDTO> fields,
166167
break;
167168
}
168169
}
169-
if (hasN && !isCross) {
170+
if (hasN && !isCross && StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
170171
whereValue = "(" + value.stream().map(str -> "'" + SQLConstants.MSSQL_N_PREFIX + str + "'").collect(Collectors.joining(",")) + ")";
171172
} else {
172173
whereValue = "('" + StringUtils.join(value, "','") + "')";
173174
}
174175
} else {
175176
if ((StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NVARCHAR")
176-
|| StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR")) && !isCross) {
177+
|| StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR"))
178+
&& !isCross
179+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
177180
whereValue = "(" + value.stream().map(str -> "'" + SQLConstants.MSSQL_N_PREFIX + str + "'").collect(Collectors.joining(",")) + ")";
178181
} else {
179182
if (request.getDatasetTableField().getDeType() == 2 || request.getDatasetTableField().getDeType() == 3) {
@@ -196,14 +199,16 @@ public static void extWhere2sqlOjb(SQLMeta meta, List<ChartExtFilterDTO> fields,
196199
break;
197200
}
198201
}
199-
if (hasN && !isCross) {
202+
if (hasN && !isCross && StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
200203
whereValue = "'" + SQLConstants.MSSQL_N_PREFIX + "%" + value.get(0) + "%'";
201204
} else {
202205
whereValue = "'%" + value.get(0) + "%'";
203206
}
204207
} else {
205208
if ((StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NVARCHAR")
206-
|| StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR")) && !isCross) {
209+
|| StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR"))
210+
&& !isCross
211+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
207212
whereValue = "'" + SQLConstants.MSSQL_N_PREFIX + "%" + value.get(0) + "%'";
208213
} else {
209214
whereValue = "'%" + value.get(0) + "%'";
@@ -248,8 +253,9 @@ public static void extWhere2sqlOjb(SQLMeta meta, List<ChartExtFilterDTO> fields,
248253
List<DatasetTableFieldDTO> datasetTableFieldList = request.getDatasetTableFieldList();
249254
boolean hasN = false;
250255
for (DatasetTableFieldDTO dto : datasetTableFieldList) {
251-
if (StringUtils.containsIgnoreCase(dto.getType(), "NVARCHAR")
252-
|| StringUtils.containsIgnoreCase(dto.getType(), "NCHAR")) {
256+
if ((StringUtils.containsIgnoreCase(dto.getType(), "NVARCHAR")
257+
|| StringUtils.containsIgnoreCase(dto.getType(), "NCHAR"))
258+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
253259
hasN = true;
254260
break;
255261
}
@@ -261,7 +267,9 @@ public static void extWhere2sqlOjb(SQLMeta meta, List<ChartExtFilterDTO> fields,
261267
}
262268
} else {
263269
if ((StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NVARCHAR")
264-
|| StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR")) && !isCross) {
270+
|| StringUtils.containsIgnoreCase(request.getDatasetTableField().getType(), "NCHAR"))
271+
&& !isCross
272+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
265273
whereValue = String.format(SQLConstants.WHERE_VALUE_VALUE_CH, value.get(0));
266274
} else {
267275
whereValue = String.format(SQLConstants.WHERE_VALUE_VALUE, value.get(0));

core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.dataease.engine.trans;
22

33
import io.dataease.api.permissions.dataset.dto.DataSetRowPermissionsTreeDTO;
4-
import io.dataease.engine.constant.ExtFieldConstant;
54
import io.dataease.constant.SQLConstants;
5+
import io.dataease.engine.constant.ExtFieldConstant;
66
import io.dataease.engine.utils.Utils;
77
import io.dataease.extensions.datasource.api.PluginManageApi;
88
import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
@@ -11,6 +11,7 @@
1111
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
1212
import io.dataease.extensions.datasource.model.SQLMeta;
1313
import io.dataease.extensions.datasource.model.SQLObj;
14+
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
1415
import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeItem;
1516
import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeObj;
1617
import org.apache.commons.collections4.CollectionUtils;
@@ -180,7 +181,9 @@ public static String transTreeItem(SQLObj tableObj, DatasetRowPermissionsTreeIte
180181
if (StringUtils.equalsIgnoreCase(item.getFilterType(), "enum")) {
181182
if (CollectionUtils.isNotEmpty(item.getEnumValue())) {
182183
if ((StringUtils.containsIgnoreCase(field.getType(), "NVARCHAR")
183-
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR")) && !isCross) {
184+
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR"))
185+
&& !isCross
186+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
184187
res = "(" + whereName + " IN (" + item.getEnumValue().stream().map(str -> "'" + SQLConstants.MSSQL_N_PREFIX + str + "'").collect(Collectors.joining(",")) + "))";
185188
} else {
186189
res = "(" + whereName + " IN ('" + String.join("','", item.getEnumValue()) + "'))";
@@ -205,14 +208,18 @@ public static String transTreeItem(SQLObj tableObj, DatasetRowPermissionsTreeIte
205208
whereValue = "''";
206209
} else if (StringUtils.containsIgnoreCase(item.getTerm(), "in") || StringUtils.containsIgnoreCase(item.getTerm(), "not in")) {
207210
if ((StringUtils.containsIgnoreCase(field.getType(), "NVARCHAR")
208-
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR")) && !isCross) {
211+
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR"))
212+
&& !isCross
213+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
209214
whereValue = "(" + Arrays.stream(value.split(",")).map(str -> "'" + SQLConstants.MSSQL_N_PREFIX + str + "'").collect(Collectors.joining(",")) + ")";
210215
} else {
211216
whereValue = "('" + String.join("','", value.split(",")) + "')";
212217
}
213218
} else if (StringUtils.containsIgnoreCase(item.getTerm(), "like")) {
214219
if ((StringUtils.containsIgnoreCase(field.getType(), "NVARCHAR")
215-
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR")) && !isCross) {
220+
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR"))
221+
&& !isCross
222+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
216223
whereValue = "'" + SQLConstants.MSSQL_N_PREFIX + "%" + value + "%'";
217224
} else {
218225
whereValue = "'%" + value + "%'";
@@ -256,7 +263,9 @@ public static String transTreeItem(SQLObj tableObj, DatasetRowPermissionsTreeIte
256263
}
257264
} else {
258265
if ((StringUtils.containsIgnoreCase(field.getType(), "NVARCHAR")
259-
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR")) && !isCross) {
266+
|| StringUtils.containsIgnoreCase(field.getType(), "NCHAR"))
267+
&& !isCross
268+
&& StringUtils.equalsIgnoreCase(dsType, DatasourceConfiguration.DatasourceType.sqlServer.getType())) {
260269
whereValue = String.format(SQLConstants.WHERE_VALUE_VALUE_CH, value);
261270
} else {
262271
whereValue = String.format(SQLConstants.WHERE_VALUE_VALUE, value);

0 commit comments

Comments
 (0)