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 Change-Id: I14e795926cb57de15b628587d5c3df427518720a Signed-off-by: Yair Zaslavsky <[email protected]> --- 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, 27 insertions(+), 3 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/53/32153/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..1f3dd9a 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 @@ -49,6 +49,11 @@ return Config.<String> getValue(ConfigValues.DBLikeSyntax); } + public String getMatchingSyntax(boolean positive, boolean caseSensitive) { + return new StringBuilder(positive ? "" : " NOT ").append(getLikeSyntax(caseSensitive)).toString(); + } + + /** * Gets the I18N prefix used for value compare. * @@ -377,4 +382,9 @@ pair.getFirst(), pair.getSecond()); } } + + @Override + public String getWildcard() { + return "%"; + } } 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..1e20596 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(boolean positive, boolean caseSensitive); + + String getWildcard(); + 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 4bfcd57..df327cb 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 @@ -1088,9 +1088,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(true, caseSensitive); } else if ("!=".equals(customizedRelation)) { - customizedRelation = "NOT " + BaseConditionFieldAutoCompleter.getLikeSyntax(caseSensitive); + customizedRelation = conditionFieldAC.getMatchingSyntax(false, caseSensitive); } } return customizedRelation; @@ -1113,7 +1113,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()); } 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..d935f87 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 @@ -69,6 +69,11 @@ } @Override + public String getMatchingSyntax(boolean positive, boolean caseSensitive) { + return new StringBuilder(positive ? "" : " !").append(caseSensitive ? "~" : "~*").toString(); + } + + @Override public String buildConditionSql( String fieldName, String customizedValue, @@ -108,4 +113,9 @@ ); } } + + @Override + public String getWildcard() { + return ".*"; + } } -- To view, visit http://gerrit.ovirt.org/32153 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I14e795926cb57de15b628587d5c3df427518720a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yair Zaslavsky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
