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 2015/05/16 22:59:51 UTC

jena git commit: Fixes for JENA-946

Repository: jena
Updated Branches:
  refs/heads/master 8d53fedc0 -> 25b365221


Fixes for JENA-946


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

Branch: refs/heads/master
Commit: 25b365221aab0aafbdf32b248934e4ff152eec4b
Parents: 8d53fed
Author: Claude Warren <cl...@apache.org>
Authored: Sat May 16 21:56:53 2015 +0100
Committer: Claude Warren <cl...@apache.org>
Committed: Sat May 16 21:56:53 2015 +0100

----------------------------------------------------------------------
 .../jena/arq/querybuilder/SelectBuilder.java    | 21 +++++++++++
 .../arq/querybuilder/clauses/SelectClause.java  | 33 +++++++++++++++++
 .../querybuilder/handlers/SelectHandler.java    | 39 +++++++++++++++++++-
 .../querybuilder/clauses/SelectClauseTest.java  | 29 +++++++++++++++
 .../handlers/SelectHandlerTest.java             | 25 +++++++++++++
 5 files changed, 146 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/25b36522/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 b51328b..7829aca 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
@@ -17,6 +17,7 @@
  */
 package org.apache.jena.arq.querybuilder;
 
+import java.io.ByteArrayInputStream;
 import java.util.Collection;
 import java.util.List;
 
@@ -32,8 +33,12 @@ import org.apache.jena.graph.FrontsNode ;
 import org.apache.jena.graph.FrontsTriple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
+import org.apache.jena.sparql.core.Prologue;
 import org.apache.jena.sparql.core.Var ;
