Skip to content

Commit 33fda14

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 2f6f545 commit 33fda14

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
@@ -24,7 +24,7 @@
2424
import org.hibernate.cfg.reveng.AssociationInfo;
2525
import org.hibernate.cfg.reveng.DatabaseCollector;
2626
import org.hibernate.cfg.reveng.JDBCReader;
27-
import org.hibernate.cfg.reveng.JDBCToHibernateTypeHelper;
27+
import org.hibernate.cfg.reveng.JdbcToHibernateTypeHelper;
2828
import org.hibernate.cfg.reveng.MappingsDatabaseCollector;
2929
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
3030
import org.hibernate.cfg.reveng.TableIdentifier;
@@ -854,7 +854,7 @@ private String guessAndAlignType(Table table, Column column, Mapping mapping, bo
854854
}
855855

856856
private String typeCodeName(int sqlTypeCode) {
857-
return sqlTypeCode + "(" + JDBCToHibernateTypeHelper.getJDBCTypeName(sqlTypeCode) + ")";
857+
return sqlTypeCode + "(" + JdbcToHibernateTypeHelper.getJDBCTypeName(sqlTypeCode) + ")";
858858
}
859859

860860
/**

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

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

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

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

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -631,15 +631,15 @@ private void processBasicColumns(Table table, ProgressListener progress) {
631631
column.setComment(comment);
632632
column.setSqlTypeCode(new Integer(sqlType) );
633633
if(intBounds(size) ) {
634-
if(JDBCToHibernateTypeHelper.typeHasLength(sqlType) ) {
634+
if(JdbcToHibernateTypeHelper.typeHasLength(sqlType) ) {
635635
column.setLength(size);
636636
}
637-
if(JDBCToHibernateTypeHelper.typeHasScaleAndPrecision(sqlType) ) {
637+
if(JdbcToHibernateTypeHelper.typeHasScaleAndPrecision(sqlType) ) {
638638
column.setPrecision(size);
639639
}
640640
}
641641
if(intBounds(decimalDigits) ) {
642-
if(JDBCToHibernateTypeHelper.typeHasScaleAndPrecision(sqlType) ) {
642+
if(JdbcToHibernateTypeHelper.typeHasScaleAndPrecision(sqlType) ) {
643643
column.setScale(decimalDigits);
644644
}
645645
}

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 PREFERRED_HIBERNATETYPE_FOR_SQLTYPE = new HashMap();
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
@@ -312,7 +312,7 @@ private static List bindColumns(List columns, Table table, OverrideRepository re
312312
column.setName( element.attributeValue("name") );
313313
String attributeValue = element.attributeValue("jdbc-type");
314314
if(StringHelper.isNotEmpty(attributeValue)) {
315-
column.setSqlTypeCode(new Integer(JDBCToHibernateTypeHelper.getJDBCType(attributeValue)));
315+
column.setSqlTypeCode(new Integer(JdbcToHibernateTypeHelper.getJDBCType(attributeValue)));
316316
}
317317

318318
TableIdentifier tableIdentifier = TableIdentifier.create(table);
@@ -399,7 +399,7 @@ private static void bindTypeMappings(Element typeMapping, OverrideRepository rep
399399

400400
while (iterator.hasNext() ) {
401401
Element element = (Element) iterator.next();
402-
int jdbcType = JDBCToHibernateTypeHelper.getJDBCType(element.attributeValue("jdbc-type") );
402+
int jdbcType = JdbcToHibernateTypeHelper.getJDBCType(element.attributeValue("jdbc-type") );
403403
SQLTypeMapping mapping = new SQLTypeMapping(jdbcType );
404404
mapping.setHibernateType( getHibernateType( element ) );
405405
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
@@ -313,7 +313,7 @@ public List getSchemaSelections() {
313313
public String columnToHibernateTypeName(TableIdentifier table, String columnName, int sqlType, int length, int precision, int scale, boolean nullable, boolean generatedIdentifier) {
314314
String result = null;
315315
String location = "";
316-
String info = " t:" + JDBCToHibernateTypeHelper.getJDBCTypeName( sqlType ) + " l:" + length + " p:" + precision + " s:" + scale + " n:" + nullable + " id:" + generatedIdentifier;
316+
String info = " t:" + JdbcToHibernateTypeHelper.getJDBCTypeName( sqlType ) + " l:" + length + " p:" + precision + " s:" + scale + " n:" + nullable + " id:" + generatedIdentifier;
317317
if(table!=null) {
318318
location = Table.qualify(table.getCatalog(), table.getSchema(), table.getName() ) + "." + columnName;
319319
} else {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import org.hibernate.cfg.reveng.DefaultDatabaseCollector;
1616
import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
1717
import org.hibernate.cfg.reveng.JDBCReader;
18-
import org.hibernate.cfg.reveng.JDBCToHibernateTypeHelper;
18+
import org.hibernate.cfg.reveng.JdbcToHibernateTypeHelper;
1919
import org.hibernate.cfg.reveng.SchemaSelection;
2020
import org.hibernate.dialect.Dialect;
2121
import org.hibernate.engine.Mapping;
@@ -194,7 +194,7 @@ public void visit(Configuration cfg, Table table, Column col,
194194
pc.reportIssue( new Issue( "SCHEMA_COLUMN_TYPE_MISMATCH",
195195
Issue.NORMAL_PRIORITY, table(table) + " has a wrong column type for "
196196
+ col.getName() + ", expected: "
197-
+ JDBCToHibernateTypeHelper.getJDBCTypeName(modelTypeCode) + " but was " + JDBCToHibernateTypeHelper.getJDBCTypeName(dbTypeCode) + " in db") );
197+
+ JdbcToHibernateTypeHelper.getJDBCTypeName(modelTypeCode) + " but was " + JdbcToHibernateTypeHelper.getJDBCTypeName(dbTypeCode) + " in db") );
198198
}
199199
}
200200
}

0 commit comments

Comments
 (0)