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 2018/10/14 10:22:01 UTC

[5/6] jena git commit: part of fixes for JENA-1368

part of fixes for JENA-1368

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

Branch: refs/heads/master
Commit: e0a4fd37ec6293abeb2bacf3558bca7b9b9ed2a0
Parents: 140e1ef
Author: Claude Warren <cl...@xenei.com>
Authored: Sat Oct 13 16:49:45 2018 +0100
Committer: Claude Warren <cl...@xenei.com>
Committed: Sat Oct 13 16:49:45 2018 +0100

----------------------------------------------------------------------
 .../querybuilder/clauses/WhereClauseTest.java   | 242 +++++++++++++------
 1 file changed, 170 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/e0a4fd37/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 bbff034..d233ff5 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
@@ -38,9 +38,12 @@ import org.apache.jena.sparql.core.Var;
 import org.apache.jena.sparql.engine.binding.BindingHashMap;
 import org.apache.jena.sparql.expr.E_LessThan;
 import org.apache.jena.sparql.expr.E_Random;
+import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.expr.ExprVar;
 import org.apache.jena.sparql.expr.nodevalue.NodeValueInteger;
 import org.apache.jena.sparql.lang.sparql_11.ParseException;
+import org.apache.jena.sparql.path.P_Link;
+import org.apache.jena.sparql.path.P_Seq;
 import org.apache.jena.sparql.path.Path;
 import org.apache.jena.sparql.path.PathParser;
 import org.apache.jena.sparql.syntax.ElementBind;
@@ -89,9 +92,14 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		WhereClause<?> whereClause = getProducer().newInstance();
 		AbstractQueryBuilder<?> builder = whereClause.addWhere("<one>",
 				"<two>", "three");
-		assertContainsRegex(WHERE + OPEN_CURLY + uri("one") + SPACE
-				+ uri("two") + SPACE + quote("three") + presentStringType()
-				+ OPT_SPACE + CLOSE_CURLY, builder.buildString());
+		
+		ElementPathBlock epb = new ElementPathBlock();
+		Triple t = new Triple( NodeFactory.createURI("one"), NodeFactory.createURI("two"), NodeFactory.createLiteral("three") );
+		epb.addTriple( t );
+		
+		WhereValidator visitor = new WhereValidator( epb );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 	}
 
 	@ContractTest
@@ -99,10 +107,15 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		WhereClause<?> whereClause = getProducer().newInstance();
 		AbstractQueryBuilder<?> builder = whereClause.addOptional("<one>",
 				"<two>", "three");
-		assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
-				+ OPEN_CURLY + uri("one") + SPACE + uri("two") + SPACE
-				+ quote("three") + presentStringType() + OPT_SPACE
-				+ CLOSE_CURLY + CLOSE_CURLY, builder.buildString());
+		
+		ElementPathBlock epb = new ElementPathBlock();
+		ElementOptional optional = new ElementOptional(epb);
+		Triple t = new Triple( NodeFactory.createURI("one"), NodeFactory.createURI("two"), NodeFactory.createLiteral("three") );
+		epb.addTriple( t );
+		
+		WhereValidator visitor = new WhereValidator( optional );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 
 	}
 
@@ -111,11 +124,16 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		WhereClause<?> whereClause = getProducer().newInstance();
 		AbstractQueryBuilder<?> builder = whereClause.addOptional("<one>",
 				"<two>/<dos>", "three");
-		assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
-				+ OPEN_CURLY + uri("one") + SPACE + uri("two")+"/"+uri("dos") + SPACE
-				+ quote("three") + presentStringType() + OPT_SPACE
-				+ CLOSE_CURLY + CLOSE_CURLY, builder.buildString());
-
+		
+		Path path = new P_Seq( new P_Link( NodeFactory.createURI("two") ), new P_Link( NodeFactory.createURI("dos")));
+		ElementPathBlock epb = new ElementPathBlock();
+		ElementOptional optional = new ElementOptional(epb);
+		TriplePath tp = new TriplePath( NodeFactory.createURI("one"), path, NodeFactory.createLiteral("three") );
+		epb.addTriplePath( tp );
+		
+		WhereValidator visitor = new WhereValidator( optional );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 	}
 	
 	@ContractTest
