History | Log In     View a printable version of the current page. Get help!  
Issue Details [XML]

Key: SES-646
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Critical Critical
Assignee: Arjohn Kampman
Reporter: Arjohn Kampman
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Sesame

IllegalArgumentException in DisjunctiveConstraintOptimizer

Created: 08/Dec/08 09:25 PM   Updated: 17/Dec/08 02:05 PM
Component/s: RDBMS Sail, Memory Sail, Native Sail
Affects Version/s: 2.2, 2.2.1, 2.2.2
Fix Version/s: 2.2.3

Issue Links:
Related
 
This issue is related to:
SES-651 DisjunctiveConstraintOptimizer no lon... Major Resolved


 Description   
Evaluating the following query:

SELECT *
FROM {A} B {C}; D {E}
WHERE
  (B = <foo:1> OR B = <foo:2>)
AND
  (D = <foo:3> OR D = <foo:4>)

Results in an IllegalArgumentException being thrown in the DisjunctiveConstraintOptimizer:

Exception in thread "main" java.lang.IllegalArgumentException: Node is not a child node: Filter
   Or
      SameTerm
         Var (name=D)
         ValueConstant (value=foo:3)
      SameTerm
         Var (name=D)
         ValueConstant (value=foo:4)
   Union
      Filter
         SameTerm
            Var (name=B)
            ValueConstant (value=foo:1)
         Join
            StatementPattern
               Var (name=A)
               Var (name=B)
               Var (name=C)
            StatementPattern
               Var (name=A)
               Var (name=D)
               Var (name=E)
      Filter
         SameTerm
            Var (name=B)
            ValueConstant (value=foo:2)
         Join
            StatementPattern
               Var (name=A)
               Var (name=B)
               Var (name=C)
            StatementPattern
               Var (name=A)
               Var (name=D)
               Var (name=E)

at org.openrdf.query.algebra.QueryModelNodeBase.replaceChildNode(QueryModelNodeBase.java:50)
at org.openrdf.query.algebra.UnaryTupleOperator.replaceChildNode(UnaryTupleOperator.java:85)
at org.openrdf.query.algebra.Projection.replaceChildNode(Projection.java:77)
at org.openrdf.query.algebra.QueryModelNodeBase.replaceWith(QueryModelNodeBase.java:64)
at org.openrdf.query.algebra.evaluation.impl.DisjunctiveConstraintOptimizer$OrSameTermOptimizer.meet(DisjunctiveConstraintOptimizer.java:47)
at org.openrdf.query.algebra.Or.visit(Or.java:31)
at org.openrdf.query.algebra.Filter.visitChildren(Filter.java:60)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meetNode(QueryModelVisitorBase.java:528)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meetUnaryTupleOperator(QueryModelVisitorBase.java:442)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meet(QueryModelVisitorBase.java:168)
at org.openrdf.query.algebra.Filter.visit(Filter.java:53)
at org.openrdf.query.algebra.UnaryTupleOperator.visitChildren(UnaryTupleOperator.java:75)
at org.openrdf.query.algebra.Filter.visitChildren(Filter.java:61)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meetNode(QueryModelVisitorBase.java:528)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meetUnaryTupleOperator(QueryModelVisitorBase.java:442)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meet(QueryModelVisitorBase.java:168)
at org.openrdf.query.algebra.Filter.visit(Filter.java:53)
at org.openrdf.query.algebra.UnaryTupleOperator.visitChildren(UnaryTupleOperator.java:75)
at org.openrdf.query.algebra.Projection.visitChildren(Projection.java:67)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meetNode(QueryModelVisitorBase.java:528)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meetUnaryTupleOperator(QueryModelVisitorBase.java:442)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meet(QueryModelVisitorBase.java:324)
at org.openrdf.query.algebra.Projection.visit(Projection.java:59)
at org.openrdf.query.algebra.UnaryTupleOperator.visitChildren(UnaryTupleOperator.java:75)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meetNode(QueryModelVisitorBase.java:528)
at org.openrdf.query.algebra.helpers.QueryModelVisitorBase.meet(QueryModelVisitorBase.java:342)
at org.openrdf.query.algebra.QueryRoot.visit(QueryRoot.java:35)
at org.openrdf.query.algebra.evaluation.impl.DisjunctiveConstraintOptimizer.optimize(DisjunctiveConstraintOptimizer.java:33)
at org.openrdf.query.algebra.evaluation.util.QueryOptimizerList.optimize(QueryOptimizerList.java:48)
at org.openrdf.sail.memory.MemoryStoreConnection.evaluateInternal(MemoryStoreConnection.java:139)
at org.openrdf.sail.helpers.SailConnectionBase.evaluate(SailConnectionBase.java:220)
at org.openrdf.repository.sail.SailTupleQuery.evaluate(SailTupleQuery.java:48)
at org.openrdf.console.Console.evaluateTupleQuery(Console.java:1400)
at org.openrdf.console.Console.evaluateQuery(Console.java:1289)
at org.openrdf.console.Console.executeCommand(Console.java:349)
at org.openrdf.console.Console.start(Console.java:290)
at org.openrdf.console.Console.main(Console.java:243)


 All   Comments   Change History      Sort Order:
Comment by Arjohn Kampman [08/Dec/08 10:39 PM]
The optimizer made changes to the parent node (Filter) of the node that was being processed (Or). When returning from the optimization process in one branch of the query tree, optimizing the second branch resulted in this error since this part of the query model had been modified considerably. The optimizer is now triggered by the parent node (Filter).

Comment by Arjohn Kampman [09/Dec/08 04:38 PM]
Priority raised to Critical, since this issue causes exceptions that lead to crashes if not catched.