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;
     }

Reply via email to