@@ -124,10 +142,15 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		AbstractQueryBuilder<?> builder = whereClause.addOptional(
 				NodeFactory.createURI("one"), NodeFactory.createURI("two"),
 				NodeFactory.createURI("three"));
-		assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
-				+ OPEN_CURLY + uri("one") + SPACE + uri("two") + SPACE
-				+ uri("three") + OPT_SPACE + CLOSE_CURLY,
-				builder.buildString());
+		
+		ElementPathBlock epb = new ElementPathBlock();
+		ElementOptional optional = new ElementOptional(epb);
+		Triple t = new Triple( NodeFactory.createURI("one"), NodeFactory.createURI("two"), NodeFactory.createURI("three") );
+		epb.addTriple( t );
+		
+		WhereValidator visitor = new WhereValidator( optional );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 	}
 
 	@ContractTest
@@ -137,10 +160,14 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 				NodeFactory.createURI("one"), NodeFactory.createURI("two"),
 				NodeFactory.createURI("three"));
 
-		assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
-				+ OPEN_CURLY + uri("one") + SPACE + uri("two") + SPACE
-				+ uri("three") + OPT_SPACE + CLOSE_CURLY,
-				builder.buildString());
+		ElementPathBlock epb = new ElementPathBlock();
+		ElementOptional optional = new ElementOptional(epb);
+		Triple t = new Triple( NodeFactory.createURI("one"), NodeFactory.createURI("two"), NodeFactory.createURI("three") );
+		epb.addTriple( t );
+		
+		WhereValidator visitor = new WhereValidator( optional );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 	}
 	
 	@ContractTest
@@ -153,10 +180,14 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 				NodeFactory.createURI("one"), path,
 				NodeFactory.createURI("three")));
 
-		assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
-				+ OPEN_CURLY + uri("one") + SPACE + uri("urn:test:two")+"/"+uri("urn:test:dos") + SPACE
-				+ uri("three") + OPT_SPACE + CLOSE_CURLY,
-				builder.buildString());
+		ElementPathBlock epb = new ElementPathBlock();
+		ElementOptional optional = new ElementOptional(epb);
+		TriplePath tp = new TriplePath( NodeFactory.createURI("one"), path, NodeFactory.createURI("three") );
+		epb.addTriplePath( tp );
+		
+		WhereValidator visitor = new WhereValidator( optional );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 	}
 	
 	@ContractTest
@@ -168,11 +199,16 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		AbstractQueryBuilder<?> builder = whereClause.addOptional(
 				NodeFactory.createURI("one"), path,
 				NodeFactory.createURI("three"));
-
-		assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
-				+ OPEN_CURLY + uri("one") + SPACE + uri("urn:test:two")+"/"+uri("urn:test:dos") + SPACE
-				+ uri("three") + OPT_SPACE + CLOSE_CURLY,
-				builder.buildString());
+		
+		ElementPathBlock epb = new ElementPathBlock();
+		ElementOptional optional = new ElementOptional(epb);
+		TriplePath tp = new TriplePath( NodeFactory.createURI("one"), path, NodeFactory.createURI("three") );
+		epb.addTriplePath( tp );
+		
+		WhereValidator visitor = new WhereValidator( optional );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
+		
 	}
 
 	@ContractTest
@@ -282,14 +318,27 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		whereClause.getWhereHandler().addWhere( new TriplePath(Triple.ANY));
 		AbstractQueryBuilder<?> builder = whereClause.addUnion(sb);
 
