You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by cl...@apache.org on 2017/11/23 23:08:00 UTC

[2/4] jena git commit: Fixes issues with test cases and added remaining vars methods

Fixes issues with test cases and added remaining vars methods

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/58f3b540
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/58f3b540
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/58f3b540

Branch: refs/heads/master
Commit: 58f3b540d26a710e3a39df9a8684c33e7cbd115a
Parents: 22a2325
Author: Claude Warren <cl...@apache.org>
Authored: Thu Nov 23 20:20:41 2017 +0000
Committer: Claude Warren <cl...@apache.org>
Committed: Thu Nov 23 20:20:41 2017 +0000

----------------------------------------------------------------------
 .../jena/arq/querybuilder/AskBuilder.java       | 18 +++++
 .../jena/arq/querybuilder/ConstructBuilder.java | 19 +++++
 .../jena/arq/querybuilder/DescribeBuilder.java  | 19 ++++-
 .../jena/arq/querybuilder/SelectBuilder.java    | 18 +++++
 .../arq/querybuilder/clauses/WhereClause.java   | 32 ++++++++-
 .../jena/arq/querybuilder/WhereValidator.java   | 23 +++++-
 .../querybuilder/clauses/WhereClauseTest.java   | 74 ++++++++++++++++++--
 .../handlers/ValuesHandlerTest.java             | 50 +++++++++++--
 .../querybuilder/handlers/WhereHandlerTest.java | 74 ++++++++++++++++++--
 9 files changed, 305 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/58f3b540/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
index d7f45c6..75b2442 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
@@ -18,6 +18,7 @@
 package org.apache.jena.arq.querybuilder;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.jena.arq.querybuilder.clauses.DatasetClause;
@@ -31,6 +32,7 @@ import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.query.SortCondition;
 import org.apache.jena.sparql.core.TriplePath;
+import org.apache.jena.sparql.core.Var;
 import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.lang.sparql_11.ParseException;
 
@@ -153,6 +155,22 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder>
 	}
 	
 	@Override
+	public List<Var> getWhereValuesVars() {
+		return getWhereHandler().getValuesVars();
+	}
+
+	@Override
+	public Map<Var, List<Node>> getWhereValuesMap() {
+		return getWhereHandler().getValuesMap();
+	}
+
+	@Override
+	public AskBuilder clearWhereValues() {
+		getWhereHandler().clearValues();
+		return this;
+	}
+	
+	@Override
 	public AskBuilder addOptional(TriplePath t) {
 		getWhereHandler().addOptional(t);
 		return this;

http://git-wip-us.apache.org/repos/asf/jena/blob/58f3b540/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
index c07dda8..7b000bd 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
@@ -18,6 +18,7 @@
 package org.apache.jena.arq.querybuilder;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.jena.arq.querybuilder.clauses.ConstructClause;
@@ -30,6 +31,7 @@ import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.query.SortCondition;
 import org.apache.jena.sparql.core.TriplePath;
+import org.apache.jena.sparql.core.Var;
 import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.lang.sparql_11.ParseException;
 
@@ -244,6 +246,23 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder> imp
 		getWhereHandler().addValueRow(getPrologHandler().getPrefixes(), values);
 		return this;
 	}
+	
+	@Override
+	public List<Var> getWhereValuesVars() {
+		return getWhereHandler().getValuesVars();
+	}
+
+	@Override
+	public Map<Var, List<Node>> getWhereValuesMap() {
+		return getWhereHandler().getValuesMap();
+	}
+
+	@Override
+	public ConstructBuilder clearWhereValues() {
+		getWhereHandler().clearValues();
+		return this;
+	}
+	
 	@Override
 	public ConstructBuilder addOptional(TriplePath t) {
 		getWhereHandler().addOptional(t);

http://git-wip-us.apache.org/repos/asf/jena/blob/58f3b540/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/DescribeBuilder.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/DescribeBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/DescribeBuilder.java
index f832da3..9bf5f20 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/DescribeBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/DescribeBuilder.java
@@ -206,8 +206,7 @@ DatasetClause<DescribeBuilder>,
 		getWhereHandler().addValueVar(getPrologHandler().getPrefixes(), var, values);
 		return this;
 	}
-	
-	
+		
 	@Override
 	public <K extends Collection<?>> DescribeBuilder addWhereValueVars(Map<?,K> dataTable)
 	{
@@ -229,6 +228,22 @@ DatasetClause<DescribeBuilder>,
 	}
 
 	@Override
