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
