You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by "Claude Warren (Jira)" <ji...@apache.org> on 2022/01/04 21:23:00 UTC

[jira] [Commented] (JENA-2242) Include VALUES clause in string when stringifying a WhereBuilder

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

Claude Warren commented on JENA-2242:
-------------------------------------

Proposed fix in https://github.com/apache/jena/pull/1158

> Include VALUES clause in string when stringifying a WhereBuilder
> ----------------------------------------------------------------
>
>                 Key: JENA-2242
>                 URL: https://issues.apache.org/jira/browse/JENA-2242
>             Project: Apache Jena
>          Issue Type: Improvement
>          Components: QueryBuilder
>    Affects Versions: Jena 4.3.2
>            Reporter: Kelvin Qian
>            Assignee: Claude Warren
>            Priority: Major
>
> Currently when stringifying a WhereBuilder (e.g. for debugging), any VALUES clause is not included in the output of .toString:
> {code:java}
> import java.util.ArrayList;
> import java.util.HashMap;
> import org.apache.jena.graph.Node;
> import org.apache.jena.grpah.Triple;
> import org.apache.jena.arq.querybuilder.Converters;
> import org.apache.jena.arq.querybuilder.WhereBuilder;
>  
> // Node creation
> Node svarNode = Converters.checkVar(NodeFactory.createVariable("s"));
> Node pvarNode = Converters.checkVar(NodeFactory.createVariable("p"));
> Node ovarNode = Converters.checkVar(NodeFactory.createVariable("o"));
> // Values map creation
> ArrayList<Node> subjColl = new ArrayList<>();
> subjColl.add(NodeFactory.createURI("http://example.org#subject"));
> HashMap<Node, ArrayList<Node>> valMap = new HashMap<>();
> valMap.put(svarNode, subjColl);
> // WhereBuilder creation
> WhereBuilder wb = new WhereBuilder();
> wb.addWhere(svarNode, pvarNode, ovarNode);
> wb.addWhereValueVars(valMap);
> wb.toString();
> // WHERE { ?s ?p ?o }
> {code}
> It is only when you add the WhereBuilder to another builder, e.g. a ConstructBuilder, when you are able to visualize the VALUES clause:
> {code:java}
> import org.apache.jena.arq.querybuilder.ConstructBuilder;
> ConstructBuilder cb = new ConstructBuilder();
> cb.addConstruct(new Triple(svarNode, pvarNode, ovarNode));
> cb.addWhere(wb);
> cb.toString();
> // CONSTRUCT 
> //   { 
> //     ?s ?p ?o .
> //   }
> // WHERE
> //   { ?s  ?p  ?o
> //     VALUES ( ?s ) { ( <http://example.org#subject> ) }
> //   }
> {code}
> Ideally we would like to visualize the VALUES clause by including it in the result string while stringifying the WhereBuilder, not just with the ConstructBuilder. This would improve the development experience by allowing us to focus on debugging the WHERE clause, without having to consider the containing query or update.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)