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());
+
+ }
}