Liran Zelkha has uploaded a new change for review. Change subject: core: [search] Users: role = * returns nothing / ERROR ......................................................................
core: [search] Users: role = * returns nothing / ERROR Error message is [search] Users: role = * returns nothing / ERROR: column vdc_users.mla_role does not exist. This patch adds an infrastructure that allows us to map specific columns that exist in the tag tables but not in the regular tables to solve this specific scenario, and any future such scenarion. Change-Id: I742877bf4debfdacc44659359c40e9d6d0a99a3b Bug-Url: https://bugzilla.redhat.com/1187693 Signed-off-by: [email protected] <[email protected]> --- M backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java M backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java M backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java 3 files changed, 28 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/02/38502/1 diff --git a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java index 93c595c..98224d4 100644 --- a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java +++ b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java @@ -10,6 +10,7 @@ public class SearchObjectAutoCompleter extends SearchObjectsBaseAutoCompleter { private final Map<String, String[]> mJoinDictionary = new HashMap<String, String[]>(); + private final Map<String, Boolean> requiresFullTable = new HashMap<String, Boolean>(); public SearchObjectAutoCompleter() { @@ -46,6 +47,8 @@ mVerbs.add(SearchObjects.PROVIDER_OBJ_NAME); mVerbs.add(SearchObjects.INSTANCE_TYPE_OBJ_NAME); mVerbs.add(SearchObjects.IMAGE_TYPE_OBJ_NAME); + + requiresFullTable.put(SearchObjects.VDC_USER_OBJ_NAME + "-ROLE", true); // vms - vds addJoin(SearchObjects.VM_OBJ_NAME, @@ -484,9 +487,21 @@ return null; } - public String getRelatedTableName(String obj, String fieldName) { + public String getRelatedTableName(String obj, String fieldName, boolean useTagsInFrom) { return getRelatedTableName(obj, fieldName == null || fieldName.length() == 0 - || fieldName.toLowerCase().equalsIgnoreCase("tag")); + || fieldName.toLowerCase().equalsIgnoreCase("tag") + || requiresTagsForField(obj, fieldName, useTagsInFrom)); + } + + private boolean requiresTagsForField(String obj, String fieldName, boolean useTagsInFrom) { + if (!useTagsInFrom) { + return false; + } + Boolean result = requiresFullTable.containsKey(obj + "-" + fieldName); + if (result != null && result) { + return true; + } + return false; } public String getRelatedTableName(String obj, boolean useTags) { 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 4659d2a..fb690e8 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 @@ -1076,7 +1076,8 @@ customizedRelation, fieldName, objName, - conditionType); + conditionType, + useTags); } private String buildCustomizedRelation(final boolean caseSensitive, @@ -1130,7 +1131,8 @@ String customizedRelation, String fieldName, String objName, - ConditionType conditionType) { + ConditionType conditionType, + boolean useTags) { String tableName; @@ -1139,7 +1141,7 @@ if (conditionType == ConditionType.ConditionwithSpesificObj) { tableName = mSearchObjectAC.getRelatedTableName(objName, true); } else { - tableName = mSearchObjectAC.getRelatedTableName(objName, fieldName); + tableName = mSearchObjectAC.getRelatedTableName(objName, fieldName, useTags); } if (customizedRelation.equalsIgnoreCase("LIKE") || customizedRelation.equalsIgnoreCase("ILIKE")) { // Since '_' is treated in Postgres as '?' when using like, (i.e. match any single character) diff --git a/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java b/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java index 9d46354..ec4bdd8 100644 --- a/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java +++ b/backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java @@ -250,6 +250,12 @@ } @Test + public void testUsersAllRoles() { + testValidSql("Users: role = * ", + "SELECT * FROM (SELECT * FROM vdc_users WHERE ( user_id IN (SELECT distinct vdc_users_with_tags.user_id FROM vdc_users_with_tags WHERE vdc_users_with_tags.mla_role LIKE % )) ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0"); + } + + @Test public void testGroup() { testValidSql("Group:", "SELECT * FROM ((SELECT distinct ad_groups.* FROM ad_groups ) ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0"); -- To view, visit https://gerrit.ovirt.org/38502 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I742877bf4debfdacc44659359c40e9d6d0a99a3b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liran Zelkha <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
