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/02 12:44:36 UTC

svn commit: r1332985 - in /incubator/jena/Jena2/ARQ/trunk/src: main/java/com/hp/hpl/jena/sparql/lang/ main/java/com/hp/hpl/jena/sparql/sse/builders/ test/java/com/hp/hpl/jena/sparql/syntax/

Author: andy
Date: Wed May  2 10:44:36 2012
New Revision: 1332985

URL: http://svn.apache.org/viewvc?rev=1332985&view=rev
Log:
Ensure longs handled as long (OpSlice rebuild)

Modified:
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserBase.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderNode.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderPath.java
    incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/syntax/TestSSE_Builder.java

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserBase.java?rev=1332985&r1=1332984&r2=1332985&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserBase.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserBase.java Wed May  2 10:44:36 2012
@@ -18,6 +18,7 @@
 
 package com.hp.hpl.jena.sparql.lang;
 
+import java.math.BigInteger ;
 import java.util.HashSet ;
 import java.util.Set ;
 
@@ -171,15 +172,25 @@ public class ParserBase
     
     protected long integerValue(String s)
     {
-        if ( s.startsWith("+") )
-            s = s.substring(1) ;
-        if ( s.startsWith("0x") )
+        try {
+            if ( s.startsWith("+") )
+                s = s.substring(1) ;
+            if ( s.startsWith("0x") )
+            {
+                // Hex
+                s = s.substring(2) ;
+                return Long.parseLong(s, 16) ;
+            }
+            return Long.parseLong(s) ;
+        } catch (NumberFormatException ex)
         {
-            // Hex
-            s = s.substring(2) ;
-            return Long.parseLong(s, 16) ;
+            try {
+                // Possible too large for a long.
+                BigInteger integer = new BigInteger(s) ;
+                throwParseException("Number '"+s+"' is a valid number but can't not be stored in a long") ;
+            } catch (NumberFormatException ex2) {}
+            throw new QueryParseException(ex, -1, -1) ;
         }
-        return Long.parseLong(s) ;
     }
     
     protected double doubleValue(String s)
@@ -636,4 +647,10 @@ public class ParserBase
         throw new QueryParseException("Line " + line + ", column " + column + ": " + msg,
                                       line, column) ;
     }
+    
+    public static void throwParseException(String msg)
+    {
+        throw new QueryParseException(msg, -1, -1) ;
+    }
+
 }

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderNode.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderNode.java?rev=1332985&r1=1332984&r2=1332985&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderNode.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderNode.java Wed May  2 10:44:36 2012
@@ -126,6 +126,30 @@ public class BuilderNode
         return nv.getInteger() ;
     }
 
+    public static long buildLong(Item item)
+    { 
+        BigInteger i = buildInteger(item, false) ;
+        return i.longValue() ;
+    }
+
+    public static long buildLong(Item item, int dft)
+    { 
+        BigInteger i = buildInteger(item, true) ;
+        if ( i == null )
+            return dft ;
+        return i.longValue() ;
+    }
+
+    public static long buildLong(ItemList list, int idx)
+    {
+        return buildLong(list.get(idx)) ;
+    }
+    
+    public static long buildLong(ItemList list, int idx, int dft)
+    { 
+        return buildLong(list.get(idx), dft) ;
+    }
+    
     public static int buildInt(Item item)
     { 
         BigInteger i = buildInteger(item, false) ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java?rev=1332985&r1=1332984&r2=1332985&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java Wed May  2 10:44:36 2012
@@ -757,8 +757,8 @@ public class BuilderOp
         public Op make(ItemList list)
         {
             BuilderLib.checkLength(4, list, "slice") ;
-            long start = BuilderNode.buildInt(list, 1, -1) ;
-            long length = BuilderNode.buildInt(list, 2, -1) ;
+            long start = BuilderNode.buildLong(list, 1, -1) ;
+            long length = BuilderNode.buildLong(list, 2, -1) ;
 
             if ( start == -1 )
                 start = Query.NOLIMIT ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderPath.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderPath.java?rev=1332985&r1=1332984&r2=1332985&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderPath.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderPath.java Wed May  2 10:44:36 2012
@@ -200,7 +200,7 @@ public class BuilderPath
     static long modInt(Item item)
     {
         if ( "_".equals(item.getSymbol()) ) return P_Mod.UNSET ;
-        return BuilderNode.buildInt(item) ;
+        return BuilderNode.buildLong(item) ;
     }
 
     final protected Build buildFixedLength = new Build()

Modified: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/syntax/TestSSE_Builder.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/syntax/TestSSE_Builder.java?rev=1332985&r1=1332984&r2=1332985&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/syntax/TestSSE_Builder.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/syntax/TestSSE_Builder.java Wed May  2 10:44:36 2012
@@ -79,4 +79,26 @@ public class TestSSE_Builder extends Tes
         int i = BuilderNode.buildInt(item, 23) ;
         assertEquals(23, i) ;
     }
+    
+    @Test public void testBuildLong_01()
+    { 
+        Item item = SSE.parseItem("100000000000") ;
+        long i = BuilderNode.buildLong(item) ;
+        assertEquals(100000000000L, i) ;
+    }
+
+    @Test public void testBuildLong_02()
+    { 
+        Item item = SSE.parseItem("100000000000") ;
+        long i = BuilderNode.buildLong(item, 23) ;
+        assertEquals(100000000000L, i) ;
+    }
+
+    @Test public void testBuildLong_03()
+    { 
+        Item item = SSE.parseItem("_") ;
+        long i = BuilderNode.buildLong(item, 23) ;
+        assertEquals(23, i) ;
+    }
+
 }