METAMODEL-151 fixed.
Fixes #28

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

Branch: refs/heads/master
Commit: 8156d76fd10a9ccc3ae88563e417b9c8700f22a3
Parents: 973a069
Author: Kasper Sørensen <[email protected]>
Authored: Wed Jun 17 21:27:06 2015 +0200
Committer: Kasper Sørensen <[email protected]>
Committed: Wed Jun 17 21:27:06 2015 +0200

----------------------------------------------------------------------
 CHANGES.md                                      |  1 +
 .../jdbc/dialects/PostgresqlQueryRewriter.java  |  3 +
 .../jdbc/integrationtests/PostgresqlTest.java   | 60 ++++++++++++++++++++
 3 files changed, 64 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/8156d76f/CHANGES.md
----------------------------------------------------------------------
diff --git a/CHANGES.md b/CHANGES.md
index 6991fe3..c6c6f80 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -2,6 +2,7 @@
 
  * [METAMODEL-148] - Added a 'hadoop' module with a HdfsResource class to 
allow CSV, Excel and Fixed-width file access on HDFS.
  * [METAMODEL-149] - Added support for COUNTER data type in Cassandra.
+ * [METAMODEL-151] - Added support for DOUBLE data type mapping in PostgreSQL
 
 ### Apache MetaModel 4.3.4
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8156d76f/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
index d0b9ab5..eebb116 100644
--- 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
@@ -52,6 +52,9 @@ public class PostgresqlQueryRewriter extends 
LimitOffsetQueryRewriter implements
         if (columnType == ColumnType.BIT) {
             return "BOOLEAN";
         }
+        if (columnType == ColumnType.DOUBLE) {
+            return "double precision";
+        }
         return super.rewriteColumnType(columnType, columnSize);
     }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8156d76f/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
index f20ece4..a68cc99 100644
--- 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
+++ 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
@@ -58,6 +58,7 @@ import org.junit.Ignore;
 public class PostgresqlTest extends AbstractJdbIntegrationTest {
 
     private static final String PROPERTY_LONGRUNNINGTESTS = 
"jdbc.postgresql.longrunningtests";
+    private static final double DELTA = 1E-15;
 
     @Override
     protected String getPropertyPrefix() {
@@ -361,6 +362,65 @@ public class PostgresqlTest extends 
AbstractJdbIntegrationTest {
         });
     }
 
+    /**
+     * Tests type rewriting for double type.
+     * 
+     * @see https://issues.apache.org/jira/browse/METAMODEL-151
+     */
+    public void testDouble() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcDataContext dc = new JdbcDataContext(getConnection());
+
+        final Schema schema = dc.getDefaultSchema();
+
+        dc.executeUpdate(new UpdateScript() {
+            @Override
+            public void run(UpdateCallback cb) {
+                Table table = cb.createTable(schema, 
"my_table").withColumn("id").ofType(ColumnType.INTEGER)
+                        
.ofNativeType("SERIAL").nullable(false).withColumn("some_double").ofType(ColumnType.DOUBLE)
+                        .nullable(false).execute();
+                assertEquals("my_table", table.getName());
+
+                cb.insertInto(table).value("id", 1).value("some_double", 
Double.MIN_VALUE).execute();
+                cb.insertInto(table).value("id", 2).value("some_double", 
Double.MAX_VALUE).execute();
+                cb.insertInto(table).value("id", 3).value("some_double", 
Double.NEGATIVE_INFINITY).execute();
+                cb.insertInto(table).value("id", 4).value("some_double", 
Double.POSITIVE_INFINITY).execute();
+                cb.insertInto(table).value("id", 5).value("some_double", 
Double.NaN).execute();
+            }
+        });
+
+        try {
+            DataSet ds = 
dc.query().from("my_table").select("some_double").execute();
+            assertTrue(ds.next());
+            Double minVal = (Double) 
ds.getRow().getValue(ds.getSelectItems()[0]);
+            assertTrue(ds.next());
+            Double maxVal = (Double) 
ds.getRow().getValue(ds.getSelectItems()[0]);
+            assertTrue(ds.next());
+            Double negInf = (Double) 
ds.getRow().getValue(ds.getSelectItems()[0]);
+            assertTrue(ds.next());
+            Double posInf = (Double) 
ds.getRow().getValue(ds.getSelectItems()[0]);
+            assertTrue(ds.next());
+            Double nAn = (Double) ds.getRow().getValue(ds.getSelectItems()[0]);
+            assertFalse(ds.next());
+    
+            assertEquals(Double.MIN_VALUE, minVal, DELTA);
+            assertEquals(Double.MAX_VALUE, maxVal, DELTA);
+            assertTrue(Double.isInfinite(negInf));
+            assertTrue(Double.isInfinite(posInf));
+            assertTrue(Double.isNaN(nAn));
+        } finally {
+            dc.executeUpdate(new UpdateScript() {
+                @Override
+                public void run(UpdateCallback cb) {
+                    cb.dropTable("my_table").execute();
+                }
+            });
+        }
+    }
+    
     public void testBlob() throws Exception {
         if (!isConfigured()) {
             return;

Reply via email to