From d506b496021f96b8949bc9f332b3c770b532bab2 Mon Sep 17 00:00:00 2001 From: Jalina2007 Date: Thu, 23 Oct 2025 11:21:35 +0530 Subject: [PATCH 1/2] Updated startWithFilterBuilder(), endWithFilterBuilder(), containsFilterBuilder() to support case insensitive comparisons. --- .../api/resource/mgt/util/FilterQueriesUtil.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/components/api-resource-mgt/org.wso2.carbon.identity.api.resource.mgt/src/main/java/org/wso2/carbon/identity/api/resource/mgt/util/FilterQueriesUtil.java b/components/api-resource-mgt/org.wso2.carbon.identity.api.resource.mgt/src/main/java/org/wso2/carbon/identity/api/resource/mgt/util/FilterQueriesUtil.java index 05ad6974c210..a6755a89b42b 100644 --- a/components/api-resource-mgt/org.wso2.carbon.identity.api.resource.mgt/src/main/java/org/wso2/carbon/identity/api/resource/mgt/util/FilterQueriesUtil.java +++ b/components/api-resource-mgt/org.wso2.carbon.identity.api.resource.mgt/src/main/java/org/wso2/carbon/identity/api/resource/mgt/util/FilterQueriesUtil.java @@ -191,24 +191,27 @@ private static void notEqualFilterBuilder(int count, String value, String attrib private static void startWithFilterBuilder(int count, String value, String attributeName, StringBuilder filter, FilterQueryBuilder filterQueryBuilder) { - String filterString = " LIKE ? AND "; - filter.append(attributeName).append(filterString); + String filterString = " LIKE LOWER(?) AND "; + String attributeNameWithLowerCaseFunction = "LOWER(" + attributeName + ")"; + filter.append(attributeNameWithLowerCaseFunction).append(filterString); filterQueryBuilder.setFilterAttributeValue(count, value + "%"); } private static void endWithFilterBuilder(int count, String value, String attributeName, StringBuilder filter, FilterQueryBuilder filterQueryBuilder) { - String filterString = " LIKE ? AND "; - filter.append(attributeName).append(filterString); + String filterString = " LIKE LOWER(?) AND "; + String attributeNameWithLowerCaseFunction = "LOWER(" + attributeName + ")"; + filter.append(attributeNameWithLowerCaseFunction).append(filterString); filterQueryBuilder.setFilterAttributeValue(count, "%" + value); } private static void containsFilterBuilder(int count, String value, String attributeName, StringBuilder filter, FilterQueryBuilder filterQueryBuilder) { - String filterString = " LIKE ? AND "; - filter.append(attributeName).append(filterString); + String filterString = " LIKE LOWER(?) AND "; + String attributeNameWithLowerCaseFunction = "LOWER(" + attributeName + ")"; + filter.append(attributeNameWithLowerCaseFunction).append(filterString); filterQueryBuilder.setFilterAttributeValue(count, "%" + value + "%"); } From 1cdf6597bb64fcf0ae13422aed91ea969b60497c Mon Sep 17 00:00:00 2001 From: Jalina2007 Date: Fri, 31 Oct 2025 13:15:46 +0530 Subject: [PATCH 2/2] Changed filtering logic to turn attribute value to lowercase in Java instead of inside the query. --- .../api/resource/mgt/util/FilterQueriesUtil.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/components/api-resource-mgt/org.wso2.carbon.identity.api.resource.mgt/src/main/java/org/wso2/carbon/identity/api/resource/mgt/util/FilterQueriesUtil.java b/components/api-resource-mgt/org.wso2.carbon.identity.api.resource.mgt/src/main/java/org/wso2/carbon/identity/api/resource/mgt/util/FilterQueriesUtil.java index a6755a89b42b..755796ee817c 100644 --- a/components/api-resource-mgt/org.wso2.carbon.identity.api.resource.mgt/src/main/java/org/wso2/carbon/identity/api/resource/mgt/util/FilterQueriesUtil.java +++ b/components/api-resource-mgt/org.wso2.carbon.identity.api.resource.mgt/src/main/java/org/wso2/carbon/identity/api/resource/mgt/util/FilterQueriesUtil.java @@ -191,28 +191,28 @@ private static void notEqualFilterBuilder(int count, String value, String attrib private static void startWithFilterBuilder(int count, String value, String attributeName, StringBuilder filter, FilterQueryBuilder filterQueryBuilder) { - String filterString = " LIKE LOWER(?) AND "; + String filterString = " LIKE ? AND "; String attributeNameWithLowerCaseFunction = "LOWER(" + attributeName + ")"; filter.append(attributeNameWithLowerCaseFunction).append(filterString); - filterQueryBuilder.setFilterAttributeValue(count, value + "%"); + filterQueryBuilder.setFilterAttributeValue(count, value.toLowerCase() + "%"); } private static void endWithFilterBuilder(int count, String value, String attributeName, StringBuilder filter, FilterQueryBuilder filterQueryBuilder) { - String filterString = " LIKE LOWER(?) AND "; + String filterString = " LIKE ? AND "; String attributeNameWithLowerCaseFunction = "LOWER(" + attributeName + ")"; filter.append(attributeNameWithLowerCaseFunction).append(filterString); - filterQueryBuilder.setFilterAttributeValue(count, "%" + value); + filterQueryBuilder.setFilterAttributeValue(count, "%" + value.toLowerCase()); } private static void containsFilterBuilder(int count, String value, String attributeName, StringBuilder filter, FilterQueryBuilder filterQueryBuilder) { - String filterString = " LIKE LOWER(?) AND "; + String filterString = " LIKE ? AND "; String attributeNameWithLowerCaseFunction = "LOWER(" + attributeName + ")"; filter.append(attributeNameWithLowerCaseFunction).append(filterString); - filterQueryBuilder.setFilterAttributeValue(count, "%" + value + "%"); + filterQueryBuilder.setFilterAttributeValue(count, "%" + value.toLowerCase() + "%"); } private static void greaterThanOrEqualFilterBuilder(int count, String value, String attributeName,