Author: rvesse
Date: Fri Aug 9 17:47:27 2013
New Revision: 1512416
URL: http://svn.apache.org/r1512416
Log:
Initial implementation support for a few Leviathan extension functions
(JENA-507)
Added:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java?rev=1512416&r1=1512415&r2=1512416&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java
Fri Aug 9 17:47:27 2013
@@ -18,4 +18,4 @@
package com.hp.hpl.jena.sparql.expr.nodevalue;
-enum NumericType { OP_INTEGER, OP_DECIMAL, OP_DOUBLE, OP_FLOAT}
+public enum NumericType { OP_INTEGER, OP_DECIMAL, OP_DOUBLE, OP_FLOAT}
Added:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java?rev=1512416&view=auto
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java
(added)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java
Fri Aug 9 17:47:27 2013
@@ -0,0 +1,25 @@
+/*
+ * 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 com.hp.hpl.jena.sparql.function.library.leviathan;
+
+public class LeviathanConstants {
+
+ public static final String LeviathanFunctionLibraryURI =
"http://www.dotnetrdf.org/leviathan#";
+ public static final String LeviathanFunctionLibrary =
"java:com.hp.hpl.jena.sparql.function.library.leviathan.";
+}
Added:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java?rev=1512416&view=auto
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java
(added)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java
Fri Aug 9 17:47:27 2013
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.hp.hpl.jena.sparql.function.library.leviathan;
+
+import java.math.BigInteger;
+
+import com.hp.hpl.jena.sparql.ARQInternalErrorException;
+import com.hp.hpl.jena.sparql.expr.NodeValue;
+import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp;
+import com.hp.hpl.jena.sparql.function.FunctionBase1;
+
+public class cube extends FunctionBase1 {
+
+ @Override
+ public NodeValue exec(NodeValue v) {
+ switch (XSDFuncOp.classifyNumeric("sq", v))
+ {
+ case OP_INTEGER:
+ BigInteger i = v.getInteger();
+ return NodeValue.makeInteger( i.pow(3) );
+ case OP_DECIMAL:
+ double dec = v.getDecimal().doubleValue() ;
+ return NodeValue.makeDecimal( Math.pow(dec, 3d)) ;
+ case OP_FLOAT:
+ // TODO Should squaring a float keep it a float?
+ case OP_DOUBLE:
+ return NodeValue.makeDouble( Math.pow(v.getDouble(), 3d) ) ;
+ default:
+ throw new ARQInternalErrorException("Unrecognized numeric
operation : "+v) ;
+ }
+ }
+
+}
Added:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java?rev=1512416&view=auto
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java
(added)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java
Fri Aug 9 17:47:27 2013
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.hp.hpl.jena.sparql.function.library.leviathan;
+
+import com.hp.hpl.jena.sparql.ARQInternalErrorException;
+import com.hp.hpl.jena.sparql.expr.NodeValue;
+import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp;
+import com.hp.hpl.jena.sparql.function.FunctionBase1;
+
+public class e extends FunctionBase1 {
+
+ @Override
+ public NodeValue exec(NodeValue v) {
+ switch (XSDFuncOp.classifyNumeric("sq", v))
+ {
+ case OP_INTEGER:
+ case OP_DECIMAL:
+ case OP_FLOAT:
+ case OP_DOUBLE:
+ return NodeValue.makeDouble( Math.exp(v.getDouble()) ) ;
+ default:
+ throw new ARQInternalErrorException("Unrecognized numeric
operation : "+v) ;
+ }
+ }
+
+}
Added:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java?rev=1512416&view=auto
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java
(added)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java
Fri Aug 9 17:47:27 2013
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.hp.hpl.jena.sparql.function.library.leviathan;
+
+import java.math.BigInteger;
+
+import com.hp.hpl.jena.sparql.ARQInternalErrorException;
+import com.hp.hpl.jena.sparql.expr.NodeValue;
+import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp;
+import com.hp.hpl.jena.sparql.function.FunctionBase1;
+
+public class sq extends FunctionBase1 {
+
+ @Override
+ public NodeValue exec(NodeValue v) {
+ switch (XSDFuncOp.classifyNumeric("sq", v))
+ {
+ case OP_INTEGER:
+ BigInteger i = v.getInteger();
+ return NodeValue.makeInteger( i.pow(2) );
+ case OP_DECIMAL:
+ double dec = v.getDecimal().doubleValue() ;
+ return NodeValue.makeDecimal( Math.pow(dec, 2d)) ;
+ case OP_FLOAT:
+ // TODO Should squaring a float keep it a float?
+ case OP_DOUBLE:
+ return NodeValue.makeDouble( Math.pow(v.getDouble(), 2d) ) ;
+ default:
+ throw new ARQInternalErrorException("Unrecognized numeric
operation : "+v) ;
+ }
+ }
+
+}
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java?rev=1512416&r1=1512415&r2=1512416&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java
Fri Aug 9 17:47:27 2013
@@ -23,6 +23,7 @@ import java.util.Iterator ;
import java.util.Map ;
import com.hp.hpl.jena.sparql.ARQConstants ;
+import com.hp.hpl.jena.sparql.function.library.leviathan.LeviathanConstants;
public class MappedLoader
@@ -33,6 +34,7 @@ public class MappedLoader
static Map<String, String> uriMap = new HashMap<String, String>() ;
static {
+ // ARQ library
uriMap.put(ARQConstants.ARQFunctionLibraryURI,
ARQConstants.ARQFunctionLibrary) ;
uriMap.put(ARQConstants.ARQPropertyFunctionLibraryURI,
@@ -46,6 +48,10 @@ public class MappedLoader
uriMap.put("java:com.hp.hpl.jena.query.pfunction.library.",
"java:com.hp.hpl.jena.sparql.pfunction.library.") ;
+
+ // Leviathan library
+ uriMap.put(LeviathanConstants.LeviathanFunctionLibraryURI,
+ LeviathanConstants.LeviathanFunctionLibrary) ;
}
public static boolean isPossibleDynamicURI(String uri, Class<?>
expectedClass)
@@ -54,7 +60,7 @@ public class MappedLoader
if ( uri == null )
return false ;
// Need to force the load to check everything.
- // Callers (who are expectedClass sesnitive) should have
+ // Callers (who are expectedClass sensitive) should have
// an "alreadyLoaded" cache
return loadClass(uri, expectedClass) != null ;
}