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 2012/05/07 21:56:02 UTC

svn commit: r1335220 - in /jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr: E_Add.java E_Divide.java E_Multiply.java E_Subtract.java nodevalue/NodeValueOps.java

Author: andy
Date: Mon May  7 19:56:02 2012
New Revision: 1335220

URL: http://svn.apache.org/viewvc?rev=1335220&view=rev
Log:
JENA-235
Wire in date/time/duration arithmetic.

Modified:
    jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Add.java
    jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Divide.java
    jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Multiply.java
    jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Subtract.java
    jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueOps.java

Modified: jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Add.java
URL: http://svn.apache.org/viewvc/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Add.java?rev=1335220&r1=1335219&r2=1335220&view=diff
==============================================================================
--- jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Add.java (original)
+++ jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Add.java Mon May  7 19:56:02 2012
@@ -19,6 +19,7 @@
 package com.hp.hpl.jena.sparql.expr;
 
 import com.hp.hpl.jena.query.ARQ ;
+import com.hp.hpl.jena.sparql.expr.nodevalue.NodeValueOps ;
 import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp ;
 
 public class E_Add extends ExprFunction2
@@ -37,14 +38,7 @@ public class E_Add extends ExprFunction2
         if ( ARQ.isStrictMode() )
             return XSDFuncOp.numAdd(x, y) ;
 
-        if ( true )
-        {
-            if ( x.isString() && y.isString() )
-                return NodeValue.makeString(x.asString()+y.asString()) ;
-            if ( ! x.isNumber() ||  ! y.isNumber() )
-                throw new ExprEvalTypeException("Operator '+' requires two numbers or two strings: got: "+x+" and "+y) ;
-        }   
-        return XSDFuncOp.numAdd(x, y) ;
+        return NodeValueOps.additionNV(x, y) ;
     }
 
     @Override

Modified: jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Divide.java
URL: http://svn.apache.org/viewvc/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Divide.java?rev=1335220&r1=1335219&r2=1335220&view=diff
==============================================================================
--- jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Divide.java (original)
+++ jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Divide.java Mon May  7 19:56:02 2012
@@ -18,6 +18,8 @@
 
 package com.hp.hpl.jena.sparql.expr;
 
+import com.hp.hpl.jena.query.ARQ ;
+import com.hp.hpl.jena.sparql.expr.nodevalue.NodeValueOps ;
 import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp ;
 
 public class E_Divide extends ExprFunction2
@@ -31,7 +33,13 @@ public class E_Divide extends ExprFuncti
     }
     
     @Override
-    public NodeValue eval(NodeValue x, NodeValue y) { return XSDFuncOp.numDivide(x, y) ; }
+    public NodeValue eval(NodeValue x, NodeValue y)
+    {
+        if ( ARQ.isStrictMode() )
+            return XSDFuncOp.numDivide(x, y) ;
+
+        return NodeValueOps.divisionNV(x, y) ;
+    }
     
     @Override
     public Expr copy(Expr e1, Expr e2) {  return new E_Divide(e1 , e2 ) ; }

Modified: jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Multiply.java
URL: http://svn.apache.org/viewvc/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Multiply.java?rev=1335220&r1=1335219&r2=1335220&view=diff
==============================================================================
--- jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Multiply.java (original)
+++ jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Multiply.java Mon May  7 19:56:02 2012
@@ -18,6 +18,8 @@
 
 package com.hp.hpl.jena.sparql.expr;
 
+import com.hp.hpl.jena.query.ARQ ;
+import com.hp.hpl.jena.sparql.expr.nodevalue.NodeValueOps ;
 import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp ;
 
 public class E_Multiply extends ExprFunction2
@@ -31,7 +33,12 @@ public class E_Multiply extends ExprFunc
     }
     
     @Override
-    public NodeValue eval(NodeValue x, NodeValue y) { return XSDFuncOp.numMultiply(x, y) ; }
+    public NodeValue eval(NodeValue x, NodeValue y)    {
+        if ( ARQ.isStrictMode() )
+            return XSDFuncOp.numMultiply(x, y) ;
+
+        return NodeValueOps.multiplicationNV(x, y) ;
+    }
     
     @Override
     public Expr copy(Expr e1, Expr e2) {  return new E_Multiply(e1 , e2 ) ; }