+import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.lang.sparql_11.ParseException ;
+import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11;
+import org.apache.jena.sparql.syntax.ElementFilter;
 
 /**
  * Build a select query.
@@ -101,6 +106,22 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
 		return this;
 	}
 
+	/**
+	 * Add an expression string as a filter.
+	 * @param expression The expression string to add.
+	 * @throws ParseException If the expression can not be parsed.
+	 */
+	public SelectBuilder addVar(String expression, Object var) throws ParseException {
+		selectHandler.addVar( expression, makeVar(var) );
+		return this;
+	}
+
+	@Override
+	public SelectBuilder addVar(Expr expr, Object var) {
+		selectHandler.addVar(expr, makeVar(var));
+		return this;
+	}
+	
 	@Override
 	public List<Var> getVars() {
 		return selectHandler.getVars();

http://git-wip-us.apache.org/repos/asf/jena/blob/25b36522/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java
index fba28b6..2ada741 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java
@@ -22,6 +22,8 @@ import java.util.List;
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
 import org.apache.jena.arq.querybuilder.handlers.SelectHandler;
 import org.apache.jena.sparql.core.Var ;
+import org.apache.jena.sparql.expr.Expr;
+import org.apache.jena.sparql.lang.sparql_11.ParseException;
 
 /**
  * Interface that defines the SelectClause as per
@@ -70,8 +72,39 @@ public interface SelectClause<T extends AbstractQueryBuilder<T>> {
 	 * @return The builder for chaining.
 	 */
 	public T addVar(Object var);
+	
+	/**
+	 * Add an expression as variable to the select statement.
+	 * 
+	 * creates an '(Expression as Var)' to the select statement.
+	 * 
+	 * A variable may only be added once. Attempting to add the same variable
+	 * multiple times will be silently ignored.
+	 * 
+	 * @param expr The expression to be added
+	 * @param var
+	 *            The variable to add.
+	 * @return The builder for chaining.
+	 */
+	public T addVar(Expr expr, Object var);
 
 	/**
+	 * Add an expression as variable to the select statement.
+	 * 
+	 * creates an '(Expression as Var)' to the select statement.
+	 * 
+	 * A variable may only be added once. Attempting to add the same variable
+	 * multiple times will be silently ignored.
+	 * 
+	 * @param expr The expression to be added
+	 * @param var
+	 *            The variable to add.
+	 * @return The builder for chaining.
+	 * @throws ParseException 
+	 */
+	public T addVar(String expr, Object var) throws ParseException;
+	
+	/**
 	 * @return A list of all the variables that have been added.
 	 */
 	public List<Var> getVars();

http://git-wip-us.apache.org/repos/asf/jena/blob/25b36522/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
index 7dba795..37726d8 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
@@ -17,14 +17,19 @@
  */
 package org.apache.jena.arq.querybuilder.handlers;
 
+import java.io.ByteArrayInputStream;
 import java.lang.reflect.Field;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.jena.graph.Node ;
 import org.apache.jena.query.Query ;
+import org.apache.jena.sparql.core.Prologue;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.core.VarExprList ;
+import org.apache.jena.sparql.expr.Expr;
+import org.apache.jena.sparql.lang.sparql_11.ParseException;
+import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11;
 
 /**
  * A Select clause handler.
@@ -73,7 +78,7 @@ public class SelectHandler implements Handler {
 
 	/**
 	 * Add a variable to the select.
-	 * If the variable is the variables are set to star.
+	 * If the variable is <code>null</code> the variables are set to star.
 	 * @param var The variable to add.
 	 */
 	public void addVar(Var var) {
@@ -85,6 +90,38 @@ public class SelectHandler implements Handler {
 		}
 	}
 
+	/** Add an Expression as variable to the select.
+	 * If the variable is the variables are set to star.
+	 * @param expression The expression as a string.
+	 * @param var The variable to add.
+	 * @throws ParseException 
+	 */
+	public void addVar(String expression, Var var) throws ParseException {
+		SPARQLParser11 parser = new SPARQLParser11(new ByteArrayInputStream(
+				expression.getBytes()));
+		Prologue prologue = new Prologue( query.getPrefixMapping() );
+		parser.setPrologue(prologue);
+		addVar( parser.Expression(), var );
+	}
+	
+	/**
+	 * Add an Expression as variable to the select.
+	 * @param expr The expresson to add.
+	 * @param var The variable to add.
+	 */
+	public void addVar(Expr expr, Var var) {
+		if (expr ==null)
+		{
+			throw new IllegalArgumentException( "expr may not be null");
+		}
+		if (var == null)
+		{
+			throw new IllegalArgumentException( "var may not be null");
+		}
+			query.setQueryResultStar(false);
+			query.addResultVar(var, expr);
+	}
+	
 	/**
 	 * Get the list of variables from the query.
 	 * @return The list of variables in the query.

http://git-wip-us.apache.org/repos/asf/jena/blob/25b36522/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SelectClauseTest.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SelectClauseTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SelectClauseTest.java
index c93e2d8..c3ab7f3 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SelectClauseTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SelectClauseTest.java
@@ -18,12 +18,15 @@
 package org.apache.jena.arq.querybuilder.clauses;
 
 import static org.junit.Assert.*;
+
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
 import org.apache.jena.arq.querybuilder.handlers.SelectHandler;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.query.Query ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.core.VarExprList ;
+import org.apache.jena.sparql.expr.E_Random;
+import org.apache.jena.sparql.expr.Expr;
 import org.junit.After;
 import org.xenei.junit.contract.Contract;
 import org.xenei.junit.contract.ContractTest;
@@ -153,6 +156,7 @@ public class SelectClauseTest<T extends SelectClause<?>> extends
 		AbstractQueryBuilder<?> builder = selectClause.addVar(NodeFactory
 				.createVariable("foo"));
 		String[] s = byLine(builder);
+		assertContainsRegex( SELECT+var("foo"), s );
 	}
 
 	@ContractTest
@@ -165,4 +169,29 @@ public class SelectClauseTest<T extends SelectClause<?>> extends
 		assertTrue(query.isQueryResultStar());
 	}
 
+	@ContractTest
+	public void testAddExprVar() throws Exception {
+		SelectClause<?> selectClause = getProducer().newInstance();
+		AbstractQueryBuilder<?> aqb = selectClause.addVar( new E_Random(), Var.alloc( "foo"));
+		
+		Query query = getQuery(aqb);
+		VarExprList expr = query.getProject();
+		assertEquals(1, expr.size());
+		Expr e = expr.getExpr( Var.alloc( "foo" ));
+		assertNotNull( "expression should not be null", e );
+		assertTrue( "Should be an E_Random", e instanceof E_Random);
+	}
+	
+	@ContractTest
+	public void testAddStringVar() throws Exception {
+		SelectClause<?> selectClause = getProducer().newInstance();
+		AbstractQueryBuilder<?> aqb = selectClause.addVar( "rand()", Var.alloc( "foo"));
+		
+		Query query = getQuery(aqb);
+		VarExprList expr = query.getProject();
+		assertEquals(1, expr.size());
+		Expr e = expr.getExpr( Var.alloc( "foo" ));
+		assertNotNull( "expression should not be null", e );
+		assertTrue( "Should be an E_Random", e instanceof E_Random);
+	}
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/25b36522/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SelectHandlerTest.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SelectHandlerTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SelectHandlerTest.java
index 09c3661..52c07da 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SelectHandlerTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SelectHandlerTest.java
@@ -18,9 +18,13 @@
 package org.apache.jena.arq.querybuilder.handlers;
 
 import static org.junit.Assert.*;
+
 import org.apache.jena.query.Query ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.core.VarExprList ;
+import org.apache.jena.sparql.expr.E_Random;
+import org.apache.jena.sparql.expr.Expr;
+import org.apache.jena.sparql.lang.sparql_11.ParseException;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -53,6 +57,27 @@ public class SelectHandlerTest extends AbstractHandlerTest {
 	}
 
 	@Test
+	public void testAddStringVar() throws ParseException {
+		Var v = Var.alloc("foo");
+		handler.addVar("rand()", v);
+		VarExprList expr = query.getProject();;
+		assertEquals(1, expr.size());
+		Expr e = expr.getExpr( Var.alloc( "foo" ));
+		assertNotNull( "expression should not be null", e );
+		assertTrue( "Should be an E_Random", e instanceof E_Random);
+	}
+	
+	public void testAddExprVar() throws ParseException {
+		Var v = Var.alloc("foo");
+		handler.addVar(new E_Random(), v);
+		VarExprList expr = query.getProject();;
+		assertEquals(1, expr.size());
+		Expr e = expr.getExpr( Var.alloc( "foo" ));
+		assertNotNull( "expression should not be null", e );
+		assertTrue( "Should be an E_Random", e instanceof E_Random);
+	}
+	
+	@Test
 	public void testAddVarAfterAsterisk() {
 		handler.addVar(null);
 		handler.addVar(Var.alloc("x"));


Re: jena git commit: Fixes for JENA-946

Posted by Andy Seaborne <an...@apache.org>.
On 16/05/15 21:59, claude@apache.org wrote:
> http://git-wip-us.apache.org/repos/asf/jena/blob/25b36522/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
> ----------------------------------------------------------------------
> diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
> index 7dba795..37726d8 100644
> --- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
> +++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
> @@ -17,14 +17,19 @@

> +	public void addVar(String expression, Var var) throws ParseException {
> +		SPARQLParser11 parser = new SPARQLParser11(new ByteArrayInputStream(
> +				expression.getBytes()));

The function "ExprUtils.parse" will hide the implementation details of 
parsing expressions.

Minor notes:

You don't have to convert to bytes - the parsers work from Readers and 
Stringreaders are the one case reader are OK.

String.getBytes() is nearly always wrong!  It uses the platform 
character set so on MSWindows it is not UTF-8.  Use 
StandardCharsets.UTF_8 with getBytes unless provable something else is 
needed..

	Andy