You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2014/11/11 11:14:51 UTC
marmotta git commit: fix decimal handling for many queries
Repository: marmotta
Updated Branches:
refs/heads/develop 488d4e6f8 -> 676607916
fix decimal handling for many queries
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/67660791
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/67660791
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/67660791
Branch: refs/heads/develop
Commit: 676607916bda0bfef763f7f02cf22d2768aad7aa
Parents: 488d4e6
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Tue Nov 11 11:15:24 2014 +0100
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Tue Nov 11 11:15:33 2014 +0100
----------------------------------------------------------------------
.../marmotta/kiwi/sparql/builder/SQLBuilder.java | 1 +
.../marmotta/kiwi/sparql/builder/ValueType.java | 10 ++++++++--
.../kiwi/sparql/builder/collect/OPTypeFinder.java | 9 +++++----
.../sparql/builder/eval/ValueExpressionEvaluator.java | 4 ++++
.../sparql/evaluation/KiWiEvaluationStrategy.java | 14 ++++++++++++++
.../kiwi/sparql/function/cast/NDecimalCast.java | 2 +-
.../kiwi/sparql/function/datetime/NSeconds.java | 2 +-
7 files changed, 34 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/marmotta/blob/67660791/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java
index 581e6ad..cebefdb 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java
@@ -374,6 +374,7 @@ public class SQLBuilder {
case INT:
p.getConditions().add(sv.getExpressions().get(0) + " = " + sv.getAlias() + ".ivalue");
break;
+ case DECIMAL:
case DOUBLE:
p.getConditions().add(sv.getExpressions().get(0) + " = " + sv.getAlias() + ".dvalue");
break;
http://git-wip-us.apache.org/repos/asf/marmotta/blob/67660791/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/ValueType.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/ValueType.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/ValueType.java
index 4d1ed87..f33200c 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/ValueType.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/ValueType.java
@@ -23,7 +23,8 @@ package org.apache.marmotta.kiwi.sparql.builder;
* @author Sebastian Schaffert (sschaffert@apache.org)
*/
public enum ValueType {
- DOUBLE, // double, float or decimal value
+ DOUBLE, // double or float value
+ DECIMAL,// decimal value
INT, // long or integer value
DATE, // UTC date, dateTime or time
TZDATE, // date, dateTime or time with timezone
@@ -33,5 +34,10 @@ public enum ValueType {
TERM, // value of constructed term
URI, // constructed URI
BNODE, // constructed BNODE
- NONE // not projected
+ NONE; // not projected
+
+
+ public final boolean isNumeric() {
+ return this == DOUBLE || this == DECIMAL || this == INT;
+ }
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/67660791/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OPTypeFinder.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OPTypeFinder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OPTypeFinder.java
index c09f384..d0bdd80 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OPTypeFinder.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OPTypeFinder.java
@@ -51,9 +51,10 @@ public class OPTypeFinder extends QueryModelVisitorBase<RuntimeException> {
String type = l.getDatatype() != null ? l.getDatatype().stringValue() : null;
if(StringUtils.equals(Namespaces.NS_XSD + "double", type)
- || StringUtils.equals(Namespaces.NS_XSD + "float", type)
- || StringUtils.equals(Namespaces.NS_XSD + "decimal", type)) {
+ || StringUtils.equals(Namespaces.NS_XSD + "float", type)) {
optypes.add(ValueType.DOUBLE);
+ } else if(StringUtils.equals(Namespaces.NS_XSD + "decimal", type)) {
+ optypes.add(ValueType.DECIMAL);
} else if(StringUtils.equals(Namespaces.NS_XSD + "integer", type)
|| StringUtils.equals(Namespaces.NS_XSD + "long", type)
|| StringUtils.equals(Namespaces.NS_XSD + "int", type)
@@ -131,8 +132,8 @@ public class OPTypeFinder extends QueryModelVisitorBase<RuntimeException> {
// keep left
} else if(left == right) {
// keep left
- } else if( (left == ValueType.INT && right == ValueType.DOUBLE) || (left == ValueType.DOUBLE && right == ValueType.INT)) {
- left = ValueType.DOUBLE;
+ } else if(left.isNumeric() && right.isNumeric()) {
+ left = left.compareTo(right) < 0 ? left : right;
} else if( (left == ValueType.STRING) || (right == ValueType.STRING)) {
left = ValueType.STRING;
} else {
http://git-wip-us.apache.org/repos/asf/marmotta/blob/67660791/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/eval/ValueExpressionEvaluator.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/eval/ValueExpressionEvaluator.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/eval/ValueExpressionEvaluator.java
index 1bc0036..9bd943e 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/eval/ValueExpressionEvaluator.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/eval/ValueExpressionEvaluator.java
@@ -592,6 +592,7 @@ public class ValueExpressionEvaluator extends QueryModelVisitorBase<RuntimeExcep
Preconditions.checkState(var != null, "no alias available for variable");
builder.append(var).append(".ivalue");
break;
+ case DECIMAL:
case DOUBLE:
Preconditions.checkState(var != null, "no alias available for variable");
builder.append(var).append(".dvalue");
@@ -639,6 +640,7 @@ public class ValueExpressionEvaluator extends QueryModelVisitorBase<RuntimeExcep
case INT:
builder.append(Integer.parseInt(val));
break;
+ case DECIMAL:
case DOUBLE:
builder.append(Double.parseDouble(val));
break;
@@ -694,6 +696,8 @@ public class ValueExpressionEvaluator extends QueryModelVisitorBase<RuntimeExcep
}
switch (type) {
+ case DECIMAL:
+ return functionRegistry.get(XMLSchema.DECIMAL).getNative(parent.getDialect(), arg);
case DOUBLE:
return functionRegistry.get(XMLSchema.DOUBLE).getNative(parent.getDialect(), arg);
case INT:
http://git-wip-us.apache.org/repos/asf/marmotta/blob/67660791/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java
index 3d4f314..be0f5df 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java
@@ -296,6 +296,20 @@ public class KiWiEvaluationStrategy extends EvaluationStrategyImpl{
resultRow.addBinding(sv.getSparqlName(), new LiteralImpl(svalue, type));
}
break;
+ case DECIMAL:
+ if(row.getObject(sv.getName()) != null) {
+ svalue = row.getBigDecimal(sv.getName()).toString();
+ URI type = XSD.Decimal;
+ try {
+ long typeId = row.getLong(sv.getName() + "_TYPE");
+ if (typeId > 0)
+ type = (URI) connection.loadNodeById(typeId);
+ } catch (SQLException ex) {
+ }
+
+ resultRow.addBinding(sv.getSparqlName(), new LiteralImpl(svalue, type));
+ }
+ break;
case BOOL:
if(row.getObject(sv.getName()) != null) {
svalue = Boolean.toString(row.getBoolean(sv.getName()));
http://git-wip-us.apache.org/repos/asf/marmotta/blob/67660791/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/cast/NDecimalCast.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/cast/NDecimalCast.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/cast/NDecimalCast.java
index 138eb02..990bd89 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/cast/NDecimalCast.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/cast/NDecimalCast.java
@@ -62,7 +62,7 @@ public class NDecimalCast extends DecimalCast implements NativeFunction {
*/
@Override
public ValueType getReturnType() {
- return ValueType.DOUBLE;
+ return ValueType.DECIMAL;
}
/**
http://git-wip-us.apache.org/repos/asf/marmotta/blob/67660791/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/datetime/NSeconds.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/datetime/NSeconds.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/datetime/NSeconds.java
index b358208..fd8ee92 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/datetime/NSeconds.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/datetime/NSeconds.java
@@ -69,7 +69,7 @@ public class NSeconds extends Seconds implements NativeFunction {
*/
@Override
public ValueType getReturnType() {
- return ValueType.DOUBLE;
+ return ValueType.DECIMAL;
}
/**