+	public List<Var> getWhereValuesVars() {
+		return getWhereHandler().getValuesVars();
+	}
+
+	@Override
+	public Map<Var, List<Node>> getWhereValuesMap() {
+		return getWhereHandler().getValuesMap();
+	}
+
+	@Override
+	public DescribeBuilder clearWhereValues() {
+		getWhereHandler().clearValues();
+		return this;
+	}
+	
+	@Override
 	public DescribeBuilder addOptional(Triple t) {
 		getWhereHandler().addOptional( new TriplePath( t ) );
 		return this;

http://git-wip-us.apache.org/repos/asf/jena/blob/58f3b540/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
index 9353bbc..2d6bb19 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
@@ -355,6 +355,22 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implement
 	}
 
 	@Override
+	public List<Var> getWhereValuesVars() {
+		return getWhereHandler().getValuesVars();
+	}
+
+	@Override
+	public Map<Var, List<Node>> getWhereValuesMap() {
+		return getWhereHandler().getValuesMap();
+	}
+
+	@Override
+	public SelectBuilder clearWhereValues() {
+		getWhereHandler().clearValues();
+		return this;
+	}
+	
+	@Override
 	public SelectBuilder addOptional(TriplePath t)
 	{
 		getWhereHandler().addOptional( t );
@@ -463,4 +479,6 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implement
 		getWhereHandler().addMinus( t );
 		return this;
 	}
+
+	
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/58f3b540/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
----------------------------------------------------------------------
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 dd2b3d4..9ee84f3 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
@@ -18,6 +18,7 @@
 package org.apache.jena.arq.querybuilder.clauses;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
@@ -26,6 +27,7 @@ import org.apache.jena.graph.FrontsTriple;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.sparql.core.TriplePath;
+import org.apache.jena.sparql.core.Var;
 import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.lang.sparql_11.ParseException;
 
