Skip to content

BI-13 query variant fails.  #4

Description

@glennga

The following variant of BI-13 raises a compilation error (disabling prefer-indexnl option prevents this error, the indexnl hints can stay):

SET `graphix.semantics.pattern` "edge-isomorphism";                                                
SET `graphix.evaluation.prefer-indexnl` "true";                                                    
                                                                                                   
LET                                                                                                
    zombies = (                                                                                    
        FROM                                                                                       
            GRAPH SNB.Native.SNBGraph                                                              
                (country:Country)<-[:IS_PART_OF]-(:City)<-[:IS_LOCATED_IN]-(zombie:Person)         
            LEFT MATCH                                                                             
                (zombie)<-[:HAS_CREATOR]-(message:Message)                                         
        WHERE                                                                                      
            zombie.creationDate < DATETIME("2012-11-06T00:00:00") AND                              
            country.name = "China" AND                                                             
            ( message IS UNKNOWN OR zombie.creationDate < DATETIME("2012-11-06T00:00:00") )        
        GROUP BY                                                                                   
            zombie.id           AS zombieId,                                                       
            zombie.creationDate AS zombieCreationDate                                              
        LET                                                                                        
            yearDiff  = GET_YEAR(DATETIME("2012-11-06T00:00:00")) - GET_YEAR(zombieCreationDate),  
            monthDiff = GET_MONTH(DATETIME("2012-11-06T00:00:00")) - GET_MONTH(zombieCreationDate),
            months    = 12 * yearDiff + monthDiff + 1                                              
        HAVING                                                                                     
            ( COUNT(message.id) / months ) < 1                                                     
        SELECT VALUE                                                                               
            zombieId                                                                               
    )                                                                                              
FROM                                                                                               
    zombies z,                                                                                     
    GRAPH SNB.Native.SNBGraph                                                                      
        (zombie:Person)                                                                            
LET                                                                                                
    zombieLikeCount = (                                                                            
        FROM                                                                                       
            GRAPH SNB.Native.SNBGraph                                                              
                (zombie)<-[:HAS_CREATOR]-(:Message)<-[:LIKES]-(likerZombie:Person),                
            zombies lz                                                                             
        WHERE                                                                                      
            likerZombie.id /*+indexnl*/ = lz AND                                                   
            likerZombie.creationDate < DATETIME("2012-11-06T00:00:00")                             
        SELECT VALUE                                                                               
            COUNT (DISTINCT likerZombie.id)                                                        
    )[0],                                                                                          
    totalLikeCount  = (                                                                            
        FROM                                                                                       
            GRAPH SNB.Native.SNBGraph                                                              
                (zombie)<-[:HAS_CREATOR]-(:Message)<-[:LIKES]-(likerPerson:Person)                 
        WHERE                                                                                      
            likerPerson.creationDate < DATETIME("2012-11-06T00:00:00")                             
        SELECT VALUE                                                                               
            COUNT(DISTINCT likerPerson.id)                                                         
    )[0],                                                                                          
    zombieScore = CASE                                                                             
        WHEN totalLikeCount = 0                                                                    
        THEN 0.0                                                                                   
        ELSE zombieLikeCount / totalLikeCount                                                      
    END                                                                                            
WHERE                                                                                              
    z /*+indexnl*/ = zombie.id                                                                     
SELECT                                                                                             
    zombie.id       AS zombieId,                                                                   
    zombieLikeCount AS zombieLikeCount,                                                            
    totalLikeCount  AS totalLikeCount,                                                             
    zombieScore     AS zombieScore                                                                 
ORDER BY                                                                                           
    zombieScore DESC,                                                                              
    zombieId ASC                                                                                   
LIMIT                                                                                              
    100;                                                                                           

With the following compilation error (index out-of-bounds error):

java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 0
        at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[?:?]
        at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) ~[?:?]
        at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) ~[?:?]
        at java.util.Objects.checkIndex(Objects.java:372) ~[?:?]
        at java.util.ArrayList.get(ArrayList.java:459) ~[?:?]
        at org.apache.asterix.optimizer.rules.am.AccessMethodUtils.createFinalIndexOnlySearchPlan(AccessMethodUtils.java:1609) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.AccessMethodUtils.createRestOfIndexSearchPlan(AccessMethodUtils.java:1830) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.BTreeAccessMethod.createBTreeIndexSearchPlan(BTreeAccessMethod.java:695) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.BTreeAccessMethod.createIndexSearchPlan(BTreeAccessMethod.java:332) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.BTreeAccessMethod.applyJoinPlanTransformation(BTreeAccessMethod.java:300) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:455) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.checkAndApplyJoinTransformation(IntroduceJoinAccessMethodRule.java:270) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule.rewritePre(IntroduceJoinAccessMethodRule.java:143) ~[asterix-algebra-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController.rewriteOperatorRef(AbstractRuleController.java:79) ~[algebricks-core-0.3.9-SNAPSHOT.jar:0.3.9-SNAPSHOT]
        at org.apache.hyracks.algebricks.compiler.rewriter.rulecontrollers.SequentialFixpointRuleController.rewriteWithRuleCollection(SequentialFixpointRuleController.java:52) ~[algebricks-compiler-0.3.9-SNAPSHOT.jar:0.3.9-SNAPSHOT]
        at org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.runOptimizationSets(HeuristicOptimizer.java:92) ~[algebricks-core-0.3.9-SNAPSHOT.jar:0.3.9-SNAPSHOT]
        at org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.runLogicalOptimizationSets(HeuristicOptimizer.java:83) ~[algebricks-core-0.3.9-SNAPSHOT.jar:0.3.9-SNAPSHOT]
        at org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.optimize(HeuristicOptimizer.java:63) ~[algebricks-core-0.3.9-SNAPSHOT.jar:0.3.9-SNAPSHOT]
        at org.apache.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder$CompilerImpl.optimize(HeuristicCompilerFactoryBuilder.java:163) ~[algebricks-compiler-0.3.9-SNAPSHOT.jar:0.3.9-SNAPSHOT]
        at org.apache.asterix.api.common.APIFramework.compileQuery(APIFramework.java:268) ~[asterix-app-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.app.translator.QueryTranslator.rewriteCompileQuery(QueryTranslator.java:3733) ~[asterix-app-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]
        at org.apache.asterix.app.translator.QueryTranslator.lambda$handleQuery$2(QueryTranslator.java:4646) ~[asterix-app-0.9.9-SNAPSHOT.jar:0.9.9-SNAPSHOT]

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions