Skip to content

Commit b228bab

Browse files
adferrandkoentsje
authored andcommitted
HBX-2716 - Remove floating point types from types advertised to support precision & scale
Signed-off-by: Koen Aers <[email protected]>
1 parent 0daa62f commit b228bab

File tree

7 files changed

+59
-51
lines changed

7 files changed

+59
-51
lines changed

src/java/org/hibernate/cfg/JDBCBinder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.hibernate.cfg.reveng.AssociationInfo;
3131
import org.hibernate.cfg.reveng.DatabaseCollector;
3232
import org.hibernate.cfg.reveng.JDBCReader;
33-
import org.hibernate.cfg.reveng.JDBCToHibernateTypeHelper;
33+
import org.hibernate.cfg.reveng.JdbcToHibernateTypeHelper;
3434
import org.hibernate.cfg.reveng.MappingsDatabaseCollector;
3535
import org.hibernate.cfg.reveng.RevEngUtils;
3636
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
@@ -933,7 +933,7 @@ private String guessAndAlignType(Table table, Column column, Mapping mapping, bo
933933
}
934934

935935
private String typeCodeName(int sqlTypeCode) {
936-
return sqlTypeCode + "(" + JDBCToHibernateTypeHelper.getJDBCTypeName(sqlTypeCode) + ")";
936+
return sqlTypeCode + "(" + JdbcToHibernateTypeHelper.getJDBCTypeName(sqlTypeCode) + ")";
937937
}
938938

939939
/**

src/java/org/hibernate/cfg/reveng/BasicColumnProcessor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,15 @@ public static void processBasicColumns(
8383
column.setComment(comment);
8484
column.setSqlTypeCode(new Integer(sqlType) );
8585
if(intBounds(size) ) {
86-
if(JDBCToHibernateTypeHelper.typeHasLength(sqlType) ) {
86+
if(JdbcToHibernateTypeHelper.typeHasLength(sqlType) ) {
8787
column.setLength(size);
8888
}
89-
if(JDBCToHibernateTypeHelper.typeHasScaleAndPrecision(sqlType) ) {
89+
if(JdbcToHibernateTypeHelper.typeHasPrecision(sqlType) ) {
9090
column.setPrecision(size);
9191
}
9292
}
9393
if(intBounds(decimalDigits) ) {
94-
if(JDBCToHibernateTypeHelper.typeHasScaleAndPrecision(sqlType) ) {
94+
if(JdbcToHibernateTypeHelper.typeHasScale(sqlType) ) {
9595
column.setScale(decimalDigits);
9696
}
9797
}

src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ public String foreignKeyToEntityName(String keyname, TableIdentifier fromTable,
105105
}
106106

107107
public String columnToHibernateTypeName(TableIdentifier table, String columnName, int sqlType, int length, int precision, int scale, boolean nullable, boolean generatedIdentifier) {
108-
String preferredHibernateType = JDBCToHibernateTypeHelper.getPreferredHibernateType(sqlType, length, precision, scale, nullable, generatedIdentifier);
108+
String preferredHibernateType = JdbcToHibernateTypeHelper.getPreferredHibernateType(sqlType, length, precision, scale, nullable, generatedIdentifier);
109109

110110
String location = "<no info>";
111111
if(log.isDebugEnabled()) {
112-
String info = " t:" + JDBCToHibernateTypeHelper.getJDBCTypeName( sqlType ) + " l:" + length + " p:" + precision + " s:" + scale + " n:" + nullable + " id:" + generatedIdentifier;
112+
String info = " t:" + JdbcToHibernateTypeHelper.getJDBCTypeName( sqlType ) + " l:" + length + " p:" + precision + " s:" + scale + " n:" + nullable + " id:" + generatedIdentifier;
113113
if(table!=null) {
114114
location = TableNameQualifier.qualify(table.getCatalog(), table.getSchema(), table.getName() ) + "." + columnName + info;
115115
} else {

src/java/org/hibernate/cfg/reveng/JDBCToHibernateTypeHelper.java renamed to src/java/org/hibernate/cfg/reveng/JdbcToHibernateTypeHelper.java

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -16,38 +16,38 @@
1616
* @author max (based on parts from Sql2Java from Middlegen)
1717
*
1818
*/
19-
public final class JDBCToHibernateTypeHelper {
19+
public final class JdbcToHibernateTypeHelper {
2020

21-
private JDBCToHibernateTypeHelper() {
21+
private JdbcToHibernateTypeHelper() {
2222

2323
}
2424

2525
/** The Map containing the preferred conversion type values. */
2626
private static final Map<Integer, String[]> PREFERRED_HIBERNATETYPE_FOR_SQLTYPE = new HashMap<Integer, String[]>();
2727

2828
static {
29-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.TINYINT), new String[] { "byte", Byte.class.getName()} );
30-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.SMALLINT), new String[] { "short", Short.class.getName()} );
31-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.INTEGER), new String[] { "int", Integer.class.getName()} );
32-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.BIGINT), new String[] { "long", Long.class.getName()} );
33-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.REAL), new String[] { "float", Float.class.getName()} );
34-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.FLOAT), new String[] { "double", Double.class.getName()} );
35-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.DOUBLE), new String[] { "double", Double.class.getName()});
36-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.DECIMAL), new String[] { "big_decimal", "big_decimal" });
37-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.NUMERIC), new String[] { "big_decimal", "big_decimal" });
38-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.BIT), new String[] { "boolean", Boolean.class.getName()});
39-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.BOOLEAN), new String[] { "boolean", Boolean.class.getName()});
40-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.CHAR), new String[] { "char", Character.class.getName()});
41-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.VARCHAR), new String[] { "string", "string" });
42-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.LONGVARCHAR), new String[] { "string", "string" });
43-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.BINARY), new String[] { "binary", "binary" });
44-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.VARBINARY), new String[] { "binary", "binary" });
45-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.LONGVARBINARY), new String[] { "binary", "binary" });
46-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.DATE), new String[] { "date", "date" });
47-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.TIME), new String[] { "time", "time" });
48-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.TIMESTAMP), new String[] { "timestamp", "timestamp" });
49-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.CLOB), new String[] { "clob", "clob" });
50-
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(new Integer(Types.BLOB), new String[] { "blob", "blob" });
29+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.TINYINT), new String[] { "byte", Byte.class.getName()} );
30+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.SMALLINT), new String[] { "short", Short.class.getName()} );
31+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.INTEGER), new String[] { "int", Integer.class.getName()} );
32+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.BIGINT), new String[] { "long", Long.class.getName()} );
33+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.REAL), new String[] { "float", Float.class.getName()} );
34+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.FLOAT), new String[] { "double", Double.class.getName()} );
35+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.DOUBLE), new String[] { "double", Double.class.getName()});
36+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.DECIMAL), new String[] { "big_decimal", "big_decimal" });
37+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.NUMERIC), new String[] { "big_decimal", "big_decimal" });
38+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.BIT), new String[] { "boolean", Boolean.class.getName()});
39+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.BOOLEAN), new String[] { "boolean", Boolean.class.getName()});
40+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.CHAR), new String[] { "char", Character.class.getName()});
41+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.VARCHAR), new String[] { "string", "string" });
42+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.LONGVARCHAR), new String[] { "string", "string" });
43+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.BINARY), new String[] { "binary", "binary" });
44+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.VARBINARY), new String[] { "binary", "binary" });
45+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.LONGVARBINARY), new String[] { "binary", "binary" });
46+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.DATE), new String[] { "date", "date" });
47+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.TIME), new String[] { "time", "time" });
48+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.TIMESTAMP), new String[] { "timestamp", "timestamp" });
49+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.CLOB), new String[] { "clob", "clob" });
50+
PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.put(Integer.valueOf(Types.BLOB), new String[] { "blob", "blob" });
5151

