From ec38d9158204e9dc6092236b45ecc01db935dbf4 Mon Sep 17 00:00:00 2001 From: Adrien Ferrand Date: Mon, 8 Jan 2024 09:41:38 +0100 Subject: [PATCH] HBX-2716 - Remove floating point types from types advertised to support precision & scale Signed-off-by: Koen Aers --- .../reveng/reader/BasicColumnProcessor.java | 4 +-- .../util/JdbcToHibernateTypeHelper.java | 34 ++++++++++++------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/orm/src/main/java/org/hibernate/tool/internal/reveng/reader/BasicColumnProcessor.java b/orm/src/main/java/org/hibernate/tool/internal/reveng/reader/BasicColumnProcessor.java index 6536ce30ae..2947d871e7 100644 --- a/orm/src/main/java/org/hibernate/tool/internal/reveng/reader/BasicColumnProcessor.java +++ b/orm/src/main/java/org/hibernate/tool/internal/reveng/reader/BasicColumnProcessor.java @@ -85,12 +85,12 @@ public static void processBasicColumns( if(JdbcToHibernateTypeHelper.typeHasLength(sqlType) ) { column.setLength(size); } - if(JdbcToHibernateTypeHelper.typeHasScaleAndPrecision(sqlType) ) { + if(JdbcToHibernateTypeHelper.typeHasPrecision(sqlType) ) { column.setPrecision(size); } } if(intBounds(decimalDigits) ) { - if(JdbcToHibernateTypeHelper.typeHasScaleAndPrecision(sqlType) ) { + if(JdbcToHibernateTypeHelper.typeHasScale(sqlType) ) { column.setScale(decimalDigits); } } diff --git a/orm/src/main/java/org/hibernate/tool/internal/util/JdbcToHibernateTypeHelper.java b/orm/src/main/java/org/hibernate/tool/internal/util/JdbcToHibernateTypeHelper.java index 8fc41f0941..c6cb354907 100644 --- a/orm/src/main/java/org/hibernate/tool/internal/util/JdbcToHibernateTypeHelper.java +++ b/orm/src/main/java/org/hibernate/tool/internal/util/JdbcToHibernateTypeHelper.java @@ -183,17 +183,25 @@ public static String getJDBCTypeName(int value) { * @throws SQLException */ - // scale and precision have numeric column - public static boolean typeHasScaleAndPrecision(int sqlType) { - return (sqlType == Types.DECIMAL || sqlType == Types.NUMERIC - || sqlType == Types.REAL || sqlType == Types.FLOAT || sqlType == Types.DOUBLE); - } - - // length is for string column - public static boolean typeHasLength(int sqlType) { - return (sqlType == Types.CHAR || sqlType == Types.DATE - || sqlType == Types.LONGVARCHAR || sqlType == Types.TIME || sqlType == Types.TIMESTAMP - || sqlType == Types.VARCHAR ); - } -} + // scale is for non floating point numeric columns + public static boolean typeHasScale(int sqlType) { + return (sqlType == Types.DECIMAL || sqlType == Types.NUMERIC); + } + + // precision is for numeric columns + public static boolean typeHasPrecision(int sqlType) { + return (sqlType == Types.DECIMAL || sqlType == Types.NUMERIC + || sqlType == Types.REAL || sqlType == Types.FLOAT || sqlType == Types.DOUBLE); + } + public static boolean typeHasScaleAndPrecision(int sqlType) { + return typeHasScale(sqlType) && typeHasPrecision(sqlType); + } + + // length is for string columns + public static boolean typeHasLength(int sqlType) { + return (sqlType == Types.CHAR || sqlType == Types.DATE + || sqlType == Types.LONGVARCHAR || sqlType == Types.TIME || sqlType == Types.TIMESTAMP + || sqlType == Types.VARCHAR ); + } +}