Rob,

I ran into some issue with TransformFilterImplicitJoin

1/ As noted in the javadoc, the join condition can not be between literals for the FILTER(?x = ?y) variant.

While the javadoc for the control symbol says "This optimization is conservative - it does not take place if there is a potential risk of changing query semantics." there is no test that ?x or ?y come from a position that ensures one or other is not a literal.

This optimization is on by default. Is this a good idea?

2/ It eliminates dead code - except it also eliminates not-so-dead code in the case of EXISTS because the scoping is more complicated.

.. pattern involving ?z ...
FILTER EXIST{ ... FILTER(?x = ?z) }

where one comes from outside from the current row being filtered.

This is as much to do with the scoping engine; what caught me is the fact that "implicit join" was doing code elimination.

    Andy

Reply via email to