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;