5252
//Hibernate does not have any built-in Type for these:
5353
//preferredJavaTypeForSqlType.put(new Integer(Types.ARRAY), "java.sql.Array");
@@ -87,7 +87,7 @@ else if (precision < 19) {
8787
return "string";
8888
}
8989

90-
String[] result = (String[]) PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.get(new Integer(sqlType) );
90+
String[] result = (String[]) PREFERRED_HIBERNATETYPE_FOR_SQLTYPE.get(Integer.valueOf(sqlType) );
9191

9292
if(result==null) {
9393
return null;
@@ -166,7 +166,7 @@ public static String getJDBCTypeName(int value) {
166166
}
167167
}
168168

169-
String name = (String) jdbcTypeValues.get(new Integer(value) );
169+
String name = (String) jdbcTypeValues.get(Integer.valueOf(value) );
170170

171171
if(name!=null) {
172172
return name;
@@ -183,17 +183,25 @@ public static String getJDBCTypeName(int value) {
183183
* @throws SQLException
184184
*/
185185

186-
// scale and precision have numeric column
187-
public static boolean typeHasScaleAndPrecision(int sqlType) {
188-
return (sqlType == Types.DECIMAL || sqlType == Types.NUMERIC
189-
|| sqlType == Types.REAL || sqlType == Types.FLOAT || sqlType == Types.DOUBLE);
190-
}
191-
192-
// length is for string column
193-
public static boolean typeHasLength(int sqlType) {
194-
return (sqlType == Types.CHAR || sqlType == Types.DATE
195-
|| sqlType == Types.LONGVARCHAR || sqlType == Types.TIME || sqlType == Types.TIMESTAMP
196-
|| sqlType == Types.VARCHAR );
197-
}
198-
}
186+
// scale is for non floating point numeric columns
187+
public static boolean typeHasScale(int sqlType) {
188+
return (sqlType == Types.DECIMAL || sqlType == Types.NUMERIC);
189+
}
190+
191+
// precision is for numeric columns
192+
public static boolean typeHasPrecision(int sqlType) {
193+
return (sqlType == Types.DECIMAL || sqlType == Types.NUMERIC
194+
|| sqlType == Types.REAL || sqlType == Types.FLOAT || sqlType == Types.DOUBLE);
195+
}
199196

197+
public static boolean typeHasScaleAndPrecision(int sqlType) {
198+
return typeHasScale(sqlType) && typeHasPrecision(sqlType);
199+
}
200+
201+
// length is for string columns
202+
public static boolean typeHasLength(int sqlType) {
203+
return (sqlType == Types.CHAR || sqlType == Types.DATE
204+
|| sqlType == Types.LONGVARCHAR || sqlType == Types.TIME || sqlType == Types.TIMESTAMP
205+
|| sqlType == Types.VARCHAR );
206+
}
207+
}