-		String str = builder.buildString();
-		assertContainsRegex(PREFIX + "pfx:" + SPACE + uri("uri") + SPACE, str );
-		assertContainsRegex( WHERE + OPEN_CURLY + OPEN_CURLY+"ANY"+SPACE+"ANY"+SPACE+"ANY"+CLOSE_CURLY
-				+ SPACE+UNION + OPEN_CURLY + SELECT + var("x") + SPACE + WHERE
-				+ OPEN_CURLY + uri("one") + SPACE + uri("two") + SPACE
-				+ quote("three") + presentStringType() + OPT_SPACE
-				+ CLOSE_CURLY + CLOSE_CURLY, str);
+		ElementUnion union = new ElementUnion();
+		ElementPathBlock epb = new ElementPathBlock();
+		union.addElement(epb);		
+		epb.addTriple( Triple.ANY );
+
+		Query subQuery = new Query();
+		ElementSubQuery esq = new ElementSubQuery(subQuery);
+		union.addElement( esq );
+		epb = new ElementPathBlock();
+		subQuery.setQuerySelectType();
+		subQuery.addProjectVars( Arrays.asList("x") );
+		subQuery.setQueryPattern(epb);
+		Triple t = new Triple( NodeFactory.createURI("one"), NodeFactory.createURI("two"), NodeFactory.createLiteral("three") );
+		epb.addTriple( t );
+		
+		WhereValidator visitor = new WhereValidator( union );
+		Query result = builder.build();
+		result.getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 
+		assertEquals( "uri", result.getPrefixMapping().getNsPrefixURI("pfx") );
 	}
 
 	@ContractTest
@@ -395,19 +444,26 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 	public void testSetVarsInFilter() throws ParseException {
 		WhereClause<?> whereClause = getProducer().newInstance();
 		AbstractQueryBuilder<?> builder = whereClause.addFilter("?one < ?v");
-		assertContainsRegex(WHERE + OPEN_CURLY + "FILTER" + OPT_SPACE
-				+ OPEN_PAREN + var("one") + OPT_SPACE + LT + OPT_SPACE
-				+ var("v") + CLOSE_PAREN + CLOSE_CURLY, builder.buildString());
-
-		builder.setVar(Var.alloc("v"), NodeFactory
-				.createLiteral(LiteralLabelFactory.createTypedLiteral(10)));
-
-		assertContainsRegex(WHERE + OPEN_CURLY + "FILTER" + OPT_SPACE
-				+ OPEN_PAREN + var("one") + OPT_SPACE + LT + OPT_SPACE
-				+ quote("10") + "\\^\\^"
-				+ uri("http://www.w3.org/2001/XMLSchema#int") + CLOSE_PAREN
-				+ CLOSE_CURLY, builder.buildString());
+	
+		ExprVar one = new  ExprVar( NodeFactory.createVariable("one"));
+		ExprVar v = new ExprVar( NodeFactory.createVariable("v"));
+		Expr expr = new E_LessThan( one, v );
+		ElementFilter filter = new ElementFilter(expr);
+		
+		WhereValidator visitor = new WhereValidator( filter );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
+		
+		Node literal = NodeFactory
+				.createLiteral(LiteralLabelFactory.createTypedLiteral(10));
+		builder.setVar(Var.alloc("v"), literal);
 
+		NodeValueInteger lit = new NodeValueInteger(10);
+		expr = new E_LessThan( one, lit );
+		filter = new ElementFilter(expr);
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
+		
 	}
 
 	@ContractTest
@@ -416,16 +472,26 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		WhereClause<?> whereClause = getProducer().newInstance();
 		AbstractQueryBuilder<?> builder = whereClause.addOptional(new Triple(
 				NodeFactory.createURI("one"), NodeFactory.createURI("two"), v));
-		assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
-				+ OPEN_CURLY + uri("one") + SPACE + uri("two") + SPACE
-				+ var("v") + OPT_SPACE + CLOSE_CURLY + CLOSE_CURLY,
-				builder.buildString());
-
+		
+		ElementPathBlock epb = new ElementPathBlock();
+		ElementOptional optional = new ElementOptional(epb);
+		TriplePath tp = new TriplePath( NodeFactory.createURI("one"), new P_Link(NodeFactory.createURI("two")), v );
+		epb.addTriple( tp );
+		
+		WhereValidator visitor = new WhereValidator( optional );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
+		
 		builder.setVar(v, NodeFactory.createURI("three"));
