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 2016/02/14 21:18:30 UTC
[3/4] jena git commit: Fixes for JENA-1144
Fixes for JENA-1144
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/59aa64bd
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/59aa64bd
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/59aa64bd
Branch: refs/heads/master
Commit: 59aa64bdcfc3eba5a4eacd0e8a27650fcea24e97
Parents: 00dad2d
Author: Claude Warren <cl...@apache.org>
Authored: Sun Feb 14 20:11:53 2016 +0000
Committer: Claude Warren <cl...@apache.org>
Committed: Sun Feb 14 20:11:53 2016 +0000
----------------------------------------------------------------------
.../apache/jena/sparql/lang/arq/ARQParser.java | 2 +-
.../querybuilder/handlers/SelectHandler.java | 62 +++++++++++++++++++-
.../handlers/SelectHandlerTest.java | 15 +++++
3 files changed, 77 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/59aa64bd/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
index cf11ab2..2272a52 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
@@ -13,7 +13,7 @@ import org.apache.jena.sparql.core.Quad ;
@SuppressWarnings("all")
public class ARQParser extends ARQParserBase implements ARQParserConstants {
- boolean allowAggregatesInExpressions = false ;
+ protected boolean allowAggregatesInExpressions = false ;
final public void QueryUnit() throws ParseException {
ByteOrderMark();
http://git-wip-us.apache.org/repos/asf/jena/blob/59aa64bd/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 1d389ec..b05a626 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,15 +17,24 @@
*/
package org.apache.jena.arq.querybuilder.handlers;
+import java.io.Reader;
+import java.io.StringReader;
+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.query.QueryBuildException;
+import org.apache.jena.query.QueryParseException;
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.arq.ARQParser;
+import org.apache.jena.sparql.lang.arq.ARQParserTokenManager;
+import org.apache.jena.sparql.lang.arq.ParseException;
+import org.apache.jena.sparql.lang.arq.Token;
+import org.apache.jena.sparql.lang.arq.TokenMgrError;
import org.apache.jena.sparql.util.ExprUtils ;
/**
@@ -93,9 +102,50 @@ public class SelectHandler implements Handler {
* @param var The variable to add.
*/
public void addVar(String expression, Var var) {
- addVar( ExprUtils.parse( query, expression, true ), var );
+ addVar( parseExpr( expression ), var );
}
+
+ private Expr parseExpr(String s)
+ {
+ try {
+ ExprParser parser = new ExprParser(query,s);
+ Expr expr = parser.Expression() ;
+
+
+ Token t = parser.getNextToken() ;
+ if ( t.kind != ARQParserTokenManager.EOF )
+ throw new QueryParseException("Extra tokens beginning \""+t.image+"\" starting line "+t.beginLine+", column "+t.beginColumn,
+ t.beginLine, t.beginColumn) ;
+
+ return expr ;
+ } catch (ParseException ex)
+ { throw new QueryParseException(ex.getMessage(),
+ ex.currentToken.beginLine,
+ ex.currentToken.beginLine) ;
+ }
+ catch (TokenMgrError tErr)
+ {
+ throw new QueryParseException(tErr.getMessage(), -1, -1) ;
+ }
+ catch (Error err)
+ {
+ // The token stream can throw java.lang.Error's
+ String tmp = err.getMessage() ;
+ if ( tmp == null )
+ throw new QueryParseException(err,-1, -1) ;
+ throw new QueryParseException(tmp,-1, -1) ;
+ } catch (NoSuchFieldException e) {
+ throw new QueryParseException(e, -1, -1) ;
+ } catch (SecurityException e) {
+ throw new QueryParseException(e, -1, -1) ;
+ } catch (IllegalArgumentException e) {
+ throw new QueryParseException(e, -1, -1) ;
+ } catch (IllegalAccessException e) {
+ throw new QueryParseException(e, -1, -1) ;
+ }
+ }
+
/**
* Add an Expression as variable to the select.
* @param expr The expresson to add.
@@ -156,4 +206,14 @@ public class SelectHandler implements Handler {
// handle the SELECT * case
query.getProjectVars();
}
+
+ private class ExprParser extends ARQParser {
+
+ private ExprParser(Query query, String s) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
+ {
+ super( new StringReader(s));
+ allowAggregatesInExpressions = true;
+ setQuery( query );
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/59aa64bd/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 d93848a..4e51478 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
@@ -24,6 +24,8 @@ 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.expr.ExprAggregator;
+import org.apache.jena.sparql.expr.aggregate.AggCount;
import org.apache.jena.sparql.syntax.ElementGroup;
import org.junit.Before;
import org.junit.Test;
@@ -67,6 +69,19 @@ public class SelectHandlerTest extends AbstractHandlerTest {
assertTrue( "Should be an E_Random", e instanceof E_Random);
}
+ @Test
+ public void testAddAggregateStringVar() {
+ Var v = Var.alloc("foo");
+ handler.addVar("count(*)", 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 ExprAggregator", e instanceof ExprAggregator);
+ assertTrue( "Should be AggCount", ((ExprAggregator)e).getAggregator() instanceof AggCount);
+ }
+
+ @Test
public void testAddExprVar() {
Var v = Var.alloc("foo");
handler.addVar(new E_Random(), v);