src/java/org/hibernate/cfg/reveng/OverrideBinder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ private static List<String> bindColumns(List<?> columns, Table table, OverrideRe
315315
column.setName( element.attributeValue("name") );
316316
String attributeValue = element.attributeValue("jdbc-type");
317317
if(StringHelper.isNotEmpty(attributeValue)) {
318-
column.setSqlTypeCode(new Integer(JDBCToHibernateTypeHelper.getJDBCType(attributeValue)));
318+
column.setSqlTypeCode(new Integer(JdbcToHibernateTypeHelper.getJDBCType(attributeValue)));
319319
}
320320

321321
TableIdentifier tableIdentifier = TableIdentifier.create(table);
@@ -408,7 +408,7 @@ private static void bindTypeMappings(Element typeMapping, OverrideRepository rep
408408

409409
while (iterator.hasNext() ) {
410410
Element element = (Element) iterator.next();
411-
int jdbcType = JDBCToHibernateTypeHelper.getJDBCType(element.attributeValue("jdbc-type") );
411+
int jdbcType = JdbcToHibernateTypeHelper.getJDBCType(element.attributeValue("jdbc-type") );
412412
SQLTypeMapping mapping = new SQLTypeMapping(jdbcType );
413413
mapping.setHibernateType( getHibernateType( element ) );
414414
mapping.setLength(getInteger(element.attributeValue("length"), SQLTypeMapping.UNKNOWN_LENGTH) );

src/java/org/hibernate/cfg/reveng/OverrideRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ public List<SchemaSelection> getSchemaSelections() {
311311
public String columnToHibernateTypeName(TableIdentifier table, String columnName, int sqlType, int length, int precision, int scale, boolean nullable, boolean generatedIdentifier) {
312312
String result = null;
313313
String location = "";
314-
String info = " t:" + JDBCToHibernateTypeHelper.getJDBCTypeName( sqlType ) + " l:" + length + " p:" + precision + " s:" + scale + " n:" + nullable + " id:" + generatedIdentifier;
314+
String info = " t:" + JdbcToHibernateTypeHelper.getJDBCTypeName( sqlType ) + " l:" + length + " p:" + precision + " s:" + scale + " n:" + nullable + " id:" + generatedIdentifier;
315315
if(table!=null) {
316316
location = TableNameQualifier.qualify(table.getCatalog(), table.getSchema(), table.getName() ) + "." + columnName;
317317
} else {

src/java/org/hibernate/tool/hbmlint/detector/SchemaByMetaDataDetector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.hibernate.cfg.reveng.DefaultDatabaseCollector;
1919
import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
2020
import org.hibernate.cfg.reveng.JDBCReader;
21-
import org.hibernate.cfg.reveng.JDBCToHibernateTypeHelper;
21+
import org.hibernate.cfg.reveng.JdbcToHibernateTypeHelper;
2222
import org.hibernate.cfg.reveng.SchemaSelection;
2323
import org.hibernate.dialect.Dialect;
2424
import org.hibernate.engine.jdbc.spi.JdbcServices;
@@ -200,7 +200,7 @@ public void visit(
200200
pc.reportIssue( new Issue( "SCHEMA_COLUMN_TYPE_MISMATCH",
201201
Issue.NORMAL_PRIORITY, table(table) + " has a wrong column type for "
202202
+ col.getName() + ", expected: "
203-
+ JDBCToHibernateTypeHelper.getJDBCTypeName(modelTypeCode) + " but was " + JDBCToHibernateTypeHelper.getJDBCTypeName(dbTypeCode) + " in db") );
203+
+ JdbcToHibernateTypeHelper.getJDBCTypeName(modelTypeCode) + " but was " + JdbcToHibernateTypeHelper.getJDBCTypeName(dbTypeCode) + " in db") );
204204
}
205205
}
206206
}

0 commit comments

Comments
 (0)