@@ -128,8 +130,12 @@ public interface WhereClause<T extends AbstractQueryBuilder<T>> {
 	 * Add a data table to the value statement.
 	 * 
 	 * Each key in the map is used converted into a variable using the makeVar strategy.
-	 * The order in which variables 
-	 * are added to the values table is preserved.
+	 * The order in which variables are added to the values table is preserved.
+	 * 
+	 * Variables are added in the iteration order for the map.  It may be advisable to 
+	 * use a LinkedHashMap to preserver the insert order.
+	 * 
+	 * @see java.util.LinkedHashMap
 	 * 
 	 * Each item in the value collection is converted into a node using makeNode() strategy except that null values are converted 
 	 * to UNDEF.
@@ -180,6 +186,28 @@ public interface WhereClause<T extends AbstractQueryBuilder<T>> {
 	 */
 	public T addWhereValueRow(Collection<?> values);
 
+	/**
+	 * Get an unmodifiable list of vars from the where clause values in the order that they appear 
+	 * in the values table.
+	 * @return an unmodifiable list of vars.
+	 */
+	public List<Var> getWhereValuesVars();
+	
+	/**
+	 * Get an unmodifiable map of vars from the where clause values and their values.
+	 * 
+	 * Null values are considered as UNDEF values.
+	 * 
+	 * @return an unmodifiable map of vars and their values.
+	 */
+	public Map<Var,List<Node>> getWhereValuesMap();
+	
+	/**
+	 * Reset the values table in the where clause to the initial 
+	 * undefined state.  Used primarily to reset the builder values 
+	 * table to a known state. 
+	 */
+	public T clearWhereValues();
 
 	/**
 	 * Adds an optional triple to the where clause.

http://git-wip-us.apache.org/repos/asf/jena/blob/58f3b540/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/WhereValidator.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/WhereValidator.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/WhereValidator.java
index a45e05a..d224464 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/WhereValidator.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/WhereValidator.java
@@ -17,8 +17,11 @@
  */
 package org.apache.jena.arq.querybuilder;
 
+import static org.junit.Assert.assertTrue;
+
 import java.util.List;
 
+import org.apache.jena.sparql.resultset.ResultSetCompare;
 import org.apache.jena.sparql.syntax.Element;
 import org.apache.jena.sparql.syntax.ElementAssign;
 import org.apache.jena.sparql.syntax.ElementBind;
@@ -38,10 +41,24 @@ import org.apache.jena.sparql.syntax.ElementTriplesBlock;
 import org.apache.jena.sparql.syntax.ElementUnion;
 import org.apache.jena.sparql.syntax.ElementVisitor;
 import org.apache.jena.sparql.util.NodeIsomorphismMap;
+import org.apache.jena.sparql.util.NodeUtils;
 
 /**
  * Class to validate that an element exists in another element structure.
- *
+ * 
+ * The WhereValidator traverses the element tree that it is attempting to match.
+ * Once it finds a node that matches the target element an attempt is made to match
+ * all elements enclosed by the target.  If a match is found the matcher stops and
+ * the <code>matching</code> variable will be <code>true</code>.  if a match is not
+ * the matcher continues to scan for the next candidate until a match is found or all
+ * candidates are exhausted.
+ * 
+ * Usage:
+ * <code> <pre>
+ *  WhereValidator wv = new WhereValidator( target );
+ *  query.getQueryPattern().visit( wv );
+ *  assertTrue( wv.matching );
+ *  </pre></code>
  */
 public class WhereValidator implements ElementVisitor {
 	
@@ -49,6 +66,10 @@ public class WhereValidator implements ElementVisitor {
 	public boolean matching = false;
 	private NodeIsomorphismMap nim;
 	
+	/**
+	 * Constructor.
+	 * @param target The target element to locate.
+	 */
 	public WhereValidator( Element target )
 	{
 		this.target = target;

http://git-wip-us.apache.org/repos/asf/jena/blob/58f3b540/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
----------------------------------------------------------------------
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 81e8f2d..2a58223 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.List;
 import java.util.Map;
 
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
+import org.apache.jena.arq.querybuilder.AskBuilder;
 import org.apache.jena.arq.querybuilder.SelectBuilder;
 import org.apache.jena.arq.querybuilder.WhereValidator;
 import org.apache.jena.graph.FrontsTriple;
@@ -52,6 +53,8 @@ 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 org.junit.Test;
+
 import static org.junit.Assert.*;
 
 import org.xenei.junit.contract.Contract;
@@ -628,7 +631,6 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 
 		Var x = Var.alloc("x");
 		ElementData edat = new ElementData();
-		// FIXME should not be order dependent
 		edat.add( x );
 		edat.add( v );		
 		BindingHashMap binding = new BindingHashMap();
@@ -659,9 +661,7 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		
 		Query query = builder.build();
 
-		
 		ElementData edat = new ElementData();
-		// FIXME should not be order dependent
 		edat.add( v );
 		edat.add( x );
 		BindingHashMap binding = new BindingHashMap();
@@ -692,9 +692,7 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		
 		Query query = builder.build();
 
-		
 		ElementData edat = new ElementData();
-		// FIXME should not be order dependent
 		edat.add( v );
 		edat.add( x );
 		BindingHashMap binding = new BindingHashMap();
@@ -710,5 +708,71 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		query.getQueryPattern().visit( visitor );
 		assertTrue( visitor.matching );
 	}	
+	
+	@ContractTest
+	public void testSetVarsInWhereValues() throws ParseException {
+		Var v = Var.alloc("v");
+		Node value = NodeFactory.createLiteral(LiteralLabelFactory.createTypedLiteral(10));
+		Map<Var, Node> values = new HashMap<>();
+		values.put(v, value);
+
+		WhereClause<?> whereClause = getProducer().newInstance();
+		AbstractQueryBuilder<?> builder = whereClause.addWhereValueVar( "?x", "<one>", "?v");
+		
+		builder.setVar(v, value );
+		
+		Query query = builder.build();
+		
+		ElementData edat = new ElementData();
+		Var x = Var.alloc("x");
+		edat.add( x );
+	
+		BindingHashMap binding = new BindingHashMap();
+		binding.add( x, NodeFactory.createURI( "one" ));
+		edat.add( binding );
+		binding = new BindingHashMap();
+		binding.add( x, value);
+		edat.add( binding );
+
+		WhereValidator visitor = new WhereValidator( edat );
+		query.getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
+	}
+
+	@ContractTest
+	public void testDataQuery() {
+		// test that the getVars getMap and clear methods work.
+		Object o = "?x";
+		
+		WhereClause<?> whereClause = getProducer().newInstance();
+		whereClause = (WhereClause<?>) whereClause.addWhereValueVar(o);
+		whereClause = (WhereClause<?>) whereClause.addWhereValueVar("?y");
+		whereClause = (WhereClause<?>) whereClause.addWhereValueRow("foo", "bar");
+		whereClause = (WhereClause<?>) whereClause.addWhereValueRow("fu", null);
+
+		assertFalse(whereClause.getWhereValuesVars().isEmpty());
+		List<Var> lst = whereClause.getWhereValuesVars();
+		assertEquals(2, lst.size());
+		assertEquals(Var.alloc("x"), lst.get(0));
+		assertEquals(Var.alloc("y"), lst.get(1));
+
+		Map<Var, List<Node>> map = whereClause.getWhereValuesMap();
+		assertEquals(2, map.keySet().size());
+		List<Node> nodes = map.get(Var.alloc("x"));
+		assertEquals(2, nodes.size());
+		assertEquals(NodeFactory.createLiteral("foo"), nodes.get(0));
+		assertEquals(NodeFactory.createLiteral("fu"), nodes.get(1));
+
+		nodes = map.get(Var.alloc("y"));
+		assertEquals(2, nodes.size());
+		assertEquals(NodeFactory.createLiteral("bar"), nodes.get(0));
+		assertNull(nodes.get(1));
+
+		whereClause.clearWhereValues();
+
+		assertTrue(whereClause.getWhereValuesVars().isEmpty());
+		assertTrue(whereClause.getWhereValuesMap().isEmpty());
+
+	}
 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/58f3b540/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/ValuesHandlerTest.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/ValuesHandlerTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/ValuesHandlerTest.java
index 16ed66b..7f40915 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/ValuesHandlerTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/ValuesHandlerTest.java
@@ -23,9 +23,11 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
 import org.apache.jena.arq.querybuilder.WhereValidator;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.NodeFactory;
@@ -37,6 +39,7 @@ import org.apache.jena.sparql.engine.binding.BindingHashMap;
 import org.apache.jena.sparql.syntax.ElementData;
 import org.junit.Before;
 import org.junit.Test;
+import org.xenei.junit.contract.ContractTest;
 
 public class ValuesHandlerTest extends AbstractHandlerTest {
 
@@ -410,17 +413,10 @@ public class ValuesHandlerTest extends AbstractHandlerTest {
 		final Node three = NodeFactory.createLiteral( "three");
 		final Node four = NodeFactory.createLiteral( "four");
 		
-		Map<Object,List<?>> map = new HashMap();
-		
-		map.put( Var.alloc("v"), Arrays.asList( "<one>", "<two>"));
-		map.put( "?x", Arrays.asList( "three", "four"));
-		
 		handler.addValueVar( v, Arrays.asList( one, two ));
 		handler.addValueVar( x, Arrays.asList( three, four ));
 			
 		ElementData edat = new ElementData();
-		// FIXME should not be order dependent
-		
 		edat.add( v );
 		edat.add( x );
 		BindingHashMap binding = new BindingHashMap();
@@ -453,4 +449,44 @@ public class ValuesHandlerTest extends AbstractHandlerTest {
 		handler.addValueVar( Var.alloc("v"), Arrays.asList( Node.ANY));
 		assertFalse( handler.isEmpty());
 	}
+	
+	@Test
+	public void testDataQuery() {
+		// test that the getVars getMap and clear methods work.
+		Var x = Var.alloc("x");
+		Var y = Var.alloc("y");
+		Node foo = NodeFactory.createURI( "foo" );
+		Node bar = NodeFactory.createLiteral( "bar" );
+		
+		assertTrue(handler.getValuesVars().isEmpty());
+		
+		handler.addValueVar(x, Arrays.asList(foo));
+		handler.addValueVar(y, Arrays.asList(bar));
+	
+		assertFalse(handler.getValuesVars().isEmpty());
+		
+		
+		List<Var> lst = handler.getValuesVars();
+		assertEquals(2, lst.size());
+		assertEquals(x, lst.get(0));
+		assertEquals(y, lst.get(1));
+
+		Map<Var, List<Node>> map = handler.getValuesMap();
+		assertEquals(2, map.keySet().size());
+		List<Node> nodes = map.get(x);
+		assertEquals(1, nodes.size());
+		assertEquals(foo, nodes.get(0));
+
+		nodes = map.get(y);
+		assertEquals(1, nodes.size());
+		assertEquals(bar, nodes.get(0));
+
+		handler.clear();
+
+		assertTrue(handler.getValuesVars().isEmpty());
+		assertTrue(handler.getValuesMap().isEmpty());
+		assertTrue(handler.isEmpty());
+
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/58f3b540/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java
index 28f117b..f7d356d 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -650,7 +651,7 @@ public class WhereHandlerTest extends AbstractHandlerTest {
 	@Test
 	public void testAddValueVars() {
 		final Var v = Var.alloc("v");
-		Map<Object,List<?>> map = new HashMap();
+		Map<Object,List<?>> map = new LinkedHashMap<Object,List<?>>();
 		
 		map.put( Var.alloc("v"), Arrays.asList( "<one>", "<two>"));
 		map.put( "?x", Arrays.asList( "three", "four"));
@@ -660,9 +661,9 @@ public class WhereHandlerTest extends AbstractHandlerTest {
 
 		Var x = Var.alloc("x");
 		ElementData edat = new ElementData();
-		// FIXME should not be order dependent
+		
+		edat.add( v );
 		edat.add( x );
-		edat.add( v );		
 		BindingHashMap binding = new BindingHashMap();
 		binding.add( v, NodeFactory.createURI( "one" ));
 		binding.add( x, NodeFactory.createLiteral("three"));
@@ -690,7 +691,6 @@ public class WhereHandlerTest extends AbstractHandlerTest {
 		handler.build();
 		
 		ElementData edat = new ElementData();
-		// FIXME should not be order dependent
 		edat.add( v );
 		edat.add( x );
 		BindingHashMap binding = new BindingHashMap();
@@ -719,7 +719,6 @@ public class WhereHandlerTest extends AbstractHandlerTest {
 		handler.build();
 		
 		ElementData edat = new ElementData();
-		// FIXME should not be order dependent
 		edat.add( v );
 		edat.add( x );
 	
@@ -789,4 +788,69 @@ public class WhereHandlerTest extends AbstractHandlerTest {
 		assertTrue( map.isEmpty());	
 	}
 
+
+	@Test
+	public void testSetVarsInWhereValues() throws ParseException {
+		Var v = Var.alloc("v");
+		Node value = NodeFactory.createLiteral(LiteralLabelFactory.createTypedLiteral(10));
+		Map<Var, Node> values = new HashMap<>();
+		values.put(v, value);
+
+		handler.addValueVar( query.getPrefixMapping(), "?x", "<one>", "?v");
+		handler.setVars(values);
+		handler.build();
+		
+		ElementData edat = new ElementData();
+		Var x = Var.alloc("x");
+		edat.add( x );
+	
+		BindingHashMap binding = new BindingHashMap();
+		binding.add( x, NodeFactory.createURI( "one" ));
+		edat.add( binding );
+		binding = new BindingHashMap();
+		binding.add( x, value);
+		edat.add( binding );
+
+		WhereValidator visitor = new WhereValidator( edat );
+		query.getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
+	}
+	
+	@Test
+	public void testWhereDataQuery() {
+		// test that the getVars getMap and clear methods work.
+		Var x = Var.alloc("x");
+		Var y = Var.alloc("y");
+		Node foo = NodeFactory.createURI( "foo" );
+		Node bar = NodeFactory.createLiteral( "bar" );
+		
+		assertTrue(handler.getValuesVars().isEmpty());
+		
+		handler.addValueVar(query.getPrefixMapping(), x, foo);
+		handler.addValueVar(query.getPrefixMapping(), y, bar);
+	
+		assertFalse(handler.getValuesVars().isEmpty());
+		
+		
+		List<Var> lst = handler.getValuesVars();
+		assertEquals(2, lst.size());
+		assertEquals(x, lst.get(0));
+		assertEquals(y, lst.get(1));
+
+		Map<Var, List<Node>> map = handler.getValuesMap();
+		assertEquals(2, map.keySet().size());
+		List<Node> nodes = map.get(x);
+		assertEquals(1, nodes.size());
+		assertEquals(foo, nodes.get(0));
+
+		nodes = map.get(y);
+		assertEquals(1, nodes.size());
+		assertEquals(bar, nodes.get(0));
+
+		handler.clearValues();
+
+		assertTrue(handler.getValuesVars().isEmpty());
+		assertTrue(handler.getValuesMap().isEmpty());
+
+	}
 }