Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BI-13 query variant fails. #4

Open
glennga opened this issue Oct 10, 2023 · 0 comments
Open

BI-13 query variant fails. #4

glennga opened this issue Oct 10, 2023 · 0 comments
Labels
bug Something isn't working

Comments

@glennga
Copy link
Member

glennga commented Oct 10, 2023

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]
@glennga glennga added the bug Something isn't working label Oct 10, 2023
@glennga glennga moved this to Todo in Graphix Project Oct 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Status: Todo
Development

No branches or pull requests

1 participant