fix(过滤组件): 模糊查询未对%转义导致无法查询 close#8432

This commit is contained in:
fit2cloud-chenyw 2024-03-23 16:25:51 +08:00
parent 3b8bfc81ce
commit 7849692046
20 changed files with 27 additions and 19 deletions

View File

@ -1437,7 +1437,7 @@ public class DorisQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1379,7 +1379,7 @@ public class MysqlQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1480,7 +1480,7 @@ public class CKQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == DeTypeConstants.DE_TIME) {

View File

@ -1476,7 +1476,7 @@ public class Db2QueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == DeTypeConstants.DE_TIME) {

View File

@ -1403,7 +1403,7 @@ public class EsQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "UCASE(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1360,7 +1360,7 @@ public class HiveQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == DeTypeConstants.DE_TIME) {

View File

@ -1380,7 +1380,7 @@ public class ImpalaQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == DeTypeConstants.DE_TIME) {

View File

@ -1235,7 +1235,7 @@ public class MongoQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == DeTypeConstants.DE_TIME) {

View File

@ -1444,7 +1444,7 @@ public class MysqlQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1549,7 +1549,7 @@ public class OracleQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1400,7 +1400,7 @@ public class PgQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1386,7 +1386,7 @@ public class RedshiftQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1532,7 +1532,7 @@ public class SqlserverQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == DeTypeConstants.DE_TIME) {

View File

@ -1570,7 +1570,7 @@ public class DmQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1608,7 +1608,7 @@ public class KingbaseQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1329,7 +1329,7 @@ public class KylinQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1349,7 +1349,7 @@ public class MaxcomputeQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1341,7 +1341,7 @@ public class MongobiQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -1345,7 +1345,7 @@ public class PrestoQueryProvider extends QueryProvider {
}
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) {
String keyword = value.get(0).toUpperCase();
whereValue = "'%" + keyword + "%'";
whereValue = formatLikeValue(keyword);
whereName = "upper(" + whereName + ")";
} else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) {
if (request.getDatasetTableField().getDeType() == 1) {

View File

@ -255,4 +255,12 @@ public abstract class QueryProvider {
public String getTotalCount(boolean isTable, String sql, Datasource ds) {
return null;
}
public String formatLikeValue(String value) {
if (StringUtils.isBlank(value)) return null;
if (StringUtils.equals("%", value)) {
return "'%\\\\" + value + "%'";
}
return "'%" + value + "%'";
}
}