-		assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
-				+ OPEN_CURLY + uri("one") + SPACE + uri("two") + SPACE
-				+ uri("three") + OPT_SPACE + CLOSE_CURLY + CLOSE_CURLY,
-				builder.buildString());
+		
+		epb = new ElementPathBlock();
+		optional = new ElementOptional(epb);
+		Triple t = new Triple( NodeFactory.createURI("one"), NodeFactory.createURI("two"), NodeFactory.createURI("three") );
+		epb.addTriple( t );
+		
+		visitor = new WhereValidator( optional );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 	}
 	
 	@ContractTest
@@ -466,16 +532,33 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		SelectBuilder sb = new SelectBuilder();
 		sb.addPrefix("pfx", "uri").addWhere("<one>", "<two>", v);
 		WhereClause<?> whereClause = getProducer().newInstance();
-		AbstractQueryBuilder<?> builder = whereClause.addSubQuery(sb);
-
-		assertContainsRegex(WHERE + OPEN_CURLY + uri("one") + SPACE
-				+ uri("two") + SPACE + var("v") + CLOSE_CURLY,
-				builder.buildString());
+		AbstractQueryBuilder<?> builder = whereClause.addSubQuery(sb);		
+		
+		Query subQuery = new Query();
+		ElementSubQuery esq = new ElementSubQuery(subQuery);		
+		ElementPathBlock epb = new ElementPathBlock();
+		subQuery.setQueryPattern(epb);
+		Triple t = new Triple( NodeFactory.createURI("one"), NodeFactory.createURI("two"), NodeFactory.createVariable("v") );
+		epb.addTriple( t );
+		
+		WhereValidator visitor = new WhereValidator( esq );
+		Query result = builder.build();
+		result.getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 
 		builder.setVar(v, NodeFactory.createURI("three"));
-		assertContainsRegex(WHERE + OPEN_CURLY + uri("one") + SPACE
-				+ uri("two") + SPACE + uri("three") + CLOSE_CURLY,
-				builder.buildString());
+		
+		subQuery = new Query();
+		esq = new ElementSubQuery(subQuery);		
+		epb = new ElementPathBlock();
+		subQuery.setQueryPattern(epb);
+		t = new Triple( NodeFactory.createURI("one"), NodeFactory.createURI("two"), NodeFactory.createURI("three") );
+		epb.addTriple( t );
+		
+		visitor = new WhereValidator( esq );
+		result = builder.build();
+		result.getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 	}
 	
 	@ContractTest
@@ -485,15 +568,30 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
 		sb.addPrefix("pfx", "uri").addWhere("<one>", "<two>", v);
 		WhereClause<?> whereClause = getProducer().newInstance();
 		AbstractQueryBuilder<?> builder = whereClause.addSubQuery(sb);
+		
+		Query subQuery = new Query();
+		ElementSubQuery esq = new ElementSubQuery(subQuery);		
+		ElementPathBlock epb = new ElementPathBlock();
+		subQuery.setQueryPattern(epb);
+		TriplePath tp = new TriplePath( NodeFactory.createURI("one"), new P_Link(NodeFactory.createURI("two")), NodeFactory.createVariable("v") );
+		epb.addTriple( tp );
 
-		assertContainsRegex(WHERE + OPEN_CURLY + uri("one") + SPACE
-				+ uri("two") + SPACE + var("v") + CLOSE_CURLY,
-				builder.buildString());
-
+		WhereValidator visitor = new WhereValidator( esq );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
+		
 		builder.setVar(v, NodeFactory.createURI("three"));
-		assertContainsRegex(WHERE + OPEN_CURLY + uri("one") + SPACE
-				+ uri("two") + SPACE + uri("three") + CLOSE_CURLY,
-				builder.buildString());
+		
+		subQuery = new Query();
+		esq = new ElementSubQuery(subQuery);		
+		epb = new ElementPathBlock();
+		subQuery.setQueryPattern(epb);
+		tp = new TriplePath( NodeFactory.createURI("one"), new P_Link(NodeFactory.createURI("two")), NodeFactory.createURI("three") );
+		epb.addTriple( tp );
+		
+		visitor = new WhereValidator( esq );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
 	}
 
 	@ContractTest