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 <[email protected]>
Authored: Sat May 16 21:56:53 2015 +0100
Committer: Claude Warren <[email protected]>
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"));

Reply via email to