From 57417610a6d184d9201b9b44f6c4fa7f331e72a6 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Tue, 26 Apr 2016 17:06:01 +1200 Subject: [PATCH] #663 - Change Postgres default Timestamp type to be "Timestamp with time zone" --- .../ebean/config/dbplatform/DatabasePlatform.java | 5 +++++ .../ebean/config/dbplatform/PostgresPlatform.java | 11 +++++++++++ .../ebeaninternal/server/core/DefaultContainer.java | 1 + src/test/resources/ebean.properties | 3 +++ 4 files changed, 20 insertions(+) diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java index 922536d63..a07651803 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java @@ -14,6 +14,7 @@ import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; +import java.util.Properties; /** * Database platform specific settings. @@ -175,6 +176,10 @@ public class DatabasePlatform { public DatabasePlatform() { } + public void configure(Properties properties) { + // by default do nothing + } + /** * Return the name of the DatabasePlatform. *

diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/PostgresPlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/PostgresPlatform.java index a09c71d3b..090a3c7b0 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/PostgresPlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/PostgresPlatform.java @@ -7,6 +7,7 @@ import com.avaje.ebean.dbmigration.ddlgeneration.platform.PostgresDdl; import javax.sql.DataSource; import java.sql.Types; +import java.util.Properties; /** * Postgres v9 specific platform. @@ -50,6 +51,7 @@ public class PostgresPlatform extends DatabasePlatform { dbTypeMap.put(Types.DOUBLE, new DbType("float")); dbTypeMap.put(Types.TINYINT, new DbType("smallint")); dbTypeMap.put(Types.DECIMAL, new DbType("decimal", 38)); + dbTypeMap.put(Types.TIMESTAMP, new DbType("timestamptz")); dbTypeMap.put(Types.BINARY, dbBytea); dbTypeMap.put(Types.VARBINARY, dbBytea); @@ -58,7 +60,16 @@ public class PostgresPlatform extends DatabasePlatform { dbTypeMap.put(Types.CLOB, dbTypeText); dbTypeMap.put(Types.LONGVARBINARY, dbBytea); dbTypeMap.put(Types.LONGVARCHAR, dbTypeText); + } + @Override + public void configure(Properties properties) { + super.configure(properties); + String tsType = properties.getProperty("ebean.postgres.timestamp"); + if (tsType != null) { + // set timestamp type to "timestamp" without time zone + dbTypeMap.put(Types.TIMESTAMP, new DbType(tsType)); + } } /** diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java index e737d5417..4dc2fa465 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java @@ -241,6 +241,7 @@ public class DefaultContainer implements SpiContainer { if (dbPlatform == null) { DatabasePlatformFactory factory = new DatabasePlatformFactory(); DatabasePlatform db = factory.create(config); + db.configure(config.getProperties()); config.setDatabasePlatform(db); logger.info("DatabasePlatform name:" + config.getName() + " platform:" + db.getName()); } diff --git a/src/test/resources/ebean.properties b/src/test/resources/ebean.properties index 460eaf35d..524fdff6b 100644 --- a/src/test/resources/ebean.properties +++ b/src/test/resources/ebean.properties @@ -111,6 +111,9 @@ datasource.ora.password=unit datasource.ora.databaseUrl=jdbc:oracle:thin:@//127.0.0.1:1521/orcl datasource.ora.databaseDriver=oracle.jdbc.driver.OracleDriver +## set this to use timestamp rather than timestamptz +#ebean.postgres.timestamp=timestamp + datasource.pg.username=unit datasource.pg.password=unit datasource.pg.databaseUrl=jdbc:postgresql://127.0.0.1:5432/unit