[ 
https://issues.apache.org/jira/browse/JENA-780?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14615118#comment-14615118
 ] 

ASF subversion and git services commented on JENA-780:
------------------------------------------------------

Commit d6f516decedd40e0339012279a4e392239865cf0 in jena's branch 
refs/heads/eliminate-assignments from [~rvesse]
[ https://git-wip-us.apache.org/repos/asf?p=jena.git;h=d6f516d ]

More bug fixes to inlining assignments in extend (JENA-780)

This commit adds additional test cases and some bug fixes that cover the
case where there are single use assignments that can be inlined where
the value is only used in the extend we are currently processing which
requires some extra work to make sure we eliminate unused assignments
after we inline them.  It also ensures that subsequent assignments which
can also have assignments inlined into them refer to the correct
expression taking into account previous inlinings that have happened.


> Single use extend expressions could be substituted directly for their later 
> usage
> ---------------------------------------------------------------------------------
>
>                 Key: JENA-780
>                 URL: https://issues.apache.org/jira/browse/JENA-780
>             Project: Apache Jena
>          Issue Type: Improvement
>          Components: ARQ, Optimizer
>    Affects Versions: Jena 2.12.0
>            Reporter: Rob Vesse
>            Assignee: Rob Vesse
>            Priority: Minor
>         Attachments: JENA-780.patch
>
>
> This RFE is a follow on from JENA-779, the query with a sub-optimal plan 
> there uses a {{BIND}} to create a value which is then only used once in a 
> subsequent filter.
> Actually that query uses it twice but I think the general approach I am 
> trying to describe in this RFE bears consideration.  In this case it seems 
> like it would be possible to substitute the extend expression for the bound 
> variable in the filter expression.
> Simplified variant of original query such that the bound value is only used 
> once:
> {noformat}
> SELECT DISTINCT ?uri
> {
>   { ?uri ?p ?o }
>   UNION
>   {
>     ?sub ?p ?uri
>     FILTER(isIRI(?uri))
>   }
>   BIND(str(?uri) as ?s)
>   FILTER(STRSTARTS(?s, "http://";))
> }
> {noformat}
> Rewritten query:
> {noformat}
> SELECT DISTINCT ?domainName
> {
>   { ?uri ?p ?o }
>   UNION
>   {
>     ?sub ?p ?uri
>     FILTER(isIRI(?uri))
>   }
>   FILTER(STRSTARTS(str(?uri), "http://";))
> }
> {noformat}
> Which avoids an extend expression whose value is only used once and will 
> ultimately be thrown away.
> From a {{Transform}} standpoint this is likely awkward to implement in a pure 
> transform since it requires knowledge about the query structure above the 
> {{FILTER}} i.e. whether the bound variable is used elsewhere and so would 
> need to use before and after visitors to track that additional state but I 
> think this is a feasible optimisation.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to