Yair Zaslavsky has uploaded a new change for review. Change subject: aaa: Fix search to search properly for users by groups ......................................................................
aaa: Fix search to search properly for users by groups Instead of ilike 'group%' which is problematic in case the user is member of multiple groups , the pattern matching operator is used with a proper expression to replace the % wildcard. Topic: AAA Bug-Url: https://bugzilla.redhat.com/1120720 Change-Id: I14e795926cb57de15b628587d5c3df427518720a Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com> --- M backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java M backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java M backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java M backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java 4 files changed, 24 insertions(+), 3 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/05/32705/1 diff --git a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java index 7d6832d..62bb486 100644 --- a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java +++ b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java @@ -5,8 +5,10 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.ovirt.engine.core.common.businessentities.DateEnumForSearch; import org.ovirt.engine.core.common.businessentities.Tags; @@ -34,6 +36,7 @@ protected final Map<String, String> columnNameDict = new HashMap<String, String>(); protected final Map<String, String> sortableFieldDict = new HashMap<String, String>(); protected final List<String> notFreeTextSearchableFieldsList = new ArrayList<String>(); + protected Set<String> verbsWithMultipleValues = new HashSet<String>(); /** * Gets the LIKE clause syntax for non case-sensitive search @@ -48,6 +51,13 @@ else return Config.<String> getValue(ConfigValues.DBLikeSyntax); } + + public String getMatchingSyntax(String fieldName, boolean positive, boolean caseSensitive) { + return verbsWithMultipleValues.contains(fieldName) ? + new StringBuilder(positive ? "" : " !").append(caseSensitive ? "~" : "~*").toString() + : new StringBuilder(positive ? "" : " NOT ").append(getLikeSyntax(caseSensitive)).toString(); + } + /** * Gets the I18N prefix used for value compare. @@ -377,4 +387,9 @@ pair.getFirst(), pair.getSecond()); } } + + @Override + public String getWildcard(String fieldName) { + return verbsWithMultipleValues.contains(fieldName) ? ".*" : "%"; + } } diff --git a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java index 9d94e3c..66264b7 100644 --- a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java +++ b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java @@ -20,6 +20,10 @@ String buildFreeTextConditionSql(String tableName, String relations, String value, boolean caseSensitive); + String getMatchingSyntax(String fieldName, boolean positive, boolean caseSensitive); + + String getWildcard(String fieldName); + String buildConditionSql(String fieldName, String customizedValue, String customizedRelation, diff --git a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java index 753099c..cfb93bc 100644 --- a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java +++ b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java @@ -1091,9 +1091,9 @@ String.class.equals(conditionFieldAC.getDbFieldType(fieldName)))) { /* enable case-insensitive search by changing operation to I/LIKE */ if ("=".equals(customizedRelation)) { - customizedRelation = BaseConditionFieldAutoCompleter.getLikeSyntax(caseSensitive); + customizedRelation = conditionFieldAC.getMatchingSyntax(fieldName, true, caseSensitive); } else if ("!=".equals(customizedRelation)) { - customizedRelation = "NOT " + BaseConditionFieldAutoCompleter.getLikeSyntax(caseSensitive); + customizedRelation = conditionFieldAC.getMatchingSyntax(fieldName, false, caseSensitive); } } return customizedRelation; @@ -1116,7 +1116,7 @@ conditionValueAC.convertFieldEnumValueToActualValue(obj.getBody())); } else if ("".equals(fieldName) /* search on all relevant fields */|| (String.class.equals(conditionFieldAC.getDbFieldType(fieldName)))) { - customizedValue = customizedValue.replace('*', '%'); + customizedValue = customizedValue.replace("*", conditionFieldAC.getWildcard(fieldName)); } return customizedValue; } diff --git a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java index a517a61..a0244a6 100644 --- a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java +++ b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.searchbackend; + public class VdcUserConditionFieldAutoCompleter extends BaseConditionFieldAutoCompleter { public static final String FIRST_NAME = "NAME"; public static final String LAST_NAME = "LASTNAME"; @@ -27,6 +28,7 @@ mVerbs.add("TAG"); mVerbs.add("POOL"); mVerbs.add("TYPE"); + verbsWithMultipleValues.add(GROUP); // Building the auto completion dictionary. buildCompletions(); -- To view, visit http://gerrit.ovirt.org/32705 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I14e795926cb57de15b628587d5c3df427518720a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches