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 13:39:52 UTC

marmotta git commit: SPARQL: - fix rounding issue in postgres - tests for ceil, floor and round

Repository: marmotta
Updated Branches:
  refs/heads/develop d1357660a -> d8ff4c8d3


SPARQL:
- fix rounding issue in postgres
- tests for ceil, floor and round


Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/d8ff4c8d
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/d8ff4c8d
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/d8ff4c8d

Branch: refs/heads/develop
Commit: d8ff4c8d3a53292a9d828fe77115569c8858a0ea
Parents: d135766
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Tue Nov 11 13:40:31 2014 +0100
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Tue Nov 11 13:40:31 2014 +0100

----------------------------------------------------------------------
 .../kiwi/sparql/function/numeric/NRound.java    |  6 +++++-
 .../testsuite/KiWiSparqlComplianceTest.java     | 16 ++++++++++++++++
 .../marmotta/kiwi/sparql/testsuite/ceil.sparql  |  5 +++++
 .../marmotta/kiwi/sparql/testsuite/floor.sparql |  5 +++++
 .../marmotta/kiwi/sparql/testsuite/round.sparql |  5 +++++
 .../kiwi/model/rdf/KiWiDoubleLiteral.java       | 20 ++++++++++----------
 6 files changed, 46 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8ff4c8d/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/numeric/NRound.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/numeric/NRound.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/numeric/NRound.java
index 0048b71..17bc217 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/numeric/NRound.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/function/numeric/NRound.java
@@ -52,7 +52,11 @@ public class NRound extends Round implements NativeFunction {
      */
     @Override
     public String getNative(KiWiDialect dialect, String... args) {
-        return String.format("round(%s)", args[0]);
+        if(dialect instanceof PostgreSQLDialect) {
+            return String.format("round(CAST(%s as decimal))", args[0]);
+        } else {
+            return String.format("round(%s)", args[0]);
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8ff4c8d/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java
index 1938b29..d73abd1 100644
--- a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java
+++ b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java
@@ -163,6 +163,22 @@ public class KiWiSparqlComplianceTest {
     }
 
 
+    @Test
+    public void testQueryFloor() throws Exception {
+        testQuery("floor.sparql");
+    }
+
+    @Test
+    public void testQueryCeil() throws Exception {
+        testQuery("ceil.sparql");
+    }
+
+    @Test
+    public void testQueryRound() throws Exception {
+        testQuery("round.sparql");
+    }
+
+
     private void testQuery(String filename) throws Exception {
         String queryString = IOUtils.toString(this.getClass().getResourceAsStream(filename), "UTF-8");
 

http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8ff4c8d/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/ceil.sparql
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/ceil.sparql b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/ceil.sparql
new file mode 100644
index 0000000..1f19fe5
--- /dev/null
+++ b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/ceil.sparql
@@ -0,0 +1,5 @@
+PREFIX : <http://example.org/>
+PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
+SELECT ?s ?num (CEIL(?num) AS ?ceil) WHERE {
+	?s :num ?num
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8ff4c8d/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/floor.sparql
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/floor.sparql b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/floor.sparql
new file mode 100644
index 0000000..fdc5747
--- /dev/null
+++ b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/floor.sparql
@@ -0,0 +1,5 @@
+PREFIX : <http://example.org/>
+PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
+SELECT ?s ?num (FLOOR(?num) AS ?floor) WHERE {
+	?s :num ?num
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8ff4c8d/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/round.sparql
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/round.sparql b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/round.sparql
new file mode 100644
index 0000000..b588024
--- /dev/null
+++ b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/testsuite/round.sparql
@@ -0,0 +1,5 @@
+PREFIX : <http://example.org/>
+PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
+SELECT ?s ?num (ROUND(?num) AS ?round) WHERE {
+	?s :num ?num
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8ff4c8d/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiDoubleLiteral.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiDoubleLiteral.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiDoubleLiteral.java
index 7f749b9..37636b4 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiDoubleLiteral.java
+++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiDoubleLiteral.java
@@ -17,10 +17,6 @@
  */
 package org.apache.marmotta.kiwi.model.rdf;
 
-import org.apache.marmotta.commons.vocabulary.XSD;
-
-import java.math.BigDecimal;
-import java.math.MathContext;
 import java.util.Date;
 
 /**
@@ -67,12 +63,7 @@ public class KiWiDoubleLiteral extends KiWiStringLiteral {
 
     public void setDoubleContent(Double doubleContent) {
         this.doubleContent = doubleContent;
-
-        if(XSD.Decimal.equals(getType())) {
-            this.content = new BigDecimal(doubleContent, MathContext.DECIMAL64).toString();
-        } else {
-            this.content = doubleContent.toString();
-        }
+        this.content = fmt(doubleContent);
     }
 
 
@@ -97,4 +88,13 @@ public class KiWiDoubleLiteral extends KiWiStringLiteral {
     public double doubleValue() {
         return getDoubleContent().doubleValue();
     }
+
+
+    private static String fmt(double d)
+    {
+        if(d == (long) d)
+            return String.format("%d",(long)d);
+        else
+            return String.format("%s",d);
+    }
 }