This is an automated email from the ASF dual-hosted git repository.

claude pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/master by this push:
     new 67c42fe  1803 fix (#656)
67c42fe is described below

commit 67c42fe6818ff4c3b669f3ccfd520355e6f54047
Author: Claude Warren <[email protected]>
AuthorDate: Fri Dec 20 10:58:11 2019 +0000

    1803 fix (#656)
    
    * Added addWhere( AbstractQueryBuilder )
    
    * simplified code
    
    * updated javadoc
    
    * removed unused imports
    
    * updated javadoc
---
 .../arq/querybuilder/AbstractQueryBuilder.java     | 44 ++++++++++++++++++++--
 .../jena/arq/querybuilder/clauses/WhereClause.java | 10 +++++
 .../updatebuilder/CollectionQuadHolder.java        |  3 +-
 .../arq/querybuilder/AbstractQueryBuilderTest.java |  4 ++
 .../arq/querybuilder/clauses/WhereClauseTest.java  | 20 +++++++++-
 5 files changed, 75 insertions(+), 6 deletions(-)

diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
index e4e79db..6a261b9 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
@@ -64,9 +64,13 @@ import org.apache.jena.sparql.util.NodeFactoryExtra ;
 public abstract class AbstractQueryBuilder<T extends AbstractQueryBuilder<T>>
 implements Cloneable, PrologClause<T>, ValuesClause<T> {
 
-       // the query this builder is building
+       /**
+        *  the query this builder is building
+        */
        protected Query query;
-       // a map of vars to nodes for replacement during build.
+       /**
+        * a map of vars to nodes for replacement during build.
+        */
        private final Map<Var, Node> values;
 
        /**
@@ -90,6 +94,12 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
                return makeNode( o, query.getPrefixMapping() );
        }
 
+       /**
+        * Make a node or path from the object using the query prefix mapping.
+        * @param o the object to make the node or path from.
+        * @return A node or path.
+        * @see #makeNodeOrPath(Object, PrefixMapping)
+        */
        private Object makeNodeOrPath(Object o)
        {
                return makeNodeOrPath(o, query.getPrefixMapping() );
@@ -346,10 +356,26 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
                return getHandlerBlock().getValueHandler();
        }
 
+       /**
+        * Gets the where handler used by this QueryBuilder.
+        * @return the where handler used by this QueryBuilder.
+        */
        public final WhereHandler getWhereHandler() {
                return getHandlerBlock().getWhereHandler();
        }
-
+       
+       /**
+        * Adds the contents of the whereClause to the where clause of this 
+        * builder.
+        * @param whereClause the where clause to add.
+        * @return this builder for chaining.
+        */
+       @SuppressWarnings("unchecked")
+       public final T addWhere( AbstractQueryBuilder<?> whereClause) {
+               getWhereHandler().addAll( whereClause.getWhereHandler());
+               return (T) this;
+       }
+       
        @Override
        public final ExprFactory getExprFactory() {
                return getHandlerBlock().getPrologHandler().getExprFactory();
@@ -435,6 +461,12 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
 
        // --- VALUES
 
+       /**
+        * Creates a collection of nodes from an iterator of Objects.
+        * @param iter the iterator of objects, may be null or empty.
+        * @param prefixMapping the PrefixMapping to use when nodes are created.
+        * @return a Collection of nodes or null if iter is null or empty.
+        */
        public static Collection<Node> makeValueNodes( Iterator<?> iter, 
PrefixMapping prefixMapping )
        {
                if (iter == null || !iter.hasNext())
@@ -457,6 +489,12 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
                return values;
        }
 
+       /**
+        * Creates a collection of nodes from an iterator of Objects.
+        * Uses the prefix mapping from the PrologHandler.
+        * @param iter the iterator of objects, may be null or empty.
+        * @return a Collection of nodes or null if iter is null or empty.
+        */
        public Collection<Node> makeValueNodes( Iterator<?> iter )
        {
                return makeValueNodes( iter, getPrologHandler().getPrefixes() );
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
index 38e5b62..9a90c04 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
 import org.apache.jena.arq.querybuilder.ExprFactory;
+import org.apache.jena.arq.querybuilder.SelectBuilder;
 import org.apache.jena.arq.querybuilder.handlers.WhereHandler;
 import org.apache.jena.graph.FrontsTriple;
 import org.apache.jena.graph.Node;
@@ -85,6 +86,15 @@ public interface WhereClause<T extends 
AbstractQueryBuilder<T>> {
        public T addWhere(Object s, Object p, Object o);
        
        /**
+        * Adds the elements from the whereClause to this where Clause.
+        * 
+        * @param whereClause
+        *            The whereClause to add to this statement.
+        * @return This Builder for chaining.
+        */
+       public T addWhere( AbstractQueryBuilder<?> whereClause);
+       
+       /**
         * Add a variable or variable and values to the value statement.
         * 
         * The first var (or first item in a collection) is converted to a 
variable using 
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
index e9116a5..10cc511 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
@@ -95,8 +95,7 @@ public class CollectionQuadHolder implements QuadHolder {
        if (n.isVariable())
        {
                Var v = Var.alloc(n);
-               Node n2 = values.get( n );
-               return n2==null?n:n2;
+               return values.getOrDefault(v, n);
        }
        return n;
     }
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
index 2af2e50..74ca337 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
@@ -108,6 +108,9 @@ public class AbstractQueryBuilderTest {
                assertEquals( "foo", n.getName());
                assertTrue( n instanceof Var );
 
+               n = builder.makeNode( "'text'@en");
+               assertEquals( "text", n.getLiteralLexicalForm());
+               assertEquals( "en", n.getLiteralLanguage());
        }
 
        @Test
@@ -168,4 +171,5 @@ public class AbstractQueryBuilderTest {
                assertTrue( result.contains(NodeFactory.createURI("one")));
 
        }
+       
 }
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
index d233ff5..fa01d61 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
@@ -24,6 +24,7 @@ import java.util.Map;
 
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
 import org.apache.jena.arq.querybuilder.SelectBuilder;
+import org.apache.jena.arq.querybuilder.WhereBuilder;
 import org.apache.jena.arq.querybuilder.WhereValidator;
 import org.apache.jena.graph.FrontsTriple;
 import org.apache.jena.graph.Node;
@@ -58,7 +59,6 @@ import org.apache.jena.sparql.syntax.ElementTriplesBlock;
 import org.apache.jena.sparql.syntax.ElementUnion;
 import org.apache.jena.vocabulary.RDF;
 import org.junit.After;
-
 import static org.junit.Assert.*;
 
 import org.xenei.junit.contract.Contract;
@@ -101,6 +101,24 @@ public class WhereClauseTest<T extends WhereClause<?>> 
extends
                builder.build().getQueryPattern().visit( visitor );
                assertTrue( visitor.matching );
        }
+       
+       @ContractTest
+       public void testAddWhereWhereClause() {
+               WhereBuilder whereBuilder = new WhereBuilder()
+                       .addWhere(new TriplePath(new 
Triple(NodeFactory.createURI("one"), NodeFactory.createURI("two"),
+                                               
NodeFactory.createURI("three"))));
+               
+               WhereClause<?> whereClause = getProducer().newInstance();
+               AbstractQueryBuilder<?> builder = whereClause.addWhere( 
whereBuilder );
+               
+               ElementPathBlock epb = new ElementPathBlock();
+               Triple t = new Triple( NodeFactory.createURI("one"), 
NodeFactory.createURI("two"), NodeFactory.createURI("three") );
+               epb.addTriple( t );
+               
+               WhereValidator visitor = new WhereValidator( epb );
+               builder.build().getQueryPattern().visit( visitor );
+               assertTrue( visitor.matching );
+       }
 
        @ContractTest
        public void testAddOptionalString() {

Reply via email to