You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/10/06 14:07:12 UTC

[2/3] jena git commit: JENA-1044: Avoid creating an exception on the normal execution path.

JENA-1044: Avoid creating an exception on the normal execution path.

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

Branch: refs/heads/master
Commit: 3b37942c71411347d5fb4d7891d2eacbeabad972
Parents: 880c410
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Oct 6 13:06:06 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Oct 6 13:06:06 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/sparql/expr/E_Bound.java    | 14 +++-
 .../org/apache/jena/sparql/expr/TS_Expr.java    |  1 +
 .../jena/sparql/expr/TestExpressions.java       |  2 +
 .../jena/sparql/expr/TestExpressions2.java      |  1 -
 .../jena/sparql/expr/TestExpressions3.java      | 74 ++++++++++++++++++++
 5 files changed, 89 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/3b37942c/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java
index ba9ba15..caa7516 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java
@@ -35,11 +35,21 @@ public class E_Bound extends ExprFunction1
     @Override
     public NodeValue evalSpecial(Binding binding, FunctionEnv env)
     { 
+        if ( expr.isConstant() )
+            // The case of the variable already being substituted for a constant.
+            return NodeValue.FALSE ;
+        
+        if ( expr.isVariable() )
+            // The case of the expr being a single variable. 
+            return NodeValue.booleanReturn(binding.contains(expr.asVar())) ; 
+        
+        // General expression. This case can't be written in SPARQL
+        // but we keep the code general in case some optimziation rewrite
+        // or algebra expression uses the generalized feature.
 		try {
 			expr.eval(binding, env) ;
             return NodeValue.TRUE ;
-		} catch (VariableNotBoundException ex)
-		{
+		} catch (VariableNotBoundException ex) {
 			return NodeValue.FALSE ;
 		}
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/3b37942c/jena-arq/src/test/java/org/apache/jena/sparql/expr/TS_Expr.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TS_Expr.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TS_Expr.java
index 5cbf2b7..f2f3abd 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TS_Expr.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TS_Expr.java
@@ -31,6 +31,7 @@ import org.junit.runners.Suite.SuiteClasses ;
     TestNodeValue.class 
     , TestExpressions.class
     , TestExpressions2.class
+    , TestExpressions3.class
     , TestNodeFunctions.class
     , TestExpressions2.class
     , TestFunctions.class

http://git-wip-us.apache.org/repos/asf/jena/blob/3b37942c/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions.java
index 631aac9..46c58d3 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions.java
@@ -47,6 +47,8 @@ import org.junit.Test ;
 
 /** Break expression testing suite into parts
 * @see TestExpressions
+* @see TestExpressions2
+* @see TestExpressions3
 * @see TestExprLib
 * @see TestNodeValue
 */

http://git-wip-us.apache.org/repos/asf/jena/blob/3b37942c/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions2.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions2.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions2.java
index 5fd084c..3dfc53d 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions2.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions2.java
@@ -35,7 +35,6 @@ import org.junit.Test ;
 */
 public class TestExpressions2 extends BaseTest
 {
-    
     @Test public void gregorian_eq_01()         { eval("'1999'^^xsd:gYear = '1999'^^xsd:gYear", true) ; }
     @Test public void gregorian_eq_02()         { eval("'1999'^^xsd:gYear != '1999'^^xsd:gYear", false) ; }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/3b37942c/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions3.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions3.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions3.java
new file mode 100644
index 0000000..61fa32e
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestExpressions3.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.sparql.expr;
+
+import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.sparql.engine.binding.Binding ;
+import org.apache.jena.sparql.expr.nodevalue.XSDFuncOp ;
+import org.apache.jena.sparql.function.FunctionEnvBase ;
+import org.apache.jena.sparql.sse.Item ;
+import org.apache.jena.sparql.sse.SSE ;
+import org.apache.jena.sparql.sse.builders.BuilderBinding ;
+import org.apache.jena.sparql.util.ExprUtils ;
+import org.junit.Test ;
+
+/** Expression evaluation involving bindings. 
+* @see TestExpressions
+* @see TestExpressions2
+* @see TestExpressions3
+* @see TestExprLib
+* @see TestNodeValue
+*/
+public class TestExpressions3 extends BaseTest
+{
+    @Test public void bound_01()       { eval("BOUND(?x)", "(?x 1)", true) ; }
+    @Test public void bound_02()       { eval("BOUND(?x)", "(?y 1)", false) ; }
+    @Test public void bound_03()       { evalExpr("(bound 1)", "(?y 1)", false) ; }
+    @Test public void bound_04()       { evalExpr("(bound 1)", "()", false) ; }
+    @Test public void bound_05()       { evalExpr("(bound ?x)", "(?y 1)", false) ; }
+    @Test public void bound_06()       { evalExpr("(bound ?x)", "(?x 1)", true) ; }
+    @Test public void bound_07()       { evalExpr("(bound (+ ?x 1))", "(?y 1)", false) ; }
+    @Test public void bound_08()       { evalExpr("(bound (+ ?y 1))", "(?y 1)", true) ; }
+
+    // From SPARQL syntax
+    private static void eval(String string, String bindingStr, boolean expected) {
+        Binding binding = binding(bindingStr) ; 
+        Expr expr = ExprUtils.parse(string) ;
+        NodeValue nv = expr.eval(binding, FunctionEnvBase.createTest()) ;
+        boolean b = XSDFuncOp.booleanEffectiveValue(nv) ;
+        assertEquals(string, expected, b) ;
+    }
+    
+    // From algebra/SSE
+    private static void evalExpr(String exprString, String bindingStr, boolean expected) {
+        Binding binding = binding(bindingStr) ;
+        Expr expr = SSE.parseExpr(exprString) ;
+        NodeValue nv = expr.eval(binding, FunctionEnvBase.createTest()) ;
+        boolean b = XSDFuncOp.booleanEffectiveValue(nv) ;
+        assertEquals(exprString, expected, b) ;
+    }
+
+    private static Binding binding(String bindingStr) {
+        if ( bindingStr == null || bindingStr.matches("\\s*\\(\\s*\\)\\s*") )
+            return null ;
+        Item item = SSE.parse("(binding "+bindingStr+")") ;
+        Binding binding = BuilderBinding.build(item) ;
+        return binding ;   
+    }
+}