From 91a327a5e7fbd54e2367f293eae0bfdd58dc9671 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Mon, 9 Mar 2020 17:05:08 +1300 Subject: [PATCH] #1972 - Change BigDecimal to map by default DB type DECIMAL(16,3) rather than DECIMAL(38) --- .../java/io/ebean/config/dbplatform/DbPlatformTypeMapping.java | 2 +- .../ebean/config/dbplatform/clickhouse/ClickHousePlatform.java | 2 +- src/main/java/io/ebean/config/dbplatform/db2/DB2Platform.java | 3 +-- .../java/io/ebean/config/dbplatform/oracle/OraclePlatform.java | 3 +-- .../io/ebean/config/dbplatform/postgres/PostgresPlatform.java | 1 - .../config/dbplatform/sqlanywhere/SqlAnywherePlatform.java | 3 +-- .../config/dbplatform/sqlserver/SqlServerBasePlatform.java | 3 +-- .../ddlgeneration/platform/util/PlatformTypeConverter.java | 2 +- .../java/io/ebean/config/dbplatform/DatabasePlatformTest.java | 2 +- src/test/java/io/ebean/config/dbplatform/H2PlatformTest.java | 1 + src/test/java/io/ebean/config/dbplatform/HanaPlatformTest.java | 1 + .../java/io/ebean/config/dbplatform/MySqlPlatformTest.java | 1 + .../java/io/ebean/config/dbplatform/OraclePlatformTest.java | 1 + .../java/io/ebean/config/dbplatform/PostgresPlatformTest.java | 2 +- .../java/io/ebean/config/dbplatform/SqlserverPlatformTest.java | 1 + 15 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/ebean/config/dbplatform/DbPlatformTypeMapping.java b/src/main/java/io/ebean/config/dbplatform/DbPlatformTypeMapping.java index c5d25a889..1055f08b3 100644 --- a/src/main/java/io/ebean/config/dbplatform/DbPlatformTypeMapping.java +++ b/src/main/java/io/ebean/config/dbplatform/DbPlatformTypeMapping.java @@ -116,7 +116,7 @@ public class DbPlatformTypeMapping { } else { put(DbType.VARCHAR, new DbPlatformType("varchar", 255)); - put(DbType.DECIMAL, new DbPlatformType("decimal", 38)); + put(DbType.DECIMAL, new DbPlatformType("decimal", 16, 3)); put(DbType.VARBINARY, new DbPlatformType("varbinary", 255)); put(DbType.BINARY, new DbPlatformType("binary", 255)); put(DbType.CHAR, new DbPlatformType("char", 1)); diff --git a/src/main/java/io/ebean/config/dbplatform/clickhouse/ClickHousePlatform.java b/src/main/java/io/ebean/config/dbplatform/clickhouse/ClickHousePlatform.java index b6cd2a131..549fa3959 100644 --- a/src/main/java/io/ebean/config/dbplatform/clickhouse/ClickHousePlatform.java +++ b/src/main/java/io/ebean/config/dbplatform/clickhouse/ClickHousePlatform.java @@ -32,7 +32,7 @@ public class ClickHousePlatform extends DatabasePlatform { dbTypeMap.put(DbType.SMALLINT, new DbPlatformType("UInt16", false)); dbTypeMap.put(DbType.INTEGER, new DbPlatformType("UInt32", false)); dbTypeMap.put(DbType.BIGINT, new DbPlatformType("UInt64", false)); - dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("Decimal", 16,4)); + dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("Decimal", 16, 3)); dbTypeMap.put(DbType.DOUBLE, new DbPlatformType("Float64", false)); dbTypeMap.put(DbType.DATE, new DbPlatformType("Date", false)); diff --git a/src/main/java/io/ebean/config/dbplatform/db2/DB2Platform.java b/src/main/java/io/ebean/config/dbplatform/db2/DB2Platform.java index df76c6064..0878e7d41 100644 --- a/src/main/java/io/ebean/config/dbplatform/db2/DB2Platform.java +++ b/src/main/java/io/ebean/config/dbplatform/db2/DB2Platform.java @@ -42,8 +42,7 @@ public class DB2Platform extends DatabasePlatform { dbTypeMap.put(DbType.INTEGER, new DbPlatformType("integer", false)); dbTypeMap.put(DbType.BIGINT, new DbPlatformType("bigint", false)); dbTypeMap.put(DbType.REAL, new DbPlatformType("real")); - dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("decimal", 15)); - + dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("decimal", 16, 3)); persistBatchOnCascade = PersistBatch.NONE; } diff --git a/src/main/java/io/ebean/config/dbplatform/oracle/OraclePlatform.java b/src/main/java/io/ebean/config/dbplatform/oracle/OraclePlatform.java index 369f2e0f5..9300fbcc4 100644 --- a/src/main/java/io/ebean/config/dbplatform/oracle/OraclePlatform.java +++ b/src/main/java/io/ebean/config/dbplatform/oracle/OraclePlatform.java @@ -62,8 +62,7 @@ public class OraclePlatform extends DatabasePlatform { dbTypeMap.put(DbType.DOUBLE, new DbPlatformType("number", 19, 4)); dbTypeMap.put(DbType.SMALLINT, new DbPlatformType("number", 5)); dbTypeMap.put(DbType.TINYINT, new DbPlatformType("number", 3)); - dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("number", 38)); - + dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("number", 16, 3)); dbTypeMap.put(DbType.VARCHAR, new DbPlatformType("varchar2", 255)); dbTypeMap.put(DbType.LONGVARBINARY, new DbPlatformType("blob")); diff --git a/src/main/java/io/ebean/config/dbplatform/postgres/PostgresPlatform.java b/src/main/java/io/ebean/config/dbplatform/postgres/PostgresPlatform.java index 09235daef..19584b789 100644 --- a/src/main/java/io/ebean/config/dbplatform/postgres/PostgresPlatform.java +++ b/src/main/java/io/ebean/config/dbplatform/postgres/PostgresPlatform.java @@ -70,7 +70,6 @@ public class PostgresPlatform extends DatabasePlatform { dbTypeMap.put(DbType.INTEGER, new DbPlatformType("integer", false)); dbTypeMap.put(DbType.DOUBLE, new DbPlatformType("float")); dbTypeMap.put(DbType.TINYINT, new DbPlatformType("smallint")); - dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("decimal", 38)); dbTypeMap.put(DbType.TIMESTAMP, new DbPlatformType("timestamptz")); dbTypeMap.put(DbType.BINARY, dbBytea); diff --git a/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java b/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java index 7ca86a219..4dfa401c3 100644 --- a/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java +++ b/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java @@ -32,8 +32,7 @@ public class SqlAnywherePlatform extends DatabasePlatform { dbTypeMap.put(DbType.REAL, new DbPlatformType("float(16)")); dbTypeMap.put(DbType.DOUBLE, new DbPlatformType("float(32)")); dbTypeMap.put(DbType.TINYINT, new DbPlatformType("smallint")); - dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("numeric", 28)); - + dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("numeric", 16, 3)); dbTypeMap.put(DbType.BLOB, new DbPlatformType("binary(4500)")); dbTypeMap.put(DbType.CLOB, new DbPlatformType("long varchar")); dbTypeMap.put(DbType.LONGVARBINARY, new DbPlatformType("long binary")); diff --git a/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasePlatform.java b/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasePlatform.java index ba6bcf07a..74742972b 100644 --- a/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasePlatform.java +++ b/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasePlatform.java @@ -62,8 +62,7 @@ abstract class SqlServerBasePlatform extends DatabasePlatform { dbTypeMap.put(DbType.REAL, new DbPlatformType("float(16)")); dbTypeMap.put(DbType.DOUBLE, new DbPlatformType("float(32)")); dbTypeMap.put(DbType.TINYINT, new DbPlatformType("smallint")); - dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("numeric", 28)); - + dbTypeMap.put(DbType.DECIMAL, new DbPlatformType("numeric", 16, 3)); dbTypeMap.put(DbType.DATE, new DbPlatformType("date")); dbTypeMap.put(DbType.TIME, new DbPlatformType("time")); dbTypeMap.put(DbType.TIMESTAMP, new DbPlatformType("datetime2")); diff --git a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/util/PlatformTypeConverter.java b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/util/PlatformTypeConverter.java index 17300d147..e1a12ed2a 100644 --- a/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/util/PlatformTypeConverter.java +++ b/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/util/PlatformTypeConverter.java @@ -58,7 +58,7 @@ public class PlatformTypeConverter { } else { // scale - varchar(10) int scale = Integer.parseInt(columnDefinition.substring(open + 1, close)); - return dbType.renderType(scale, 0) + suffix; + return dbType.renderType(scale, -1) + suffix; } } catch (IllegalArgumentException e) { diff --git a/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java b/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java index 3b2ff4eed..6d8440cff 100644 --- a/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java +++ b/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java @@ -49,7 +49,7 @@ public class DatabasePlatformTest { public void defaultTypesForDecimalAndVarchar() { DatabasePlatform dbPlatform = new DatabasePlatform(); - assertEquals(defaultDecimalDefn(dbPlatform), "decimal(38)"); + assertEquals(defaultDecimalDefn(dbPlatform), "decimal(16,3)"); assertEquals(defaultDefn(DbType.VARCHAR, dbPlatform), "varchar(255)"); } diff --git a/src/test/java/io/ebean/config/dbplatform/H2PlatformTest.java b/src/test/java/io/ebean/config/dbplatform/H2PlatformTest.java index bf1b5b1df..d7c2e7bc6 100644 --- a/src/test/java/io/ebean/config/dbplatform/H2PlatformTest.java +++ b/src/test/java/io/ebean/config/dbplatform/H2PlatformTest.java @@ -20,6 +20,7 @@ public class H2PlatformTest { assertThat(ddl.convert("varchar(20)")).isEqualTo("varchar(20)"); assertThat(ddl.convert("decimal(10)")).isEqualTo("decimal(10)"); assertThat(ddl.convert("decimal(8,4)")).isEqualTo("decimal(8,4)"); + assertThat(ddl.convert("decimal")).isEqualTo("decimal(16,3)"); assertThat(ddl.convert("boolean")).isEqualTo("boolean"); assertThat(ddl.convert("bit")).isEqualTo("bit"); } diff --git a/src/test/java/io/ebean/config/dbplatform/HanaPlatformTest.java b/src/test/java/io/ebean/config/dbplatform/HanaPlatformTest.java index 3b15dd6f8..669043938 100644 --- a/src/test/java/io/ebean/config/dbplatform/HanaPlatformTest.java +++ b/src/test/java/io/ebean/config/dbplatform/HanaPlatformTest.java @@ -27,6 +27,7 @@ public class HanaPlatformTest { assertThat(ddl.convert("varchar(20)")).isEqualTo("nvarchar(20)"); assertThat(ddl.convert("decimal(10)")).isEqualTo("decimal(10)"); assertThat(ddl.convert("decimal(8,4)")).isEqualTo("decimal(8,4)"); + assertThat(ddl.convert("decimal")).isEqualTo("decimal(16,3)"); assertThat(ddl.convert("boolean")).isEqualTo("boolean"); assertThat(ddl.convert("bit")).isEqualTo("smallint"); assertThat(ddl.convert("tinyint")).isEqualTo("smallint"); diff --git a/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java b/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java index 2d5d7cb94..e0e5cf17c 100644 --- a/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java +++ b/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java @@ -21,6 +21,7 @@ public class MySqlPlatformTest { assertThat(ddl.convert("varchar(20)")).isEqualTo("varchar(20)"); assertThat(ddl.convert("boolean")).isEqualTo("tinyint(1)"); assertThat(ddl.convert("bit")).isEqualTo("tinyint(1)"); + assertThat(ddl.convert("decimal")).isEqualTo("decimal(16,3)"); } @Test diff --git a/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java b/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java index 56fe32965..5f8da4510 100644 --- a/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java +++ b/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java @@ -26,6 +26,7 @@ public class OraclePlatformTest { assertThat(ddl.convert("varchar(20)")).isEqualTo("varchar2(20)"); assertThat(ddl.convert("decimal(10)")).isEqualTo("number(10)"); assertThat(ddl.convert("decimal(8,4)")).isEqualTo("number(8,4)"); + assertThat(ddl.convert("decimal")).isEqualTo("number(16,3)"); assertThat(ddl.convert("boolean")).isEqualTo("number(1)"); assertThat(ddl.convert("bit")).isEqualTo("bit"); assertThat(ddl.convert("tinyint")).isEqualTo("number(3)"); diff --git a/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java b/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java index 38626760c..251558ab6 100644 --- a/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java +++ b/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java @@ -26,11 +26,11 @@ public class PostgresPlatformTest { assertThat(ddl.convert("tinyint")).isEqualTo("smallint"); assertThat(ddl.convert("double")).isEqualTo("float"); assertThat(ddl.convert("varchar(20)")).isEqualTo("varchar(20)"); + assertThat(ddl.convert("decimal")).isEqualTo("decimal(16,3)"); assertThat(ddl.convert("decimal(10)")).isEqualTo("decimal(10)"); assertThat(ddl.convert("decimal(8,4)")).isEqualTo("decimal(8,4)"); assertThat(ddl.convert("boolean")).isEqualTo("boolean"); assertThat(ddl.convert("bit")).isEqualTo("bit"); - } @Test diff --git a/src/test/java/io/ebean/config/dbplatform/SqlserverPlatformTest.java b/src/test/java/io/ebean/config/dbplatform/SqlserverPlatformTest.java index c1b7415de..531962b9f 100644 --- a/src/test/java/io/ebean/config/dbplatform/SqlserverPlatformTest.java +++ b/src/test/java/io/ebean/config/dbplatform/SqlserverPlatformTest.java @@ -26,6 +26,7 @@ public class SqlserverPlatformTest { assertThat(ddl.convert("varchar(20)")).isEqualTo("nvarchar(20)"); assertThat(ddl.convert("decimal(10)")).isEqualTo("numeric(10)"); assertThat(ddl.convert("decimal(8,4)")).isEqualTo("numeric(8,4)"); + assertThat(ddl.convert("decimal")).isEqualTo("numeric(16,3)"); assertThat(ddl.convert("boolean")).isEqualTo("bit"); assertThat(ddl.convert("bit")).isEqualTo("bit"); assertThat(ddl.convert("tinyint")).isEqualTo("smallint");