Modified: jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Subtract.java
URL: http://svn.apache.org/viewvc/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Subtract.java?rev=1335220&r1=1335219&r2=1335220&view=diff
==============================================================================
--- jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Subtract.java (original)
+++ jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/E_Subtract.java Mon May  7 19:56:02 2012
@@ -18,6 +18,8 @@
 
 package com.hp.hpl.jena.sparql.expr;
 
+import com.hp.hpl.jena.query.ARQ ;
+import com.hp.hpl.jena.sparql.expr.nodevalue.NodeValueOps ;
 import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp ;
 
 public class E_Subtract extends ExprFunction2
@@ -31,7 +33,13 @@ public class E_Subtract extends ExprFunc
     }
 
     @Override
-    public NodeValue eval(NodeValue x, NodeValue y) { return XSDFuncOp.numSubtract(x, y) ; }
+    public NodeValue eval(NodeValue x, NodeValue y)
+    {
+        if ( ARQ.isStrictMode() )
+            return XSDFuncOp.numSubtract(x, y) ;
+
+        return NodeValueOps.subtractionNV(x, y) ;
+    }
     
     @Override
     public Expr copy(Expr e1, Expr e2) {  return new E_Subtract(e1 , e2 ) ; }

Modified: jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueOps.java
URL: http://svn.apache.org/viewvc/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueOps.java?rev=1335220&r1=1335219&r2=1335220&view=diff
==============================================================================
--- jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueOps.java (original)
+++ jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueOps.java Mon May  7 19:56:02 2012
@@ -35,7 +35,6 @@ import javax.xml.datatype.XMLGregorianCa
 
 import com.hp.hpl.jena.datatypes.xsd.XSDDatatype ;
 import com.hp.hpl.jena.graph.Node ;
-import com.hp.hpl.jena.query.ARQ ;
 import com.hp.hpl.jena.sparql.expr.ExprEvalTypeException ;
 import com.hp.hpl.jena.sparql.expr.NodeValue ;
 import com.hp.hpl.jena.sparql.expr.ValueSpaceClassification ;
@@ -113,8 +112,6 @@ public class NodeValueOps
         
         if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
             return XSDFuncOp.numAdd(nv1, nv2) ;
-        if ( ARQ.isStrictMode() )
-            throw new ExprEvalTypeException("Operator '+' requires two numbers: got: "+nv1+" and "+nv2) ;
         
         if ( vs1.equals(VSPACE_STRING) && vs2.equals(VSPACE_STRING) )
             return NodeValue.makeString(nv1.asString()+nv2.asString()) ;
@@ -177,8 +174,6 @@ public class NodeValueOps
         
         if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
             return XSDFuncOp.numSubtract(nv1, nv2) ;
-        if ( ARQ.isStrictMode() )
-            throw new ExprEvalTypeException("Operator '-' requires two numbers: got: "+nv1+" and "+nv2) ;
         
         if ( vs1.equals(VSPACE_DURATION) && vs2.equals(VSPACE_DURATION) )
         {
@@ -247,8 +242,7 @@ public class NodeValueOps
         
         if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
             return XSDFuncOp.numMultiply(nv1, nv2) ;
-        if ( ARQ.isStrictMode() )
-            throw new ExprEvalTypeException("Operator '*' requires two numbers: got: "+nv1+" and "+nv2) ;
+
         if ( vs1.equals(VSPACE_DURATION) && vs2.equals(VSPACE_NUM) )
         {
             // ONLY defined for dayTime.
@@ -271,8 +265,7 @@ public class NodeValueOps
         
         if ( vs1.equals(VSPACE_NUM) && vs2.equals(VSPACE_NUM) )
             return XSDFuncOp.numDivide(nv1, nv2) ;
-//        if ( ARQ.isStrictMode() )
-//            throw new ExprEvalTypeException("Operator '*' requires two numbers: got: "+nv1+" and "+nv2) ;
+
         throw new ExprEvalTypeException("Operator '/' : Undefined division: "+nv1+" and "+nv2) ; 
     }