Liran Zelkha has uploaded a new change for review.

Change subject: core:  Search engine does not support tags hierarchy
......................................................................

core:  Search engine does not support tags hierarchy

When searching by tags, we're now searching for all
child tags as well.
This used to work - but broke in some unknown previous patch.

Change-Id: I6441359ab36f0c65c3360b2bcc898728363efe22
Bug-Url: https://bugzilla.redhat.com/1201403
Signed-off-by: [email protected] <[email protected]>
---
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
M 
backend/manager/modules/searchbackend/src/test/java/org/ovirt/engine/core/searchbackend/SyntaxCheckerTest.java
2 files changed, 14 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/69/39069/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 2e39c86..30112e6 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
@@ -334,7 +334,7 @@
                 } else {
                     pair.setSecond(StringFormat.format("('%1$s')", 
Guid.Empty));
                 }
-            } else if (pair.getFirst() != null && 
pair.getFirst().equals("LIKE")) {
+            } else if (pair.getFirst() != null && 
(pair.getFirst().equals("LIKE") || pair.getFirst().equals("ILIKE"))) {
                 pair.setFirst("IN");
                 pair.setSecond(StringHelper.trim(pair.getSecond(), 
'\'').replace("%", "*"));
 
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 d3d865c..061631e 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
@@ -19,7 +19,8 @@
 
 public class SyntaxCheckerTest {
 
-    private final static String TAG_NAME = "tag1";
+    private final static String TAG_NAME = "'tag1'";
+    private final static String TAG_NAME_WITH_CHILDREN = "'tag1','all'";
 
     @Rule
     public MockConfigRule mcr = new MockConfigRule();
@@ -48,7 +49,7 @@
         tags.settag_name(TAG_NAME);
         
Mockito.when(BaseConditionFieldAutoCompleter.tagsHandler.GetTagByTagName(Mockito.anyString())).thenReturn(tags);
         
Mockito.when(BaseConditionFieldAutoCompleter.tagsHandler.GetTagNamesAndChildrenNamesByRegExp(Mockito.anyString()))
-                .thenReturn(TAG_NAME);
+                .thenReturn(TAG_NAME_WITH_CHILDREN);
 
         Config.setConfigUtils(configUtils);
     }
@@ -142,9 +143,9 @@
         testValidSql("Host: EVENT.severity=error and CPU_USAGE > 80 sortby 
cpu_usage desc",
                 "SELECT * FROM ((SELECT distinct vds.* FROM  vds   LEFT OUTER 
JOIN audit_log ON vds.vds_id=audit_log.vds_id    WHERE (  audit_log.severity = 
'2'  AND  vds.usage_cpu_percent > 80  ))  ORDER BY usage_cpu_percent DESC NULLS 
LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Host: EVENT.severity=error and tag=tag1 sortby cpu_usage 
desc",
-                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
distinct vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN audit_log 
ON vds_with_tags.vds_id=audit_log.vds_id    WHERE (  audit_log.severity = '2'  
AND  vds_with_tags.tag_name IN (tag1)  )))  ORDER BY usage_cpu_percent DESC 
NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
distinct vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN audit_log 
ON vds_with_tags.vds_id=audit_log.vds_id    WHERE (  audit_log.severity = '2'  
AND  vds_with_tags.tag_name IN ('tag1','all')  )))  ORDER BY usage_cpu_percent 
DESC NULLS LAST,vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
         testValidSql("Host: tag=\"tag1\"",
-                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
distinct vds_with_tags.vds_id FROM  vds_with_tags   WHERE  
vds_with_tags.tag_name IN (tag1) ))  ORDER BY vds_name ASC ) as T1 OFFSET (1 
-1) LIMIT 0");
+                "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
distinct vds_with_tags.vds_id FROM  vds_with_tags   WHERE  
vds_with_tags.tag_name IN ('tag1','all') ))  ORDER BY vds_name ASC ) as T1 
OFFSET (1 -1) LIMIT 0");
         // Before: 22ms
         // "SELECT * FROM (SELECT * FROM vds WHERE ( vds_id IN (SELECT 
vds_with_tags.vds_id FROM  vds_with_tags   LEFT OUTER JOIN vms_with_tags ON 
vds_with_tags.vds_id=vms_with_tags.run_on_vds    WHERE  vms_with_tags.vm_name 
LIKE 'vm1' ))  ORDER BY vds_name ASC ) as T1 OFFSET (1 -1) LIMIT 0"
         // Current: 11ms
@@ -180,7 +181,7 @@
         testValidSql("Vm: user.name = user1",
                 "SELECT * FROM ((SELECT distinct 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 
distinct 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");
+                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
distinct 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','all')  )))  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",
@@ -457,12 +458,19 @@
                 "SELECT * FROM ((SELECT distinct image_types_view.* FROM  
image_types_view  )  ORDER BY name ASC ) as T1 OFFSET (1 -1) LIMIT 0");
     }
 
+    @Test
+    public void testVmWithTags() {
+        testValidSql("VMs:tag=all",
+                "SELECT * FROM (SELECT * FROM vms WHERE ( vm_guid IN (SELECT 
distinct vms_with_tags.vm_guid FROM  vms_with_tags   WHERE  
vms_with_tags.tag_name IN ('tag1','all') ))  ORDER BY vm_name ASC ) as T1 
OFFSET (1 -1) LIMIT 0");
+    }
+
     private void testValidSql(String dynamicQuery, String exepctedSQLResult) {
         SyntaxChecker chkr = new SyntaxChecker(20);
         ISyntaxChecker curSyntaxChecker = 
SyntaxCheckerFactory.createBackendSyntaxChecker("foo");
         SyntaxContainer res = 
curSyntaxChecker.analyzeSyntaxState(dynamicQuery, true);
         Assert.assertTrue("Invalid syntax: " + dynamicQuery, res.getvalid());
         String query = chkr.generateQueryFromSyntaxContainer(res, true);
+        System.out.println(query);
         Assert.assertEquals(exepctedSQLResult, query);
     }
 }


-- 
To view, visit https://gerrit.ovirt.org/39069
To unsubscribe, visit https://gerrit.ovirt.org/settings

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