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

Reply via email to