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
