Liran Zelkha has uploaded a new change for review.

Change subject: core: Fix Dynamic Queries to search all fields for non existing 
field
......................................................................

core: Fix Dynamic Queries to search all fields for non existing field

Make sure that when searching for a field that doesn't appear we search the 
_with_tags
table.

Change-Id: I1aef8977331f9b3bd1d5003fbd9c7104b176eb92
Bug-Url: https://bugzilla.redhat.com/??????
Signed-off-by: [email protected] <[email protected]>
---
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
2 files changed, 53 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/44/29444/1

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 671f314..8c07a58 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
@@ -813,8 +813,18 @@
                     whereBuilder.addLast(obj.getBody());
                     break;
                 case CONDITION_VALUE:
-                    whereBuilder.addLast(generateConditionStatment(obj, 
syntax.listIterator(objIter.previousIndex()),
-                            searchObjStr, syntax.getCaseSensitive(), isSafe, 
useTags));
+                    ConditionData conditionData =
+                            generateConditionStatment(obj,
+                                    
syntax.listIterator(objIter.previousIndex()),
+                                    searchObjStr,
+                                    syntax.getCaseSensitive(),
+                                    isSafe,
+                                    useTags);
+                    whereBuilder.addLast(conditionData.getConditionText());
+                    if (conditionData.isFullTableRequired() && !useTags) {
+                        useTags = true;
+                        fromStatement = generateFromStatement(syntax, useTags);
+                    }
                     break;
                 case SORTBY:
                     break;
@@ -979,13 +989,13 @@
         ConditionwithSpesificObj;
     }
 
-    private String generateConditionStatment(SyntaxObject obj, 
ListIterator<SyntaxObject> objIter,
+    private ConditionData generateConditionStatment(SyntaxObject obj, 
ListIterator<SyntaxObject> objIter,
             final String searchObjStr, final boolean caseSensitive, final 
boolean issafe, final boolean useTags) {
         final String safeValue = issafe ? obj.getBody() : 
SqlInjectionChecker.enforceEscapeCharacters(obj.getBody());
         return generateSafeConditionStatement(obj, objIter, searchObjStr, 
caseSensitive, safeValue, useTags);
     }
 
-    private String generateSafeConditionStatement(final SyntaxObject obj,
+    private ConditionData generateSafeConditionStatement(final SyntaxObject 
obj,
             ListIterator<SyntaxObject> objIter,
             final String searchObjStr,
             final boolean caseSensitive,
@@ -1102,7 +1112,7 @@
         return customizedValue;
     }
 
-    final String buildCondition(boolean caseSensitive,
+    final ConditionData buildCondition(boolean caseSensitive,
             IConditionFieldAutoCompleter conditionFieldAC,
             String customizedValue,
             String customizedRelation,
@@ -1136,23 +1146,30 @@
             }
             customizedValue = customizedValue.replace("_", replaceWith);
         }
+        ConditionData conditionData = new ConditionData();
         switch (conditionType) {
         case FreeText:
         case FreeTextSpecificObj:
-            return conditionFieldAC.buildFreeTextConditionSql(tableName,
+            
conditionData.setConditionText(conditionFieldAC.buildFreeTextConditionSql(tableName,
                     customizedRelation,
                     customizedValue,
-                    caseSensitive);
+                    caseSensitive));
+            conditionData.setFullTableRequired(true);
+            break;
         case ConditionWithDefaultObj:
         case ConditionwithSpesificObj:
-            return conditionFieldAC.buildConditionSql(fieldName,
+            
conditionData.setConditionText(conditionFieldAC.buildConditionSql(fieldName,
                     customizedValue,
                     customizedRelation,
                     tableName,
-                    caseSensitive);
+                    caseSensitive));
+            conditionData.setFullTableRequired(false);
+            break;
         default:
-            return "";
+            conditionData.setConditionText("");
+            conditionData.setFullTableRequired(false);
         }
+        return conditionData;
     }
 
     private static final Log log = LogFactory.getLog(SyntaxChecker.class);
@@ -1171,4 +1188,26 @@
             return value;
         }
     }
+
+    private class ConditionData {
+        private String conditionText;
+        private boolean fullTableRequired = false;
+
+        public String getConditionText() {
+            return conditionText;
+        }
+
+        public void setConditionText(String conditionText) {
+            this.conditionText = conditionText;
+        }
+
+        public boolean isFullTableRequired() {
+            return fullTableRequired;
+        }
+
+        public void setFullTableRequired(boolean fullTableRequired) {
+            this.fullTableRequired = fullTableRequired;
+        }
+
+    }
 }
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 5934457..4446133 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
@@ -182,6 +182,10 @@
                 "SELECT * FROM ((SELECT vms.* FROM  vms   LEFT OUTER JOIN 
vdc_users_with_tags ON vms.vm_guid=vdc_users_with_tags.vm_guid    WHERE  
vdc_users_with_tags.name LIKE user1 )  ORDER BY vm_name ASC ) as T1 OFFSET (1 
-1) LIMIT 0");
         testValidSql("Vm: user.name = \"user1\" and user.tag=\"tag1\"",
                 "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags   LEFT OUTER JOIN vdc_users_with_tags 
ON vms_with_tags.vm_guid=vdc_users_with_tags.vm_guid    WHERE (  
vdc_users_with_tags.name LIKE user1  AND  vdc_users_with_tags.tag_name IN 
(tag1)  )))  ORDER BY vm_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+
+        // Used to validate that searching values not in fields search all 
fields
+        testValidSql("Vm: mac=00:1a:4a:d4:53:94",
+                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
vms_with_tags.vm_guid FROM  vms_with_tags   WHERE  (  
vms_with_tags.vm_pool_name LIKE '%mac=00:1a:4a:d4:53:94%' OR  
vms_with_tags.run_on_vds_name LIKE '%mac=00:1a:4a:d4:53:94%' OR  
vms_with_tags.vm_fqdn LIKE '%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.tag_name 
LIKE '%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.guest_cur_user_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_description LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.quota_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_host LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_ip LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.storage_pool_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vds_group_name LIKE 
'%mac=00:1a:4a:d4:53:94%' OR  vms_with_tags.vm_comment LIKE 
'%mac=00:1a:4a:d4:53:94%' ) ))  ORDER BY vm_name ASC ) as T1 OFFSET (1 -1) 
LIMIT 0");
     }
 
     @Test


-- 
To view, visit http://gerrit.ovirt.org/29444
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1aef8977331f9b3bd1d5003fbd9c7104b176eb92
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