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 2011/11/02 19:26:08 UTC

svn commit: r1196740 - in /incubator/jena/Jena2/ARQ/trunk/src: main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueInteger.java test/java/com/hp/hpl/jena/sparql/expr/TestExpressions.java

Author: andy
Date: Wed Nov  2 18:26:07 2011
New Revision: 1196740

URL: http://svn.apache.org/viewvc?rev=1196740&view=rev
Log:
JENA-153

Modified:
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueInteger.java
    incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions.java

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java?rev=1196740&r1=1196739&r2=1196740&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java Wed Nov  2 18:26:07 2011
@@ -947,11 +947,15 @@ public abstract class NodeValue extends 
             if ( ! node.getLiteralDatatype().equals(XSDDatatype.XSDdecimal) ) 
             {
                 if ( XSDDatatype.XSDinteger.isValidLiteral(lit) )
-                {
-                    // Includes subtypes (int, byte, postiveInteger etc).
-                    // NB Known to be valid for type by now
-                    long i = ((Number)lit.getValue()).longValue() ;
-                    return new NodeValueInteger(i, node) ;
+                {
+                    String s = node.getLiteralLexicalForm() ;
+                    if ( s.startsWith("+") )
+                        // BigInteger does not accept leading "+"
+                        s = s.substring(1) ;
+                    // Includes subtypes (int, byte, postiveInteger etc).
+                    // NB Known to be valid for type by now
+                    BigInteger integer = new BigInteger(s) ;
+                    return new NodeValueInteger(integer, node) ;
                 }
             }
             

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueInteger.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueInteger.java?rev=1196740&r1=1196739&r2=1196740&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueInteger.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueInteger.java Wed Nov  2 18:26:07 2011
@@ -35,7 +35,7 @@ public class NodeValueInteger extends No
     
     public NodeValueInteger(BigInteger i)         { super() ; integer = i ; }
     public NodeValueInteger(BigInteger i, Node n) { super(n) ; integer = i ; }
-    public NodeValueInteger(long i, Node n)       { super(n) ; integer = new BigInteger(Long.toString(i)) ; }
+//   public NodeValueInteger(long i, Node n)       { super(n) ; integer = new BigInteger(Long.toString(i)) ; }
     public NodeValueInteger(long i)               { super() ; integer = new BigInteger(Long.toString(i)) ; }
 
     @Override

Modified: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions.java?rev=1196740&r1=1196739&r2=1196740&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions.java Wed Nov  2 18:26:07 2011
@@ -20,6 +20,9 @@ package com.hp.hpl.jena.sparql.expr;
 
 import static org.junit.Assert.assertEquals ;
 import static org.junit.Assert.assertTrue ;
+
+import java.math.BigDecimal ;
+
 import junit.framework.JUnit4TestAdapter ;
 import org.junit.AfterClass ;
 import org.junit.BeforeClass ;
@@ -80,7 +83,7 @@ public class TestExpressions
     @Test(expected=QueryParseException.class) public void testSyntax_4() { testSyntax("?#") ; }
     @Test public void testNumeric_1() { testNumeric("7", 7) ; }
     @Test public void testNumeric_2() { testNumeric("-3", -3) ; }
-    @Test public void testNumeric_3() { testNumeric("+2", 2) ; }
+    @Test public void testNumeric_3() { testNumeric("+2", 2) ; }
     @Test(expected=QueryParseException.class) public void testNumeric_4() { testNumeric("0xF", 0xF) ; }
     @Test(expected=QueryParseException.class) public void testNumeric_5() { testNumeric("0x12", 0x12) ; }
     @Test public void testNumeric_6() { testNumeric("3--4", 3-(-4)) ; }
@@ -104,7 +107,11 @@ public class TestExpressions
     @Test public void testNumeric_24() { testNumeric("1.5 + 2.5", 1.5+2.5) ; }
     @Test public void testNumeric_25() { testNumeric("1.5 + 2", 1.5+2) ; }
     @Test public void testNumeric_26() { testNumeric("4111222333444", 4111222333444L) ; }
-    @Test public void testNumeric_27() { testNumeric("1234 + 4111222333444", 1234 + 4111222333444L) ; }
+    @Test public void testNumeric_27() { testNumeric("1234 + 4111222333444", 1234 + 4111222333444L) ; }
+    
+    @Test public void testNumeric_28() { testNumeric("+2.5", new BigDecimal("+2.5")) ; }
+    @Test public void testNumeric_29() { testNumeric("-2.5", new BigDecimal("-2.5")) ; }
+    
     @Test public void testBoolean_1() { testBoolean("4111222333444 > 1234", 4111222333444L > 1234) ; }
     @Test public void testBoolean_2() { testBoolean("4111222333444 < 1234", 4111222333444L < 1234L) ; }
     @Test public void testBoolean_3() { testBoolean("1.5 < 2", 1.5 < 2 ) ; }
@@ -224,7 +231,7 @@ public class TestExpressions
     @Test(expected=QueryParseException.class)
     public void testURI_17()      { testURI("x.:a.a",  xNS+"a.a") ; }
     
-    @Test public void testNumeric_28()  { testNumeric("1:b", 1) ; }
+    @Test public void testNumeric_50()  { testNumeric("1:b", 1) ; }
     @Test public void testURI_18()      { testURI("ex:2",    exNS+"2" ) ; }
     @Test public void testURI_19()      { testURI("ex:2ab_c",    exNS+"2ab_c" ) ; }
     @Test public void testBoolean_76()  { testBoolean("'fred'@en = 'fred'", false ) ; }
@@ -254,7 +261,7 @@ public class TestExpressions
     @Test(expected=ExprEvalException.class) public void testBoolean_94() { testEval("'fred'^^<type1> = 'fred'" ) ; }
     @Test(expected=ExprEvalException.class) public void testBoolean_95() { testEval("'fred'^^<type1> != 'fred'" ) ; }
     @Test(expected=ExprEvalException.class) public void testBoolean_96() { testBoolean("'21'^^<int> = '21'", true ) ; }
-    @Test public void testNumeric_29() { testNumeric("'21'^^<"+XSDDatatype.XSDinteger.getURI()+">", 21) ; }
+    @Test public void testNumeric_51() { testNumeric("'21'^^<"+XSDDatatype.XSDinteger.getURI()+">", 21) ; }
     @Test public void testBoolean_97() { testBoolean("'21'^^<"+XSDDatatype.XSDinteger.getURI()+"> = 21", true) ; }
     @Test public void testBoolean_98() { testBoolean("'21'^^<"+XSDDatatype.XSDinteger.getURI()+"> = 22", false) ; }
     @Test public void testBoolean_99() { testBoolean("'21'^^<"+XSDDatatype.XSDinteger.getURI()+"> != 21", false) ; }
@@ -423,6 +430,14 @@ public class TestExpressions
         NodeValue v = expr.eval( BindingFactory.binding() , new FunctionEnvBase()) ;
         assertTrue(v.isInteger()) ;
         assertEquals(i, v.getInteger().intValue()) ;
+    }
+    
+    private static void testNumeric(String string, BigDecimal decimal)
+    {
+        Expr expr = parse(string) ;
+        NodeValue v = expr.eval( BindingFactory.binding() , new FunctionEnvBase()) ;
+        assertTrue(v.isDecimal()) ;
+        assertEquals(decimal, v.getDecimal()) ;
     }
 
     private static void testNumeric(String string, double d)