diff --git a/common/edqs/src/main/java/org/thingsboard/server/edqs/query/processor/AbstractEntityProfileNameQueryProcessor.java b/common/edqs/src/main/java/org/thingsboard/server/edqs/query/processor/AbstractEntityProfileNameQueryProcessor.java index f881d616ef..95a1a79392 100644 --- a/common/edqs/src/main/java/org/thingsboard/server/edqs/query/processor/AbstractEntityProfileNameQueryProcessor.java +++ b/common/edqs/src/main/java/org/thingsboard/server/edqs/query/processor/AbstractEntityProfileNameQueryProcessor.java @@ -36,7 +36,7 @@ public abstract class AbstractEntityProfileNameQueryProcessor(getProfileNames(this.filter)); - pattern = RepositoryUtils.toContainsSqlLikePattern(getEntityNameFilter(filter)); + pattern = RepositoryUtils.toEntityNameSqlLikePattern(getEntityNameFilter(filter)); } protected abstract String getEntityNameFilter(T filter); diff --git a/common/edqs/src/main/java/org/thingsboard/server/edqs/query/processor/AbstractEntityProfileQueryProcessor.java b/common/edqs/src/main/java/org/thingsboard/server/edqs/query/processor/AbstractEntityProfileQueryProcessor.java index 9d043ff6fc..94a7a95404 100644 --- a/common/edqs/src/main/java/org/thingsboard/server/edqs/query/processor/AbstractEntityProfileQueryProcessor.java +++ b/common/edqs/src/main/java/org/thingsboard/server/edqs/query/processor/AbstractEntityProfileQueryProcessor.java @@ -43,7 +43,7 @@ public abstract class AbstractEntityProfileQueryProcessor value.equals(predicateValue); - case STARTS_WITH -> toStartsWithSqlLikePattern(predicateValue).matcher(value).matches(); - case ENDS_WITH -> toEndsWithSqlLikePattern(predicateValue).matcher(value).matches(); + case STARTS_WITH -> toSqlLikePattern(predicateValue, "^", ".*").matcher(value).matches(); + case ENDS_WITH -> toSqlLikePattern(predicateValue, ".*", "$").matcher(value).matches(); case NOT_EQUAL -> !value.equals(predicateValue); - case CONTAINS -> toContainsSqlLikePattern(predicateValue).matcher(value).matches(); - case NOT_CONTAINS -> !toContainsSqlLikePattern(predicateValue).matcher(value).matches(); + case CONTAINS -> toSqlLikePattern(predicateValue, ".*", ".*").matcher(value).matches(); + case NOT_CONTAINS -> !toSqlLikePattern(predicateValue, ".*", ".*").matcher(value).matches(); case IN -> equalsAny(value, splitByCommaWithoutQuotes(predicateValue)); case NOT_IN -> !equalsAny(value, splitByCommaWithoutQuotes(predicateValue)); }; @@ -322,35 +322,24 @@ public class RepositoryUtils { } } - public static Pattern toContainsSqlLikePattern(String filter) { + public static Pattern toEntityNameSqlLikePattern(String filter) { if (StringUtils.isNotBlank(filter)) { - return toSqlLikePattern(filter, ".*", ".*"); + return toSqlLikePattern(filter, "", ".*"); } return null; } - private static Pattern toStartsWithSqlLikePattern(String filter) { - return toSqlLikePattern(filter, "^", ".*"); - } - - private static Pattern toEndsWithSqlLikePattern(String filter) { - return toSqlLikePattern(filter, ".*", "$"); - } - private static Pattern toSqlLikePattern(String value, String prefix, String suffix) { if (value.contains("%") || value.contains("_")) { String regexValue = value .replace("_", ".") .replace("%", ".*"); - String regex; if ("^".equals(prefix)) { - regex = "^" + regexValue + (regexValue.endsWith(".*") ? "" : ".*"); + regexValue = "^" + regexValue + (regexValue.endsWith(".*") ? "" : ".*"); } else if ("$".equals(suffix)) { - regex = (regexValue.startsWith(".*") ? "" : ".*") + regexValue + "$"; - } else { - regex = (regexValue.startsWith(".*") ? "" : ".*") + regexValue + (regexValue.endsWith(".*") ? "" : ".*"); + regexValue = (regexValue.startsWith(".*") ? "" : ".*") + regexValue + "$"; } - return Pattern.compile(regex); + return Pattern.compile(regexValue); } else { return Pattern.compile(prefix + Pattern.quote(value) + suffix); } diff --git a/edqs/src/test/java/org/thingsboard/server/edqs/repo/RepositoryUtilsTest.java b/edqs/src/test/java/org/thingsboard/server/edqs/repo/RepositoryUtilsTest.java index fa3784ca19..f4c256a8cf 100644 --- a/edqs/src/test/java/org/thingsboard/server/edqs/repo/RepositoryUtilsTest.java +++ b/edqs/src/test/java/org/thingsboard/server/edqs/repo/RepositoryUtilsTest.java @@ -73,7 +73,7 @@ public class RepositoryUtilsTest { Arguments.of("loranet 123", getNameFilter(StringOperation.NOT_IN, "loranet 123, loranet 126"), false), // Basic CONTAINS - Arguments.of("loranet 123", getNameFilter(StringOperation.CONTAINS, "%loranet"), true), + Arguments.of("loranet 123", getNameFilter(StringOperation.CONTAINS, "%loranet"), false), Arguments.of("loranet 123", getNameFilter(StringOperation.CONTAINS, "loranet%"), true), Arguments.of("loranet 123", getNameFilter(StringOperation.CONTAINS, "%ranet%"), true), Arguments.of("loranet 123", getNameFilter(StringOperation.CONTAINS, "%123"), true),