Repository: asterixdb Updated Branches: refs/heads/master c1f39fe12 -> 7e08bd15a
[NO ISSUE][COMP] Fix infinite loop in CheckFilterExpressionTypeRule - user model changes: no - storage format changes: no - interface changes: no Details: When select condition is a UNION type, but not a BOOLEAN or ANY, this rule may fall into infinite loop. Change-Id: Ice4c9aa61658197a7140517d0a770886dfe040ec Reviewed-on: https://asterix-gerrit.ics.uci.edu/2578 Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: Dmitry Lychagin <dmitry.lycha...@couchbase.com> Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/7e08bd15 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/7e08bd15 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/7e08bd15 Branch: refs/heads/master Commit: 7e08bd15a86e8d679e756d01f73ad1a2d11995d7 Parents: c1f39fe Author: Xikui Wang <xkk...@gmail.com> Authored: Mon Apr 9 17:46:23 2018 -0700 Committer: Xikui Wang <xkk...@gmail.com> Committed: Thu Apr 12 10:48:33 2018 -0700 ---------------------------------------------------------------------- .../asterix/optimizer/rules/CheckFilterExpressionTypeRule.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7e08bd15/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java index ab359bf..444e5bc 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java @@ -75,11 +75,13 @@ public class CheckFilterExpressionTypeRule implements IAlgebraicRewriteRule { * @return true if it is; false otherwise. */ private boolean isPossibleBoolean(IAType type) { - while (NonTaggedFormatUtil.isOptional(type)) { - IAType actualType = ((AUnionType) type).getActualType(); + IAType checkingType = type; + while (NonTaggedFormatUtil.isOptional(checkingType)) { + IAType actualType = ((AUnionType) checkingType).getActualType(); if (actualType.getTypeTag() == ATypeTag.BOOLEAN || actualType.getTypeTag() == ATypeTag.ANY) { return true; } + checkingType = actualType; } return false; }