Claude -- the example Claus gives is:

public static Query fastClone

*static*

It is an example of an alternative implementation, not a new method.

I presume it would replace "public Query cloneQuery()" (the clone worker - when the code was written, you could not alter the return of a method - java has changed).

    Andy

On 13/03/2020 23:12, Claude Warren wrote:
So the objective here is to create another Query cloning method that is
fast?  Why not just replace the original Query.clone() with the new
implementation?

On Fri, Mar 13, 2020 at 10:42 PM Andy Seaborne (Jira) <[email protected]>
wrote:


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

Andy Seaborne commented on JENA-1862:
-------------------------------------

Sounds like a good plan.

The print-parse form of {{clone()}} hasn't changed in many versions and
the comment in the code ("A little crude.") is certainly true!

Please do send a pull request.


Query.cloneQuery is slow
------------------------

                 Key: JENA-1862
                 URL: https://issues.apache.org/jira/browse/JENA-1862
             Project: Apache Jena
          Issue Type: Improvement
          Components: ARQ
    Affects Versions: Jena 3.14.0
            Reporter: Claus Stadler
            Priority: Major

This is a follow up to JENA-1861 which is about the thread safety of
Query objects. As sharing a Query object across threads may introduce race
conditions, the obvious workaround would be to just clone it. However, the
current implementation serializes the query to string and then re-parses it
which causes a very high overhead (for my use case it became the top entry
in the VisualVM profiler).
Proposal:
  * Extend ElementTransformCopyBase with a 'alwaysCopy' flag analogous to
ExprTransformCopy
  * Add a new constructor to
ExprTransformApplyElementTransform(ElementTransform transform, boolean
alwaysCopy) so that the alwayCopy flag of the underlying ExprTransformCopy
can be set to true
  * Implement clone using syntatic transforms as below
{code:java}
public static Query fastClone(Query query) {
     ElementTransform eltXform = new ElementTransformCopyBase2(true);
     ExprTransform exprXform = new
ExprTransformApplyElementTransform2(eltXform, true);
     Query result = QueryTransformOps.transform(query, eltXform,
exprXform);
     return result;
}
{code}
This approach 'works-for-me' and I can create a pull request for this,
but maybe there are more subtleties to the outlined approach that need to
be considered?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)



Reply via email to