From ebc6f5a1aeb822c54c95edba4a6ce290f06d7415 Mon Sep 17 00:00:00 2001 From: junjun Date: Tue, 12 Mar 2024 17:27:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=20'=E7=A9=BA=E6=95=B0=E6=8D=AE'=20=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/doris/DorisQueryProvider.java | 16 ++++++++++------ .../engine/mysql/MysqlQueryProvider.java | 14 ++++++++++++-- .../provider/query/ck/CKQueryProvider.java | 18 ++++++++++++++---- .../provider/query/db2/Db2QueryProvider.java | 13 +++++++++++-- .../provider/query/es/EsQueryProvider.java | 14 ++++++++++++-- .../provider/query/hive/HiveQueryProvider.java | 18 ++++++++++++++---- .../query/impala/ImpalaQueryProvider.java | 18 ++++++++++++++---- .../query/mongodb/MongoQueryProvider.java | 14 ++++++++++++-- .../query/mysql/MysqlQueryProvider.java | 14 ++++++++++++-- .../query/oracle/OracleQueryProvider.java | 14 ++++++++++++-- .../provider/query/pg/PgQueryProvider.java | 14 ++++++++++++-- .../query/redshift/RedshiftQueryProvider.java | 14 ++++++++++++-- .../sqlserver/SqlserverQueryProvider.java | 18 ++++++++++++++---- .../chart/components/dragItem/DrillItem.vue | 1 - .../datasource/dm/query/DmQueryProvider.java | 18 ++++++++++++++---- .../kingbase/query/KingbaseQueryProvider.java | 18 ++++++++++++++---- .../kylin/query/KylinQueryProvider.java | 14 ++++++++++++-- .../dm/query/MaxcomputeQueryProvider.java | 18 ++++++++++++++---- .../mongo/query/MongobiQueryProvider.java | 14 ++++++++++++-- .../dm/query/PrestoQueryProvider.java | 18 ++++++++++++++---- .../constants/datasource/SQLConstants.java | 4 +++- 21 files changed, 244 insertions(+), 60 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 d5f121e33b..1f19407713 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 @@ -1429,7 +1429,12 @@ public class DorisQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1448,13 +1453,12 @@ public class DorisQueryProvider extends QueryProvider { whereValue = String.format(DorisConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - // doris field type test - /*if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - whereValue = String.format(DorisConstants.WHERE_NUMBER_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(DorisConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; } else { whereValue = String.format(DorisConstants.WHERE_VALUE_VALUE, value.get(0)); - }*/ - whereValue = String.format(DorisConstants.WHERE_VALUE_VALUE, value.get(0)); + } } list.add(SQLObj.builder() .whereField(whereName) 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 9187aca077..ef9ff66bf0 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 @@ -1371,7 +1371,12 @@ public class MysqlQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1392,7 +1397,12 @@ public class MysqlQueryProvider extends QueryProvider { whereValue = String.format(MysqlConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(MysqlConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(MySQLConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(MySQLConstants.WHERE_VALUE_VALUE, value.get(0)); + } } list.add(SQLObj.builder() .whereField(whereName) diff --git a/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java index 30dde50239..d57b7e5e7e 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java @@ -1096,7 +1096,7 @@ public class CKQueryProvider extends QueryProvider { whereValue = "'" + value + "%'"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "end_with")) { whereValue = "'%" + value + "'"; - }else { + } else { if (field.getDeType() == DeTypeConstants.DE_TIME) { whereValue = String.format(CKConstants.toDateTime, "'" + value + "'"); } else { @@ -1188,7 +1188,7 @@ public class CKQueryProvider extends QueryProvider { whereValue = "('" + StringUtils.join(value, "','") + "')"; } else if (StringUtils.equalsIgnoreCase(item.getTerm(), "like")) { whereValue = "'%" + value + "%'"; - }else if (StringUtils.equalsIgnoreCase(item.getTerm(), "begin_with")) { + } else if (StringUtils.equalsIgnoreCase(item.getTerm(), "begin_with")) { whereValue = "'" + value + "%'"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "end_with")) { whereValue = "'%" + value + "'"; @@ -1462,7 +1462,12 @@ public class CKQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1477,7 +1482,12 @@ public class CKQueryProvider extends QueryProvider { whereValue = String.format(CKConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = isCompleteField(value.get(0)) ? value.get(0) : String.format(CKConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = isCompleteField(value.get(0)) ? "" : String.format(CKConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = isCompleteField(value.get(0)) ? value.get(0) : String.format(CKConstants.WHERE_VALUE_VALUE, value.get(0)); + } } if (!request.getIsTree() && fieldList.get(0).getDeType() == DeTypeConstants.DE_TIME && StringUtils.equalsIgnoreCase(request.getOperator(), "null")) { diff --git a/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java index cb2b660045..b485ea62d6 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java @@ -1468,7 +1468,11 @@ public class Db2QueryProvider extends QueryProvider { if (isFloat) { whereValue = "(" + StringUtils.join(value, ",") + ")"; } else { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); @@ -1487,7 +1491,12 @@ public class Db2QueryProvider extends QueryProvider { if (isFloat) { whereValue = value.get(0); } else { - whereValue = String.format(Db2Constants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(Db2Constants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(Db2Constants.WHERE_VALUE_VALUE, value.get(0)); + } } } 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 f0b729baa3..edd16413ba 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 @@ -1395,7 +1395,12 @@ public class EsQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1410,7 +1415,12 @@ public class EsQueryProvider extends QueryProvider { whereValue = String.format(EsSqlLConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(EsSqlLConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(EsSqlLConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(EsSqlLConstants.WHERE_VALUE_VALUE, value.get(0)); + } } list.add(SQLObj.builder() .whereField(whereName) 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 162c30707e..83419c22f8 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 @@ -1041,11 +1041,11 @@ public class HiveQueryProvider extends QueryProvider { whereValue = "('" + String.join("','", value.split(",")) + "')"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "like")) { whereValue = "'%" + value + "%'"; - }else if (StringUtils.equalsIgnoreCase(item.getTerm(), "begin_with")) { + } else if (StringUtils.equalsIgnoreCase(item.getTerm(), "begin_with")) { whereValue = "'" + value + "%'"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "end_with")) { whereValue = "'%" + value + "'"; - } else { + } else { whereValue = String.format(HiveConstants.WHERE_VALUE_VALUE, value); } SQLObj build = SQLObj.builder() @@ -1352,7 +1352,12 @@ public class HiveQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1367,7 +1372,12 @@ public class HiveQueryProvider extends QueryProvider { whereValue = String.format(HiveConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(HiveConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(HiveConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(HiveConstants.WHERE_VALUE_VALUE, value.get(0)); + } } list.add(SQLObj.builder() .whereField(whereName) 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 58b9672dfe..fbc86c9d4a 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 @@ -1046,11 +1046,11 @@ public class ImpalaQueryProvider extends QueryProvider { whereValue = "('" + String.join("','", value.split(",")) + "')"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "like")) { whereValue = "'%" + value + "%'"; - }else if (StringUtils.equalsIgnoreCase(item.getTerm(), "begin_with")) { + } else if (StringUtils.equalsIgnoreCase(item.getTerm(), "begin_with")) { whereValue = "'" + value + "%'"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "end_with")) { whereValue = "'%" + value + "'"; - } else { + } else { if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == DeTypeConstants.DE_BOOL) { whereValue = String.format(ImpalaConstants.WHERE_NUMBER_VALUE_VALUE, value); } else { @@ -1371,7 +1371,12 @@ public class ImpalaQueryProvider extends QueryProvider { if (!request.getIsTree() && (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == DeTypeConstants.DE_BOOL)) { whereValue = "(" + StringUtils.join(value, ",") + ")"; } else { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); @@ -1394,7 +1399,12 @@ public class ImpalaQueryProvider extends QueryProvider { if (!request.getIsTree() && (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == DeTypeConstants.DE_BOOL)) { whereValue = String.format(ImpalaConstants.WHERE_NUMBER_VALUE_VALUE, value.get(0)); } else { - whereValue = String.format(ImpalaConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(ImpalaConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(ImpalaConstants.WHERE_VALUE_VALUE, value.get(0)); + } } } list.add(SQLObj.builder() diff --git a/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java index f2df136acf..018688896b 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java @@ -1227,7 +1227,12 @@ public class MongoQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1243,7 +1248,12 @@ public class MongoQueryProvider extends QueryProvider { } } else { if (!request.getIsTree() && fieldList.get(0).getDeType() == DeTypeConstants.DE_STRING) { - whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value.get(0)); + } } else { whereValue = value.get(0); } 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 1056a45d07..94dae37fa9 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 @@ -1436,7 +1436,12 @@ public class MysqlQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1455,7 +1460,12 @@ public class MysqlQueryProvider extends QueryProvider { whereValue = String.format(MySQLConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(MySQLConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(MySQLConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(MySQLConstants.WHERE_VALUE_VALUE, value.get(0)); + } } list.add(SQLObj.builder() .whereField(whereName) 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 98c5b7309d..6f5988373e 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 @@ -1541,7 +1541,12 @@ public class OracleQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1558,7 +1563,12 @@ public class OracleQueryProvider extends QueryProvider { whereValue = String.format(OracleConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(OracleConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(OracleConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(OracleConstants.WHERE_VALUE_VALUE, value.get(0)); + } } list.add(SQLObj.builder() .whereField(whereName) 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 641f59acdb..dae85fe977 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 @@ -1392,7 +1392,12 @@ public class PgQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1407,7 +1412,12 @@ public class PgQueryProvider extends QueryProvider { whereValue = String.format(PgConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, value.get(0)); + } } list.add(SQLObj.builder() .whereField(whereName) 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 2e1dfbbce3..49467fa674 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 @@ -1378,7 +1378,12 @@ public class RedshiftQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1393,7 +1398,12 @@ public class RedshiftQueryProvider extends QueryProvider { whereValue = String.format(PgConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, value.get(0)); + } } list.add(SQLObj.builder() .whereField(whereName) 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 c01cbef2d1..8ff7d19c9f 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 @@ -1181,7 +1181,7 @@ public class SqlserverQueryProvider extends QueryProvider { whereValue = "'" + value + "%'"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "end_with")) { whereValue = "'%" + value + "'"; - }else { + } else { if (field.getType().equalsIgnoreCase("NVARCHAR")) { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, value); } else { @@ -1270,7 +1270,7 @@ public class SqlserverQueryProvider extends QueryProvider { whereValue = "'" + value + "%'"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "end_with")) { whereValue = "'%" + value + "'"; - }else { + } else { if (field.getType().equalsIgnoreCase("NVARCHAR")) { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, value); } else { @@ -1523,7 +1523,12 @@ public class SqlserverQueryProvider extends QueryProvider { return "N" + "'" + str + "'"; }).collect(Collectors.joining(",")) + ")"; } else { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + // 过滤空数据 + if (value.contains(SQLConstants.EMPTY_SIGN)) { + whereValue = "('" + StringUtils.join(value, "','") + "', '')" + " or " + whereName + " is null "; + } else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); @@ -1543,7 +1548,12 @@ public class SqlserverQueryProvider extends QueryProvider { if ((request.getDatasetTableField() != null && request.getDatasetTableField().getType().equalsIgnoreCase("NVARCHAR")) || (request.getDatasetTableFieldList() != null && request.getDatasetTableFieldList().stream().map(DatasetTableField::getType).collect(Collectors.toList()).contains("nvarchar"))) { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, value.get(0)); } else { - whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value.get(0)); + // 过滤空数据 + if (StringUtils.equals(value.get(0), SQLConstants.EMPTY_SIGN)) { + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, "") + " or " + whereName + " is null "; + } else { + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value.get(0)); + } } } diff --git a/core/frontend/src/views/chart/components/dragItem/DrillItem.vue b/core/frontend/src/views/chart/components/dragItem/DrillItem.vue index 04368fa734..1e151bae30 100644 --- a/core/frontend/src/views/chart/components/dragItem/DrillItem.vue +++ b/core/frontend/src/views/chart/components/dragItem/DrillItem.vue @@ -61,7 +61,6 @@